Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeManager.java')
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeManager.java519
1 files changed, 0 insertions, 519 deletions
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeManager.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeManager.java
deleted file mode 100644
index 7489a2261..000000000
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeManager.java
+++ /dev/null
@@ -1,519 +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.ui.synchronize;
-
-import java.io.*;
-import java.util.*;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.util.ListenerList;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ui.*;
-import org.eclipse.team.internal.ui.registry.SynchronizeParticipantDescriptor;
-import org.eclipse.team.internal.ui.registry.SynchronizeParticipantRegistry;
-import org.eclipse.team.ui.ITeamUIConstants;
-import org.eclipse.team.ui.synchronize.*;
-import org.eclipse.ui.*;
-
-/**
- * Manages the registered synchronize participants. It handles notification of
- * participant lifecycles, creation of <code>static</code> participants, and
- * the re-creation of persisted participants.
- *
- * @see ISynchronizeView
- * @see ISynchronizeParticipant
- * @see ILogicalView
- * @since 3.0
- */
-public class SynchronizeManager implements ISynchronizeManager {
- /**
- * Synchronize participants listeners
- */
- private ListenerList fListeners = null;
-
- /**
- * List of registered synchronize view pages {String id -> List participant
- * instances}}
- */
- private Map synchronizeParticipants = new HashMap(10);
- private SynchronizeParticipantRegistry participantRegistry = new SynchronizeParticipantRegistry();
-
- // change notification constants
- private final static int ADDED = 1;
- private final static int REMOVED = 2;
-
- // save context constants
- private final static String CTX_PARTICIPANTS = "syncparticipants"; //$NON-NLS-1$
- private final static String CTX_PARTICIPANT = "participant"; //$NON-NLS-1$
- private final static String CTX_ID = "id"; //$NON-NLS-1$
- private final static String CTX_PARTICIPANT_DATA = "data"; //$NON-NLS-1$
- private final static String FILENAME = "syncParticipants.xml"; //$NON-NLS-1$
-
- /**
- * Notifies a participant listeners of additions or removals
- */
- class SynchronizeViewPageNotifier implements ISafeRunnable {
-
- private ISynchronizeParticipantListener fListener;
- private int fType;
- private ISynchronizeParticipant[] fChanged;
-
- public void handleException(Throwable exception) {
- TeamUIPlugin.log(IStatus.ERROR, Policy.bind("SynchronizeManager.7"), exception); //$NON-NLS-1$
- }
-
- public void run() throws Exception {
- switch (fType) {
- case ADDED :
- fListener.participantsAdded(fChanged);
- break;
- case REMOVED :
- fListener.participantsRemoved(fChanged);
- break;
- }
- }
-
- /**
- * Notifies the given listener of the adds/removes
- * @param participants the participants that changed
- * @param update the type of change
- */
- public void notify(ISynchronizeParticipant[] participants, int update) {
- if (fListeners == null) {
- return;
- }
- fChanged = participants;
- fType = update;
- Object[] copiedListeners = fListeners.getListeners();
- for (int i = 0; i < copiedListeners.length; i++) {
- fListener = (ISynchronizeParticipantListener) copiedListeners[i];
- Platform.run(this);
- }
- fChanged = null;
- fListener = null;
- }
- }
-
- /**
- * Represents a paticipant instance and allows lazy initialization of the instance
- * only when the participant is required.
- */
- static class ParticipantInstance {
- private ISynchronizeParticipant participant;
- private IMemento savedState;
- private SynchronizeParticipantDescriptor descriptor;
-
- public ParticipantInstance(SynchronizeParticipantDescriptor descriptor, IMemento savedState) {
- this.savedState = savedState;
- this.descriptor = descriptor;
- }
-
- public void setParticipant(ISynchronizeParticipant participant) {
- this.participant = participant;
- }
-
- public ISynchronizeParticipant getParticipant() throws TeamException {
- if (participant == null) {
- try {
- participant = (ISynchronizeParticipant) TeamUIPlugin.createExtension(descriptor.getConfigurationElement(), SynchronizeParticipantDescriptor.ATT_CLASS);
- participant.setInitializationData(descriptor.getConfigurationElement(), null, null);
- participant.init(savedState);
- } catch (PartInitException e2) {
- participant = null;
- throw new TeamException(Policy.bind("SynchronizeManager.11"), e2); //$NON-NLS-1$
- } catch (CoreException e) {
- participant = null;
- throw TeamException.asTeamException(e);
- }
- }
- return participant;
- }
-
- public boolean isParticipantInitialized() {
- return participant != null;
- }
-
- public IMemento getSavedState() {
- return savedState;
- }
-
- public boolean equals(Object other) {
- try {
- if(other == this) return true;
- if (other instanceof ISynchronizeParticipant) {
- return other == this.getParticipant();
- } else if(other instanceof ParticipantInstance) {
- return ((ParticipantInstance)other).getParticipant() == this.getParticipant();
- }
- return false;
- } catch (TeamException e) {
- return false;
- }
- }
-
- public void dispose() {
- if(participant != null) {
- participant.dispose();
- }
- }
-
- public String getId() {
- return descriptor.getId();
- }
- }
-
- public SynchronizeManager() {
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.team.ui.sync.ISynchronizeManager#addSynchronizeParticipantListener(org.eclipse.team.ui.sync.ISynchronizeParticipantListener)
- */
- public void addSynchronizeParticipantListener(ISynchronizeParticipantListener listener) {
- if (fListeners == null) {
- fListeners = new ListenerList(5);
- }
- fListeners.add(listener);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.team.ui.sync.ISynchronizeManager#removeSynchronizeParticipantListener(org.eclipse.team.ui.sync.ISynchronizeParticipantListener)
- */
- public void removeSynchronizeParticipantListener(ISynchronizeParticipantListener listener) {
- if (fListeners != null) {
- fListeners.remove(listener);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.team.ui.synchronize.ISynchronizeManager#getParticipantDescriptor(java.lang.String)
- */
- public ISynchronizeParticipantDescriptor getParticipantDescriptor(String id) {
- return participantRegistry.find(id);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.team.ui.sync.ISynchronizeManager#addSynchronizeParticipants(org.eclipse.team.ui.sync.ISynchronizeParticipant[])
- */
- public synchronized void addSynchronizeParticipants(ISynchronizeParticipant[] participants) {
- List added = new ArrayList(participants.length);
- for (int i = 0; i < participants.length; i++) {
- ISynchronizeParticipant participant = participants[i];
- ParticipantInstance instance = new ParticipantInstance(participantRegistry.find(participant.getId()), null /* no saved state */);
- instance.setParticipant(participant);
- addParticipant(instance);
- try {
- participant.init(null);
- } catch (PartInitException e) {
- TeamUIPlugin.log(IStatus.ERROR, Policy.bind("SynchronizeManager.13"), e); //$NON-NLS-1$
- continue;
- }
- added.add(participant);
- }
- if (!added.isEmpty()) {
- saveState();
- fireUpdate((ISynchronizeParticipant[]) added.toArray(new ISynchronizeParticipant[added.size()]), ADDED);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.team.ui.sync.ISynchronizeManager#removeSynchronizeParticipants(org.eclipse.team.ui.sync.ISynchronizeParticipant[])
- */
- public synchronized void removeSynchronizeParticipants(ISynchronizeParticipant[] participants) {
- List removed = new ArrayList(participants.length);
- for (int i = 0; i < participants.length; i++) {
- ISynchronizeParticipant participant = participants[i];
- if (removeParticipant(participant)) {
- removed.add(participant);
- }
- }
- if (!removed.isEmpty()) {
- saveState();
- fireUpdate((ISynchronizeParticipant[]) removed.toArray(new ISynchronizeParticipant[removed.size()]), REMOVED);
- for (Iterator it = removed.iterator(); it.hasNext(); ) {
- ISynchronizeParticipant participant = (ISynchronizeParticipant) it.next();
- participant.dispose();
- }
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.team.ui.sync.ISynchronizeManager#getSynchronizeParticipants()
- */
- public synchronized ISynchronizeParticipant[] getSynchronizeParticipants() {
- List participants = new ArrayList();
- for (Iterator it = synchronizeParticipants.keySet().iterator(); it.hasNext(); ) {
- String id = (String) it.next();
- ISynchronizeParticipant[] instances = find(id);
- participants.addAll(Arrays.asList(instances));
- }
- return (ISynchronizeParticipant[]) participants.toArray(new ISynchronizeParticipant[participants.size()]);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.team.ui.sync.ISynchronizeManager#find(java.lang.String)
- */
- public ISynchronizeParticipant[] find(String id) {
- List instances = (List) synchronizeParticipants.get(id);
- if (instances == null) {
- return new ISynchronizeParticipant[0];
- }
- List participants = new ArrayList(instances.size());
- for (Iterator it = instances.iterator(); it.hasNext(); ) {
- ParticipantInstance instance = (ParticipantInstance) it.next();
- ISynchronizeParticipant participant;
- try {
- participant = instance.getParticipant();
- if(participant != null) {
- participants.add(participant);
- }
- } catch (TeamException e) {
- // Participant instance is invalid - remove from list
- synchronizeParticipants.remove(instance);
- TeamUIPlugin.log(e);
- }
- }
- return (ISynchronizeParticipant[]) participants.toArray(new ISynchronizeParticipant[participants.size()]);
- }
-
- /**
- * Called to display the synchronize view in the given page. If the given
- * page is <code>null</code> the synchronize view is shown in the default
- * active workbench window.
- */
- public ISynchronizeView showSynchronizeViewInActivePage(IWorkbenchPage activePage) {
- IWorkbench workbench = TeamUIPlugin.getPlugin().getWorkbench();
- IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
- if (!TeamUIPlugin.getPlugin().getPreferenceStore().getString(IPreferenceIds.SYNCVIEW_DEFAULT_PERSPECTIVE).equals(IPreferenceIds.SYNCVIEW_DEFAULT_PERSPECTIVE_NONE)) {
- try {
- String pId = TeamUIPlugin.getPlugin().getPreferenceStore().getString(IPreferenceIds.SYNCVIEW_DEFAULT_PERSPECTIVE);
- activePage = workbench.showPerspective(pId, window);
- } catch (WorkbenchException e) {
- Utils.handleError(window.getShell(), e, Policy.bind("SynchronizeView.14"), e.getMessage()); //$NON-NLS-1$
- }
- }
- try {
- if (activePage == null) {
- activePage = TeamUIPlugin.getActivePage();
- if (activePage == null)
- return null;
- }
- return (ISynchronizeView) activePage.showView(ISynchronizeView.VIEW_ID);
- } catch (PartInitException pe) {
- Utils.handleError(window.getShell(), pe, Policy.bind("SynchronizeView.16"), pe.getMessage()); //$NON-NLS-1$
- return null;
- }
- }
-
- /**
- * Creates the participant registry and restore any saved participants.
- * Will also instantiate any static participants.
- */
- public void init() {
- try {
- // Initialize the participant registry - reads all participant
- // extension descriptions.
- participantRegistry.readRegistry(Platform.getPluginRegistry(), TeamUIPlugin.ID, ITeamUIConstants.PT_SYNCPARTICIPANTS);
-
- // Instantiate and register any dynamic participants saved from a
- // previous session.
- restoreSavedParticipants();
-
- // Instantiate and register any static participant that has not
- // already been created.
- initializeStaticParticipants();
- } catch (CoreException e) {
- TeamUIPlugin.log(new Status(IStatus.ERROR, TeamUIPlugin.ID, 1, Policy.bind("SynchronizeManager.8"), e)); //$NON-NLS-1$
- }
- }
-
- /**
- * Allow participant instances to clean-up.
- */
- public void dispose() {
- for (Iterator it = synchronizeParticipants.keySet().iterator(); it.hasNext(); ) {
- String id = (String) it.next();
- List participants = (List) synchronizeParticipants.get(id);
- for (Iterator it2 = participants.iterator(); it2.hasNext(); ) {
- ParticipantInstance instance = (ParticipantInstance) it2.next();
- instance.dispose();
- }
- }
-
- // save state and settings for existing participants.
- saveState();
- }
-
- private void initializeStaticParticipants() throws CoreException {
- SynchronizeParticipantDescriptor[] desc = participantRegistry.getSynchronizeParticipants();
- List participants = new ArrayList();
- for (int i = 0; i < desc.length; i++) {
- SynchronizeParticipantDescriptor descriptor = desc[i];
- if (descriptor.isStatic() && !synchronizeParticipants.containsKey(descriptor.getId())) {
- addParticipant(new ParticipantInstance(descriptor, null /* no saved state */));
- }
- }
- }
-
- /**
- * Restores participants that have been saved between sessions.
- */
- private void restoreSavedParticipants() throws TeamException, CoreException {
- File file = getStateFile();
- Reader reader;
- try {
- reader = new BufferedReader(new FileReader(file));
- } catch (FileNotFoundException e) {
- return;
- }
- List participants = new ArrayList();
- IMemento memento = XMLMemento.createReadRoot(reader);
- IMemento[] participantNodes = memento.getChildren(CTX_PARTICIPANT);
- for (int i = 0; i < participantNodes.length; i++) {
- IMemento memento2 = participantNodes[i];
- String id = memento2.getString(CTX_ID);
- SynchronizeParticipantDescriptor desc = participantRegistry.find(id);
- if (desc != null) {
- IConfigurationElement cfgElement = desc.getConfigurationElement();
- addParticipant(new ParticipantInstance(desc, memento2.getChild(CTX_PARTICIPANT_DATA)));
- } else {
- TeamUIPlugin.log(new Status(IStatus.ERROR, TeamUIPlugin.ID, 1, Policy.bind("SynchronizeManager.9", id), null)); //$NON-NLS-1$
- }
- }
- }
-
- /**
- * Saves a file containing the list of participant ids that are registered
- * with this manager. Each initialized participant is also given the chance to save
- * it's state.
- */
- private void saveState() {
- XMLMemento xmlMemento = XMLMemento.createWriteRoot(CTX_PARTICIPANTS);
- List children = new ArrayList();
- for (Iterator it = synchronizeParticipants.keySet().iterator(); it.hasNext(); ) {
- String id = (String) it.next();
- List participants = (List) synchronizeParticipants.get(id);
- for (Iterator it2 = participants.iterator(); it2.hasNext(); ) {
- ParticipantInstance instance = (ParticipantInstance) it2.next();
-
- // Participants can opt out of being saved between sessions
- if(instance.isParticipantInitialized()) {
- ISynchronizeParticipant participant;
- try {
- participant = instance.getParticipant();
- } catch (TeamException e1) {
- continue;
- }
- if(! participant.isPersistent()) continue;
- }
-
- // Create the state placeholder for a participant
- IMemento participantNode = xmlMemento.createChild(CTX_PARTICIPANT);
- participantNode.putString(CTX_ID, instance.getId());
- IMemento participantData = participantNode.createChild(CTX_PARTICIPANT_DATA);
-
- // Allow the participant to save it's state. If the participant exists
- // but isn't instantiated any loaded state will be re-saved.
- if(instance.isParticipantInitialized()) {
- ISynchronizeParticipant participant;
- try {
- participant = instance.getParticipant();
- } catch (TeamException e1) {
- // Continue with the next participant instance.
- continue;
- }
- participant.saveState(participantData);
- } else {
- IMemento savedState = instance.getSavedState();
- if(savedState != null) {
- participantData.putMemento(savedState);
- }
- }
- }
- }
- try {
- Writer writer = new BufferedWriter(new FileWriter(getStateFile()));
- try {
- xmlMemento.save(writer);
- } finally {
- writer.close();
- }
- } catch (IOException e) {
- TeamUIPlugin.log(new Status(IStatus.ERROR, TeamUIPlugin.ID, 1, Policy.bind("SynchronizeManager.10"), e)); //$NON-NLS-1$
- }
- }
-
- private File getStateFile() {
- IPath pluginStateLocation = TeamUIPlugin.getPlugin().getStateLocation();
- return pluginStateLocation.append(FILENAME).toFile(); //$NON-NLS-1$
- }
-
- private synchronized void addParticipant(ParticipantInstance instance) {
- String id = instance.getId();
- List instances = (List) synchronizeParticipants.get(id);
- if (instances == null) {
- instances = new ArrayList(2);
- synchronizeParticipants.put(id, instances);
- }
- instances.add(instance);
- }
-
- private synchronized boolean removeParticipant(ISynchronizeParticipant participant) {
- boolean removed = false;
- String id = participant.getId();
- List instances = (List) synchronizeParticipants.get(id);
- if (instances != null) {
- Iterator it = instances.iterator();
- ParticipantInstance instance = null;
- while (it.hasNext()) {
- ParticipantInstance tempInstance = (ParticipantInstance) it.next();
- try {
- if(tempInstance.getParticipant() == participant) {
- instance = tempInstance;
- }
- } catch (TeamException e) {
- // Participant instance is invalid - remove from list
- synchronizeParticipants.remove(tempInstance);
- TeamUIPlugin.log(e);
- }
- }
- if(instance != null) {
- removed = instances.remove(instance);
- if (instances.isEmpty()) {
- synchronizeParticipants.remove(id);
- }
- }
- }
- return removed;
- }
-
- /**
- * Fires notification.
- * @param participants participants added/removed
- * @param type ADD or REMOVE
- */
- private void fireUpdate(ISynchronizeParticipant[] participants, int type) {
- new SynchronizeViewPageNotifier().notify(participants, type);
- }
-} \ No newline at end of file

Back to the top