blob: c8951d42c32abebe40262328cc0d3967376d6d69 [file] [log] [blame]
/*
* 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);
}
}
}