Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/DiffFilter.java4
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/FastDiffFilter.java8
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationContext.java6
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/ChangeSet.java10
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/CheckedInChangeSet.java4
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/DiffChangeSet.java4
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberChangeSetCollector.java13
-rw-r--r--bundles/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF1
-rw-r--r--bundles/org.eclipse.team.cvs.core/plugin.xml17
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/CVSActiveChangeSet.java22
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/CVSActiveChangeSetCollector.java28
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetAdapterFactory.java30
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetModelProvider.java37
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetResourceMapping.java59
-rw-r--r--bundles/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF3
-rw-r--r--bundles/org.eclipse.team.cvs.ui/plugin.xml37
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIPlugin.java5
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetActionProvider.java421
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetContentProvider.java465
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetLabelProvider.java55
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetSorter.java21
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceChangeSetCapability.java89
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceModelParticipant.java33
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java41
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java7
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java4
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelActionProvider.java2
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelContentProvider.java49
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java2
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java26
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionProvider.java10
31 files changed, 1443 insertions, 70 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/DiffFilter.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/DiffFilter.java
index e5d0e30c9..fd50ad5e7 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/DiffFilter.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/DiffFilter.java
@@ -27,9 +27,9 @@ public abstract class DiffFilter {
/**
* Return <code>true</code> if the provided <code>IDiffNode</code> matches the filter.
*
- * @param node the <code>IDiffNode</code> to be tested
+ * @param diff the <code>IDiffNode</code> to be tested
* @param monitor a progress monitor
* @return <code>true</code> if the <code>IDiffNode</code> matches the filter
*/
- public abstract boolean select(IDiff node, IProgressMonitor monitor);
+ public abstract boolean select(IDiff diff, IProgressMonitor monitor);
}
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/FastDiffFilter.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/FastDiffFilter.java
index c4be8523b..1d8e58676 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/FastDiffFilter.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/diff/FastDiffFilter.java
@@ -43,15 +43,15 @@ public abstract class FastDiffFilter extends DiffFilter {
/* (non-Javadoc)
* @see org.eclipse.team.core.diff.DiffNodeFilter#select(org.eclipse.team.core.diff.IDiffNode, org.eclipse.core.runtime.IProgressMonitor)
*/
- public final boolean select(IDiff node, IProgressMonitor monitor) {
- return select(node);
+ public final boolean select(IDiff diff, IProgressMonitor monitor) {
+ return select(diff);
}
/**
* Return <code>true</code> if the provided <code>IDiffNode</code> matches the filter.
*
- * @param node the <code>IDiffNode</code> to be tested
+ * @param diff the <code>IDiffNode</code> to be tested
* @return <code>true</code> if the <code>IDiffNode</code> matches the filter
*/
- public abstract boolean select(IDiff node);
+ public abstract boolean select(IDiff diff);
}
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationContext.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationContext.java
index ef340cb90..f9bca8069 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationContext.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationContext.java
@@ -84,9 +84,9 @@ public interface ISynchronizationContext {
/**
* Return a tree that contains {@link IDiff} entries for resources that
- * are out-of-sync. The tree will contain diffs for any out-of-sync
+ * are out-of-sync. The tree will contain entries for any out-of-sync
* resources that are within the scope of this context. The tree may include
- * diffs for additional resources, which should be ignored by the client.
+ * entries for additional resources, which should be ignored by the client.
* Clients can test for inclusion using the method
* {@link ISynchronizationScope#contains(IResource)}.
* <p>
@@ -94,7 +94,7 @@ public interface ISynchronizationContext {
* {@link IResourceDiff} or {@link IThreeWayDiff} instances. Any
* {@link IThreeWayDiff} contained in the returned tree will contain
* {@link IResourceDiff} instances as the local and remote changes. This
- * interface also has several helper methods for handling diffs contained in
+ * interface also has several helper methods for handling entries contained in
* the returned diff tree.
*
* @return a tree that contains an entry for any
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/ChangeSet.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/ChangeSet.java
index 3c479f897..944777106 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/ChangeSet.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/ChangeSet.java
@@ -104,4 +104,14 @@ public abstract class ChangeSet {
protected void setName(String name) {
this.name = name;
}
+
+ /**
+ * Return whether the set contains descendants of the given resource
+ * to the given depth.
+ * @param resource the resource
+ * @param depth the depth
+ * @return whether the set contains descendants of the given resource
+ * to the given depth
+ */
+ public abstract boolean containsChildren(IResource resource, int depth);
}
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/CheckedInChangeSet.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/CheckedInChangeSet.java
index 59006959c..df66d0b4a 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/CheckedInChangeSet.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/CheckedInChangeSet.java
@@ -145,4 +145,8 @@ public abstract class CheckedInChangeSet extends ChangeSet {
set.removeAll(resources);
}
}
+
+ public boolean containsChildren(IResource resource, int depth) {
+ return set.getSyncInfos(resource, depth).length > 0;
+ }
}
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/DiffChangeSet.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/DiffChangeSet.java
index 1264b5f56..1a56dc065 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/DiffChangeSet.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/DiffChangeSet.java
@@ -140,5 +140,9 @@ public abstract class DiffChangeSet extends ChangeSet {
public boolean contains(IPath path) {
return getDiffTree().getDiff(path) != null;
}
+
+ public boolean containsChildren(IResource resource, int depth) {
+ return getDiffTree().getDiffs(resource, depth).length > 0;
+ }
}
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberChangeSetCollector.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberChangeSetCollector.java
index 6e3582c5f..cb69064bf 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberChangeSetCollector.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberChangeSetCollector.java
@@ -325,7 +325,7 @@ public class SubscriberChangeSetCollector extends DiffTreeChangeSetCollector imp
* @return the created set
*/
public ActiveChangeSet createSet(String title, IDiff[] diffs) {
- ActiveChangeSet commitSet = new ActiveChangeSet(this, title);
+ ActiveChangeSet commitSet = doCreateSet(title);
if (diffs != null && diffs.length > 0) {
commitSet.add(diffs);
}
@@ -333,6 +333,15 @@ public class SubscriberChangeSetCollector extends DiffTreeChangeSetCollector imp
}
/**
+ * Create a change set with the given name.
+ * @param name the name of the change set
+ * @return the created change set
+ */
+ protected ActiveChangeSet doCreateSet(String name) {
+ return new ActiveChangeSet(this, name);
+ }
+
+ /**
* Create a change set containing the given files if
* they have been modified locally.
* @param title the title of the commit set
@@ -486,7 +495,7 @@ public class SubscriberChangeSetCollector extends DiffTreeChangeSetCollector imp
* @return the created change set
*/
protected ActiveChangeSet createSet(String title, Preferences childPrefs) {
- ActiveChangeSet changeSet = new ActiveChangeSet(this, title);
+ ActiveChangeSet changeSet = doCreateSet(title);
changeSet.init(childPrefs);
return changeSet;
}
diff --git a/bundles/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF
index 80b03f542..d31d8dadf 100644
--- a/bundles/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.team.cvs.core/META-INF/MANIFEST.MF
@@ -12,6 +12,7 @@ Export-Package: org.eclipse.team.internal.ccvs.core;x-friends:="org.eclipse.team
org.eclipse.team.internal.ccvs.core.connection;x-friends:="org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui",
org.eclipse.team.internal.ccvs.core.filehistory;x-friends:="org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui",
org.eclipse.team.internal.ccvs.core.filesystem;x-friends:="org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui",
+ org.eclipse.team.internal.ccvs.core.mapping,
org.eclipse.team.internal.ccvs.core.resources;x-friends:="org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui",
org.eclipse.team.internal.ccvs.core.syncinfo;x-friends:="org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui",
org.eclipse.team.internal.ccvs.core.util;x-friends:="org.eclipse.team.cvs.ssh,org.eclipse.team.cvs.ssh2,org.eclipse.team.cvs.ui"
diff --git a/bundles/org.eclipse.team.cvs.core/plugin.xml b/bundles/org.eclipse.team.cvs.core/plugin.xml
index 2afc8d4ab..48425197a 100644
--- a/bundles/org.eclipse.team.cvs.core/plugin.xml
+++ b/bundles/org.eclipse.team.cvs.core/plugin.xml
@@ -213,5 +213,22 @@
<run class="org.eclipse.team.internal.ccvs.core.filesystem.CVSFileSystem"/>
</filesystem>
</extension>
+ <extension
+ id="changeSetModel"
+ name="Change Sets"
+ point="org.eclipse.core.resources.modelProviders">
+ <modelProvider
+ class="org.eclipse.team.internal.ccvs.core.mapping.ChangeSetModelProvider"
+ name="Change Sets"/>
+ <extends-model id="org.eclipse.core.resources.modelProvider"/>
+ </extension>
+ <extension
+ point="org.eclipse.core.runtime.adapters">
+ <factory
+ adaptableType="org.eclipse.team.internal.ccvs.core.mapping.CVSActiveChangeSet"
+ class="org.eclipse.team.internal.ccvs.core.mapping.ChangeSetAdapterFactory">
+ <adapter type="org.eclipse.core.resources.mapping.ResourceMapping"/>
+ </factory>
+ </extension>
</plugin>
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/CVSActiveChangeSet.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/CVSActiveChangeSet.java
new file mode 100644
index 000000000..1f13e6bed
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/CVSActiveChangeSet.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.core.mapping;
+
+import org.eclipse.team.internal.core.subscribers.ActiveChangeSet;
+import org.eclipse.team.internal.core.subscribers.SubscriberChangeSetCollector;
+
+public class CVSActiveChangeSet extends ActiveChangeSet {
+
+ public CVSActiveChangeSet(SubscriberChangeSetCollector manager, String title) {
+ super(manager, title);
+ }
+
+}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/CVSActiveChangeSetCollector.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/CVSActiveChangeSetCollector.java
new file mode 100644
index 000000000..9c51a8105
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/CVSActiveChangeSetCollector.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.core.mapping;
+
+import org.eclipse.team.core.subscribers.Subscriber;
+import org.eclipse.team.internal.core.subscribers.ActiveChangeSet;
+import org.eclipse.team.internal.core.subscribers.SubscriberChangeSetCollector;
+
+public class CVSActiveChangeSetCollector extends SubscriberChangeSetCollector {
+
+ public CVSActiveChangeSetCollector(Subscriber subscriber) {
+ super(subscriber);
+ }
+
+ protected ActiveChangeSet doCreateSet(String name) {
+ return new CVSActiveChangeSet(this, name);
+ }
+
+
+}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetAdapterFactory.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetAdapterFactory.java
new file mode 100644
index 000000000..b1fdd18f2
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetAdapterFactory.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.core.mapping;
+
+import org.eclipse.core.resources.mapping.ResourceMapping;
+import org.eclipse.core.runtime.IAdapterFactory;
+
+public class ChangeSetAdapterFactory implements IAdapterFactory {
+
+ public Object getAdapter(Object adaptableObject, Class adapterType) {
+ if (adaptableObject instanceof CVSActiveChangeSet && adapterType == ResourceMapping.class) {
+ CVSActiveChangeSet cs = (CVSActiveChangeSet) adaptableObject;
+ return new ChangeSetResourceMapping(cs);
+ }
+ return null;
+ }
+
+ public Class[] getAdapterList() {
+ return new Class[] { ResourceMapping.class };
+ }
+
+}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetModelProvider.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetModelProvider.java
new file mode 100644
index 000000000..ae32d20af
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetModelProvider.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.core.mapping;
+
+import org.eclipse.core.resources.mapping.ModelProvider;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.team.internal.core.TeamPlugin;
+
+public class ChangeSetModelProvider extends ModelProvider {
+
+ public static final String ID = "org.eclipse.team.cvs.core.changeSetModel"; //$NON-NLS-1$
+ private static ChangeSetModelProvider provider;
+
+ public ChangeSetModelProvider() {
+ super();
+ }
+
+ public static ChangeSetModelProvider getProvider() {
+ if (provider == null) {
+ try {
+ provider = (ChangeSetModelProvider)ModelProvider.getModelProviderDescriptor(ChangeSetModelProvider.ID).getModelProvider();
+ } catch (CoreException e) {
+ TeamPlugin.log(e);
+ }
+ }
+ return provider;
+ }
+
+}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetResourceMapping.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetResourceMapping.java
new file mode 100644
index 000000000..42d903d41
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/mapping/ChangeSetResourceMapping.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.core.mapping;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.mapping.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+public class ChangeSetResourceMapping extends ResourceMapping {
+
+ private final CVSActiveChangeSet changeSet;
+
+ public ChangeSetResourceMapping(CVSActiveChangeSet changeSet) {
+ this.changeSet = changeSet;
+ }
+
+ public Object getModelObject() {
+ return changeSet;
+ }
+
+ public String getModelProviderId() {
+ return ChangeSetModelProvider.ID;
+ }
+
+ public IProject[] getProjects() {
+ Set result = new HashSet();
+ IResource[] resources = changeSet.getResources();
+ for (int i = 0; i < resources.length; i++) {
+ IResource resource = resources[i];
+ result.add(resource.getProject());
+ }
+ return (IProject[]) result.toArray(new IProject[result.size()]);
+ }
+
+ public ResourceTraversal[] getTraversals(ResourceMappingContext context,
+ IProgressMonitor monitor) throws CoreException {
+ IResource[] resources = changeSet.getResources();
+ if (resources.length == 0) {
+ return new ResourceTraversal[0];
+ }
+ return new ResourceTraversal[] {
+ new ResourceTraversal(resources, IResource.DEPTH_ZERO, IResource.NONE)
+ };
+ }
+
+}
diff --git a/bundles/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
index 270b45900..0e8e12b58 100644
--- a/bundles/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.team.cvs.ui/META-INF/MANIFEST.MF
@@ -30,5 +30,6 @@ Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)";resolution:=op
org.eclipse.team.ui;bundle-version="[3.2.0,4.0.0)",
org.eclipse.team.cvs.core;bundle-version="[3.2.0,4.0.0)",
org.eclipse.compare;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ui.navigator.resources;bundle-version="[3.2.0,4.0.0)
+ org.eclipse.ui.navigator.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.navigator
Eclipse-LazyStart: true
diff --git a/bundles/org.eclipse.team.cvs.ui/plugin.xml b/bundles/org.eclipse.team.cvs.ui/plugin.xml
index e6023f49c..2057589c7 100644
--- a/bundles/org.eclipse.team.cvs.ui/plugin.xml
+++ b/bundles/org.eclipse.team.cvs.ui/plugin.xml
@@ -110,6 +110,9 @@
name="otherActions2"
separator="true"/>
<insertionPoint
+ name="changeSetActions"
+ separator="true"/>
+ <insertionPoint
name="sort"
separator="true"/>
<insertionPoint
@@ -1520,5 +1523,39 @@
class="org.eclipse.team.internal.ccvs.ui.CVSResourceDropAdapter"
id="org.eclipse.team.cvs.ui.cvsRemoteDrop"/>
</extension>
+ <extension
+ point="org.eclipse.ui.navigator.navigatorContent">
+ <navigatorContent
+ activeByDefault="false"
+ contentProvider="org.eclipse.team.internal.ccvs.ui.mappings.ChangeSetContentProvider"
+ icon="$nl$/icons/full/obj16/changelog_obj.gif"
+ id="org.eclipse.team.cvs.ui.changeSetContent"
+ labelProvider="org.eclipse.team.internal.ccvs.ui.mappings.ChangeSetLabelProvider"
+ name="CVS Change Sets"
+ priority="normal">
+ <enablement>
+ <or>
+ <instanceof value="org.eclipse.team.internal.ccvs.core.mapping.ChangeSetModelProvider"/>
+ <instanceof value="org.eclipse.team.internal.ccvs.core.mapping.CVSActiveChangeSet"/>
+ <instanceof value="org.eclipse.core.resources.IResource"/>
+ <instanceof value="org.eclipse.team.core.mapping.ISynchronizationScope"/>
+ <instanceof value="org.eclipse.team.core.mapping.ISynchronizationContext"/>
+ </or>
+ </enablement>
+ <commonSorter
+ class="org.eclipse.team.internal.ccvs.ui.mappings.ChangeSetSorter"
+ id="org.eclipse.team.cvs.ui.changeSetSorter"/>
+ <actionProvider
+ class="org.eclipse.team.internal.ccvs.ui.mappings.ChangeSetActionProvider"
+ id="org.eclipse.team.cvs.ui.changeSetActions"/>
+ </navigatorContent>
+ </extension>
+ <extension
+ point="org.eclipse.team.ui.teamContentProviders">
+ <teamContentProvider
+ contentExtensionId="org.eclipse.team.cvs.ui.changeSetContent"
+ icon="$nl$/icons/full/obj16/changelog_obj.gif"
+ modelProviderId="org.eclipse.team.cvs.core.changeSetModel"/>
+ </extension>
</plugin>
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIPlugin.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIPlugin.java
index 4477ac6f7..cd6deb45f 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIPlugin.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/CVSUIPlugin.java
@@ -37,6 +37,7 @@ import org.eclipse.team.core.TeamException;
import org.eclipse.team.internal.ccvs.core.*;
import org.eclipse.team.internal.ccvs.core.client.Command.KSubstOption;
import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
+import org.eclipse.team.internal.ccvs.core.mapping.CVSActiveChangeSetCollector;
import org.eclipse.team.internal.ccvs.ui.console.CVSOutputConsole;
import org.eclipse.team.internal.ccvs.ui.model.CVSAdapterFactory;
import org.eclipse.team.internal.ccvs.ui.repo.RepositoryManager;
@@ -81,7 +82,7 @@ public class CVSUIPlugin extends AbstractUIPlugin {
*/
private RepositoryManager repositoryManager;
- private SubscriberChangeSetCollector changeSetManager;
+ private CVSActiveChangeSetCollector changeSetManager;
/**
* CVSUIPlugin constructor
@@ -268,7 +269,7 @@ public class CVSUIPlugin extends AbstractUIPlugin {
public synchronized SubscriberChangeSetCollector getChangeSetManager() {
if (changeSetManager == null) {
- changeSetManager = new SubscriberChangeSetCollector(CVSProviderPlugin.getPlugin().getCVSWorkspaceSubscriber());
+ changeSetManager = new CVSActiveChangeSetCollector(CVSProviderPlugin.getPlugin().getCVSWorkspaceSubscriber());
}
return changeSetManager;
}
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetActionProvider.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetActionProvider.java
new file mode 100644
index 000000000..6e98ed316
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetActionProvider.java
@@ -0,0 +1,421 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.ui.mappings;
+
+import java.util.*;
+
+import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.mapping.ResourceTraversal;
+import org.eclipse.jface.action.*;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.team.core.diff.*;
+import org.eclipse.team.core.mapping.IResourceDiffTree;
+import org.eclipse.team.core.mapping.provider.ResourceDiffTree;
+import org.eclipse.team.internal.ccvs.core.mapping.ChangeSetModelProvider;
+import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
+import org.eclipse.team.internal.core.subscribers.*;
+import org.eclipse.team.internal.ui.*;
+import org.eclipse.team.internal.ui.synchronize.ChangeSetCapability;
+import org.eclipse.team.internal.ui.synchronize.IChangeSetProvider;
+import org.eclipse.team.ui.mapping.SynchronizationActionProvider;
+import org.eclipse.team.ui.synchronize.*;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.actions.BaseSelectionListenerAction;
+import org.eclipse.ui.navigator.INavigatorContentExtension;
+import org.eclipse.ui.navigator.INavigatorContentService;
+
+public class ChangeSetActionProvider extends SynchronizationActionProvider {
+
+ /**
+ * Menu group that can be added to the context menu
+ */
+ public final static String CHANGE_SET_GROUP = "changeSetActions"; //$NON-NLS-1$
+
+ private CreateChangeSetAction createChangeSet;
+ private MenuManager addToChangeSet;
+ private EditChangeSetAction editChangeSet;
+ private RemoveChangeSetAction removeChangeSet;
+ private MakeDefaultChangeSetAction makeDefault;
+
+ private class CreateChangeSetAction extends ModelParticipantAction {
+
+ public CreateChangeSetAction(ISynchronizePageConfiguration configuration) {
+ super(TeamUIMessages.ChangeLogModelProvider_0, configuration);
+ }
+
+ public void run() {
+ final IDiff[] diffs = getLocalChanges(getStructuredSelection());
+ syncExec(new Runnable() {
+ public void run() {
+ createChangeSet(diffs);
+ }
+ });
+ }
+
+ private void createChangeSet(IDiff[] diffs) {
+ ActiveChangeSet set = getChangeSetCapability().createChangeSet(getConfiguration(), diffs);
+ if (set != null) {
+ getActiveChangeSetManager().add(set);
+ }
+ }
+
+ protected boolean isEnabledForSelection(IStructuredSelection selection) {
+ return containsLocalChanges(selection);
+ }
+ }
+
+ private class AddToChangeSetAction extends ModelParticipantAction {
+
+ private final ActiveChangeSet set;
+
+ public AddToChangeSetAction(ISynchronizePageConfiguration configuration, ActiveChangeSet set, ISelection selection) {
+ super(set == null ? TeamUIMessages.ChangeSetActionGroup_2 : set.getTitle(), configuration);
+ this.set = set;
+ selectionChanged(selection);
+ }
+
+ public void run() {
+ IDiff[] diffArray = getLocalChanges(getStructuredSelection());
+ if (set != null) {
+ set.add(diffArray);
+ } else {
+ ChangeSet[] sets = getActiveChangeSetManager().getSets();
+ IResource[] resources = getResources(diffArray);
+ for (int i = 0; i < sets.length; i++) {
+ ActiveChangeSet activeSet = (ActiveChangeSet)sets[i];
+ activeSet.remove(resources);
+ }
+ }
+ }
+
+ private IResource[] getResources(IDiff[] diffArray) {
+ List result = new ArrayList();
+ for (int i = 0; i < diffArray.length; i++) {
+ IDiff diff = diffArray[i];
+ IResource resource = ResourceDiffTree.getResourceFor(diff);
+ if (resource != null) {
+ result.add(resource);
+ }
+ }
+ return (IResource[]) result.toArray(new IResource[result.size()]);
+ }
+
+ protected boolean isEnabledForSelection(IStructuredSelection selection) {
+ return containsLocalChanges(selection);
+ }
+ }
+
+ private abstract class ChangeSetAction extends BaseSelectionListenerAction {
+
+ public ChangeSetAction(String title, ISynchronizePageConfiguration configuration) {
+ super(title);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.actions.BaseSelectionListenerAction#updateSelection(org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ protected boolean updateSelection(IStructuredSelection selection) {
+ return getSelectedSet() != null;
+ }
+
+ protected ActiveChangeSet getSelectedSet() {
+ IStructuredSelection selection = getStructuredSelection();
+ if (selection.size() == 1) {
+ Object first = selection.getFirstElement();
+ if (first instanceof ActiveChangeSet) {
+ return (ActiveChangeSet) first;
+ }
+ }
+ return null;
+ }
+ }
+
+ private class EditChangeSetAction extends ChangeSetAction {
+
+ public EditChangeSetAction(ISynchronizePageConfiguration configuration) {
+ super(TeamUIMessages.ChangeLogModelProvider_6, configuration);
+ }
+
+ public void run() {
+ ActiveChangeSet set = getSelectedSet();
+ if (set == null) return;
+ getChangeSetCapability().editChangeSet(getSynchronizePageConfiguration(), set);
+ }
+ }
+
+ private class RemoveChangeSetAction extends ChangeSetAction {
+
+ public RemoveChangeSetAction(ISynchronizePageConfiguration configuration) {
+ super("Remove Change Set", configuration); //$NON-NLS-1$
+ }
+
+ public void run() {
+ ActiveChangeSet set = getSelectedSet();
+ if (set == null) return;
+ if (MessageDialog.openConfirm(getSynchronizePageConfiguration().getSite().getShell(), TeamUIMessages.ChangeSetActionGroup_0, NLS.bind(TeamUIMessages.ChangeSetActionGroup_1, new String[] { set.getTitle() }))) { //
+ getActiveChangeSetManager().remove(set);
+ }
+ }
+ }
+
+ private class MakeDefaultChangeSetAction extends ChangeSetAction {
+ public MakeDefaultChangeSetAction(ISynchronizePageConfiguration configuration) {
+ super(TeamUIMessages.ChangeLogModelProvider_9, configuration);
+ }
+
+ public void run() {
+ ActiveChangeSet set = getSelectedSet();
+ if (set == null) return;
+ getActiveChangeSetManager().makeDefault(set);
+ }
+ }
+
+ public ChangeSetActionProvider() {
+ super();
+ }
+
+ protected void initialize() {
+ super.initialize();
+ if (getChangeSetCapability().supportsActiveChangeSets()) {
+ addToChangeSet = new MenuManager(TeamUIMessages.ChangeLogModelProvider_12);
+ addToChangeSet.setRemoveAllWhenShown(true);
+ addToChangeSet.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ addChangeSets(manager);
+ }
+ });
+ createChangeSet = new CreateChangeSetAction(getSynchronizePageConfiguration());
+ addToChangeSet.add(createChangeSet);
+ addToChangeSet.add(new Separator());
+ editChangeSet = new EditChangeSetAction(getSynchronizePageConfiguration());
+ makeDefault = new MakeDefaultChangeSetAction(getSynchronizePageConfiguration());
+ removeChangeSet = new RemoveChangeSetAction(getSynchronizePageConfiguration());
+ }
+ }
+
+ public void fillContextMenu(IMenuManager menu) {
+ super.fillContextMenu(menu);
+ if (getChangeSetCapability().enableActiveChangeSetsFor(getSynchronizePageConfiguration())) {
+ appendToGroup(
+ menu,
+ CHANGE_SET_GROUP,
+ addToChangeSet);
+ appendToGroup(
+ menu,
+ CHANGE_SET_GROUP,
+ editChangeSet);
+ appendToGroup(
+ menu,
+ CHANGE_SET_GROUP,
+ removeChangeSet);
+ appendToGroup(
+ menu,
+ CHANGE_SET_GROUP,
+ makeDefault);
+ }
+ }
+
+ public void dispose() {
+ if (addToChangeSet != null) {
+ addToChangeSet.dispose();
+ addToChangeSet.removeAll();
+ }
+ super.dispose();
+ }
+
+ protected void addChangeSets(IMenuManager manager) {
+ ChangeSet[] sets = getActiveChangeSetManager().getSets();
+ ISelection selection = getContext().getSelection();
+ createChangeSet.selectionChanged(selection);
+ addToChangeSet.add(createChangeSet);
+ addToChangeSet.add(new Separator());
+ for (int i = 0; i < sets.length; i++) {
+ ActiveChangeSet set = (ActiveChangeSet)sets[i];
+ AddToChangeSetAction action = new AddToChangeSetAction(getSynchronizePageConfiguration(), set, selection);
+ manager.add(action);
+ }
+ addToChangeSet.add(new Separator());
+ // Action that removes change set resources
+ addToChangeSet.add(new AddToChangeSetAction(getSynchronizePageConfiguration(), null, selection));
+ }
+
+ private boolean appendToGroup(IContributionManager manager, String groupId, IContributionItem item) {
+ if (manager == null || item == null) return false;
+ IContributionItem group = manager.find(groupId);
+ if (group != null) {
+ manager.appendToGroup(group.getId(), item);
+ return true;
+ }
+ return false;
+ }
+
+ private boolean appendToGroup(IContributionManager manager, String groupId, IAction action) {
+ if (manager == null || action == null) return false;
+ IContributionItem group = manager.find(groupId);
+ if (group != null) {
+ manager.appendToGroup(group.getId(), action);
+ //registerActionWithWorkbench(action);
+ return true;
+ }
+ return false;
+ }
+
+ public ChangeSetCapability getChangeSetCapability() {
+ ISynchronizeParticipant participant = getSynchronizePageConfiguration().getParticipant();
+ if (participant instanceof IChangeSetProvider) {
+ IChangeSetProvider provider = (IChangeSetProvider) participant;
+ return provider.getChangeSetCapability();
+ }
+ return null;
+ }
+
+ private void syncExec(final Runnable runnable) {
+ final Control ctrl = getSynchronizePageConfiguration().getPage().getViewer().getControl();
+ Utils.syncExec(runnable, ctrl);
+ }
+
+ private SubscriberChangeSetCollector getActiveChangeSetManager() {
+ return CVSUIPlugin.getPlugin().getChangeSetManager();
+ }
+
+
+ public IDiff[] getLocalChanges(IStructuredSelection selection) {
+ if (selection instanceof ITreeSelection) {
+ ITreeSelection ts = (ITreeSelection) selection;
+ TreePath[] paths = ts.getPaths();
+ List result = new ArrayList();
+ for (int i = 0; i < paths.length; i++) {
+ TreePath path = paths[i];
+ IDiff[] diffs = getLocalChanges(path);
+ for (int j = 0; j < diffs.length; j++) {
+ IDiff diff = diffs[j];
+ result.add(diff);
+ }
+ }
+ return (IDiff[]) result.toArray(new IDiff[result.size()]);
+ }
+ return new IDiff[0];
+ }
+
+ private IDiff[] getLocalChanges(TreePath path) {
+ IResourceDiffTree tree = getDiffTree(path);
+ if (path.getSegmentCount() == 1) {
+ return ((ResourceDiffTree)tree).getDiffs();
+ }
+ ResourceTraversal[] traversals = getTraversals(path.getLastSegment());
+ return tree.getDiffs(traversals);
+ }
+
+ private IResourceDiffTree getDiffTree(TreePath path) {
+ return getContentProvider().getDiffTree(path);
+ }
+
+ public boolean containsLocalChanges(IStructuredSelection selection) {
+ if (selection instanceof ITreeSelection) {
+ ITreeSelection ts = (ITreeSelection) selection;
+ TreePath[] paths = ts.getPaths();
+ for (int i = 0; i < paths.length; i++) {
+ TreePath path = paths[i];
+ if (containsLocalChanges(path)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean containsLocalChanges(TreePath path) {
+ IResourceDiffTree tree = getDiffTree(path);
+ ResourceTraversal[] traversals = getTraversals(path.getLastSegment());
+ return tree.hasMatchingDiffs(traversals, getVisibleLocalChangesFilter());
+ }
+
+ private ResourceTraversal[] getTraversals(Object element) {
+ if (element instanceof ChangeSet) {
+ ChangeSet set = (ChangeSet) element;
+ return new ResourceTraversal[] { new ResourceTraversal(set.getResources(), IResource.DEPTH_ZERO, IResource.NONE) };
+ }
+ if (element instanceof IProject) {
+ IProject project = (IProject) element;
+ return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { project }, IResource.DEPTH_INFINITE, IResource.NONE) };
+ }
+ if (element instanceof IFile) {
+ IFile file = (IFile) element;
+ return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { file }, IResource.DEPTH_ZERO, IResource.NONE) };
+ }
+ if (element instanceof IFolder) {
+ IFolder folder = (IFolder) element;
+ if (getLayout().equals(IPreferenceIds.COMPRESSED_LAYOUT)) {
+ return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { folder }, IResource.DEPTH_ONE, IResource.NONE) };
+ } else if (getLayout().equals(IPreferenceIds.TREE_LAYOUT)) {
+ return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { folder }, IResource.DEPTH_INFINITE, IResource.NONE) };
+ } else if (getLayout().equals(IPreferenceIds.FLAT_LAYOUT)) {
+ return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { folder }, IResource.DEPTH_ZERO, IResource.NONE) };
+ }
+ }
+ return null;
+ }
+
+ private FastDiffFilter getVisibleLocalChangesFilter() {
+ return new FastDiffFilter() {
+ public boolean select(IDiff diff) {
+ if (diff instanceof IThreeWayDiff && isVisible(diff)) {
+ IThreeWayDiff twd = (IThreeWayDiff) diff;
+ if (twd.getDirection() == IThreeWayDiff.OUTGOING || twd.getDirection() == IThreeWayDiff.CONFLICTING) {
+ return true;
+ }
+ }
+ return false;
+ }
+ };
+ }
+
+ private boolean isVisible(IDiff diff) {
+ ChangeSetContentProvider provider = getContentProvider();
+ return provider.isVisible(diff);
+ }
+
+ private ChangeSetContentProvider getContentProvider() {
+ INavigatorContentService service = getActionSite().getContentService();
+ Set set = service.findContentExtensionsByTriggerPoint(getModelProvider());
+ for (Iterator iter = set.iterator(); iter.hasNext();) {
+ INavigatorContentExtension extension = (INavigatorContentExtension) iter.next();
+ ITreeContentProvider provider = extension.getContentProvider();
+ if (provider instanceof ChangeSetContentProvider) {
+ return (ChangeSetContentProvider) provider;
+ }
+ }
+ throw new IllegalStateException();
+ }
+
+ private Object getModelProvider() {
+ return ChangeSetModelProvider.getProvider();
+ }
+
+ private String getLayout() {
+ return TeamUIPlugin.getPlugin().getPreferenceStore().getString(IPreferenceIds.SYNCVIEW_DEFAULT_LAYOUT);
+ }
+
+ public void setContext(ActionContext context) {
+ super.setContext(context);
+ if (context != null) {
+ if (editChangeSet != null)
+ editChangeSet.selectionChanged((IStructuredSelection)getContext().getSelection());
+ if (removeChangeSet != null)
+ removeChangeSet.selectionChanged((IStructuredSelection)getContext().getSelection());
+ if (makeDefault != null)
+ makeDefault.selectionChanged((IStructuredSelection)getContext().getSelection());
+ }
+ }
+}
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetContentProvider.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetContentProvider.java
new file mode 100644
index 000000000..8e5b53a20
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetContentProvider.java
@@ -0,0 +1,465 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.ui.mappings;
+
+import java.util.*;
+
+import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.mapping.ModelProvider;
+import org.eclipse.core.resources.mapping.ResourceTraversal;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.team.core.diff.*;
+import org.eclipse.team.core.mapping.IResourceDiffTree;
+import org.eclipse.team.core.mapping.ISynchronizationContext;
+import org.eclipse.team.core.mapping.provider.ResourceDiffTree;
+import org.eclipse.team.internal.ccvs.core.mapping.ChangeSetModelProvider;
+import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
+import org.eclipse.team.internal.core.subscribers.*;
+import org.eclipse.team.internal.ui.IPreferenceIds;
+import org.eclipse.team.internal.ui.Utils;
+import org.eclipse.team.internal.ui.mapping.ResourceModelContentProvider;
+import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+
+public class ChangeSetContentProvider extends ResourceModelContentProvider implements ITreePathContentProvider {
+
+ private ResourceDiffTree theRest;
+ private Map diffTrees = new HashMap();
+
+ /*
+ * Listener that reacts to changes made to the active change set collector
+ */
+ private IChangeSetChangeListener activeListener = new IChangeSetChangeListener() {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.core.subscribers.IChangeSetChangeListener#setAdded(org.eclipse.team.internal.core.subscribers.ChangeSet)
+ */
+ public void setAdded(final ChangeSet set) {
+ // TODO: Should we listen to all sets for changes or just to the collector?
+ addListener((DiffChangeSet)set);
+ if (isVisible(set)) {
+ Utils.syncExec(new Runnable() {
+ public void run() {
+ Object input = getViewer().getInput();
+ ((AbstractTreeViewer)getViewer()).add(input, set);
+ }
+ }, (StructuredViewer)getViewer());
+ }
+ IResource[] resources = set.getResources();
+ try {
+ getTheRest().beginInput();
+ for (int i = 0; i < resources.length; i++) {
+ IResource resource = resources[i];
+ getTheRest().remove(resource);
+ }
+ } finally {
+ getTheRest().endInput(null);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.core.subscribers.IChangeSetChangeListener#defaultSetChanged(org.eclipse.team.internal.core.subscribers.ChangeSet, org.eclipse.team.internal.core.subscribers.ChangeSet)
+ */
+ public void defaultSetChanged(final ChangeSet previousDefault, final ChangeSet set) {
+ if (isVisible(set) || isVisible(previousDefault)) {
+ Utils.asyncExec(new Runnable() {
+ public void run() {
+ ((AbstractTreeViewer)getViewer()).update(new Object[] {previousDefault, set}, null);
+ }
+ }, (StructuredViewer)getViewer());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.core.subscribers.IChangeSetChangeListener#setRemoved(org.eclipse.team.internal.core.subscribers.ChangeSet)
+ */
+ public void setRemoved(final ChangeSet set) {
+ removeListener((DiffChangeSet)set);
+ if (isVisible(set)) {
+ Utils.syncExec(new Runnable() {
+ public void run() {
+ ((AbstractTreeViewer)getViewer()).remove(TreePath.EMPTY.createChildPath(set));
+ }
+ }, (StructuredViewer)getViewer());
+ }
+ IResource[] resources = set.getResources();
+ try {
+ getTheRest().beginInput();
+ for (int i = 0; i < resources.length; i++) {
+ IResource resource = resources[i];
+ IDiff diff = getContext().getDiffTree().getDiff(resource);
+ if (diff != null && !isContainedInSet(diff))
+ getTheRest().add(diff);
+ }
+ } finally {
+ getTheRest().endInput(null);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.core.subscribers.IChangeSetChangeListener#nameChanged(org.eclipse.team.internal.core.subscribers.ChangeSet)
+ */
+ public void nameChanged(final ChangeSet set) {
+ if (isVisible(set)) {
+ Utils.asyncExec(new Runnable() {
+ public void run() {
+ ((AbstractTreeViewer)getViewer()).update(set, null);
+ }
+ }, (StructuredViewer)getViewer());
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.core.subscribers.IChangeSetChangeListener#resourcesChanged(org.eclipse.team.internal.core.subscribers.ChangeSet, org.eclipse.core.runtime.IPath[])
+ */
+ public void resourcesChanged(final ChangeSet set, final IPath[] paths) {
+ if (isVisible(set)) {
+ Utils.syncExec(new Runnable() {
+ public void run() {
+ // TODO: Should we refresh here or in a diff change listener
+ ((AbstractTreeViewer)getViewer()).refresh(set, true);
+ }
+ }, (StructuredViewer)getViewer());
+ }
+ try {
+ getTheRest().beginInput();
+ for (int i = 0; i < paths.length; i++) {
+ IPath path = paths[i];
+ boolean isContained = ((DiffChangeSet)set).contains(path);
+ if (isContained) {
+ IDiff diff = ((DiffChangeSet)set).getDiffTree().getDiff(path);
+ if (diff != null) {
+ getTheRest().remove(ResourceDiffTree.getResourceFor(diff));
+ }
+ } else {
+ IDiff diff = getContext().getDiffTree().getDiff(path);
+ if (diff != null && !isContainedInSet(diff)) {
+ getTheRest().add(diff);
+ }
+ }
+ }
+ } finally {
+ getTheRest().endInput(null);
+ }
+ }
+ };
+
+ private IDiffChangeListener diffTreeListener = new IDiffChangeListener() {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.core.diff.IDiffChangeListener#propertyChanged(org.eclipse.team.core.diff.IDiffTree, int, org.eclipse.core.runtime.IPath[])
+ */
+ public void propertyChanged(IDiffTree tree, int property, IPath[] paths) {
+ // Ignore
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.core.diff.IDiffChangeListener#diffsChanged(org.eclipse.team.core.diff.IDiffChangeEvent, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void diffsChanged(IDiffChangeEvent event, IProgressMonitor monitor) {
+ Object input = getViewer().getInput();
+ if (input instanceof ChangeSetModelProvider) {
+ Utils.asyncExec(new Runnable() {
+ public void run() {
+ // TODO: Need to be a bit more precise
+ ((AbstractTreeViewer)getViewer()).refresh();
+ }
+ }, (StructuredViewer)getViewer());
+ }
+ }
+
+ };
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.mapping.ResourceModelContentProvider#getModelProviderId()
+ */
+ protected String getModelProviderId() {
+ return ChangeSetModelProvider.ID;
+ }
+
+ protected boolean isVisible(ChangeSet set) {
+ final Object input = getViewer().getInput();
+ if (input instanceof ChangeSetModelProvider) {
+ if (set instanceof ActiveChangeSet) {
+ ActiveChangeSet acs = (ActiveChangeSet) set;
+ // TODO: may nee to be more precise that this
+ return getConfiguration().getMode() != ISynchronizePageConfiguration.INCOMING_MODE;
+ }
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.mapping.ResourceModelContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object parent) {
+ if (parent instanceof ISynchronizationContext) {
+ // Do not show change sets when all models are visible because
+ // model providers that override the resource content may cause
+ // problems for the change set content provider
+ return new Object[0];
+ }
+ if (parent == getModelProvider()) {
+ return getRootElements();
+ }
+ return super.getElements(parent);
+ }
+
+ private Object[] getRootElements() {
+ List result = new ArrayList();
+ ChangeSet[] sets = getAllSets();
+ for (int i = 0; i < sets.length; i++) {
+ ChangeSet set = sets[i];
+ if (hasChildren(TreePath.EMPTY.createChildPath(set)))
+ result.add(set);
+ }
+ // Include resources that are not in a set
+ ResourceDiffTree tree = getTheRest();
+ IPath[] otherRoots = tree.getChildren(ResourcesPlugin.getWorkspace().getRoot().getFullPath());
+ for (int i = 0; i < otherRoots.length; i++) {
+ IPath path = otherRoots[i];
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(path.lastSegment());
+ if (project.isAccessible())
+ result.add(project);
+ }
+ return result.toArray();
+ }
+
+ private synchronized ResourceDiffTree getTheRest() {
+ if (theRest == null) {
+ theRest = new ResourceDiffTree();
+ theRest.addDiffChangeListener(diffTreeListener);
+ IResourceDiffTree allChanges = getContext().getDiffTree();
+ allChanges.accept(ResourcesPlugin.getWorkspace().getRoot().getFullPath(), new IDiffVisitor() {
+ public boolean visit(IDiff diff) {
+ if (!isContainedInSet(diff))
+ theRest.add(diff);
+ return true;
+ }
+ }, IResource.DEPTH_INFINITE);
+ }
+ return theRest;
+ }
+
+ protected boolean isContainedInSet(IDiff diff) {
+ ChangeSet[] sets = getAllSets();
+ for (int i = 0; i < sets.length; i++) {
+ ChangeSet set = sets[i];
+ if (set.contains(ResourceDiffTree.getResourceFor(diff))) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.mapping.ResourceModelContentProvider#getTraversals(org.eclipse.team.core.mapping.ISynchronizationContext, java.lang.Object)
+ */
+ protected ResourceTraversal[] getTraversals(
+ ISynchronizationContext context, Object object) {
+ if (object instanceof ChangeSet) {
+ ChangeSet set = (ChangeSet) object;
+ IResource[] resources = set.getResources();
+ return new ResourceTraversal[] { new ResourceTraversal(resources, IResource.DEPTH_ZERO, IResource.NONE) };
+ }
+ return super.getTraversals(context, object);
+ }
+
+ public Object[] getChildren(TreePath parentPath) {
+ if (parentPath.getSegmentCount() == 0)
+ return getRootElements();
+ Object first = parentPath.getFirstSegment();
+ IResourceDiffTree diffTree;
+ Object parent = parentPath.getLastSegment();
+ if (first instanceof DiffChangeSet) {
+ DiffChangeSet set = (DiffChangeSet) first;
+ diffTree = set.getDiffTree();
+ if (parent instanceof DiffChangeSet) {
+ parent = getModelRoot();
+ }
+ } else {
+ diffTree = getTheRest();
+ if (parent instanceof ModelProvider) {
+ parent = getModelRoot();
+ }
+ }
+ Object[] children = getChildren(parent);
+ Set result = new HashSet();
+ for (int i = 0; i < children.length; i++) {
+ Object child = children[i];
+ if (isVisible(child, diffTree)) {
+ result.add(child);
+ }
+ }
+ return result.toArray();
+ }
+
+ private boolean isVisible(Object object, IResourceDiffTree tree) {
+ if (object instanceof IResource) {
+ IResource resource = (IResource) object;
+ if (tree.getDiff(resource) != null)
+ return true;
+ switch (resource.getType()) {
+ case IResource.PROJECT:
+ return tree.getDiffs(resource, IResource.DEPTH_INFINITE).length > 0;
+ case IResource.FOLDER:
+ if (getLayout().equals(IPreferenceIds.COMPRESSED_LAYOUT)) {
+ return tree.getDiffs(resource, IResource.DEPTH_ONE).length > 0;
+ } else if (getLayout().equals(IPreferenceIds.TREE_LAYOUT)) {
+ return tree.getDiffs(resource, IResource.DEPTH_INFINITE).length > 0;
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean hasChildren(TreePath path) {
+ return getChildren(path).length > 0;
+ }
+
+ public TreePath[] getParents(Object element) {
+ if (element instanceof ChangeSet) {
+ return new TreePath[] { TreePath.EMPTY };
+ }
+ if (element instanceof IResource) {
+ IResource resource = (IResource) element;
+ DiffChangeSet[] sets = getSetsContaining(resource);
+ if (sets.length > 0) {
+ List result = new ArrayList();
+ for (int i = 0; i < sets.length; i++) {
+ DiffChangeSet set = sets[i];
+ TreePath path = getPathForElement(set.getDiffTree(), resource);
+ if (path != null)
+ result.add(path);
+ }
+ return (TreePath[]) result.toArray(new TreePath[result.size()]);
+ } else {
+ TreePath path = getPathForElement(getTheRest(), resource);
+ if (path != null)
+ return new TreePath[] { path };
+ }
+ }
+
+ return new TreePath[0];
+ }
+
+ private DiffChangeSet[] getSetsContaining(IResource resource) {
+ List result = new ArrayList();
+ DiffChangeSet[] allSets = getAllSets();
+ for (int i = 0; i < allSets.length; i++) {
+ DiffChangeSet set = allSets[i];
+ if (isVisible(resource, set.getDiffTree())) {
+ result.add(set);
+ }
+ }
+ return (DiffChangeSet[]) result.toArray(new DiffChangeSet[result.size()]);
+ }
+
+ private DiffChangeSet[] getAllSets() {
+ SubscriberChangeSetCollector collector = CVSUIPlugin.getPlugin().getChangeSetManager();
+ ChangeSet[] sets = collector.getSets();
+ List result = new ArrayList();
+ for (int i = 0; i < sets.length; i++) {
+ ChangeSet set = sets[i];
+ result.add(set);
+ }
+ return (DiffChangeSet[]) result.toArray(new DiffChangeSet[result.size()]);
+ }
+
+ private TreePath getPathForElement(IResourceDiffTree tree, IResource resource) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void init(ICommonContentExtensionSite site) {
+ super.init(site);
+ SubscriberChangeSetCollector collector = CVSUIPlugin.getPlugin().getChangeSetManager();
+ collector.addListener(activeListener);
+ ChangeSet[] sets = collector.getSets();
+ for (int i = 0; i < sets.length; i++) {
+ DiffChangeSet set = (DiffChangeSet)sets[i];
+ set.getDiffTree().addDiffChangeListener(diffTreeListener);
+ }
+ }
+
+ public void dispose() {
+ CVSUIPlugin.getPlugin().getChangeSetManager().removeListener(activeListener);
+ for (Iterator iter = diffTrees.values().iterator(); iter.hasNext();) {
+ IDiffTree tree = (IDiffTree) iter.next();
+ tree.removeDiffChangeListener(diffTreeListener);
+ }
+ if (theRest != null) {
+ theRest.removeDiffChangeListener(diffTreeListener);
+ }
+ super.dispose();
+ }
+
+ protected void addListener(DiffChangeSet set) {
+ IResourceDiffTree tree = set.getDiffTree();
+ diffTrees.put(tree, set);
+ tree.addDiffChangeListener(diffTreeListener);
+ }
+
+ protected void removeListener(DiffChangeSet set) {
+ IResourceDiffTree tree = set.getDiffTree();
+ diffTrees.remove(tree);
+ tree.removeDiffChangeListener(diffTreeListener);
+ }
+
+ public boolean isVisible(IDiff diff) {
+ return super.isVisible(diff);
+ }
+
+ public IResourceDiffTree getDiffTree(TreePath path) {
+ if (path.getSegmentCount() > 0) {
+ Object first = path.getFirstSegment();
+ if (first instanceof DiffChangeSet) {
+ DiffChangeSet set = (DiffChangeSet) first;
+ return set.getDiffTree();
+ }
+ }
+ return getTheRest();
+ }
+
+ public void diffsChanged(IDiffChangeEvent event, IProgressMonitor monitor) {
+ // Override inherited method to reconcile sub-trees
+ IPath[] removed = event.getRemovals();
+ IDiff[] added = event.getAdditions();
+ IDiff[] changed = event.getChanges();
+ // Only adjust the set of the rest. The others will be handled by the collectors
+ try {
+ getTheRest().beginInput();
+ for (int i = 0; i < removed.length; i++) {
+ IPath path = removed[i];
+ getTheRest().remove(path);
+ }
+ for (int i = 0; i < added.length; i++) {
+ IDiff diff = added[i];
+ // Only add the diff if it is not already in another set
+ if (!isContainedInSet(diff)) {
+ getTheRest().add(diff);
+ }
+ }
+ for (int i = 0; i < changed.length; i++) {
+ IDiff diff = changed[i];
+ // Only add the diff if it is already contained in the free set
+ if (getTheRest().getDiff(diff.getPath()) != null) {
+ getTheRest().add(diff);
+ }
+ }
+ } finally {
+ getTheRest().endInput(monitor);
+ }
+ }
+
+}
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetLabelProvider.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetLabelProvider.java
new file mode 100644
index 000000000..c6d383206
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetLabelProvider.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.ui.mappings;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
+import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants;
+import org.eclipse.team.internal.core.subscribers.ActiveChangeSet;
+import org.eclipse.team.internal.ui.mapping.ResourceModelLabelProvider;
+
+public class ChangeSetLabelProvider extends ResourceModelLabelProvider {
+
+ private Image changeSetImage;
+
+ protected String getDelegateText(Object element) {
+ if (element instanceof ActiveChangeSet) {
+ ActiveChangeSet set = (ActiveChangeSet) element;
+ return set.getName();
+ }
+ return super.getDelegateText(element);
+ }
+
+ protected Image getDelegateImage(Object element) {
+ if (element instanceof ActiveChangeSet) {
+ return getChangeSetImage();
+ }
+ return super.getDelegateImage(element);
+ }
+
+ private Image getChangeSetImage() {
+ if (changeSetImage == null) {
+ ImageDescriptor imageDescriptor = CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_CHANGELOG);
+ if (imageDescriptor != null)
+ changeSetImage = imageDescriptor.createImage();
+ }
+ return changeSetImage;
+ }
+
+ public void dispose() {
+ if (changeSetImage != null) {
+ changeSetImage.dispose();
+ }
+ super.dispose();
+ }
+
+}
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetSorter.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetSorter.java
new file mode 100644
index 000000000..65bd2419f
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/ChangeSetSorter.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.ui.mappings;
+
+import org.eclipse.team.internal.ui.mapping.ResourceModelSorter;
+
+public class ChangeSetSorter extends ResourceModelSorter {
+
+ public ChangeSetSorter() {
+ super();
+ }
+
+}
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceChangeSetCapability.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceChangeSetCapability.java
new file mode 100644
index 000000000..f7d03a933
--- /dev/null
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceChangeSetCapability.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.internal.ccvs.ui.mappings;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.window.Window;
+import org.eclipse.team.core.diff.IDiff;
+import org.eclipse.team.core.mapping.provider.ResourceDiffTree;
+import org.eclipse.team.internal.ccvs.ui.*;
+import org.eclipse.team.internal.ccvs.ui.subscriber.CommitSetDialog;
+import org.eclipse.team.internal.core.subscribers.ActiveChangeSet;
+import org.eclipse.team.internal.core.subscribers.SubscriberChangeSetCollector;
+import org.eclipse.team.internal.ui.synchronize.ChangeSetCapability;
+import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
+
+public class WorkspaceChangeSetCapability extends ChangeSetCapability {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.ChangeSetCapability#enableChangeSetsByDefault()
+ */
+ public boolean enableChangeSetsByDefault() {
+ return CVSUIPlugin.getPlugin().getPreferenceStore().getBoolean(ICVSUIConstants.PREF_COMMIT_SET_DEFAULT_ENABLEMENT);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.ChangeSetCapability#supportsActiveChangeSets()
+ */
+ public boolean supportsActiveChangeSets() {
+ return true;
+ }
+
+ public boolean enableActiveChangeSetsFor(ISynchronizePageConfiguration configuration) {
+ return supportsActiveChangeSets() &&
+ configuration.getMode() != ISynchronizePageConfiguration.INCOMING_MODE;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.ChangeSetCapability#createChangeSet(org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration, org.eclipse.team.core.diff.IDiff[])
+ */
+ public ActiveChangeSet createChangeSet(ISynchronizePageConfiguration configuration, IDiff[] infos) {
+ ActiveChangeSet set = getActiveChangeSetManager().createSet(CVSUIMessages.WorkspaceChangeSetCapability_1, new IDiff[0]);
+ CommitSetDialog dialog = new CommitSetDialog(configuration.getSite().getShell(), set, getResources(infos),
+ CVSUIMessages.WorkspaceChangeSetCapability_2, CVSUIMessages.WorkspaceChangeSetCapability_3); //
+ dialog.open();
+ if (dialog.getReturnCode() != Window.OK) return null;
+ set.add(infos);
+ return set;
+ }
+
+ private IResource[] getResources(IDiff[] diffs) {
+ Set result = new HashSet();
+ for (int i = 0; i < diffs.length; i++) {
+ IDiff diff = diffs[i];
+ IResource resource = ResourceDiffTree.getResourceFor(diff);
+ if (resource != null)
+ result.add(resource);
+ }
+ return (IResource[]) result.toArray(new IResource[result.size()]);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.ui.synchronize.ChangeSetCapability#editChangeSet(org.eclipse.team.core.subscribers.ActiveChangeSet)
+ */
+ public void editChangeSet(ISynchronizePageConfiguration configuration, ActiveChangeSet set) {
+ CommitSetDialog dialog = new CommitSetDialog(configuration.getSite().getShell(), set, set.getResources(),
+ CVSUIMessages.WorkspaceChangeSetCapability_7, CVSUIMessages.WorkspaceChangeSetCapability_8); //
+ dialog.open();
+ if (dialog.getReturnCode() != Window.OK) return;
+ // Nothing to do here as the set was updated by the dialog
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.ui.synchronize.ChangeSetCapability#getActiveChangeSetManager()
+ */
+ public SubscriberChangeSetCollector getActiveChangeSetManager() {
+ return CVSUIPlugin.getPlugin().getChangeSetManager();
+ }
+}
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceModelParticipant.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceModelParticipant.java
index 76ee32463..fa1471427 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceModelParticipant.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/mappings/WorkspaceModelParticipant.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.team.internal.ccvs.ui.mappings;
+import org.eclipse.core.resources.mapping.ModelProvider;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.action.*;
@@ -22,19 +23,22 @@ import org.eclipse.team.core.mapping.provider.MergeContext;
import org.eclipse.team.core.mapping.provider.SynchronizationContext;
import org.eclipse.team.core.subscribers.SubscriberScopeManager;
import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
+import org.eclipse.team.internal.ccvs.core.mapping.ChangeSetModelProvider;
import org.eclipse.team.internal.ccvs.ui.*;
import org.eclipse.team.internal.ccvs.ui.actions.*;
import org.eclipse.team.internal.ccvs.ui.subscriber.CVSActionDelegateWrapper;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.internal.ui.Utils;
import org.eclipse.team.internal.ui.mapping.MergeAllActionHandler;
+import org.eclipse.team.internal.ui.synchronize.ChangeSetCapability;
+import org.eclipse.team.internal.ui.synchronize.IChangeSetProvider;
import org.eclipse.team.ui.TeamUI;
import org.eclipse.team.ui.mapping.ITeamContentProviderManager;
import org.eclipse.team.ui.mapping.SynchronizationActionProvider;
import org.eclipse.team.ui.synchronize.*;
public class WorkspaceModelParticipant extends
- ModelSynchronizeParticipant {
+ ModelSynchronizeParticipant implements IChangeSetProvider {
public static final String VIEWER_ID = "org.eclipse.team.cvs.ui.workspaceSynchronization"; //$NON-NLS-1$
@@ -169,6 +173,8 @@ public class WorkspaceModelParticipant extends
}
}
}
+
+ private WorkspaceChangeSetCapability capability;
public WorkspaceModelParticipant() {
}
@@ -229,5 +235,30 @@ public class WorkspaceModelParticipant extends
pages[pages.length - 1].setTitle(CVSUIMessages.CVSParticipant_2);
return pages;
}
+
+ public ModelProvider[] getEnabledModelProviders() {
+ ModelProvider[] enabledProviders = super.getEnabledModelProviders();
+ for (int i = 0; i < enabledProviders.length; i++) {
+ ModelProvider provider = enabledProviders[i];
+ if (provider.getId().equals(ChangeSetModelProvider.ID))
+ return enabledProviders;
+ }
+ ModelProvider[] extended = new ModelProvider[enabledProviders.length + 1];
+ for (int i = 0; i < enabledProviders.length; i++) {
+ extended[i] = enabledProviders[i];
+ }
+ ChangeSetModelProvider provider = ChangeSetModelProvider.getProvider();
+ if (provider == null)
+ return enabledProviders;
+ extended[extended.length - 1] = provider;
+ return extended;
+ }
+
+ public ChangeSetCapability getChangeSetCapability() {
+ if (capability == null) {
+ capability = new WorkspaceChangeSetCapability();
+ }
+ return capability;
+ }
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
index a1e213b93..9d818e8c7 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
@@ -10,10 +10,10 @@
*******************************************************************************/
package org.eclipse.team.internal.ui.mapping;
-import java.util.*;
+import java.util.HashSet;
+import java.util.Set;
-import org.eclipse.core.resources.mapping.ResourceMapping;
-import org.eclipse.core.resources.mapping.ResourceTraversal;
+import org.eclipse.core.resources.mapping.*;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.util.IPropertyChangeListener;
@@ -119,7 +119,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
* @param configuration the configuration for the viewer
* @return a newly created common viewer
*/
- private static CommonViewer createViewer(Composite parent, ISynchronizePageConfiguration configuration, IEmptyTreeListener listener) {
+ private static CommonViewer createViewer(Composite parent, final ISynchronizePageConfiguration configuration, IEmptyTreeListener listener) {
final CommonViewer v = new NavigableCommonViewer(configuration.getViewerId(), parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, listener);
v.setSorter(new TeamViewerSorter(new CommonViewerSorter()));
ISynchronizationScope scope = getScope(configuration);
@@ -127,7 +127,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
scope.addScopeChangeListener(new ISynchronizationScopeChangeListener() {
public void scopeChanged(final ISynchronizationScope scope,
ResourceMapping[] newMappings, ResourceTraversal[] newTraversals) {
- enableContentProviders(v, scope);
+ enableContentProviders(v, configuration);
Utils.asyncExec(new Runnable() {
public void run() {
v.refresh();
@@ -136,13 +136,32 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
}, v);
}
});
- enableContentProviders(v, scope);
+ enableContentProviders(v, configuration);
configuration.getSite().setSelectionProvider(v);
return v;
}
- private static void enableContentProviders(CommonViewer v, ISynchronizationScope scope) {
- v.getNavigatorContentService().getActivationService().activateExtensions(TeamUI.getTeamContentProviderManager().getContentProviderIds(scope), true);
+ private static void enableContentProviders(CommonViewer v, ISynchronizePageConfiguration configuration) {
+ v.getNavigatorContentService().getActivationService().activateExtensions(getEnabledContentProviders(configuration), true);
+ }
+
+ private static String[] getEnabledContentProviders(ISynchronizePageConfiguration configuration) {
+ String visibleModel = (String)configuration.getProperty(ModelSynchronizeParticipant.P_VISIBLE_MODEL_PROVIDER);
+ if (visibleModel != null && !visibleModel.equals(ModelSynchronizeParticipant.ALL_MODEL_PROVIDERS_VISIBLE)) {
+ ITeamContentProviderDescriptor desc = TeamUI.getTeamContentProviderManager().getDescriptor(visibleModel);
+ if (desc != null)
+ return new String[] { desc.getContentExtensionId() };
+ }
+ ModelSynchronizeParticipant participant = (ModelSynchronizeParticipant)configuration.getParticipant();
+ ModelProvider[] providers = participant.getEnabledModelProviders();
+ Set result = new HashSet();
+ for (int i = 0; i < providers.length; i++) {
+ ModelProvider provider = providers[i];
+ ITeamContentProviderDescriptor desc = TeamUI.getTeamContentProviderManager().getDescriptor(provider.getId());
+ if (desc != null)
+ result.add(desc.getContentExtensionId());
+ }
+ return (String[]) result.toArray(new String[result.size()]);
}
private static void bindTeamContentProviders(CommonViewer v) {
@@ -169,6 +188,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
super(configuration);
final CommonViewer viewer = CommonViewerAdvisor.createViewer(parent, configuration, this);
TeamUI.getTeamContentProviderManager().addPropertyChangeListener(this);
+ configuration.addPropertyChangeListener(this);
GridData data = new GridData(GridData.FILL_BOTH);
viewer.getControl().setLayoutData(data);
viewer.getNavigatorContentService().addListener(this);
@@ -276,6 +296,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
*/
public void dispose() {
TeamUI.getTeamContentProviderManager().removePropertyChangeListener(this);
+ getConfiguration().removePropertyChangeListener(this);
actionService.dispose();
super.dispose();
}
@@ -322,7 +343,9 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(ITeamContentProviderManager.PROP_ENABLED_MODEL_PROVIDERS)) {
- enableContentProviders((CommonViewer)getViewer(), getScope(getConfiguration()));
+ enableContentProviders((CommonViewer)getViewer(), getConfiguration());
+ } else if (event.getProperty().equals(ModelSynchronizeParticipant.P_VISIBLE_MODEL_PROVIDER)) {
+ enableContentProviders((CommonViewer)getViewer(), getConfiguration());
}
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java
index 54d9e425b..d7cd618eb 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DiffTreeChangesSection.java
@@ -94,7 +94,12 @@ public class DiffTreeChangesSection extends ForwardingChangesSection implements
private boolean hasChangesFor(String id, ISynchronizationCompareAdapter adapter, ISynchronizationContext context, int[] states, int mask) {
ResourceTraversal[] traversals = context.getScope().getTraversals(id);
- return context.getDiffTree().hasMatchingDiffs(traversals, FastDiffFilter.getStateFilter(states, mask));
+ if (context.getDiffTree().hasMatchingDiffs(traversals, FastDiffFilter.getStateFilter(states, mask)))
+ return true;
+ // Return true if there are no traversals to accommodate change sets
+ if (traversals.length == 0)
+ return true;
+ return false;
}
protected long getVisibleChangesCount() {
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java
index 196f2b7b4..d020625cf 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ModelSelectionDropDownAction.java
@@ -48,7 +48,7 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator
this.configuration.addPropertyChangeListener(listener);
TeamUI.getTeamContentProviderManager().addPropertyChangeListener(listener);
getSynchronizationContext().getScope().addScopeChangeListener(this);
- showAllAction = new Action(TeamUIMessages.ModelSelectionDropDownAction_0) {
+ showAllAction = new Action(TeamUIMessages.ModelSelectionDropDownAction_0, IAction.AS_RADIO_BUTTON) {
public void run() {
Viewer v = ModelSelectionDropDownAction.this.configuration.getPage().getViewer();
v.setInput(getSynchronizationContext());
@@ -86,6 +86,7 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator
menuManager = new MenuManager();
fMenu = menuManager.createContextMenu(parent);
menuManager.add(showAllAction);
+ showAllAction.setChecked(getActiveProviderId().equals(ModelSynchronizeParticipant.ALL_MODEL_PROVIDERS_VISIBLE));
ModelProvider[] modelProviders = getEnabledModelProviders();
if (modelProviders.length > 0)
menuManager.add(new Separator());
@@ -157,6 +158,7 @@ public class ModelSelectionDropDownAction extends Action implements IMenuCreator
setToolTipText(text);
setText(text);
if (menuManager != null) {
+ showAllAction.setChecked(getActiveProviderId().equals(ModelSynchronizeParticipant.ALL_MODEL_PROVIDERS_VISIBLE));
IContributionItem[] items = menuManager.getItems();
for (int i = 0; i < items.length; i++) {
IContributionItem item = items[i];
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelActionProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelActionProvider.java
index 3dc3ef6ff..d6f562e10 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelActionProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelActionProvider.java
@@ -49,7 +49,7 @@ public class ResourceModelActionProvider extends SynchronizationActionProvider {
(ISynchronizePageConfiguration)getExtensionStateModel().getProperty(ITeamContentProviderManager.P_SYNCHRONIZATION_PAGE_CONFIGURATION));
registerHandler(MARK_AS_MERGE_ACTION_ID, markAsMergedHandler);
- ICommonViewerSite cvs = getExtensionSite().getViewSite();
+ ICommonViewerSite cvs = getActionSite().getViewSite();
ISynchronizePageConfiguration configuration = getSynchronizePageConfiguration();
if (cvs instanceof ICommonViewerWorkbenchSite && configuration != null) {
ICommonViewerWorkbenchSite cvws = (ICommonViewerWorkbenchSite) cvs;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelContentProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelContentProvider.java
index 2100d15e7..7b5544a02 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelContentProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/ResourceModelContentProvider.java
@@ -127,24 +127,29 @@ public class ResourceModelContentProvider extends SynchronizationContentProvider
IResource resource = (IResource) parent;
if (!resource.isAccessible())
return new Object[0];
- Object[] allChildren;
- if (getLayout().equals(IPreferenceIds.FLAT_LAYOUT) && resource.getType() == IResource.PROJECT) {
- allChildren = getFlatChildren(context, resource);
- } else if (getLayout().equals(IPreferenceIds.COMPRESSED_LAYOUT) && resource.getType() == IResource.PROJECT) {
- allChildren = getCompressedChildren(context, (IProject)resource, children);
- } else if (getLayout().equals(IPreferenceIds.COMPRESSED_LAYOUT) && resource.getType() == IResource.FOLDER) {
- allChildren = getCompressedChildren(context, (IFolder)resource, children);
- } else {
- allChildren = getTreeChildren(context, resource, children);
- }
+ IResourceDiffTree diffTree = context.getDiffTree();
+ Object[] allChildren = filterChildren(diffTree, resource, children);
return super.getChildrenInContext(context, parent, allChildren);
}
return super.getChildrenInContext(context, parent, children);
}
- private Object[] getCompressedChildren(ISynchronizationContext context, IProject project, Object[] children) {
+ protected Object[] filterChildren(IResourceDiffTree diffTree, IResource resource, Object[] children) {
+ Object[] allChildren;
+ if (getLayout().equals(IPreferenceIds.FLAT_LAYOUT) && resource.getType() == IResource.PROJECT) {
+ allChildren = getFlatChildren(diffTree, resource);
+ } else if (getLayout().equals(IPreferenceIds.COMPRESSED_LAYOUT) && resource.getType() == IResource.PROJECT) {
+ allChildren = getCompressedChildren(diffTree, (IProject)resource, children);
+ } else if (getLayout().equals(IPreferenceIds.COMPRESSED_LAYOUT) && resource.getType() == IResource.FOLDER) {
+ allChildren = getCompressedChildren(diffTree, (IFolder)resource, children);
+ } else {
+ allChildren = getTreeChildren(diffTree, resource, children);
+ }
+ return allChildren;
+ }
+
+ private Object[] getCompressedChildren(IResourceDiffTree diffTree, IProject project, Object[] children) {
Set result = new HashSet();
- IResourceDiffTree diffTree = context.getDiffTree();
IDiff[] diffs = diffTree.getDiffs(project, IResource.DEPTH_INFINITE);
for (int i = 0; i < diffs.length; i++) {
IDiff diff = diffs[i];
@@ -164,7 +169,7 @@ public class ResourceModelContentProvider extends SynchronizationContentProvider
/*
* Only return the files that are direct children of the folder
*/
- private Object[] getCompressedChildren(ISynchronizationContext context, IFolder folder, Object[] children) {
+ private Object[] getCompressedChildren(IResourceDiffTree diffTree, IFolder folder, Object[] children) {
Set result = new HashSet();
for (int i = 0; i < children.length; i++) {
Object object = children[i];
@@ -174,7 +179,6 @@ public class ResourceModelContentProvider extends SynchronizationContentProvider
result.add(resource);
}
}
- IResourceDiffTree diffTree = context.getDiffTree();
IDiff[] diffs = diffTree.getDiffs(folder, IResource.DEPTH_ONE);
for (int i = 0; i < diffs.length; i++) {
IDiff diff = diffs[i];
@@ -185,9 +189,8 @@ public class ResourceModelContentProvider extends SynchronizationContentProvider
return result.toArray();
}
- private Object[] getFlatChildren(ISynchronizationContext context, IResource resource) {
+ private Object[] getFlatChildren(IResourceDiffTree diffTree, IResource resource) {
Object[] allChildren;
- IResourceDiffTree diffTree = context.getDiffTree();
IDiff[] diffs = diffTree.getDiffs(resource, IResource.DEPTH_INFINITE);
ArrayList result = new ArrayList();
for (int i = 0; i < diffs.length; i++) {
@@ -198,16 +201,16 @@ public class ResourceModelContentProvider extends SynchronizationContentProvider
return allChildren;
}
- private Object[] getTreeChildren(ISynchronizationContext context, IResource resource, Object[] children) {
+ private Object[] getTreeChildren(IResourceDiffTree diffTree, IResource resource, Object[] children) {
Set result = new HashSet();
for (int i = 0; i < children.length; i++) {
Object object = children[i];
result.add(object);
}
- IPath[] childPaths = context.getDiffTree().getChildren(resource.getFullPath());
+ IPath[] childPaths = diffTree.getChildren(resource.getFullPath());
for (int i = 0; i < childPaths.length; i++) {
IPath path = childPaths[i];
- IDiff delta = context.getDiffTree().getDiff(path);
+ IDiff delta = diffTree.getDiff(path);
IResource child;
if (delta == null) {
// the path has descendent deltas so it must be a folder
@@ -217,11 +220,9 @@ public class ResourceModelContentProvider extends SynchronizationContentProvider
child = ((IContainer)resource).getFolder(new Path(path.lastSegment()));
}
} else {
- child = context.getDiffTree().getResource(delta);
- }
- if (isInScope(context.getScope(), resource, child)) {
- result.add(child);
+ child = diffTree.getResource(delta);
}
+ result.add(child);
}
Object[] allChildren = result.toArray(new Object[result.size()]);
return allChildren;
@@ -364,7 +365,7 @@ public class ResourceModelContentProvider extends SynchronizationContentProvider
return (StructuredViewer)getViewer();
}
- private String getLayout() {
+ protected String getLayout() {
return TeamUIPlugin.getPlugin().getPreferenceStore().getString(IPreferenceIds.SYNCVIEW_DEFAULT_LAYOUT);
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java
index 111dc1ec5..22a0d238a 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/TeamViewerSorter.java
@@ -38,7 +38,7 @@ public class TeamViewerSorter extends TreePathViewerSorter {
}
public int compare(Viewer viewer, TreePath parentPath, Object e1, Object e2) {
- if (parentPath.getSegmentCount() == 0) {
+ if (parentPath == null || parentPath.getSegmentCount() == 0) {
// We need to handle the sorting at the top level
int cat1 = category(e1);
int cat2 = category(e2);
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java
index 979b1a67a..110cdaae9 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java
@@ -70,14 +70,14 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
/**
* Property that gives access to a set the
- * contains all out-of-sync resources for the particpant
+ * contains all out-of-sync resources for the participant
* in the selected working set.
*/
public static final String P_WORKING_SET_SYNC_INFO_SET = TeamUIPlugin.ID + ".P_WORKING_SET_SYNC_INFO_SET"; //$NON-NLS-1$
/**
* Property that gives access to a set the
- * contains all out-of-sync resources for the particpant
+ * contains all out-of-sync resources for the participant
* before any filtering (working set or modes) is applied.
*/
public static final String P_PARTICIPANT_SYNC_INFO_SET = TeamUIPlugin.ID + ".P_PARTICIPANT_SYNC_INFO_SET"; //$NON-NLS-1$
@@ -111,8 +111,8 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
private IRunnableContext context;
/**
- * Create a configuration for creating a page from the given particpant.
- * @param participant the particpant whose page is being configured
+ * Create a configuration for creating a page from the given participant.
+ * @param participant the participant whose page is being configured
*/
public SynchronizePageConfiguration(ISynchronizeParticipant participant) {
this.participant = participant;
@@ -224,7 +224,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
final PropertyChangeEvent event = new PropertyChangeEvent(this, key, oldValue, newValue);
for (int i = 0; i < listeners.length; i++) {
final IPropertyChangeListener listener = (IPropertyChangeListener)listeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
// Error is logged by platform
}
@@ -252,7 +252,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
}
for (int i= 0; i < listeners.length; i++) {
final SynchronizePageActionGroup contribution = (SynchronizePageActionGroup)listeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
// Logged by Platform
}
@@ -274,7 +274,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
}
for (int i= 0; i < listeners.length; i++) {
final SynchronizePageActionGroup contribution = (SynchronizePageActionGroup)listeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
// Logged by Platform
}
@@ -297,7 +297,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
}
for (int i= 0; i < listeners.length; i++) {
final SynchronizePageActionGroup contribution = (SynchronizePageActionGroup)listeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
// Logged by Platform
}
@@ -309,7 +309,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
}
/**
- * Callback invoked from the page to fil the action bars.
+ * Callback invoked from the page to fill the action bars.
* @param actionBars the action bars of the view
*/
public void fillActionBars(final IActionBars actionBars) {
@@ -322,7 +322,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
}
for (int i= 0; i < listeners.length; i++) {
final SynchronizePageActionGroup contribution = (SynchronizePageActionGroup)listeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
// Logged by Platform
}
@@ -343,7 +343,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
}
for (int i= 0; i < listeners.length; i++) {
final SynchronizePageActionGroup contribution = (SynchronizePageActionGroup)listeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
// Logged by Platform
}
@@ -364,7 +364,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
}
for (int i= 0; i < listeners.length; i++) {
final SynchronizePageActionGroup contribution = (SynchronizePageActionGroup)listeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
// Logged by Platform
}
@@ -387,7 +387,7 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
}
for (int i= 0; i < listeners.length; i++) {
final SynchronizePageActionGroup contribution = (SynchronizePageActionGroup)listeners[i];
- Platform.run(new ISafeRunnable() {
+ SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
// Logged by Platform
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionProvider.java
index 4207cd904..732bc73f5 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionProvider.java
@@ -63,10 +63,9 @@ public class SynchronizationActionProvider extends CommonActionProvider {
private Map handlers = new HashMap();
private OpenWithActionGroup openWithActions;
- private ICommonActionExtensionSite site;
public void init(ICommonActionExtensionSite site) {
- this.site = site;
+ super.init(site);
initialize();
}
@@ -93,7 +92,7 @@ public class SynchronizationActionProvider extends CommonActionProvider {
*
*/
protected void initializeOpenActions() {
- ICommonViewerSite cvs = site.getViewSite();
+ ICommonViewerSite cvs = getActionSite().getViewSite();
ISynchronizePageConfiguration configuration = getSynchronizePageConfiguration();
if (cvs instanceof ICommonViewerWorkbenchSite && configuration != null) {
ICommonViewerWorkbenchSite cvws = (ICommonViewerWorkbenchSite) cvs;
@@ -121,7 +120,7 @@ public class SynchronizationActionProvider extends CommonActionProvider {
* action provider
*/
protected final IExtensionStateModel getExtensionStateModel() {
- return site.getExtensionStateModel();
+ return getActionSite().getExtensionStateModel();
}
/**
@@ -198,10 +197,11 @@ public class SynchronizationActionProvider extends CommonActionProvider {
/**
* Return the extension site for this action provider.
+ * This method just calls {@link #getActionSite()}.
* @return the extension site for this action provider
*/
public ICommonActionExtensionSite getExtensionSite() {
- return site;
+ return getActionSite();
}
}

Back to the top