diff options
Diffstat (limited to 'bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/TeamSubscriber.java')
-rw-r--r-- | bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/TeamSubscriber.java | 271 |
1 files changed, 0 insertions, 271 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/TeamSubscriber.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/TeamSubscriber.java deleted file mode 100644 index 0ae5698da..000000000 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/TeamSubscriber.java +++ /dev/null @@ -1,271 +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.core.subscribers; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.*; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.core.TeamPlugin; - -/** - * A TeamSubscriber provides synchronization between local resources and a - * remote location that is used to share those resources. - * - * A TeamSubscriber is only required to send out change notification any time the sync - * state of a resoure changes but the local state does not. For instance, - * if the contents of a file have been modified or a file or folder has - * been deleted, the TeamSubscriber may or may not send out a TeamDelta.SYNC_CHANGED - * event. Also, if a project is deleted or closed, the TeamSubscriber is not required to - * issue a TeamDelta.ROOT_REMOVED event. It is up to clients to requery the subscriber - * when the state of a resource changes locally by listening to IResource deltas. - * - * [Note: How can we allow the refresh() operation to optimize the sync - * calculation based on the currently configured compare criteria?] - */ -abstract public class TeamSubscriber { - - public static final QualifiedName SUBSCRIBER_JOB_TYPE = new QualifiedName(TeamPlugin.ID, "subcriber_job"); //$NON-NLS-1$ - - private List listeners = new ArrayList(1); - - /** - * Return the description of this subscription, in a format that is - * suitable for display to an end user. The description should contain - * enough details to understand the connection type of this subscriber. - * - * @return String representing the description of this subscription. - */ - abstract public String getDescription(); - - /** - * Returns <code>true</code> if this resource is supervised by this - * subscriber. A supervised resource is one for which this subscriber - * maintains the synchronization state. Supervised resources are the only - * resources returned when <code>members(IResource)</code> was invoked with the parent - * of the resource. Returns <code>false</code> in all - * other cases. - * - * @return <code>true</code> if this resource is supervised, and <code>false</code> - * otherwise - */ - abstract public boolean isSupervised(IResource resource) throws TeamException; - - /** - * Returns all non-transient member resources of the given resource. The - * result will include entries for resources that exist either in the - * workspace or are implicated in an incoming change. Returns an empty list - * if the given resource exists neither in the workspace nor in the - * corresponding team stream, or if the given resource is transient. - * <p> - * This is a fast operation; the repository is not contacted. - * </p> - * <p> - * [Issue1 : Is there any filtering on the members? Just the ones that - * changed in some way, or *every member*? ] - * </p> - * - * @param resource - * the resource - * @return a list of member resources - * @exception CoreException - * if this request fails. Reasons include: - */ - abstract public IResource[] members(IResource resource) throws TeamException; - - /** - * Returns the list of root resources this subscriber considers for - * synchronization. A client should call this method first then can safely - * call <code>members</code> to navigate the resources managed by this - * subscriber. - * - * @return a list of resources - * @throws TeamException - */ - abstract public IResource[] roots(); - - /** - * Returns synchronization info for the given resource, or <code>null</code> - * if there is no synchronization info because the subscriber does not - * apply to this resource. - * <p> - * Note that sync info may be returned for non-existing or for resources - * which have no corresponding remote resource. - * </p> - * <p> - * This method may take some time; it depends on the comparison criteria - * that is used to calculate the synchronization state (e.g. using content - * or only timestamps). - * </p> - * - * @param resource - * the resource of interest - * @return sync info - */ - abstract public SyncInfo getSyncInfo(IResource resource) throws TeamException; - - /** - * Refreshes the resource hierarchy from the given resources and their - * children (to the specified depth) from the corresponding resources in - * the remote location. Resources are ignored in the following cases: - * <ul> - * <li>if they do not exist either in the workspace or in the - * corresponding remote location</li> - * <li>if the given resource is marked as derived (see - * IResource#isDerived())</li> - * <li>if the given resource is not managed by this subscriber</li> - * <li>if the given resource is a closed project (they are ineligible for - * synchronization)</li> - * <p> - * Typical synchronization operations use the statuses computed by this - * method as the basis for determining what to do. It is possible for the - * actual sync status of the resource to have changed since the current - * local sync status was refreshed. Operations typically skip resources - * with stale sync information. The chances of stale information being used - * can be reduced by running this method (where feasible) before doing - * other operations. Note that this will of course affect performance. - * </p> - * <p> - * The depth parameter controls whether refreshing is performed on just the - * given resource (depth= <code>DEPTH_ZERO</code>), the resource and its - * children (depth= <code>DEPTH_ONE</code>), or recursively to the - * resource and all its descendents (depth= <code>DEPTH_INFINITE</code>). - * Use depth <code>DEPTH_ONE</code>, rather than depth <code>DEPTH_ZERO</code>, - * to ensure that new members of a project or folder are detected. - * </p> - * <p> - * This method might change resources; any changes will be reported in a - * subsequent resource change event indicating changes to server sync - * status. - * </p> - * <p> - * This method contacts the server and is therefore long-running; progress - * and cancellation are provided by the given progress monitor. - * </p> - * - * @param resources - * the resources - * @param depth - * valid values are <code>DEPTH_ZERO</code>,<code>DEPTH_ONE</code>, - * or <code>DEPTH_INFINITE</code> - * @param monitor - * progress monitor, or <code>null</code> if progress - * reporting and cancellation are not desired - * @return status with code <code>OK</code> if there were no problems; - * otherwise a description (possibly a multi-status) consisting of - * low-severity warnings or informational messages. - * @exception CoreException - * if this method fails. Reasons include: - * <ul> - * <li>The server could not be contacted.</li> - * </ul> - */ - abstract public void refresh(IResource[] resources, int depth, IProgressMonitor monitor) throws TeamException; - - /** - * Returns the comparison criteria that will be used by the sync info - * created by this subscriber. - */ - abstract public IComparisonCriteria getDefaultComparisonCriteria(); - - /** - * Answers <code>true</code> if the base tree is maintained by this - * subscriber. If the base tree is not considered than the subscriber can - * be considered as not supported three-way comparisons. Instead - * comparisons are made between the local and remote only without - * consideration for the base. - */ - abstract public boolean isThreeWay(); - - /** - * Adds a listener to this team subscriber. Has no effect if an identical - * listener is already registered. - * <p> - * Team resource change listeners are informed about state changes that - * affect the resources supervised by this subscriber. - * </p> - * - * @param listener - * a team resource change listener - */ - public void addListener(ITeamResourceChangeListener listener) { - synchronized (listeners) { - if (!listeners.contains(listener)) { - listeners.add(listener); - } - } - } - - /** - * Removes a listener previously registered with this team subscriber. Has - * no affect if an identical listener is not registered. - * - * @param listener - * a team resource change listener - */ - public void removeListener(ITeamResourceChangeListener listener) { - synchronized (listeners) { - listeners.remove(listener); - } - } - - /** - * Return an array of all out-of-sync resources (getKind() != 0) that occur - * under the given resources to the specified depth. The purpose of this - * method is to provide subscribers a means of optimizing the determination - * of all out-of-sync out-of-sync descendants of a set of resources. - * <p> - * A return value of an empty array indicates that there are no out-of-sync - * resources supervised by the subscriber. A return of <code>null</code> - * indicates that the subscriber does not support this operation in an - * optimized fashion. In this case, the caller can determine the - * out-of-sync resources by traversing the resource structure form the - * roots of the subscriber (@see <code>getRoots()</code>). - * </p> - * - * @param resources - * @param depth - * @param monitor - * @return - */ - public SyncInfo[] getAllOutOfSync(IResource[] resources, int depth, IProgressMonitor monitor) throws TeamException { - return null; - } - - /** - * Fires a team resource change event to all registered listeners Only - * listeners registered at the time this method is called are notified. - * Listener notification makes use of an ISafeRunnable to ensure that - * client exceptions do not effect the notification to other clients. - */ - protected void fireTeamResourceChange(final 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()]); - } - // Notify the listeners safely so all will receive notification - for (int i = 0; i < allListeners.length; i++) { - final ITeamResourceChangeListener listener = allListeners[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); - } - }); - } - } -} |