blob: 819a30a6ac8f58d5040ec354de8fc5b73e0acbae [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.examples.pessimistic;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The plugin for the <code>PessimisticFilesystemProvider</code>.
*/
public class PessimisticFilesystemProviderPlugin extends AbstractUIPlugin {
/*
* Singleton instance.
*/
private static PessimisticFilesystemProviderPlugin instance;
/*
* The resource change listener which notifies the provider of
* added and deleted files.
*/
private ResourceChangeListener fListener;
/*
* The provider listeners
*/
private List<IResourceStateListener> fListeners;
/**
* The plugin identifier
*/
public static final String PLUGIN_ID = "org.eclipse.team.examples.pessimistic";
/**
* The nature identifier.
*/
public static final String NATURE_ID = PLUGIN_ID + ".pessimisticnature";
/**
* Constructor required by plugin lifecycle.
*/
public PessimisticFilesystemProviderPlugin() {
super();
instance = this;
fListeners = new ArrayList<>(1);
//setDebugging(true);
}
/**
* Answers the singleton instance of this plugin.
*/
public static PessimisticFilesystemProviderPlugin getInstance() {
return instance;
}
/**
* Initializes the default preferences for this plugin.
*/
protected void initializeDefaultPreferences() {
IPreferenceStore store = getPreferenceStore();
store.setDefault(
IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_EDITED,
IPessimisticFilesystemConstants.OPTION_PROMPT);
store.setDefault(
IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_EDITED_NOPROMPT,
IPessimisticFilesystemConstants.OPTION_AUTOMATIC);
store.setDefault(
IPessimisticFilesystemConstants.PREF_CHECKED_IN_FILES_SAVED,
IPessimisticFilesystemConstants.OPTION_DO_NOTHING);
store.setDefault(
IPessimisticFilesystemConstants.PREF_ADD_TO_CONTROL,
IPessimisticFilesystemConstants.OPTION_PROMPT);
store.setDefault(IPessimisticFilesystemConstants.PREF_FAIL_VALIDATE_EDIT, false);
store.setDefault(IPessimisticFilesystemConstants.PREF_TOUCH_DURING_VALIDATE_EDIT, true);
}
/**
* Convenience method for logging errors.
*/
public void logError(Throwable exception, String message) {
String pluginId= getBundle().getSymbolicName();
Status status= new Status(Status.ERROR, pluginId, Status.OK, message, exception);
getLog().log(status);
if (isDebugging()) {
System.out.println(message);
exception.printStackTrace();
}
}
/**
* Starts the resource listener.
*/
@Override
public void start(BundleContext context) throws Exception {
fListener= new ResourceChangeListener();
fListener.startup();
initializeDefaultPreferences();
super.start(context);
}
/**
* Stops the resource listener.
*/
@Override
public void stop(BundleContext context) throws Exception {
fListener.shutdown();
fListener= null;
super.stop(context);
}
/**
* Notifies the registered <code>IResourceStateListener</code> objects
* that the repository state for the resources has changed.
*
* @param resources Collection of resources that have changed.
*/
public void fireResourcesChanged(IResource[] resources) {
if (resources == null || resources.length == 0 || fListeners.isEmpty())
return;
for (Object element : fListeners) {
IResourceStateListener listener= (IResourceStateListener) element;
listener.stateChanged(resources);
}
}
/**
* Adds the listener to the list of listeners that are notified when
* the repository state of resources change.
*
* @param listener
*/
public void addProviderListener(IResourceStateListener listener) {
if (fListeners.contains(listener))
return;
fListeners.add(listener);
}
/**
* Removes the listener from the list of listeners that are notified when
* the repository state of resources change.
*
* @param listener
*/
public void removeProviderListener(IResourceStateListener listener) {
fListeners.remove(listener);
}
}