Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSChangeSetCollector.java')
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSChangeSetCollector.java441
1 files changed, 0 insertions, 441 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSChangeSetCollector.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSChangeSetCollector.java
deleted file mode 100644
index 3083818a8..000000000
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/subscriber/CVSChangeSetCollector.java
+++ /dev/null
@@ -1,441 +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.ui.subscriber;
-
-import java.text.DateFormat;
-import java.util.Date;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.TeamStatus;
-import org.eclipse.team.core.subscribers.*;
-import org.eclipse.team.core.synchronize.SyncInfo;
-import org.eclipse.team.core.synchronize.SyncInfoSet;
-import org.eclipse.team.core.variants.IResourceVariant;
-import org.eclipse.team.internal.ccvs.core.*;
-import org.eclipse.team.internal.ccvs.core.resources.RemoteResource;
-import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo;
-import org.eclipse.team.internal.ccvs.ui.*;
-import org.eclipse.team.internal.ccvs.ui.Policy;
-import org.eclipse.team.internal.ccvs.ui.operations.RemoteLogOperation.LogEntryCache;
-import org.eclipse.team.ui.synchronize.*;
-
-/**
- * Collector that fetches the log for incoming CVS change sets
- */
-public class CVSChangeSetCollector extends SyncInfoSetChangeSetCollector implements LogEntryCacheUpdateHandler.ILogsFetchedListener {
-
- /*
- * Constant used to add the collector to the configuration of a page so
- * it can be accessed by the CVS custom actions
- */
- public static final String CVS_CHECKED_IN_COLLECTOR = CVSUIPlugin.ID + ".CVSCheckedInCollector"; //$NON-NLS-1$
-
- /*
- * Constant used to store the log entry handler in the configuration so it can
- * be kept around over layout changes
- */
- private static final String LOG_ENTRY_HANDLER = CVSUIPlugin.ID + ".LogEntryHandler"; //$NON-NLS-1$
-
- private static final String DEFAULT_INCOMING_SET_NAME = Policy.bind("CVSChangeSetCollector.0"); //$NON-NLS-1$
-
- boolean disposed = false;
-
- private LogEntryCache logEntryCache;
-
- /* *****************************************************************************
- * Special sync info that has its kind already calculated.
- */
- public class CVSUpdatableSyncInfo extends CVSSyncInfo {
- public int kind;
- public CVSUpdatableSyncInfo(int kind, IResource local, IResourceVariant base, IResourceVariant remote, Subscriber s) {
- super(local, base, remote, s);
- this.kind = kind;
- }
-
- protected int calculateKind() throws TeamException {
- return kind;
- }
- }
-
- private class DefaultCheckedInChangeSet extends CheckedInChangeSet {
-
- private Date date = new Date();
-
- public DefaultCheckedInChangeSet(String name) {
- setName(name);
- }
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.CheckedInChangeSet#getAuthor()
- */
- public String getAuthor() {
- return ""; //$NON-NLS-1$
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.CheckedInChangeSet#getDate()
- */
- public Date getDate() {
- return date;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.ChangeSet#getComment()
- */
- public String getComment() {
- return ""; //$NON-NLS-1$
- }
-
- }
-
- private class CVSCheckedInChangeSet extends CheckedInChangeSet {
-
- private final ILogEntry entry;
-
- public CVSCheckedInChangeSet(ILogEntry entry) {
- this.entry = entry;
- String date = DateFormat.getDateTimeInstance().format(entry.getDate());
- String comment = HistoryView.flattenText(entry.getComment());
- setName("["+entry.getAuthor()+ "] (" + date +") " + comment); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.CheckedInChangeSet#getAuthor()
- */
- public String getAuthor() {
- return entry.getAuthor();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.CheckedInChangeSet#getDate()
- */
- public Date getDate() {
- return entry.getDate();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.ChangeSet#getComment()
- */
- public String getComment() {
- return entry.getComment();
- }
- }
-
- public CVSChangeSetCollector(ISynchronizePageConfiguration configuration) {
- super(configuration);
- configuration.setProperty(CVSChangeSetCollector.CVS_CHECKED_IN_COLLECTOR, this);
- }
-
- public synchronized LogEntryCacheUpdateHandler getLogEntryHandler() {
- LogEntryCacheUpdateHandler handler = (LogEntryCacheUpdateHandler)getConfiguration().getProperty(LOG_ENTRY_HANDLER);
- if (handler == null) {
- handler = initializeLogEntryHandler(getConfiguration());
- }
- handler.setListener(this);
- return handler;
- }
-
- /*
- * Initialize the log entry handler and place it in the configuration
- */
- private LogEntryCacheUpdateHandler initializeLogEntryHandler(ISynchronizePageConfiguration configuration) {
- final LogEntryCacheUpdateHandler logEntryHandler = new LogEntryCacheUpdateHandler(configuration);
- configuration.setProperty(LOG_ENTRY_HANDLER, logEntryHandler);
- // Use an action group to get notified when the configuration is disposed
- configuration.addActionContribution(new SynchronizePageActionGroup() {
- public void dispose() {
- super.dispose();
- LogEntryCacheUpdateHandler handler = (LogEntryCacheUpdateHandler)getConfiguration().getProperty(LOG_ENTRY_HANDLER);
- if (handler != null) {
- handler.shutdown();
- getConfiguration().setProperty(LOG_ENTRY_HANDLER, null);
- }
- }
- });
- return logEntryHandler;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.core.subscribers.SyncInfoSetChangeSetCollector#add(org.eclipse.team.core.synchronize.SyncInfo[])
- */
- protected void add(SyncInfo[] infos) {
- LogEntryCacheUpdateHandler handler = getLogEntryHandler();
- if (handler != null)
- try {
- handler.fetch(infos);
- } catch (CVSException e) {
- getConfiguration().getSyncInfoSet().addError(new TeamStatus(IStatus.ERROR, CVSUIPlugin.ID, 0, e.getMessage(), e, null));
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.ui.synchronize.SyncInfoSetChangeSetCollector#reset(org.eclipse.team.core.synchronize.SyncInfoSet)
- */
- public void reset(SyncInfoSet seedSet) {
- // Notify thet handler to stop any fetches in progress
- LogEntryCacheUpdateHandler handler = getLogEntryHandler();
- if (handler != null) {
- handler.stopFetching();
- }
- super.reset(seedSet);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.ui.synchronize.views.HierarchicalModelProvider#dispose()
- */
- public void dispose() {
- // No longer listen for log entry changes
- // (The handler is disposed with the page)
- disposed = true;
- LogEntryCacheUpdateHandler handler = getLogEntryHandler();
- if (handler != null) handler.setListener(null);
- getConfiguration().setProperty(CVSChangeSetCollector.CVS_CHECKED_IN_COLLECTOR, null);
- logEntryCache = null;
- super.dispose();
- }
-
- /**
- * Fetch the log histories for the remote changes and use this information
- * to add each resource to an appropriate commit set.
- */
- private void handleRemoteChanges(final SyncInfo[] infos, final LogEntryCache logEntries, final IProgressMonitor monitor) {
- performUpdate(new IWorkspaceRunnable() {
- public void run(IProgressMonitor monitor) {
- addLogEntries(infos, logEntries, monitor);
- }
- }, true /* preserver expansion */, monitor);
- }
-
- /*
- * Add the following sync info elements to the viewer. It is assumed that these elements have associated
- * log entries cached in the log operation.
- */
- private void addLogEntries(SyncInfo[] commentInfos, LogEntryCache logs, IProgressMonitor monitor) {
- try {
- monitor.beginTask(null, commentInfos.length * 10);
- if (logs != null) {
- for (int i = 0; i < commentInfos.length; i++) {
- addSyncInfoToCommentNode(commentInfos[i], logs);
- monitor.worked(10);
- }
- }
- } finally {
- monitor.done();
- }
- }
-
- /*
- * Create a node for the given sync info object. The logs should contain the log for this info.
- *
- * @param info the info for which to create a node in the model
- * @param log the cvs log for this node
- */
- private void addSyncInfoToCommentNode(SyncInfo info, LogEntryCache logs) {
- LogEntryCacheUpdateHandler handler = getLogEntryHandler();
- if (handler != null) {
- ICVSRemoteResource remoteResource = handler.getRemoteResource(info);
- if(handler.getSubscriber() instanceof CVSCompareSubscriber && remoteResource != null) {
- addMultipleRevisions(info, logs, remoteResource);
- } else {
- addSingleRevision(info, logs, remoteResource);
- }
- }
- }
-
- /*
- * Add a single log entry to the model.
- *
- * @param info
- * @param logs
- * @param remoteResource
- */
- private void addSingleRevision(SyncInfo info, LogEntryCache logs, ICVSRemoteResource remoteResource) {
- ILogEntry logEntry = logs.getLogEntry(remoteResource);
- if (remoteResource != null && !remoteResource.isFolder()) {
- // For incoming deletions grab the comment for the latest on the same branch
- // which is now in the attic.
- try {
- String remoteRevision = ((ICVSRemoteFile) remoteResource).getRevision();
- if (isDeletedRemotely(info)) {
- ILogEntry[] logEntries = logs.getLogEntries(remoteResource);
- for (int i = 0; i < logEntries.length; i++) {
- ILogEntry entry = logEntries[i];
- String revision = entry.getRevision();
- if (entry.isDeletion() && ResourceSyncInfo.isLaterRevision(revision, remoteRevision)) {
- logEntry = entry;
- }
- }
- }
- } catch (TeamException e) {
- // continue and skip deletion checks
- }
- }
- addRemoteChange(info, remoteResource, logEntry);
- }
-
- /*
- * Add multiple log entries to the model.
- *
- * @param info
- * @param logs
- * @param remoteResource
- */
- private void addMultipleRevisions(SyncInfo info, LogEntryCache logs, ICVSRemoteResource remoteResource) {
- ILogEntry[] logEntries = logs.getLogEntries(remoteResource);
- if(logEntries == null || logEntries.length == 0) {
- // If for some reason we don't have a log entry, try the latest
- // remote.
- addRemoteChange(info, null, null);
- } else {
- for (int i = 0; i < logEntries.length; i++) {
- ILogEntry entry = logEntries[i];
- addRemoteChange(info, remoteResource, entry);
- }
- }
- }
-
- private boolean isDeletedRemotely(SyncInfo info) {
- int kind = info.getKind();
- if(kind == (SyncInfo.INCOMING | SyncInfo.DELETION)) return true;
- if(SyncInfo.getDirection(kind) == SyncInfo.CONFLICTING && info.getRemote() == null) return true;
- return false;
- }
-
- /*
- * Add the remote change to an incoming commit set
- */
- private void addRemoteChange(SyncInfo info, ICVSRemoteResource remoteResource, ILogEntry logEntry) {
- if (disposed) return;
- LogEntryCacheUpdateHandler handler = getLogEntryHandler();
- if(handler != null && remoteResource != null && logEntry != null && handler.isRemoteChange(info)) {
- if(requiresCustomSyncInfo(info, remoteResource, logEntry)) {
- info = new CVSUpdatableSyncInfo(info.getKind(), info.getLocal(), info.getBase(), (RemoteResource)logEntry.getRemoteFile(), ((CVSSyncInfo)info).getSubscriber());
- try {
- info.init();
- } catch (TeamException e) {
- // this shouldn't happen, we've provided our own calculate kind
- }
- }
- // Only add the info if the base and remote differ
- IResourceVariant base = info.getBase();
- IResourceVariant remote = info.getRemote();
- if ((base == null && remote != null) || (remote == null && base != null) || !base.equals(remote)) {
- synchronized(this) {
- ChangeSet set = getChangeSetFor(logEntry);
- if (set == null) {
- set = createChangeSetFor(logEntry);
- add(set);
- }
- set.add(info);
- }
- }
- } else {
- // The info was not retrieved for the remote change for some reason.
- // Add the node to the root
- addToDefaultSet(DEFAULT_INCOMING_SET_NAME, info);
- }
- }
-
- private void addToDefaultSet(String name, SyncInfo info) {
- ChangeSet set;
- synchronized(this) {
- set = getChangeSetFor(name);
- if (set == null) {
- set = createDefaultChangeSet(name);
- add(set);
- }
- set.add(info);
- }
- }
-
- private ChangeSet createDefaultChangeSet(String name) {
- return new DefaultCheckedInChangeSet(name);
- }
-
- private ChangeSet createChangeSetFor(ILogEntry logEntry) {
- return new CVSCheckedInChangeSet(logEntry);
- }
-
- private ChangeSet getChangeSetFor(ILogEntry logEntry) {
- ChangeSet[] sets = getSets();
- for (int i = 0; i < sets.length; i++) {
- ChangeSet set = sets[i];
- if (set instanceof CheckedInChangeSet &&
- set.getComment().equals(logEntry.getComment()) &&
- ((CheckedInChangeSet)set).getAuthor().equals(logEntry.getAuthor())) {
- return set;
- }
- }
- return null;
- }
-
- private ChangeSet getChangeSetFor(String name) {
- ChangeSet[] sets = getSets();
- for (int i = 0; i < sets.length; i++) {
- ChangeSet set = sets[i];
- if (set.getName().equals(name)) {
- return set;
- }
- }
- return null;
- }
-
- private boolean requiresCustomSyncInfo(SyncInfo info, ICVSRemoteResource remoteResource, ILogEntry logEntry) {
- // Only interested in non-deletions
- if (logEntry.isDeletion() || !(info instanceof CVSSyncInfo)) return false;
- // Only require a custom sync info if the remote of the sync info
- // differs from the remote in the log entry
- IResourceVariant remote = info.getRemote();
- if (remote == null) return true;
- return !remote.equals(remoteResource);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.ui.synchronize.SyncInfoSetChangeSetCollector#waitUntilDone(org.eclipse.core.runtime.IProgressMonitor)
- */
- public void waitUntilDone(IProgressMonitor monitor) {
- super.waitUntilDone(monitor);
- monitor.worked(1);
- // wait for the event handler to process changes.
- LogEntryCacheUpdateHandler handler = getLogEntryHandler();
- if (handler != null) {
- while(handler.getEventHandlerJob().getState() != Job.NONE) {
- monitor.worked(1);
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- }
- Policy.checkCanceled(monitor);
- }
- }
- monitor.worked(1);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ccvs.ui.subscriber.LogEntryCacheUpdateHandler.ILogsFetchedListener#logEntriesFetched(org.eclipse.team.core.synchronize.SyncInfoSet, org.eclipse.core.runtime.IProgressMonitor)
- */
- public void logEntriesFetched(SyncInfoSet set, LogEntryCache logEntryCache, IProgressMonitor monitor) {
- if (disposed) return;
- // Hold on to the cache so we can use it while commit sets are visible
- this.logEntryCache = logEntryCache;
- handleRemoteChanges(set.getSyncInfos(), logEntryCache, monitor);
- }
-
- public ICVSRemoteFile getImmediatePredecessor(ICVSRemoteFile file) throws TeamException {
- if (logEntryCache != null)
- return logEntryCache.getImmediatePredecessor(file);
- return null;
- }
-}

Back to the top