diff options
Diffstat (limited to 'bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java')
-rw-r--r-- | bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java | 268 |
1 files changed, 0 insertions, 268 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java deleted file mode 100644 index 02bf4d845..000000000 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCompareSubscriber.java +++ /dev/null @@ -1,268 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 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.ccvs.core; - -import java.util.*; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.QualifiedName; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.subscribers.*; -import org.eclipse.team.core.variants.IResourceVariantTree; -import org.eclipse.team.core.variants.SessionResourceVariantByteStore; -import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot; -import org.eclipse.team.internal.ccvs.core.syncinfo.CVSResourceVariantTree; -import org.eclipse.team.internal.ccvs.core.syncinfo.MultiTagResourceVariantTree; - -/** - * This subscriber is used when comparing the local workspace with its - * corresponding remote. - */ -public class CVSCompareSubscriber extends CVSSyncTreeSubscriber implements ISubscriberChangeListener { - - public static final String ID = "org.eclipse.team.cvs.ui.compare-participant"; //$NON-NLS-1$ - public static final String ID_MODAL = "org.eclipse.team.cvs.ui.compare-participant-modal"; //$NON-NLS-1$ - - public static final String QUALIFIED_NAME = CVSProviderPlugin.ID + ".compare"; //$NON-NLS-1$ - private static final String UNIQUE_ID_PREFIX = "compare-"; //$NON-NLS-1$ - - private IResource[] resources; - private CVSResourceVariantTree tree; - - public CVSCompareSubscriber(IResource[] resources, CVSTag tag) { - super(getUniqueId(), Policy.bind("CVSCompareSubscriber.2", tag.getName()), Policy.bind("CVSCompareSubscriber.3")); //$NON-NLS-1$ //$NON-NLS-2$ - this.resources = resources; - tree = new CVSResourceVariantTree(new SessionResourceVariantByteStore(), tag, getCacheFileContentsHint()); - initialize(); - } - - public CVSCompareSubscriber(IResource[] resources, CVSTag[] tags, String name) { - super(getUniqueId(), Policy.bind("CVSCompareSubscriber.2", name), Policy.bind("CVSCompareSubscriber.3")); //$NON-NLS-1$ //$NON-NLS-2$ - resetRoots(resources, tags); - initialize(); - } - - /** - * @param resources - * @param tags - */ - public void resetRoots(IResource[] resources, CVSTag[] tags) { - if (this.resources != null) { - List removed = new ArrayList(); - for (int i = 0; i < this.resources.length; i++) { - IResource resource = this.resources[i]; - removed.add(new SubscriberChangeEvent(this, ISubscriberChangeEvent.ROOT_REMOVED, resource)); - } - this.resources = new IResource[0]; - fireTeamResourceChange((ISubscriberChangeEvent[]) removed.toArray(new ISubscriberChangeEvent[removed.size()])); - if (tree != null) { - tree.dispose(); - tree = null; - } - } - this.resources = resources; - MultiTagResourceVariantTree multiTree = new MultiTagResourceVariantTree(new SessionResourceVariantByteStore(), getCacheFileContentsHint()); - for (int i = 0; i < tags.length; i++) { - multiTree.addResource(resources[i], tags[i]); - } - tree = multiTree; - } - - private void initialize() { - CVSProviderPlugin.getPlugin().getCVSWorkspaceSubscriber().addListener(this); - } - - public void dispose() { - CVSProviderPlugin.getPlugin().getCVSWorkspaceSubscriber().removeListener(this); - tree.dispose(); - } - - private static QualifiedName getUniqueId() { - String uniqueId = Long.toString(System.currentTimeMillis()); - return new QualifiedName(QUALIFIED_NAME, UNIQUE_ID_PREFIX + uniqueId); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * @see org.eclipse.team.internal.ccvs.core.CVSSyncTreeSubscriber#getBaseSynchronizationCache() - */ - protected IResourceVariantTree getBaseTree() { - // No base cache needed since it's a two way compare - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.team.internal.ccvs.core.CVSSyncTreeSubscriber#getRemoteSynchronizationCache() - */ - protected IResourceVariantTree getRemoteTree() { - return tree; - } - - /* (non-Javadoc) - * @see org.eclipse.team.core.subscribers.TeamSubscriber#isThreeWay() - */ - public boolean isThreeWay() { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.team.core.subscribers.TeamSubscriber#roots() - */ - public IResource[] roots() { - return resources; - } - - /* (non-Javadoc) - * @see org.eclipse.team.core.subscribers.ITeamResourceChangeListener#teamResourceChanged(org.eclipse.team.core.subscribers.TeamDelta[]) - */ - public void subscriberResourceChanged(ISubscriberChangeEvent[] deltas) { - List outgoingDeltas = new ArrayList(deltas.length); - for (int i = 0; i < deltas.length; i++) { - ISubscriberChangeEvent delta = deltas[i]; - if ((delta.getFlags() & ISubscriberChangeEvent.ROOT_REMOVED) != 0) { - IResource resource = delta.getResource(); - outgoingDeltas.addAll(Arrays.asList(handleRemovedRoot(resource))); - } else if ((delta.getFlags() & ISubscriberChangeEvent.SYNC_CHANGED) != 0) { - IResource resource = delta.getResource(); - try { - if (isSupervised(resource)) { - outgoingDeltas.add(new SubscriberChangeEvent(this, delta.getFlags(), resource)); - } - } catch (TeamException e) { - // Log and ignore - CVSProviderPlugin.log(e); - } - } - } - - fireTeamResourceChange((SubscriberChangeEvent[]) outgoingDeltas.toArray(new SubscriberChangeEvent[outgoingDeltas.size()])); - } - - private SubscriberChangeEvent[] handleRemovedRoot(IResource removedRoot) { - // Determine if any of the roots of the compare are affected - List removals = new ArrayList(resources.length); - for (int j = 0; j < resources.length; j++) { - IResource root = resources[j]; - if (removedRoot.getFullPath().isPrefixOf(root.getFullPath())) { - // The root is no longer managed by CVS - removals.add(root); - try { - tree.flushVariants(root, IResource.DEPTH_INFINITE); - } catch (TeamException e) { - CVSProviderPlugin.log(e); - } - } - } - if (removals.isEmpty()) { - return new SubscriberChangeEvent[0]; - } - - // Adjust the roots of the subscriber - List newRoots = new ArrayList(resources.length); - newRoots.addAll(Arrays.asList(resources)); - newRoots.removeAll(removals); - resources = (IResource[]) newRoots.toArray(new IResource[newRoots.size()]); - - // Create the deltas for the removals - SubscriberChangeEvent[] deltas = new SubscriberChangeEvent[removals.size()]; - for (int i = 0; i < deltas.length; i++) { - deltas[i] = new SubscriberChangeEvent(this, ISubscriberChangeEvent.ROOT_REMOVED, (IResource)removals.get(i)); - } - return deltas; - } - - /* (non-Javadoc) - * @see org.eclipse.team.core.subscribers.TeamSubscriber#isSupervised(org.eclipse.core.resources.IResource) - */ - public boolean isSupervised(IResource resource) throws TeamException { - if (super.isSupervised(resource)) { - if (!resource.exists() && !getRemoteTree().hasResourceVariant(resource)) { - // Exclude conflicting deletions - return false; - } - for (int i = 0; i < resources.length; i++) { - IResource root = resources[i]; - if (root.getFullPath().isPrefixOf(resource.getFullPath())) { - return true; - } - } - } - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.team.internal.ccvs.core.CVSSyncTreeSubscriber#getCacheFileContentsHint() - */ - protected boolean getCacheFileContentsHint() { - return true; - } - - public CVSTag getTag() { - return tree.getTag(ResourcesPlugin.getWorkspace().getRoot()); - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object other) { - if(this == other) return true; - if(! (other instanceof CVSCompareSubscriber)) return false; - CVSCompareSubscriber s = (CVSCompareSubscriber)other; - CVSResourceVariantTree tree1 = (CVSResourceVariantTree)getRemoteTree(); - CVSResourceVariantTree tree2 = (CVSResourceVariantTree)s.getRemoteTree(); - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - CVSTag tag1 = tree1.getTag(root); - CVSTag tag2 = tree2.getTag(root); - if (tag1 == null || tag2 == null) return false; - return tag1.equals(tag2) && rootsEqual(s); - } - - /** - * Prime the remote tree with the sync info from the local workspace. - * This is done to ensure that we don't get a huge nimber of outgoing - * changes before the first refresh. - * - */ - public void primeRemoteTree() throws CVSException { - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource); - cvsResource.accept(new ICVSResourceVisitor() { - public void visitFile(ICVSFile file) throws CVSException { - byte[] bytes = file.getSyncBytes(); - if (bytes != null) { - try { - tree.getByteStore().setBytes(file.getIResource(), bytes); - } catch (TeamException e) { - throw CVSException.wrapException(e); - } - } - } - public void visitFolder(ICVSFolder folder) throws CVSException { - // No need to copy sync info for folders since - // CVS resource variant tree will get missing - // folder info from the local resources - folder.acceptChildren(this); - } - }); - } - } - - /** - * Return the tag associated with the given root resource - * or <code>null</code> if there is only a single tag - * for the subscriber. - * @param root the root resource - * @return the tag associated with the given root resource - */ - public CVSTag getTag(IResource root) { - return tree.getTag(root); - } -} |