diff options
Diffstat (limited to 'bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/FileModificationManager.java')
-rw-r--r-- | bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/FileModificationManager.java | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/FileModificationManager.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/FileModificationManager.java deleted file mode 100644 index ad71ba405..000000000 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/FileModificationManager.java +++ /dev/null @@ -1,204 +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.ccvs.core.resources; - -import java.util.HashSet; -import java.util.Set; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.resources.IResourceDeltaVisitor; -import org.eclipse.core.resources.ISaveContext; -import org.eclipse.core.resources.ISaveParticipant; -import org.eclipse.core.resources.ISavedState; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.QualifiedName; -import org.eclipse.team.core.RepositoryProvider; -import org.eclipse.team.internal.ccvs.core.CVSException; -import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin; -import org.eclipse.team.internal.ccvs.core.ICVSFile; -import org.eclipse.team.internal.ccvs.core.util.ResourceStateChangeListeners; - -/** - * This class performs several functions related to determining the modified - * status of files under CVS control. First, it listens for change delta's for - * files and brodcasts them to all listeners. It also registers as a save - * participant so that deltas generated before the plugin are loaded are not - * missed. Secondly, it listens for CVS resource state change events and uses - * these to properly mark files and folders as modified. - */ -public class FileModificationManager implements IResourceChangeListener, ISaveParticipant { - - private static final QualifiedName UPDATE_TIMESTAMP = new QualifiedName(CVSProviderPlugin.ID, "update-timestamp"); //$NON-NLS-1$ - - private Set modifiedResources = new HashSet(); - - // consider the following changes types and ignore the others (e.g. marker and description changes are ignored) - protected int INTERESTING_CHANGES = IResourceDelta.CONTENT | - IResourceDelta.MOVED_FROM | - IResourceDelta.MOVED_TO | - IResourceDelta.OPEN | - IResourceDelta.REPLACED | - IResourceDelta.TYPE; - - /** - * Listen for file modifications and fire modification state changes - * - * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) - */ - public void resourceChanged(IResourceChangeEvent event) { - try { - event.getDelta().accept(new IResourceDeltaVisitor() { - public boolean visit(IResourceDelta delta) throws CoreException { - IResource resource = delta.getResource(); - - if (resource.getType()==IResource.PROJECT) { - IProject project = (IProject)resource; - if (!project.isAccessible()) { - return false; - } - if ((delta.getFlags() & IResourceDelta.OPEN) != 0) { - return false; - } - if (RepositoryProvider.getProvider(project, CVSProviderPlugin.getTypeId()) == null) { - return false; - } - } - - if (resource.getType()==IResource.FILE && delta.getKind() == IResourceDelta.CHANGED && resource.exists()) { - int flags = delta.getFlags(); - if((flags & INTERESTING_CHANGES) != 0) { - resourceChanged(resource, false); - } - } else if (delta.getKind() == IResourceDelta.ADDED) { - resourceChanged(resource, true); - } else if (delta.getKind() == IResourceDelta.REMOVED) { - try { - EclipseSynchronizer.getInstance().handleDeleted(resource); - } catch (CVSException e) { - CVSProviderPlugin.log(e); - } - modifiedResources.add(resource); - } - - return true; - } - }); - if (!modifiedResources.isEmpty()) { - ResourceStateChangeListeners.getListener().resourceModified( - (IResource[])modifiedResources.toArray(new IResource[modifiedResources.size()])); - modifiedResources.clear(); - } - } catch (CoreException e) { - CVSProviderPlugin.log(e); - } - - } - - /** - * We register a save participant so we can get the delta from workbench - * startup to plugin startup. - * @throws CoreException - */ - public void registerSaveParticipant() throws CoreException { - IWorkspace ws = ResourcesPlugin.getWorkspace(); - ISavedState ss = ws.addSaveParticipant(CVSProviderPlugin.getPlugin(), this); - if (ss != null) { - ss.processResourceChangeEvents(this); - } - ws.removeSaveParticipant(CVSProviderPlugin.getPlugin()); - } - - /** - * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(org.eclipse.core.resources.ISaveContext) - */ - public void doneSaving(ISaveContext context) { - } - /** - * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(org.eclipse.core.resources.ISaveContext) - */ - public void prepareToSave(ISaveContext context) throws CoreException { - } - /** - * @see org.eclipse.core.resources.ISaveParticipant#rollback(org.eclipse.core.resources.ISaveContext) - */ - public void rollback(ISaveContext context) { - } - /** - * @see org.eclipse.core.resources.ISaveParticipant#saving(org.eclipse.core.resources.ISaveContext) - */ - public void saving(ISaveContext context) throws CoreException { - } - - - /** - * Method updated flags the objetc as having been modfied by the updated - * handler. This flag is read during the resource delta to determine whether - * the modification made the file dirty or not. - * - * @param mFile - */ - public void updated(ICVSFile mFile) { - try { - if (mFile instanceof EclipseFile) { - IFile file = (IFile)mFile.getIResource(); - file.setSessionProperty(UPDATE_TIMESTAMP, new Long(file.getModificationStamp())); - } - } catch (CVSException e) { - CVSProviderPlugin.log(e); - } catch (CoreException e) { - CVSProviderPlugin.log(CVSException.wrapException(e)); - } - } - - /* - * Handle added and changed resources by signaling the change to the corresponding - * CVS resource and recording the change for broadcast to interested listeners. - */ - private void resourceChanged(IResource resource, boolean addition) throws CoreException { - if (isCleanUpdate(resource)) return; - try { - EclipseResource cvsResource = (EclipseResource)CVSWorkspaceRoot.getCVSResourceFor(resource); - cvsResource.handleModification(addition); - modifiedResources.add(resource); - } catch (CVSException e) { - throw e.toCoreException(); - } - } - - /** - * If the file was the result of a clean update, the cached timestamp will - * be removed. - * - * @param resource - * @return boolean - */ - private boolean isCleanUpdate(IResource resource) { - if(resource.getType() != IResource.FILE) return false; - long modStamp = resource.getModificationStamp(); - Long whenWeWrote; - try { - whenWeWrote = (Long)resource.getSessionProperty(UPDATE_TIMESTAMP); - resource.setSessionProperty(UPDATE_TIMESTAMP, null); - } catch(CoreException e) { - CVSProviderPlugin.log(e); - whenWeWrote = null; - } - return (whenWeWrote!=null && whenWeWrote.longValue() == modStamp); - } -} - |