diff options
author | Jean Michel-Lemieux | 2003-07-02 19:35:47 +0000 |
---|---|---|
committer | Jean Michel-Lemieux | 2003-07-02 19:35:47 +0000 |
commit | e3fc6e0540b35d889bb549aaa0724b3069ba73a0 (patch) | |
tree | 50c002f100dfa1eb6c0ffb82c5f56ba72a162842 /bundles/org.eclipse.team.cvs.ui/src | |
parent | 378a91075bd06e91122b1d5bbd6f942f4adf67ca (diff) | |
download | eclipse.platform.team-e3fc6e0540b35d889bb549aaa0724b3069ba73a0.tar.gz eclipse.platform.team-e3fc6e0540b35d889bb549aaa0724b3069ba73a0.tar.xz eclipse.platform.team-e3fc6e0540b35d889bb549aaa0724b3069ba73a0.zip |
Refresh in background work
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src')
8 files changed, 222 insertions, 469 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/jobs/DeferredWorkbenchContentProvider.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/jobs/DeferredWorkbenchContentProvider.java deleted file mode 100644 index 1dfd86c51..000000000 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/jobs/DeferredWorkbenchContentProvider.java +++ /dev/null @@ -1,248 +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.ui.jobs; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; -import org.eclipse.jface.progress.IElementCollector; -import org.eclipse.jface.viewers.AbstractTreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; -import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; -import org.eclipse.team.internal.ui.Policy; -import org.eclipse.ui.model.IWorkbenchAdapter; -import org.eclipse.ui.model.PendingUpdateAdapter; -import org.eclipse.ui.model.WorkbenchContentProvider; -import org.eclipse.ui.progress.UIJob; - -/** - * Provides lazy contents retrieval for objects that have the IDeferredWorkbenchAdapter - * adapter registered. - * - * @see IDeferredWorkbenchAdapter - */ -public class DeferredWorkbenchContentProvider extends WorkbenchContentProvider { - - /** - * The wrapper is required to ensure that we cancel fetching children jobs for - * the same parent instance that were created from this content provider and not - * those created by others. - */ - private class FamilyWrapper { - Object o; - FamilyWrapper(Object o) { - this.o = o; - } - } - - /** - * This job is used to add elements to a viewer. - */ - private class AddElementsToViewJob extends UIJob { - Object[] newElements; - Object parent; - private boolean working; - - AddElementsToViewJob(Object parentElement) { - super(viewer.getControl().getDisplay()); - parent = parentElement; - addJobChangeListener(new JobChangeAdapter() { - public void done(Job job, IStatus result) { - setWorking(false); - } - }); - } - synchronized boolean isWorking() { - return working; - } - public IStatus runInUIThread(IProgressMonitor monitor) { - if (monitor.isCanceled()) { - return Status.CANCEL_STATUS; - } - if (viewer instanceof AbstractTreeViewer) { - ((AbstractTreeViewer) viewer).add(parent, newElements); - } - return Status.OK_STATUS; - } - void runBatch(Object[] elements) { - working = true; - this.newElements = elements; - schedule(); - } - synchronized void setWorking(boolean working) { - this.working = working; - } - } - - /** - * This collector is responsible for updating the viewer when deferred children are fetched by - * a deferred adapter. Elements added to the viewer are batched so that the viewer doesn't - * do too much work in the UI thread. - * - * TODO: this currently doesn't batch calls to add(Object). - */ - abstract private class DeferredElementCollector implements IElementCollector { - - // The number of elements to add to the view at a time. While these elements are - // added the UI thread is locked. - private int BATCH_SIZE = 5; - - // The viewer in which to add new elements. - private Viewer viewer; - - private boolean DEBUG = true; - private long FAKE_LATENCY = 100; // milliseconds - - private PendingUpdateAdapter placeholder; - - public DeferredElementCollector(Viewer viewer, PendingUpdateAdapter placeholder) { - this.viewer = viewer; - this.placeholder = placeholder; - } - - public void addChildren(final Object parent, final Object[] children, IProgressMonitor monitor) { - monitor = Policy.monitorFor(monitor); - if (viewer instanceof AbstractTreeViewer) { - final AbstractTreeViewer treeViewer = (AbstractTreeViewer) viewer; - - if (placeholder != null) { - UIJob removalJob = new UIJob() { - public IStatus runInUIThread(IProgressMonitor monitor) { - treeViewer.remove(placeholder); - placeholder = null; - return Status.OK_STATUS; - } - }; - removalJob.schedule(); - - } - AddElementsToViewJob addElementsJob = new AddElementsToViewJob(parent); - if (children.length == 0) { - addElementsJob.runBatch(children); - return; - } - - int batchStart = 0; - int batchEnd = children.length > BATCH_SIZE ? BATCH_SIZE : children.length; - //process children until all children have been sent to the UI - while (batchStart < children.length) { - if (monitor.isCanceled()) { - addElementsJob.cancel(); - return; - } - - if (DEBUG) - slowDown(FAKE_LATENCY); - - //only send a new batch when the last batch is finished - if (!addElementsJob.isWorking()) { - int batchLength = batchEnd - batchStart; - Object[] batch = new Object[batchLength]; - System.arraycopy(children, batchStart, batch, 0, batchLength); - - addElementsJob.runBatch(batch); - - batchStart += batchLength; - batchEnd = (batchStart + BATCH_SIZE); - if (batchEnd >= children.length) { - batchEnd = children.length; - } - } - } - } else { - viewer.refresh(); - } - } - - private void slowDown(long time) { - try { - Thread.sleep(time); - } catch (InterruptedException e) { - } - } - } - - /** - * Provides an optimized lookup for determining if an element has children. This is - * required because elements that are populated lazilly can't answer <code>getChildren</code> - * just to determine the potential for children. - */ - public boolean hasChildren(Object o) { - if (o == null) { - return false; - } - IWorkbenchAdapter adapter = getAdapter(o); - if (adapter instanceof IDeferredWorkbenchAdapter) { - IDeferredWorkbenchAdapter element = (IDeferredWorkbenchAdapter) adapter; - return element.isContainer(); - } - return super.hasChildren(o); - } - - /** - * Returns the child elements of the given element, or in the case of a deferred element, returns - * a placeholder. If a deferred element used a job is created to fetch the children in the background. - */ - public Object[] getChildren(final Object parent) { - IWorkbenchAdapter adapter = getAdapter(parent); - if (adapter instanceof IDeferredWorkbenchAdapter && - CVSUIPlugin.getPlugin().getPreferenceStore().getBoolean(ICVSUIConstants.BACKGROUND_REPOVIEW)) { - IDeferredWorkbenchAdapter element = (IDeferredWorkbenchAdapter) adapter; - return startFetchingDeferredChildren(parent, element); - } - return super.getChildren(parent); - } - - /** - * Starts a job and creates a collector for fetching the children of this deferred adapter. If children - * are waiting to be retrieve for this parent already, that job is cancelled and another is started. - */ - private Object[] startFetchingDeferredChildren(final Object parent, final IDeferredWorkbenchAdapter adapter) { - - PendingUpdateAdapter pendingPlaceHolder = new PendingUpdateAdapter(); - final DeferredElementCollector collector = new DeferredElementCollector(viewer, pendingPlaceHolder) { - public void add(Object element, IProgressMonitor monitor) { - add(new Object[] { element }, monitor); - } - public void add(Object[] elements, IProgressMonitor monitor) { - addChildren(parent, elements, monitor); - } - }; - - // Cancel any jobs currently fetching children for the same parent instance. - Platform.getJobManager().cancel(new FamilyWrapper(parent)); - Job job = new Job() { - public IStatus run(IProgressMonitor monitor) { - try { - adapter.fetchDeferredChildren(parent, collector, monitor); - } catch (OperationCanceledException e) { - return Status.CANCEL_STATUS; - } - return Status.OK_STATUS; - } - public boolean belongsTo(Object family) { - if (family instanceof FamilyWrapper) { - return ((FamilyWrapper) family).o == parent; - } - return false; - } - }; - - job.setRule(adapter.getRule()); - job.schedule(); - return new Object[] {pendingPlaceHolder}; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/jobs/IDeferredWorkbenchAdapter.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/jobs/IDeferredWorkbenchAdapter.java deleted file mode 100644 index 63d1395c2..000000000 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/jobs/IDeferredWorkbenchAdapter.java +++ /dev/null @@ -1,65 +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.ui.jobs; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.jface.progress.IElementCollector; -import org.eclipse.ui.model.IWorkbenchAdapter; - -/** - * This adapter interface provides support for lazy initialization of UI workbench elements - * that are displayed visually. This adapter is used with an associated deferred content provider. - * - * @see DeferredWorkbenchContentProvider - * @see BatchSimilarSchedulingRule - */ -public interface IDeferredWorkbenchAdapter extends IWorkbenchAdapter { - - /** - * Called by a job run in a separate thread to fetch the children of this adapter. - * The adapter should return notify of new children via the collector. - * <p> - * It is good practice to check the passed in monitor for cancellation. This will - * provide good responsiveness for cancellation requests made by the user. - * </p> - * - * @param o the object to fetch the children for - * @param collector the collector to notify about new children - * @param monitor a progress monitor that will never be <code>null<code> to - * support reporting and cancellation. - */ - public void fetchDeferredChildren(Object o, IElementCollector collector, IProgressMonitor monitor); - - /** - * Returns whether this adapter may have children. This is an optimized method - * used by content providers to allow showing the [+] expand icon without having - * yet fetched the children for the element. - * <p> - * If <code>false</code> is returned, then the content provider is free to assume - * that this adapter has no children. If <code>true</code> is returned, - * then the job manager is free to assume that this adapter may have children. - * <p> - * - * @param rule the rule to check for conflicts - * @return <code>true</code> if the rule is conflicting, and <code>false</code> - * otherwise. - */ - public boolean isContainer(); - - /** - * Returns the rule used to schedule the deferred fetching of children for this adapter. The job manager - * guarantees that no two jobs with conflicting scheduling rules will run concurrently. - * - * @return ISchedulingRule the scheduling rule - */ - public ISchedulingRule getRule(); -}
\ No newline at end of file diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/jobs/BatchSimilarSchedulingRule.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/BatchSimilarSchedulingRule.java index ddd5f4277..4840f451c 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/jobs/BatchSimilarSchedulingRule.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/BatchSimilarSchedulingRule.java @@ -8,7 +8,7 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.team.internal.ccvs.ui.jobs; +package org.eclipse.team.internal.ccvs.ui.model; import org.eclipse.core.runtime.jobs.ISchedulingRule; diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java index 5c82d7518..324a754a8 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/CVSTagElement.java @@ -16,14 +16,11 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.jface.progress.IElementCollector; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.ccvs.core.CVSTag; -import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource; -import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; +import org.eclipse.team.internal.ccvs.core.*; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; -import org.eclipse.team.internal.ccvs.ui.jobs.IDeferredWorkbenchAdapter; -import org.eclipse.team.internal.ccvs.ui.jobs.BatchSimilarSchedulingRule; import org.eclipse.ui.model.IWorkbenchAdapter; +import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; public class CVSTagElement extends CVSModelElement implements IAdaptable, IDeferredWorkbenchAdapter { CVSTag tag; @@ -38,6 +35,8 @@ public class CVSTagElement extends CVSModelElement implements IAdaptable, IDefer } public Object getAdapter(Class adapter) { if (adapter == IWorkbenchAdapter.class) + return this; + if (adapter == IDeferredWorkbenchAdapter.class) return this; return null; } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java index 997b5b482..759a104a3 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java @@ -10,12 +10,16 @@ *******************************************************************************/ package org.eclipse.team.internal.ccvs.ui.model; -import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder; -import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource; -import org.eclipse.team.internal.ccvs.core.ICVSResource; +import org.eclipse.jface.viewers.AbstractTreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.team.internal.ccvs.core.*; import org.eclipse.team.internal.ccvs.core.resources.RemoteResource; -import org.eclipse.team.internal.ccvs.ui.jobs.*; import org.eclipse.ui.IWorkingSet; +import org.eclipse.ui.model.WorkbenchContentProvider; +import org.eclipse.ui.progress.DeferredTreeContentManager; + +/** + /** * Extension to the generic workbench content provider mechanism @@ -23,9 +27,23 @@ import org.eclipse.ui.IWorkingSet; * children for an element aren't fetched until the user clicks * on the tree expansion box. */ -public class RemoteContentProvider extends DeferredWorkbenchContentProvider { +public class RemoteContentProvider extends WorkbenchContentProvider { IWorkingSet workingSet; + DeferredTreeContentManager manager; + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) + */ + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + if (viewer instanceof AbstractTreeViewer) { + manager = + new DeferredTreeContentManager( + this, + (AbstractTreeViewer) viewer); + } + super.inputChanged(viewer, oldInput, newInput); + } public boolean hasChildren(Object element) { // the + box will always appear, but then disappear @@ -51,6 +69,11 @@ public class RemoteContentProvider extends DeferredWorkbenchContentProvider { } else if (element instanceof RemoteModule) { return true; } + if (manager != null) { + if (manager.isDeferredAdapter(element)) + return manager.mayHaveChildren(element); + } + return super.hasChildren(element); } @@ -69,4 +92,17 @@ public class RemoteContentProvider extends DeferredWorkbenchContentProvider { public IWorkingSet getWorkingSet() { return workingSet; } + + /* (non-Javadoc) + * @see org.eclipse.ui.model.WorkbenchContentProvider#getChildren(java.lang.Object) + */ + public Object[] getChildren(Object element) { + if (manager != null) { + Object[] children = manager.getChildren(element); + if (children != null) + return children; + } + return super.getChildren(element); + } + } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java index f709525a2..17b95abce 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteFolderElement.java @@ -20,12 +20,12 @@ import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; import org.eclipse.team.internal.ccvs.ui.Policy; -import org.eclipse.team.internal.ccvs.ui.jobs.BatchSimilarSchedulingRule; -import org.eclipse.team.internal.ccvs.ui.jobs.IDeferredWorkbenchAdapter; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; + +public class RemoteFolderElement extends RemoteResourceElement implements IDeferredWorkbenchAdapter{ -public class RemoteFolderElement extends RemoteResourceElement implements IDeferredWorkbenchAdapter { /** * Overridden to append the version name to remote folders which diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java index 34a10e3b1..e381d2cf1 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteModule.java @@ -16,128 +16,137 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.jface.progress.IElementCollector; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.ccvs.core.CVSTag; -import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder; -import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource; -import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; +import org.eclipse.team.internal.ccvs.core.*; import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; -import org.eclipse.team.internal.ccvs.ui.jobs.BatchSimilarSchedulingRule; -import org.eclipse.team.internal.ccvs.ui.jobs.IDeferredWorkbenchAdapter; import org.eclipse.team.internal.ccvs.ui.repo.RepositoryManager; import org.eclipse.ui.model.IWorkbenchAdapter; +import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; /** * This class represents an IProject resource in a repository. The * children of a RemoteModule are its versions. A RemoteModule is * a child of the VersionsCategory. */ -public class RemoteModule extends CVSModelElement implements IAdaptable, IDeferredWorkbenchAdapter { - ICVSRemoteFolder folder; - VersionCategory parent; +public class RemoteModule + extends CVSModelElement + implements IAdaptable, IDeferredWorkbenchAdapter { + ICVSRemoteFolder folder; + VersionCategory parent; - /** - * RemoteProject constructor. - */ - public RemoteModule(ICVSRemoteFolder folder, VersionCategory parent) { - this.folder = folder; - this.parent = parent; - } + /** + * RemoteProject constructor. + */ + public RemoteModule(ICVSRemoteFolder folder, VersionCategory parent) { + this.folder = folder; + this.parent = parent; + } - /** - * Returns an object which is an instance of the given class - * associated with this object. Returns <code>null</code> if - * no such object can be found. - */ - public Object getAdapter(Class adapter) { - if (adapter == IWorkbenchAdapter.class) - return this; - return null; - } + /** + * Returns an object which is an instance of the given class + * associated with this object. Returns <code>null</code> if + * no such object can be found. + */ + public Object getAdapter(Class adapter) { + if (adapter == IWorkbenchAdapter.class) + return this; + if (adapter == IDeferredWorkbenchAdapter.class) + return this; + return null; + } - /** - * Returns an image to be used for displaying an object in the desktop. - * @param object The object to get an image for. - * @param owner The viewer that the image will be used in. The image will - * be disposed when this viewer is closed. If the owner is null, a new - * image is returned, and the caller is responsible for disposing it. - */ - public ImageDescriptor getImageDescriptor(Object object) { - return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_PROJECT_VERSION); - } + /** + * Returns an image to be used for displaying an object in the desktop. + * @param object The object to get an image for. + * @param owner The viewer that the image will be used in. The image will + * be disposed when this viewer is closed. If the owner is null, a new + * image is returned, and the caller is responsible for disposing it. + */ + public ImageDescriptor getImageDescriptor(Object object) { + return CVSUIPlugin.getPlugin().getImageDescriptor( + ICVSUIConstants.IMG_PROJECT_VERSION); + } - /** - * Returns the name of this element. This will typically - * be used to assign a label to this object when displayed - * in the UI. - */ - public String getLabel(Object o) { - return folder.getName(); - } + /** + * Returns the name of this element. This will typically + * be used to assign a label to this object when displayed + * in the UI. + */ + public String getLabel(Object o) { + return folder.getName(); + } - /** - * Returns the logical parent of the given object in its tree. - */ - public Object getParent(Object o) { - return parent; - } + /** + * Returns the logical parent of the given object in its tree. + */ + public Object getParent(Object o) { + return parent; + } - /** - * Return the repository the given element belongs to. - */ - public ICVSRepositoryLocation getRepository(Object o) { - return folder.getRepository(); - } + /** + * Return the repository the given element belongs to. + */ + public ICVSRepositoryLocation getRepository(Object o) { + return folder.getRepository(); + } - /** (Non-javadoc) - * For debugging purposes only. - */ - public String toString() { - return "RemoteModule(" + folder.getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ - } + /** (Non-javadoc) + * For debugging purposes only. + */ + public String toString() { + return "RemoteModule(" + folder.getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$ + } - public ICVSRemoteResource getCVSResource() { - return folder; - } + public ICVSRemoteResource getCVSResource() { + return folder; + } - /** - * Returns the children of this object. When this object - * is displayed in a tree, the returned objects will be this - * element's children. Returns an empty enumeration if this - * object has no children. The children of the RemoteModule - * are the versions for that module. - * - * @see org.eclipse.team.internal.ccvs.ui.model.CVSModelElement#internalGetChildren(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) - */ - public Object[] fetchChildren(Object o, IProgressMonitor monitor) throws TeamException { - RepositoryManager manager = CVSUIPlugin.getPlugin().getRepositoryManager(); - try { - manager.refreshDefinedTags(folder, false /* replace */ - , false, monitor); - } catch (TeamException e) { - // continue - } - CVSTag[] tags = CVSUIPlugin.getPlugin().getRepositoryManager().getKnownTags(folder, CVSTag.VERSION); - Object[] versions = new Object[tags.length]; - for (int i = 0; i < versions.length; i++) { - versions[i] = folder.forTag(tags[i]); - } - return versions; - } + /** + * Returns the children of this object. When this object + * is displayed in a tree, the returned objects will be this + * element's children. Returns an empty enumeration if this + * object has no children. The children of the RemoteModule + * are the versions for that module. + * + * @see org.eclipse.team.internal.ccvs.ui.model.CVSModelElement#internalGetChildren(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) + */ + public Object[] fetchChildren(Object o, IProgressMonitor monitor) + throws TeamException { + RepositoryManager manager = + CVSUIPlugin.getPlugin().getRepositoryManager(); + try { + manager.refreshDefinedTags(folder, false /* replace */ + , false, monitor); + } catch (TeamException e) { + // continue + } + CVSTag[] tags = + CVSUIPlugin.getPlugin().getRepositoryManager().getKnownTags( + folder, + CVSTag.VERSION); + Object[] versions = new Object[tags.length]; + for (int i = 0; i < versions.length; i++) { + versions[i] = folder.forTag(tags[i]); + } + return versions; + } - public void fetchDeferredChildren(Object o, IElementCollector collector, IProgressMonitor monitor) { + public void fetchDeferredChildren( + Object o, + IElementCollector collector, + IProgressMonitor monitor) { try { collector.add(fetchChildren(o, monitor), monitor); } catch (TeamException e) { CVSUIPlugin.log(e); - } - } + } + } - public boolean isContainer() { - return true; - } + public boolean isContainer() { + return true; + } - public ISchedulingRule getRule() { - return new BatchSimilarSchedulingRule("org.eclipse.team.ui.cvs.remotemodule"); //$NON-NLS-1$ - } + public ISchedulingRule getRule() { + return new BatchSimilarSchedulingRule("org.eclipse.team.ui.cvs.remotemodule"); //$NON-NLS-1$ + } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java index 662c91b1c..5a947514f 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/VersionCategory.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.team.internal.ccvs.ui.model; - import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; @@ -18,21 +17,17 @@ import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.progress.IElementCollector; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.ccvs.core.CVSException; -import org.eclipse.team.internal.ccvs.core.CVSTag; -import org.eclipse.team.internal.ccvs.core.ICVSRemoteFolder; -import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource; -import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation; -import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin; -import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants; +import org.eclipse.team.internal.ccvs.core.*; +import org.eclipse.team.internal.ccvs.ui.*; import org.eclipse.team.internal.ccvs.ui.Policy; -import org.eclipse.team.internal.ccvs.ui.jobs.BatchSimilarSchedulingRule; -import org.eclipse.team.internal.ccvs.ui.jobs.IDeferredWorkbenchAdapter; import org.eclipse.ui.model.IWorkbenchAdapter; +import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; -public class VersionCategory extends CVSModelElement implements IAdaptable, IDeferredWorkbenchAdapter { +public class VersionCategory + extends CVSModelElement + implements IAdaptable, IDeferredWorkbenchAdapter { private ICVSRepositoryLocation repository; - + /** * ProjectVersionsCategory constructor. */ @@ -40,61 +35,84 @@ public class VersionCategory extends CVSModelElement implements IAdaptable, IDef super(); this.repository = repo; } - + /** * Returns an object which is an instance of the given class * associated with this object. Returns <code>null</code> if * no such object can be found. */ public Object getAdapter(Class adapter) { - if (adapter == IWorkbenchAdapter.class) return this; + if (adapter == IWorkbenchAdapter.class) + return this; + if (adapter == IDeferredWorkbenchAdapter.class) + return this; return null; } - + /** * Returns the children of this object. When this object * is displayed in a tree, the returned objects will be this * element's children. Returns an empty enumeration if this * object has no children. */ - public Object[] fetchChildren(Object o, IProgressMonitor monitor) throws TeamException { - if (CVSUIPlugin.getPlugin().getRepositoryManager().isDisplayingProjectVersions(repository)) { + public Object[] fetchChildren(Object o, IProgressMonitor monitor) + throws TeamException { + if (CVSUIPlugin + .getPlugin() + .getRepositoryManager() + .isDisplayingProjectVersions(repository)) { return getProjectVersionChildren(o, monitor); } else { return getVersionTagChildren(o, monitor); } } - + /* * Return the children as a list of versions whose children are projects */ - private Object[] getVersionTagChildren(Object o, IProgressMonitor monitor) throws CVSException { - CVSTag[] tags = CVSUIPlugin.getPlugin().getRepositoryManager().getKnownTags(repository, getWorkingSet(), CVSTag.VERSION, monitor); + private Object[] getVersionTagChildren(Object o, IProgressMonitor monitor) + throws CVSException { + CVSTag[] tags = + CVSUIPlugin.getPlugin().getRepositoryManager().getKnownTags( + repository, + getWorkingSet(), + CVSTag.VERSION, + monitor); CVSTagElement[] versionElements = new CVSTagElement[tags.length]; for (int i = 0; i < tags.length; i++) { versionElements[i] = new CVSTagElement(tags[i], repository); } return versionElements; } - + /* * Return the children as a list of projects whose children ar project versions */ - private Object[] getProjectVersionChildren(Object o, IProgressMonitor monitor) throws TeamException { + private Object[] getProjectVersionChildren( + Object o, + IProgressMonitor monitor) + throws TeamException { IPreferenceStore store = CVSUIPlugin.getPlugin().getPreferenceStore(); - ICVSRemoteResource[] resources = CVSUIPlugin.getPlugin().getRepositoryManager().getFoldersForTag( - repository, - CVSTag.DEFAULT, - monitor); + ICVSRemoteResource[] resources = + CVSUIPlugin.getPlugin().getRepositoryManager().getFoldersForTag( + repository, + CVSTag.DEFAULT, + monitor); if (getWorkingSet() != null) - resources = CVSUIPlugin.getPlugin().getRepositoryManager().filterResources(getWorkingSet(), resources); + resources = + CVSUIPlugin.getPlugin().getRepositoryManager().filterResources( + getWorkingSet(), + resources); Object[] modules = new Object[resources.length]; for (int i = 0; i < resources.length; i++) { - modules[i] = new RemoteModule((ICVSRemoteFolder)resources[i], VersionCategory.this); + modules[i] = + new RemoteModule( + (ICVSRemoteFolder) resources[i], + VersionCategory.this); } return modules; } - + /** * Returns an image descriptor to be used for displaying an object in the workbench. * Returns null if there is no appropriate image. @@ -102,7 +120,8 @@ public class VersionCategory extends CVSModelElement implements IAdaptable, IDef * @param object The object to get an image descriptor for. */ public ImageDescriptor getImageDescriptor(Object object) { - return CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_VERSIONS_CATEGORY); + return CVSUIPlugin.getPlugin().getImageDescriptor( + ICVSUIConstants.IMG_VERSIONS_CATEGORY); } /** @@ -127,7 +146,7 @@ public class VersionCategory extends CVSModelElement implements IAdaptable, IDef public Object getParent(Object o) { return repository; } - + /** * Return the repository the given element belongs to. */ @@ -135,19 +154,22 @@ public class VersionCategory extends CVSModelElement implements IAdaptable, IDef return repository; } - public void fetchDeferredChildren(Object o, IElementCollector collector, IProgressMonitor monitor) { - try { - collector.add(fetchChildren(o, monitor), monitor); - } catch (TeamException e) { - CVSUIPlugin.log(e); - } - } + public void fetchDeferredChildren( + Object o, + IElementCollector collector, + IProgressMonitor monitor) { + try { + collector.add(fetchChildren(o, monitor), monitor); + } catch (TeamException e) { + CVSUIPlugin.log(e); + } + } - public boolean isContainer() { - return true; - } + public boolean isContainer() { + return true; + } - public ISchedulingRule getRule() { - return new BatchSimilarSchedulingRule("org.eclipse.team.cvs.ui.versioncategory"); //$NON-NLS-1$ - } + public ISchedulingRule getRule() { + return new BatchSimilarSchedulingRule("org.eclipse.team.cvs.ui.versioncategory"); //$NON-NLS-1$ + } } |