Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/SubscriberManager.java')
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/SubscriberManager.java296
1 files changed, 0 insertions, 296 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/SubscriberManager.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/SubscriberManager.java
deleted file mode 100644
index 2a943b278..000000000
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/SubscriberManager.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.team.internal.core;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.resources.ISaveContext;
-import org.eclipse.core.resources.ISaveParticipant;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.ISafeRunnable;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.QualifiedName;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.subscribers.ISubscriberManager;
-import org.eclipse.team.core.subscribers.ITeamResourceChangeListener;
-import org.eclipse.team.core.subscribers.TeamDelta;
-import org.eclipse.team.core.subscribers.TeamSubscriber;
-import org.eclipse.team.core.subscribers.TeamSubscriberFactory;
-
-/**
- * This class provides the private implementation of <code>ISubscriberManager</code>.
- */
-public class SubscriberManager implements ISubscriberManager, ISaveParticipant {
-
- private static String SUBSCRIBER_EXTENSION = "subscriber"; //$NON-NLS-1$
- final static private String SAVECTX_SUBSCRIBERS = "subscribers"; //$NON-NLS-1$
- final static private String SAVECTX_SUBSCRIBER = "subscriber"; //$NON-NLS-1$
- final static private String SAVECTX_QUALIFIER = "qualifier"; //$NON-NLS-1$
- final static private String SAVECTX_LOCALNAME = "localName"; //$NON-NLS-1$
-
- private Map subscribers = new HashMap();
- private List listeners = new ArrayList(1);
- private Map factories = new HashMap();
-
- static private ISubscriberManager instance;
-
- private static final Object GET_INSTANCE_LOCK = new Object();
-
- public static ISubscriberManager getInstance() {
- boolean startup = false;
- synchronized(GET_INSTANCE_LOCK) {
- if (instance == null) {
- // Initialize the variable before trigering startup.
- // This is done because the startup code can invoke
- // subscriber factories which, in turn will ask for the
- // subscriber manager.
- instance = new SubscriberManager();
- startup = true;
- }
- }
- if (startup) {
- // The startup of the manager must be done outside the lock as it
- // can invoke client code
- ((SubscriberManager)instance).startup();
- }
-
- return instance;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.ISubscriberManager#registerSubscriber(org.eclipse.team.core.subscribers.TeamSubscriber)
- */
- public void registerSubscriber(TeamSubscriber subscriber) {
- boolean fireEvent = false;
- synchronized(subscribers) {
- if(! subscribers.containsKey(subscriber.getId())) {
- subscribers.put(subscriber.getId(), subscriber);
- fireEvent = true;
- }
- }
- if (fireEvent) {
- fireTeamResourceChange(new TeamDelta[] {
- new TeamDelta(subscriber, TeamDelta.SUBSCRIBER_CREATED, null)});
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.ISubscriberManager#deregisterSubscriber(org.eclipse.team.core.subscribers.TeamSubscriber)
- */
- public void deregisterSubscriber(TeamSubscriber subscriber) {
- boolean fireEvent = false;
- synchronized(subscribers) {
- if (subscribers.remove(subscriber.getId()) != null) {
- // Only notify if the subscriber was registered in the first place
- fireEvent = true;
- }
- }
- if (fireEvent) {
- fireTeamResourceChange(new TeamDelta[] {
- new TeamDelta(subscriber, TeamDelta.SUBSCRIBER_DELETED, null)});
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.ISubscriberManager#getSubscriber(org.eclipse.core.runtime.QualifiedName)
- */
- public TeamSubscriber getSubscriber(QualifiedName id) {
- synchronized(subscribers) {
- TeamSubscriber s = (TeamSubscriber)subscribers.get(id);
- return s;
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.ISubscriberManager#getSubscribers()
- */
- public TeamSubscriber[] getSubscribers() {
- synchronized(subscribers) {
- return (TeamSubscriber[])subscribers.values().toArray(
- new TeamSubscriber[subscribers.size()]);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.ISubscriberManager#addTeamResourceChangeListener(org.eclipse.team.core.subscribers.ITeamResourceChangeListener)
- */
- public void addTeamResourceChangeListener(ITeamResourceChangeListener listener) {
- synchronized(listener) {
- listeners.add(listener);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.ISubscriberManager#removeTeamResourceChangeListener(org.eclipse.team.core.subscribers.ITeamResourceChangeListener)
- */
- public void removeTeamResourceChangeListener(ITeamResourceChangeListener listener) {
- synchronized(listener) {
- listeners.remove(listener);
- }
- }
-
- public void doneSaving(ISaveContext context) {
- }
-
- public void prepareToSave(ISaveContext context) throws CoreException {
- }
-
- public void rollback(ISaveContext context) {
- }
-
- public void saving(ISaveContext context) throws CoreException {
- // save subscribers during snapshot and at full save
- saveSubscribers();
- }
-
- public void startup() {
- try {
- ResourcesPlugin.getWorkspace().addSaveParticipant(TeamPlugin.getPlugin(), this);
- } catch (CoreException e) {
- TeamPlugin.log(e);
- }
- restoreSubscribers();
- }
-
- /*
- * Fires a team resource change event to all registered listeners
- * Only listeners registered at the time this method is called are notified.
- */
- protected void fireTeamResourceChange(TeamDelta[] deltas) {
- ITeamResourceChangeListener[] allListeners;
- // Copy the listener list so we're not calling client code while synchronized
- synchronized(listeners) {
- allListeners = (ITeamResourceChangeListener[]) listeners.toArray(new ITeamResourceChangeListener[listeners.size()]);
- }
- fireTeamResourceChange(allListeners, deltas);
- }
-
- public void fireTeamResourceChange(ITeamResourceChangeListener[] listeners, final TeamDelta[] deltas) {
- // Notify the listeners safely so all will receive notification
- for (int i = 0; i < listeners.length; i++) {
- final ITeamResourceChangeListener listener = listeners[i];
- Platform.run(new ISafeRunnable() {
- public void handleException(Throwable exception) {
- // don't log the exception....it is already being logged in Platform#run
- }
- public void run() throws Exception {
- listener.teamResourceChanged(deltas);
-
- }
- });
- }
- }
-
- synchronized void restoreSubscribers() {
- try {
- SaveContext root = SaveContextXMLWriter.readXMLPluginMetaFile(TeamPlugin.getPlugin(), "subscribers"); //$NON-NLS-1$
- if(root != null && root.getName().equals(SAVECTX_SUBSCRIBERS)) {
- SaveContext[] contexts = root.getChildren();
- for (int i = 0; i < contexts.length; i++) {
- SaveContext context = contexts[i];
- if(context.getName().equals(SAVECTX_SUBSCRIBER)) {
- String qualifier = context.getAttribute(SAVECTX_QUALIFIER);
- String localName = context.getAttribute(SAVECTX_LOCALNAME);
- TeamSubscriberFactory factory = create(qualifier);
- if(factory == null) {
- TeamPlugin.log(new TeamException(Policy.bind("TeamProvider.10", qualifier.toString()))); //$NON-NLS-1$
- }
- SaveContext[] children = context.getChildren();
- if(children.length == 1) {
- TeamSubscriber s = factory.restoreSubscriber(new QualifiedName(qualifier, localName), children[0]);
- if(s != null) {
- registerSubscriber(s);
- }
- }
- }
- }
-
- }
- } catch (TeamException e) {
- TeamPlugin.log(e);
- }
- }
-
- synchronized void saveSubscribers() {
- SaveContext root = new SaveContext();
- root.setName(SAVECTX_SUBSCRIBERS);
- List children = new ArrayList();
- try {
- for (Iterator it = subscribers.values().iterator(); it.hasNext();) {
- TeamSubscriber subscriber = (TeamSubscriber) it.next();
- String qualifier = subscriber.getId().getQualifier();
- TeamSubscriberFactory factory = create(qualifier);
- if(factory == null) {
- TeamPlugin.log(new TeamException(Policy.bind("TeamProvider.11", qualifier))); //$NON-NLS-1$
- }
- SaveContext child = factory.saveSubscriber(subscriber);
- if(child != null) {
- SaveContext item = new SaveContext();
- item.putChild(child);
- item.setName(SAVECTX_SUBSCRIBER);
- Map attributes = new HashMap();
- attributes.put(SAVECTX_QUALIFIER, subscriber.getId().getQualifier());
- attributes.put(SAVECTX_LOCALNAME, subscriber.getId().getLocalName());
- item.setAttributes(attributes);
- children.add(item);
- }
- }
- root.setChildren((SaveContext[])children.toArray(new SaveContext[children.size()]));
- SaveContextXMLWriter.writeXMLPluginMetaFile(TeamPlugin.getPlugin(), "subscribers", root); //$NON-NLS-1$
- } catch (TeamException e) {
- TeamPlugin.log(e);
- }
- }
-
- private TeamSubscriberFactory create(String id) {
- TeamSubscriberFactory sFactory = (TeamSubscriberFactory)factories.get(id);
- if(sFactory != null) {
- return sFactory;
- }
-
- TeamPlugin plugin = TeamPlugin.getPlugin();
- if (plugin != null) {
- IExtensionPoint extension = plugin.getDescriptor().getExtensionPoint(SUBSCRIBER_EXTENSION);
- if (extension != null) {
- IExtension[] extensions = extension.getExtensions();
- for (int i = 0; i < extensions.length; i++) {
- IConfigurationElement [] configElements = extensions[i].getConfigurationElements();
- for (int j = 0; j < configElements.length; j++) {
- try {
- //Its ok not to have a typeClass extension. In this case, a default instance will be created.
- if(configElements[j].getAttribute("class") != null) { //$NON-NLS-1$
- sFactory = (TeamSubscriberFactory) configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
- }
- factories.put(sFactory.getID(), sFactory);
- return sFactory;
- } catch (CoreException e) {
- TeamPlugin.log(e);
- } catch (ClassCastException e) {
- String className = configElements[j].getAttribute("class"); //$NON-NLS-1$
- TeamPlugin.log(IStatus.ERROR, Policy.bind("RepositoryProviderType.invalidClass", id.toString(), className), e); //$NON-NLS-1$
- }
- return null;
- }
- }
- }
- }
- return null;
- }
-}

Back to the top