| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.netbeans.modules.git; |
| |
| import java.beans.PropertyChangeEvent; |
| import java.beans.PropertyChangeListener; |
| import java.util.MissingResourceException; |
| import java.io.File; |
| import java.util.Set; |
| import java.util.logging.Logger; |
| import java.util.prefs.PreferenceChangeEvent; |
| import java.util.prefs.PreferenceChangeListener; |
| import org.netbeans.modules.versioning.spi.VCSAnnotator; |
| import org.netbeans.modules.versioning.spi.VCSHistoryProvider; |
| import org.netbeans.modules.versioning.spi.VCSInterceptor; |
| import org.netbeans.modules.versioning.spi.VersioningSystem; |
| import org.netbeans.spi.queries.CollocationQueryImplementation; |
| |
| /** |
| * |
| * @author ondra |
| */ |
| @VersioningSystem.Registration( |
| displayName="#CTL_Git_DisplayName", |
| menuLabel="#CTL_Git_MainMenu", |
| metadataFolderNames={".git"}, |
| actionsCategory="Git" |
| ) |
| public class GitVCS extends VersioningSystem implements PropertyChangeListener, PreferenceChangeListener { |
| |
| private static final Logger LOG = Logger.getLogger("org.netbeans.modules.git.GitVCS"); //NOI18N |
| |
| public GitVCS() { |
| putProperty(PROP_DISPLAY_NAME, getDisplayName()); |
| putProperty(PROP_MENU_LABEL, org.openide.util.NbBundle.getMessage(GitVCS.class, "CTL_Git_MainMenu")); // NOI18N |
| GitModuleConfig.getDefault().getPreferences().addPreferenceChangeListener(this); |
| Git.getInstance().registerGitVCS(this); |
| } |
| |
| public static String getDisplayName() throws MissingResourceException { |
| return org.openide.util.NbBundle.getMessage(GitVCS.class, "CTL_Git_DisplayName"); |
| } |
| |
| @Override |
| public VCSAnnotator getVCSAnnotator () { |
| return Git.getInstance().getVCSAnnotator(); |
| } |
| |
| @Override |
| public VCSInterceptor getVCSInterceptor () { |
| return Git.getInstance().getVCSInterceptor(); |
| } |
| |
| @Override |
| public void getOriginalFile (File workingCopy, File originalFile) { |
| Git.getInstance().getOriginalFile(workingCopy, originalFile); |
| } |
| |
| @Override |
| public File getTopmostManagedAncestor(File file) { |
| return Git.getInstance().getTopmostManagedAncestor(file); |
| } |
| |
| @Override |
| public CollocationQueryImplementation getCollocationQueryImplementation() { |
| return collocationQueryImplementation; |
| } |
| |
| @Override |
| public VCSHistoryProvider getVCSHistoryProvider() { |
| return Git.getInstance().getHistoryProvider(); |
| } |
| |
| private final CollocationQueryImplementation collocationQueryImplementation = new CollocationQueryImplementation() { |
| @Override |
| public boolean areCollocated(File a, File b) { |
| File fra = getTopmostManagedAncestor(a); |
| File frb = getTopmostManagedAncestor(b); |
| |
| if (fra == null || !fra.equals(frb)) return false; |
| |
| return true; |
| } |
| |
| @Override |
| public File findRoot(File file) { |
| return getTopmostManagedAncestor(file); |
| } |
| }; |
| |
| @Override |
| @SuppressWarnings("unchecked") |
| public void propertyChange(PropertyChangeEvent event) { |
| if (event.getPropertyName().equals(FileStatusCache.PROP_FILE_STATUS_CHANGED)) { |
| FileStatusCache.ChangedEvent changedEvent = (FileStatusCache.ChangedEvent) event.getNewValue(); |
| fireStatusChanged(changedEvent.getFile()); |
| } else if (event.getPropertyName().equals(Git.PROP_ANNOTATIONS_CHANGED)) { |
| fireAnnotationsChanged((Set<File>) event.getNewValue()); |
| } else if (event.getPropertyName().equals(Git.PROP_VERSIONED_FILES_CHANGED)) { |
| LOG.fine("cleaning unversioned parents cache"); //NOI18N |
| Git.getInstance().clearAncestorCaches(); |
| fireVersionedFilesChanged(); |
| } |
| } |
| |
| void refreshStatus (Set<File> files) { |
| fireStatusChanged(files == null || files.isEmpty() ? null : files); |
| } |
| |
| @Override |
| public void preferenceChange(PreferenceChangeEvent evt) { |
| if (evt.getKey().startsWith(GitModuleConfig.PROP_COMMIT_EXCLUSIONS)) { |
| fireStatusChanged((Set<File>) null); |
| } |
| } |
| |
| } |