Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Valenta2005-10-12 17:16:04 +0000
committerMichael Valenta2005-10-12 17:16:04 +0000
commit5d365b9600e134b3f994eb1cb952bb4baf476639 (patch)
tree88734b426161091bc92198ae4d0964807141416d
parent1de29af75867854cef5643d879949c6947902b50 (diff)
downloadeclipse.platform.team-5d365b9600e134b3f994eb1cb952bb4baf476639.tar.gz
eclipse.platform.team-5d365b9600e134b3f994eb1cb952bb4baf476639.tar.xz
eclipse.platform.team-5d365b9600e134b3f994eb1cb952bb4baf476639.zip
Refactored Input to use new context API and added input to operations
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfoTree.java26
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberResourceMappingContext.java24
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UpdateModelAction.java23
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java146
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/ResourceMappingResourceDisplayArea.java18
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DefaultResourceMappingMerger.java36
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/IResourceMappingOperationInput.java88
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingCheckinOperation.java5
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingLoadOperation.java4
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingMergeOperation.java137
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperation.java47
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperationInput.java95
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SimpleResourceMappingOperationInput.java149
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/TeamViewerContext.java6
14 files changed, 445 insertions, 359 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfoTree.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfoTree.java
index 353830cc6..2cf849a93 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfoTree.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/synchronize/SyncInfoTree.java
@@ -12,6 +12,7 @@ package org.eclipse.team.core.synchronize;
import java.util.*;
+import org.eclipse.core.internal.resources.mapping.ResourceTraversal;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.team.internal.core.Messages;
@@ -350,4 +351,29 @@ public class SyncInfoTree extends SyncInfoSet {
return (IResource[]) children.toArray(new IResource[children.size()]);
}
+ /**
+ * Return the sync info contained in this set that are contained
+ * in the given traversals.
+ * @param traversals the traversals
+ * @return the sync info contained in this set that are contained
+ * in the given traversals
+ * @since 3.2
+ */
+ public SyncInfo[] getSyncInfos(ResourceTraversal[] traversals) {
+ SyncInfoSet set = new SyncInfoSet();
+ for (int i = 0; i < traversals.length; i++) {
+ ResourceTraversal traversal = traversals[i];
+ IResource[] resources = traversal.getResources();
+ for (int j = 0; j < resources.length; j++) {
+ IResource resource = resources[j];
+ SyncInfo[] infos = getSyncInfos(resource, traversal.getDepth());
+ for (int k = 0; k < infos.length; k++) {
+ SyncInfo info = infos[k];
+ set.add(info);
+ }
+ }
+ }
+ return set.getSyncInfos();
+ }
+
}
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberResourceMappingContext.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberResourceMappingContext.java
index a919edb80..dce825159 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberResourceMappingContext.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/subscribers/SubscriberResourceMappingContext.java
@@ -10,17 +10,29 @@
*******************************************************************************/
package org.eclipse.team.internal.core.subscribers;
-import java.util.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
-import org.eclipse.core.internal.resources.mapping.*;
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.internal.resources.mapping.RemoteResourceMappingContext;
+import org.eclipse.core.internal.resources.mapping.ResourceTraversal;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceStatus;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.core.subscribers.Subscriber;
import org.eclipse.team.core.synchronize.SyncInfo;
import org.eclipse.team.core.synchronize.SyncInfoFilter;
import org.eclipse.team.core.variants.IResourceVariant;
-import org.eclipse.team.internal.core.*;
+import org.eclipse.team.internal.core.Messages;
+import org.eclipse.team.internal.core.Policy;
+import org.eclipse.team.internal.core.TeamPlugin;
/**
* A resource mapping context that provides the client access to the remote state
@@ -126,7 +138,7 @@ public class SubscriberResourceMappingContext extends RemoteResourceMappingConte
this.autoRefresh = autoRefresh;
}
- /* (non-Javadoc)
+ /* (non-Javadoc)
* @see org.eclipse.core.internal.resources.mapping.RemoteResourceMappingContext#hasRemoteChange(org.eclipse.core.resources.IResource, org.eclipse.core.runtime.IProgressMonitor)
*/
public final boolean hasRemoteChange(IResource resource, IProgressMonitor monitor) throws CoreException {
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UpdateModelAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UpdateModelAction.java
index 22be7fd43..2302a1f18 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UpdateModelAction.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/UpdateModelAction.java
@@ -17,10 +17,9 @@ import org.eclipse.core.internal.resources.mapping.ResourceMapping;
import org.eclipse.core.resources.mapping.ModelProvider;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
-import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
-import org.eclipse.team.internal.core.subscribers.SubscriberResourceMappingContext;
import org.eclipse.team.ui.mapping.IMergeContext;
import org.eclipse.team.ui.mapping.IResourceMappingManualMerger;
+import org.eclipse.team.ui.mapping.IResourceMappingOperationInput;
import org.eclipse.team.ui.mapping.ResourceMappingMergeOperation;
import org.eclipse.team.ui.synchronize.ResourceMappingScope;
import org.eclipse.ui.IWorkbenchPart;
@@ -34,12 +33,12 @@ public class UpdateModelAction extends WorkspaceTraversalAction {
private class CVSMergeOperation extends ResourceMappingMergeOperation {
- protected CVSMergeOperation(IWorkbenchPart part, ResourceMapping[] mappings) {
- super(part, mappings);
+ protected CVSMergeOperation(IWorkbenchPart part, IResourceMappingOperationInput input) {
+ super(part, input);
}
- protected IMergeContext buildMergeContext(ModelProvider provider, ResourceMapping[] mappings, ResourceMappingScope scope, IProgressMonitor monitor) {
- return CVSMergeContext.createContext(mappings, scope, monitor);
+ protected IMergeContext buildMergeContext(ResourceMappingScope scope, IProgressMonitor monitor) {
+ return CVSMergeContext.createContext(scope.getResourceMappings(), scope, monitor);
}
protected IResourceMappingManualMerger getDefaultManualMerger() {
@@ -47,14 +46,6 @@ public class UpdateModelAction extends WorkspaceTraversalAction {
return null;
}
- protected RemoteResourceMappingContext getAncestorContext() {
- return SubscriberResourceMappingContext.getCheckInContext(CVSProviderPlugin.getPlugin().getCVSWorkspaceSubscriber());
- }
-
- protected RemoteResourceMappingContext getRemoteContext() {
- return SubscriberResourceMappingContext.getUpdateContext(CVSProviderPlugin.getPlugin().getCVSWorkspaceSubscriber());
- }
-
}
/*
@@ -72,9 +63,9 @@ public class UpdateModelAction extends WorkspaceTraversalAction {
}
public void execute(IAction action) throws InterruptedException, InvocationTargetException {
- new CVSMergeOperation(getTargetPart(), getCVSResourceMappings()).run();
+ new CVSMergeOperation(getTargetPart(), getOperationInput()).run();
}
-
+
public String getId() {
return "org.eclipse.team.cvs.ui.modelupdate";
}
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
index e1206716a..840829c91 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/WorkspaceTraversalAction.java
@@ -11,23 +11,29 @@
package org.eclipse.team.internal.ccvs.ui.actions;
import java.lang.reflect.InvocationTargetException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
-import org.eclipse.core.internal.resources.mapping.*;
-import org.eclipse.core.resources.*;
-import org.eclipse.core.resources.mapping.IModelProviderDescriptor;
-import org.eclipse.core.resources.mapping.ModelProvider;
-import org.eclipse.core.runtime.*;
+import org.eclipse.core.internal.resources.mapping.ResourceMapping;
+import org.eclipse.core.internal.resources.mapping.ResourceMappingContext;
+import org.eclipse.core.internal.resources.mapping.ResourceTraversal;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.ltk.core.refactoring.participants.*;
import org.eclipse.team.core.RepositoryProvider;
import org.eclipse.team.core.subscribers.Subscriber;
import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin;
import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
import org.eclipse.team.internal.core.subscribers.SubscriberResourceMappingContext;
import org.eclipse.team.internal.ui.dialogs.AdditionalMappingsDialog;
+import org.eclipse.team.ui.mapping.IResourceMappingOperationInput;
+import org.eclipse.team.ui.mapping.ResourceMappingOperationInput;
+import org.eclipse.team.ui.mapping.SimpleResourceMappingOperationInput;
import org.eclipse.team.ui.mapping.TeamViewerContext;
import org.eclipse.ui.PlatformUI;
@@ -46,14 +52,20 @@ public abstract class WorkspaceTraversalAction extends WorkspaceAction {
*/
protected ResourceMapping[] getCVSResourceMappings() {
ResourceMapping[] selectedMappings = getSelectedResourceMappings(CVSProviderPlugin.getTypeId());
- ResourceMapping[] allMappings = convertToParticipantMappings(selectedMappings);
- return showAllMappings(selectedMappings, allMappings);
+ try {
+ IResourceMappingOperationInput input = new ResourceMappingOperationInput(selectedMappings, ResourceMappingContext.LOCAL_CONTEXT);
+ input.buildInput(new NullProgressMonitor());
+ if (input.hasAdditionalMappings()) {
+ ResourceMapping[] allMappings = input.getInputMappings();
+ return showAllMappings(selectedMappings, allMappings);
+ }
+ } catch (CoreException e) {
+ CVSUIPlugin.log(e);
+ }
+ return selectedMappings;
}
private ResourceMapping[] showAllMappings(final ResourceMapping[] selectedMappings, final ResourceMapping[] allMappings) {
- if (isEqualArrays(selectedMappings, allMappings))
- return allMappings;
-
final boolean[] canceled = new boolean[] { false };
getShell().getDisplay().syncExec(new Runnable() {
public void run() {
@@ -70,104 +82,6 @@ public abstract class WorkspaceTraversalAction extends WorkspaceAction {
return allMappings;
}
- private boolean isEqualArrays(ResourceMapping[] selectedMappings, ResourceMapping[] allMappings) {
- if (selectedMappings.length != allMappings.length)
- return false;
- for (int i = 0; i < allMappings.length; i++) {
- ResourceMapping mapping = allMappings[i];
- boolean matchFound = false;
- for (int j = 0; j < selectedMappings.length; j++) {
- ResourceMapping selected = selectedMappings[j];
- if (selected.equals(mapping)) {
- matchFound = true;
- break;
- }
- }
- if (!matchFound) return false;
- }
- return true;
- }
-
- /*
- * Use the registered teamParticpants to determine if additional mappings should be included
- * in the operation.
- */
- public static ResourceMapping[] convertToParticipantMappings(ResourceMapping[] selectedMappings) {
- try {
- Map result = new HashMap();
- // TODO: Result drops original selection
- IResource[] resources= getResources(selectedMappings);
- IModelProviderDescriptor[] descriptors = ModelProvider.getModelProviderDescriptors();
- for (int i = 0; i < descriptors.length; i++) {
- IModelProviderDescriptor descriptor = descriptors[i];
- ResourceMapping[] mappings = descriptor.getMappings(resources, getNatures(selectedMappings), new ResourceMappingContext[] { ResourceMappingContext.LOCAL_CONTEXT}, new NullProgressMonitor());
- for (int j = 0; j < mappings.length; j++) {
- ResourceMapping mapping = mappings[j];
- result.put(mapping.getModelObject(), mapping);
- }
- }
- return (ResourceMapping[]) result.values().toArray(new ResourceMapping[result.size()]);
- } catch (CoreException e) {
- CVSUIPlugin.log(e);
- }
- return selectedMappings;
- }
-
- private static IResource[] getResources(ResourceMapping[] selectedMappings) throws CoreException {
- Set result = new HashSet();
- for (int i = 0; i < selectedMappings.length; i++) {
- ResourceMapping mapping = selectedMappings[i];
- ResourceTraversal[] traversals = mapping.getTraversals(ResourceMappingContext.LOCAL_CONTEXT, new NullProgressMonitor());
- for (int j = 0; j < traversals.length; j++) {
- ResourceTraversal traversal = traversals[j];
- IResource[] resources = traversal.getResources();
- if (traversal.getDepth() == IResource.DEPTH_INFINITE) {
- result.addAll(Arrays.asList(resources));
- } else if (traversal.getDepth() == IResource.DEPTH_ONE) {
- for (int k = 0; k < resources.length; k++) {
- IResource resource = resources[k];
- if (resource.getType() == IResource.FILE) {
- result.add(resource);
- } else {
- IResource[] members = ((IContainer)resource).members();
- for (int index = 0; index < members.length; index++) {
- IResource member = members[index];
- if (member.getType() == IResource.FILE) {
- result.add(member);
- }
- }
- }
- }
- } else {
- for (int k = 0; k < resources.length; k++) {
- IResource resource = resources[k];
- if (resource.getType() == IResource.FILE) {
- result.add(resource);
- }
- }
- }
- }
- }
- return (IResource[]) result.toArray(new IResource[result.size()]);
- }
-
- private static String[] getNatures(ResourceMapping[] selectedMappings) {
- Set result = new HashSet();
- for (int i = 0; i < selectedMappings.length; i++) {
- ResourceMapping mapping = selectedMappings[i];
- IProject[] projects = mapping.getProjects();
- for (int j = 0; j < projects.length; j++) {
- IProject project = projects[j];
- try {
- result.addAll(Arrays.asList(project.getDescription().getNatureIds()));
- } catch (CoreException e) {
- CVSUIPlugin.log(e);
- }
- }
- }
- return (String[]) result.toArray(new String[result.size()]);
- }
-
protected static IResource[] getRootTraversalResources(ResourceMapping[] mappings, ResourceMappingContext context, IProgressMonitor monitor) throws CoreException {
List result = new ArrayList();
for (int i = 0; i < mappings.length; i++) {
@@ -195,7 +109,15 @@ public abstract class WorkspaceTraversalAction extends WorkspaceAction {
return getResourcesToCompare(getCVSResourceMappings(), subscriber);
}
- public static IResource[] getResourcesToCompare(final ResourceMapping[] mappings, final Subscriber subscriber) throws InvocationTargetException {
+ protected ResourceMappingContext getResourceMappingContext() {
+ return SubscriberResourceMappingContext.getCompareContext(CVSProviderPlugin.getPlugin().getCVSWorkspaceSubscriber());
+ }
+
+ protected SimpleResourceMappingOperationInput getOperationInput() {
+ return new SimpleResourceMappingOperationInput(getSelectedResourceMappings(CVSProviderPlugin.getTypeId()), getResourceMappingContext());
+ }
+
+ public static IResource[] getResourcesToCompare(final ResourceMapping[] mappings, final Subscriber subscriber) throws InvocationTargetException {
// Determine what resources need to be synchronized.
// Use a resource mapping context to include any relevant remote resources
final IResource[][] resources = new IResource[][] { null };
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/ResourceMappingResourceDisplayArea.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/ResourceMappingResourceDisplayArea.java
index 0e0ffa19b..c32cf30d8 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/ResourceMappingResourceDisplayArea.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/ResourceMappingResourceDisplayArea.java
@@ -71,17 +71,13 @@ public class ResourceMappingResourceDisplayArea extends DialogArea {
*/
public static String getLabel(ResourceMapping mapping) {
Object o = null;
- try {
- o = mapping.getModelProvider().getAdapter(INavigatorContentExtensionFactory.class);
- if (o instanceof INavigatorContentExtensionFactory) {
- INavigatorContentExtensionFactory factory = (INavigatorContentExtensionFactory) o;
- ILabelProvider labelProvider = factory.getLabelProvider();
- String text = labelProvider.getText(mapping);
- labelProvider.dispose(); // TODO should keep label provider around
- return text;
- }
- } catch (CoreException e) {
- TeamUIPlugin.log(e);
+ o = mapping.getModelProvider().getAdapter(INavigatorContentExtensionFactory.class);
+ if (o instanceof INavigatorContentExtensionFactory) {
+ INavigatorContentExtensionFactory factory = (INavigatorContentExtensionFactory) o;
+ ILabelProvider labelProvider = factory.getLabelProvider();
+ String text = labelProvider.getText(mapping);
+ labelProvider.dispose(); // TODO should keep label provider around
+ return text;
}
o = mapping;
IWorkbenchAdapter workbenchAdapter = getWorkbenchAdapter((IAdaptable)o);
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DefaultResourceMappingMerger.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DefaultResourceMappingMerger.java
index 9941166fe..c05d9934f 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DefaultResourceMappingMerger.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/DefaultResourceMappingMerger.java
@@ -10,35 +10,63 @@
*******************************************************************************/
package org.eclipse.team.internal.ui.mapping;
+import org.eclipse.core.internal.resources.mapping.ResourceMapping;
+import org.eclipse.core.internal.resources.mapping.ResourceTraversal;
+import org.eclipse.core.resources.mapping.ModelProvider;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.team.core.synchronize.SyncInfo;
+import org.eclipse.team.core.synchronize.SyncInfoTree;
import org.eclipse.team.internal.ui.Policy;
import org.eclipse.team.ui.mapping.IMergeContext;
import org.eclipse.team.ui.mapping.IResourceMappingMerger;
+import org.eclipse.team.ui.mapping.IResourceMappingOperationInput;
import org.eclipse.team.ui.mapping.MergeStatus;
-import org.eclipse.team.ui.synchronize.ResourceMappingScope;
/**
* A default merger that delegates the merge to the merge context.
*/
public class DefaultResourceMappingMerger implements IResourceMappingMerger {
+ private final ModelProvider provider;
+ private final IResourceMappingOperationInput input;
+
+ public DefaultResourceMappingMerger(ModelProvider provider, IResourceMappingOperationInput input) {
+ this.provider = provider;
+ this.input = input;
+ }
+
public IStatus merge(IMergeContext mergeContext, IProgressMonitor monitor) throws CoreException {
try {
+ SyncInfoTree tree = getSetToMerge(mergeContext);
monitor.beginTask(null, 100);
- IStatus status = mergeContext.merge(mergeContext.getSyncInfoTree(), Policy.subMonitorFor(monitor, 75));
+ IStatus status = mergeContext.merge(tree, Policy.subMonitorFor(monitor, 75));
return covertFilesToMappings(status, mergeContext);
} finally {
monitor.done();
}
}
+ private SyncInfoTree getSetToMerge(IMergeContext mergeContext) {
+ ResourceMapping[] mappings = input.getMappings(provider);
+ SyncInfoTree result = new SyncInfoTree();
+ for (int i = 0; i < mappings.length; i++) {
+ ResourceMapping mapping = mappings[i];
+ ResourceTraversal[] traversals = input.getTraversal(mapping);
+ SyncInfo[] infos = mergeContext.getSyncInfoTree().getSyncInfos(traversals);
+ for (int j = 0; j < infos.length; j++) {
+ SyncInfo info = infos[j];
+ result.add(info);
+ }
+ }
+ return result;
+ }
+
private IStatus covertFilesToMappings(IStatus status, IMergeContext mergeContext) {
if (status.getCode() == MergeStatus.CONFLICTS) {
// In general, we can't say which mapping failed so return them all
- // TODO: Should not assume that we are dealing with a resource mapping scope
- return new MergeStatus(status.getPlugin(), status.getMessage(), ((ResourceMappingScope)mergeContext.getScope()).getResourceMappings());
+ return new MergeStatus(status.getPlugin(), status.getMessage(), input.getMappings(provider));
}
return status;
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/IResourceMappingOperationInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/IResourceMappingOperationInput.java
new file mode 100644
index 000000000..7e28afbaa
--- /dev/null
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/IResourceMappingOperationInput.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 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.ui.mapping;
+
+import org.eclipse.core.internal.resources.mapping.ResourceMapping;
+import org.eclipse.core.internal.resources.mapping.ResourceTraversal;
+import org.eclipse.core.resources.mapping.ModelProvider;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * Interface which defines the protocol for translating
+ * a set of <code>ResourceMapping</code> objects representing
+ * a view selection into the complete set of resources to
+ * be operated on.
+ * <p>
+ * This interface is not intended to be implemented by clients
+ * @see org.eclipse.core.internal.resources.mapping.ResourceMapping
+ * @since 3.2
+ */
+public interface IResourceMappingOperationInput {
+
+ /**
+ * Return the set of mappings that were selected
+ * when the operation was launched. These mappings
+ * are used to seed the input determination process.
+ * @return the set of mappings that were selected
+ * when the operation was launched
+ */
+ public ResourceMapping[] getSeedMappings();
+
+ /**
+ * Calculate the set of mappings to be operated on.
+ * This method must be called before <code>getInputMappings</code>
+ * or <code>getInputTraversals</code>.
+ *
+ * @param monitor a progress monitor
+ * @throws CoreException
+ */
+ public void buildInput(IProgressMonitor monitor) throws CoreException;
+
+ /**
+ * Return the complete set of mappings to be operated on.
+ * This method should only be invoked after <code>buildInput</code>
+ * is called.
+ * @return the complete set of mappings to be operated on
+ */
+ public ResourceMapping[] getInputMappings();
+
+ /**
+ * Return the set of traversals that cover the input
+ * resource mappings.
+ * This method should only be invoked after <code>buildInput</code>
+ * is called.
+ * @return the complete set of mappings to be operated on
+ */
+ public ResourceTraversal[] getInputTraversals();
+
+ /**
+ * Return the traversals that cover the given mapping.
+ * @param mapping a resource mapping being operated on
+ * @return the traversals that cover the given resource mapping
+ * (or <code>null</code> if the mapping is not contained in the input)
+ */
+ public ResourceTraversal[] getTraversal(ResourceMapping mapping);
+
+ /**
+ * Return whether the input has additional mappings added to the
+ * seed mappings.
+ * This method should only be invoked after <code>buildInput</code>
+ * is called.
+ * @return whether the input has additional mappings added to the
+ * seed mappings
+ */
+ public boolean hasAdditionalMappings();
+
+ public ModelProvider[] getModelProviders();
+
+ public ResourceMapping[] getMappings(ModelProvider provider);
+}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingCheckinOperation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingCheckinOperation.java
index 745458c14..85fb91140 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingCheckinOperation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingCheckinOperation.java
@@ -12,7 +12,6 @@ package org.eclipse.team.ui.mapping;
import java.lang.reflect.InvocationTargetException;
-import org.eclipse.core.internal.resources.mapping.ResourceMapping;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.ui.IWorkbenchPart;
@@ -73,8 +72,8 @@ import org.eclipse.ui.IWorkbenchPart;
*/
public abstract class ResourceMappingCheckinOperation extends ResourceMappingOperation {
- protected ResourceMappingCheckinOperation(IWorkbenchPart part, ResourceMapping[] mappings) {
- super(part, mappings);
+ protected ResourceMappingCheckinOperation(IWorkbenchPart part, IResourceMappingOperationInput input) {
+ super(part, input);
}
protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingLoadOperation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingLoadOperation.java
index 951934811..7d0f724de 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingLoadOperation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingLoadOperation.java
@@ -40,8 +40,8 @@ import org.eclipse.ui.IWorkbenchPart;
*/
public class ResourceMappingLoadOperation extends ResourceMappingOperation {
- protected ResourceMappingLoadOperation(IWorkbenchPart part, ResourceMapping[] mappings) {
- super(part, mappings);
+ protected ResourceMappingLoadOperation(IWorkbenchPart part, IResourceMappingOperationInput input) {
+ super(part, input);
}
protected void execute(IProgressMonitor monitor)
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingMergeOperation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingMergeOperation.java
index a1a625dba..c5dd63c4d 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingMergeOperation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingMergeOperation.java
@@ -105,12 +105,9 @@ import org.eclipse.ui.IWorkbenchPart;
* the merge at the level selected and not involve participants.
*/
public abstract class ResourceMappingMergeOperation extends ResourceMappingOperation {
-
- private Map providerToMappings;
- private Map providerToTraversalsMap;
- protected ResourceMappingMergeOperation(IWorkbenchPart part, ResourceMapping[] mappings) {
- super(part, mappings);
+ protected ResourceMappingMergeOperation(IWorkbenchPart part, IResourceMappingOperationInput input) {
+ super(part, input);
}
/* (non-Javadoc)
@@ -118,88 +115,27 @@ public abstract class ResourceMappingMergeOperation extends ResourceMappingOpera
*/
protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
try {
- Map contexts = buildMergeContexts(monitor);
- for (Iterator iter = contexts.keySet().iterator(); iter.hasNext();) {
- ModelProvider provider = (ModelProvider) iter.next();
- performMerge(provider, (IMergeContext)contexts.get(provider), monitor);
+ IMergeContext context = buildMergeContext(monitor);
+ ModelProvider[] providers = getInput().getModelProviders();
+ for (int i = 0; i < providers.length; i++) {
+ ModelProvider provider = providers[i];
+ performMerge(provider, context, monitor);
}
} catch (CoreException e) {
throw new InvocationTargetException(e);
}
}
- private Map buildMergeContexts(IProgressMonitor monitor) throws CoreException {
- Map providerToMappings = getProviderToMappingsMap();
- Map result = new HashMap();
- for (Iterator iter = providerToMappings.keySet().iterator(); iter.hasNext();) {
- ModelProvider provider = (ModelProvider) iter.next();
- List list = (List)providerToMappings.get(provider);
- ResourceMapping[] providerMappings = (ResourceMapping[]) list.toArray(new ResourceMapping[list.size()]);
- ResourceMappingScope scope = buildMergeContextScope(provider, providerMappings, monitor);
- IMergeContext context = buildMergeContext(provider, providerMappings, scope, monitor);
- result.put(provider, context);
- }
- return result;
+ private IMergeContext buildMergeContext(IProgressMonitor monitor) throws CoreException {
+ ResourceMappingScope scope = buildMergeContextScope(monitor);
+ IMergeContext context = buildMergeContext(scope, monitor);
+ return context;
}
- private ResourceMappingScope buildMergeContextScope(ModelProvider provider, ResourceMapping[] providerMappings, IProgressMonitor monitor) throws CoreException {
- RemoteResourceMappingContext context = getRemoteContext();
- ResourceTraversal[] remoteTraversals = provider.getTraversals(providerMappings, context, monitor);
- RemoteResourceMappingContext ancestorContext = getAncestorContext();
- ResourceTraversal[] ancestorTraversals = provider.getTraversals(providerMappings, context, monitor);
- ResourceTraversal[] traversals = combineTraversals(remoteTraversals, ancestorTraversals);
- return new ResourceMappingScope("TODO: Provide mapping scope description", providerMappings, traversals);
+ private ResourceMappingScope buildMergeContextScope(IProgressMonitor monitor) throws CoreException {
+ return new ResourceMappingScope("TODO: Provide mapping scope description", getInput().getInputMappings(), getInput().getInputTraversals());
}
- private ResourceTraversal[] combineTraversals(ResourceTraversal[] remoteTraversals, ResourceTraversal[] ancestorTraversals) {
- Set zero = new HashSet();
- Set shallow = new HashSet();
- Set deep = new HashSet();
- for (int i = 0; i < ancestorTraversals.length; i++) {
- ResourceTraversal traversal = ancestorTraversals[i];
- switch (traversal.getDepth()) {
- case IResource.DEPTH_ZERO:
- zero.addAll(Arrays.asList(traversal.getResources()));
- break;
- case IResource.DEPTH_ONE:
- shallow.addAll(Arrays.asList(traversal.getResources()));
- break;
- case IResource.DEPTH_INFINITE:
- deep.addAll(Arrays.asList(traversal.getResources()));
- break;
- }
- }
- for (int i = 0; i < remoteTraversals.length; i++) {
- ResourceTraversal traversal = remoteTraversals[i];
- switch (traversal.getDepth()) {
- case IResource.DEPTH_ZERO:
- zero.addAll(Arrays.asList(traversal.getResources()));
- break;
- case IResource.DEPTH_ONE:
- shallow.addAll(Arrays.asList(traversal.getResources()));
- break;
- case IResource.DEPTH_INFINITE:
- deep.addAll(Arrays.asList(traversal.getResources()));
- break;
- }
- }
- List result = new ArrayList();
- if (!zero.isEmpty()) {
- result.add(new ResourceTraversal((IResource[]) zero.toArray(new IResource[zero.size()]), IResource.DEPTH_ZERO, IResource.NONE));
- }
- if (!shallow.isEmpty()) {
- result.add(new ResourceTraversal((IResource[]) shallow.toArray(new IResource[shallow.size()]), IResource.DEPTH_ONE, IResource.NONE));
- }
- if (!deep.isEmpty()) {
- result.add(new ResourceTraversal((IResource[]) deep.toArray(new IResource[deep.size()]), IResource.DEPTH_INFINITE, IResource.NONE));
- }
- return (ResourceTraversal[]) result.toArray(new ResourceTraversal[result.size()]);
- }
-
- protected abstract RemoteResourceMappingContext getAncestorContext();
-
- protected abstract RemoteResourceMappingContext getRemoteContext();
-
/**
* Build and initialize a merge context for the given mappings.
* The mappings will all be from the given provider or one
@@ -209,50 +145,7 @@ public abstract class ResourceMappingMergeOperation extends ResourceMappingOpera
* @param monitor a progress monitor
* @return a merge context for merging the mappings
*/
- protected abstract IMergeContext buildMergeContext(ModelProvider provider, ResourceMapping[] mappings, ResourceMappingScope scope, IProgressMonitor monitor);
-
- private Map getProviderToMappingsMap() throws CoreException {
- if (providerToMappings == null) {
- Map result = new HashMap();
- ResourceMapping[] mappings = getMappings();
- for (int i = 0; i < mappings.length; i++) {
- ResourceMapping mapping = mappings[i];
- ModelProvider provider = mapping.getModelProvider();
- List l = (List)result.get(provider);
- if (l == null) {
- l = new ArrayList();
- result.put(provider, l);
- }
- l.add(mapping);
- }
- providerToMappings = result;
- }
- return providerToMappings;
- }
-
- protected void buildInput(IProgressMonitor monitor) throws InvocationTargetException {
- try {
- promptToIncludeAdditionalMappings();
- buildProviderToTraversalMap(monitor);
- // TODO Determine the projection of the selection onto resources
- } catch (CoreException e) {
- throw new InvocationTargetException(e);
- }
-
- super.buildInput(monitor);
- }
-
- private void promptToIncludeAdditionalMappings() throws CoreException {
- Map providerToMappings = getProviderToMappingsMap();
- // TODO Auto-generated method stub
-
- }
-
- private Map buildProviderToTraversalMap(IProgressMonitor monitor) {
- // TODO Auto-generated method stub
- providerToTraversalsMap = new HashMap();
- return null;
- }
+ protected abstract IMergeContext buildMergeContext(ResourceMappingScope scope, IProgressMonitor monitor);
/**
* Merge all the mappings that come from the given provider. By default,
@@ -273,6 +166,7 @@ public abstract class ResourceMappingMergeOperation extends ResourceMappingOpera
} else {
if (status.getCode() == MergeStatus.CONFLICTS) {
MergeStatus ms = (MergeStatus)status;
+ // TODO: Perhaps should be delayed until all models are attempted
performManualMerge(provider, ms.getConflictingMappings(), mergeContext, Policy.subMonitorFor(monitor, 5));
} else {
throw new TeamException(status);
@@ -300,7 +194,6 @@ public abstract class ResourceMappingMergeOperation extends ResourceMappingOpera
}
protected void performManualMerge(ModelProvider provider, ResourceMapping[] conflictingMappings, IMergeContext mergeContext, IProgressMonitor monitor) throws CoreException {
-// mergeContext.restrictTo(conflictingMappings, monitor);
IResourceMappingManualMerger merger = getManualMerger(provider);
merger.performManualMerge(getPart(), mergeContext, monitor);
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperation.java
index b0f4b3fce..2f430a992 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperation.java
@@ -62,7 +62,7 @@ import org.eclipse.ui.IWorkbenchPart;
*/
public abstract class ResourceMappingOperation extends TeamOperation {
- private ResourceMapping[] mappings;
+ private final IResourceMappingOperationInput input;
private static IResource[] getResources(ResourceMapping[] selectedMappings) throws CoreException {
Set result = new HashSet();
@@ -101,34 +101,22 @@ public abstract class ResourceMappingOperation extends TeamOperation {
}
return (IResource[]) result.toArray(new IResource[result.size()]);
}
-
- private static String[] getNatures(ResourceMapping[] selectedMappings) {
- Set result = new HashSet();
- for (int i = 0; i < selectedMappings.length; i++) {
- ResourceMapping mapping = selectedMappings[i];
- IProject[] projects = mapping.getProjects();
- for (int j = 0; j < projects.length; j++) {
- IProject project = projects[j];
- try {
- result.addAll(Arrays.asList(project.getDescription().getNatureIds()));
- } catch (CoreException e) {
- TeamUIPlugin.log(e);
- }
- }
- }
- return (String[]) result.toArray(new String[result.size()]);
- }
- protected ResourceMappingOperation(IWorkbenchPart part, ResourceMapping[] mappings) {
+ /**
+ * Create a resource mapping based operation
+ * @param part the workspace part from which the operation was launched
+ * @param input the input to the operation (which must have already been built by
+ * invoking <code>buildInput</code>.
+ */
+ protected ResourceMappingOperation(IWorkbenchPart part, IResourceMappingOperationInput input) {
super(part);
- this.mappings = mappings;
+ this.input = input;
}
public void run(IProgressMonitor monitor) throws InvocationTargetException,
InterruptedException {
buildInput(monitor);
execute(monitor);
-
}
/**
@@ -137,16 +125,17 @@ public abstract class ResourceMappingOperation extends TeamOperation {
* @param monitor
*/
protected void buildInput(IProgressMonitor monitor) throws InvocationTargetException {
-
+ try {
+ input.buildInput(monitor);
+ // TODO: Prompt user if input changed
+ } catch (CoreException e) {
+ throw new InvocationTargetException(e);
+ }
}
protected abstract void execute(IProgressMonitor monitor) throws InvocationTargetException,
InterruptedException;
- public ResourceMapping[] getMappings() {
- return mappings;
- }
-
/**
* Return the auto-merger associated with the given model provider
* view the adaptable mechanism.
@@ -161,7 +150,7 @@ public abstract class ResourceMappingOperation extends TeamOperation {
if (o instanceof IResourceMappingMerger) {
return (IResourceMappingMerger) o;
}
- return new DefaultResourceMappingMerger();
+ return new DefaultResourceMappingMerger(provider, getInput());
}
/**
@@ -179,5 +168,9 @@ public abstract class ResourceMappingOperation extends TeamOperation {
* TODO: Early stages
*/
protected abstract IResourceMappingManualMerger getDefaultManualMerger();
+
+ public IResourceMappingOperationInput getInput() {
+ return input;
+ }
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperationInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperationInput.java
index 4247b620c..297fe7add 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperationInput.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ResourceMappingOperationInput.java
@@ -67,47 +67,14 @@ import org.eclipse.team.internal.ui.TeamUIPlugin;
* </ol>
* @since 3.2
*/
-public class ResourceMappingOperationInput {
+public class ResourceMappingOperationInput extends SimpleResourceMappingOperationInput {
- private final ResourceMapping[] inputMappings;
- private final ResourceMappingContext[] contexts;
private final Map inputMappingsToResources = new HashMap();
private final Map targetMappingsToResources = new HashMap();
-
- protected static ResourceTraversal[] combineTraversals(ResourceTraversal[] allTraversals) {
- Set zero = new HashSet();
- Set shallow = new HashSet();
- Set deep = new HashSet();
- for (int i = 0; i < allTraversals.length; i++) {
- ResourceTraversal traversal = allTraversals[i];
- switch (traversal.getDepth()) {
- case IResource.DEPTH_ZERO:
- zero.addAll(Arrays.asList(traversal.getResources()));
- break;
- case IResource.DEPTH_ONE:
- shallow.addAll(Arrays.asList(traversal.getResources()));
- break;
- case IResource.DEPTH_INFINITE:
- deep.addAll(Arrays.asList(traversal.getResources()));
- break;
- }
- }
- List result = new ArrayList();
- if (!zero.isEmpty()) {
- result.add(new ResourceTraversal((IResource[]) zero.toArray(new IResource[zero.size()]), IResource.DEPTH_ZERO, IResource.NONE));
- }
- if (!shallow.isEmpty()) {
- result.add(new ResourceTraversal((IResource[]) shallow.toArray(new IResource[shallow.size()]), IResource.DEPTH_ONE, IResource.NONE));
- }
- if (!deep.isEmpty()) {
- result.add(new ResourceTraversal((IResource[]) deep.toArray(new IResource[deep.size()]), IResource.DEPTH_INFINITE, IResource.NONE));
- }
- return (ResourceTraversal[]) result.toArray(new ResourceTraversal[result.size()]);
- }
+ private boolean hasAdditionalMappings;
- public ResourceMappingOperationInput(ResourceMapping[] mappings, ResourceMappingContext[] contexts) {
- this.inputMappings = mappings;
- this.contexts = contexts;
+ public ResourceMappingOperationInput(ResourceMapping[] mappings, ResourceMappingContext context) {
+ super(mappings, context);
}
public void buildInput(IProgressMonitor monitor) throws CoreException {
@@ -119,6 +86,21 @@ public class ResourceMappingOperationInput {
newResources = addToTargetMappingToResourceMap(targetMappings, Policy.subMonitorFor(monitor, IProgressMonitor.UNKNOWN));
targetMappings = internalGetMappingsFromProviders((IResource[]) newResources.toArray(new IResource[newResources.size()]), getAffectedNatures(targetMappings), Policy.subMonitorFor(monitor, IProgressMonitor.UNKNOWN));
} while (!newResources.isEmpty());
+ hasAdditionalMappings = internalHasAdditionalMappings();
+ }
+
+ private boolean internalHasAdditionalMappings() {
+ ResourceMapping[] inputMappings = getSeedMappings();
+ if (inputMappings .length == targetMappingsToResources.size()) {
+ for (int i = 0; i < inputMappings.length; i++) {
+ ResourceMapping mapping = inputMappings[i];
+ if (!targetMappingsToResources.containsKey(mapping)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
}
private String[] getAffectedNatures(Set targetMappings) {
@@ -143,7 +125,7 @@ public class ResourceMappingOperationInput {
IModelProviderDescriptor[] descriptors = ModelProvider.getModelProviderDescriptors();
for (int i = 0; i < descriptors.length; i++) {
IModelProviderDescriptor descriptor = descriptors[i];
- ResourceMapping[] mappings = descriptor.getMappings(resources, affectedNatures, contexts, monitor);
+ ResourceMapping[] mappings = descriptor.getMappings(resources, affectedNatures, getContext(), monitor);
result.addAll(Arrays.asList(mappings));
}
return result;
@@ -154,7 +136,7 @@ public class ResourceMappingOperationInput {
for (Iterator iter = targetMappings.iterator(); iter.hasNext();) {
ResourceMapping mapping = (ResourceMapping) iter.next();
if (!targetMappingsToResources.containsKey(mapping)) {
- ResourceTraversal[] traversals = getTraversals(mapping, Policy.subMonitorFor(monitor, 100));
+ ResourceTraversal[] traversals = mapping.getTraversals(getContext(), Policy.subMonitorFor(monitor, 100));
targetMappingsToResources.put(mapping, traversals);
newResources.addAll(internalGetResources(traversals));
}
@@ -177,28 +159,39 @@ public class ResourceMappingOperationInput {
}
private void buildInputMappingToResourcesMap(IProgressMonitor monitor) throws CoreException {
+ ResourceMapping[] inputMappings = getSeedMappings();
monitor.beginTask(null, inputMappings.length * 100);
for (int i = 0; i < inputMappings.length; i++) {
ResourceMapping mapping = inputMappings[i];
- ResourceTraversal[] traversals = getTraversals(mapping, Policy.subMonitorFor(monitor, 100));
+ ResourceTraversal[] traversals = mapping.getTraversals(getContext(), Policy.subMonitorFor(monitor, 100));
inputMappingsToResources.put(mapping, traversals);
}
monitor.done();
}
- private ResourceTraversal[] getTraversals(ResourceMapping mapping, IProgressMonitor monitor) throws CoreException {
- try {
- monitor.beginTask(null, contexts.length * 100);
- List traversals = new ArrayList();
- for (int i = 0; i < contexts.length; i++) {
- ResourceMappingContext context = contexts[i];
- traversals.addAll(Arrays.asList(mapping.getTraversals(context, Policy.subMonitorFor(monitor, 100))));
- Policy.checkCanceled(monitor);
+ public ResourceMapping[] getInputMappings() {
+ return (ResourceMapping[]) targetMappingsToResources.keySet().toArray(new ResourceMapping[targetMappingsToResources.size()]);
+ }
+
+ public ResourceTraversal[] getInputTraversals() {
+ Collection values = targetMappingsToResources.values();
+ List result = new ArrayList();
+ for (Iterator iter = values.iterator(); iter.hasNext();) {
+ ResourceTraversal[] traversals = (ResourceTraversal[]) iter.next();
+ for (int i = 0; i < traversals.length; i++) {
+ ResourceTraversal traversal = traversals[i];
+ result.add(traversal);
}
- return combineTraversals((ResourceTraversal[]) traversals.toArray(new ResourceTraversal[traversals.size()]));
- } finally {
- monitor.done();
}
+ return combineTraversals((ResourceTraversal[]) result.toArray(new ResourceTraversal[result.size()]));
+ }
+
+ public ResourceTraversal[] getTraversal(ResourceMapping mapping) {
+ return (ResourceTraversal[])targetMappingsToResources.get(mapping);
+ }
+
+ public boolean hasAdditionalMappings() {
+ return hasAdditionalMappings;
}
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SimpleResourceMappingOperationInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SimpleResourceMappingOperationInput.java
new file mode 100644
index 000000000..18af00086
--- /dev/null
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SimpleResourceMappingOperationInput.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 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.ui.mapping;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.internal.resources.mapping.ResourceMapping;
+import org.eclipse.core.internal.resources.mapping.ResourceMappingContext;
+import org.eclipse.core.internal.resources.mapping.ResourceTraversal;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.mapping.ModelProvider;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.team.internal.core.subscribers.SubscriberResourceMappingContext;
+import org.eclipse.team.internal.ui.Policy;
+
+/**
+ * A simple implementation of an operation input that
+ * does not transform the input.
+ * @since 3.2
+ */
+public class SimpleResourceMappingOperationInput implements
+ IResourceMappingOperationInput {
+
+ private ResourceMapping[] mappings;
+ private ResourceMappingContext context;
+ private Map mappingToTraversalsMap = new HashMap();
+
+ public SimpleResourceMappingOperationInput(ResourceMapping[] mappings, ResourceMappingContext context) {
+ this.mappings = mappings;
+ this.context = context;
+ }
+
+ public ResourceMapping[] getSeedMappings() {
+ return mappings;
+ }
+
+ public void buildInput(IProgressMonitor monitor) throws CoreException {
+ buildInputMappingToTraversalsMap(monitor);
+ }
+
+ public ResourceMapping[] getInputMappings() {
+ return mappings;
+ }
+
+ public ResourceTraversal[] getInputTraversals() {
+ Collection values = mappingToTraversalsMap.values();
+ List result = new ArrayList();
+ for (Iterator iter = values.iterator(); iter.hasNext();) {
+ ResourceTraversal[] traversals = (ResourceTraversal[]) iter.next();
+ for (int i = 0; i < traversals.length; i++) {
+ ResourceTraversal traversal = traversals[i];
+ result.add(traversal);
+ }
+ }
+ return combineTraversals((ResourceTraversal[]) result.toArray(new ResourceTraversal[result.size()]));
+ }
+
+ public ResourceTraversal[] getTraversal(ResourceMapping mapping) {
+ return (ResourceTraversal[])mappingToTraversalsMap.get(mapping);
+ }
+
+ public boolean hasAdditionalMappings() {
+ return false;
+ }
+
+ private void buildInputMappingToTraversalsMap(IProgressMonitor monitor) throws CoreException {
+ monitor.beginTask(null, mappings.length * 100);
+ for (int i = 0; i < mappings.length; i++) {
+ ResourceMapping mapping = mappings[i];
+ ResourceTraversal[] traversals = mapping.getTraversals(context, Policy.subMonitorFor(monitor, 100));
+ mappingToTraversalsMap.put(mapping, traversals);
+ }
+ monitor.done();
+ }
+
+ protected static ResourceTraversal[] combineTraversals(ResourceTraversal[] allTraversals) {
+ Set zero = new HashSet();
+ Set shallow = new HashSet();
+ Set deep = new HashSet();
+ for (int i = 0; i < allTraversals.length; i++) {
+ ResourceTraversal traversal = allTraversals[i];
+ switch (traversal.getDepth()) {
+ case IResource.DEPTH_ZERO:
+ zero.addAll(Arrays.asList(traversal.getResources()));
+ break;
+ case IResource.DEPTH_ONE:
+ shallow.addAll(Arrays.asList(traversal.getResources()));
+ break;
+ case IResource.DEPTH_INFINITE:
+ deep.addAll(Arrays.asList(traversal.getResources()));
+ break;
+ }
+ }
+ List result = new ArrayList();
+ if (!zero.isEmpty()) {
+ result.add(new ResourceTraversal((IResource[]) zero.toArray(new IResource[zero.size()]), IResource.DEPTH_ZERO, IResource.NONE));
+ }
+ if (!shallow.isEmpty()) {
+ result.add(new ResourceTraversal((IResource[]) shallow.toArray(new IResource[shallow.size()]), IResource.DEPTH_ONE, IResource.NONE));
+ }
+ if (!deep.isEmpty()) {
+ result.add(new ResourceTraversal((IResource[]) deep.toArray(new IResource[deep.size()]), IResource.DEPTH_INFINITE, IResource.NONE));
+ }
+ return (ResourceTraversal[]) result.toArray(new ResourceTraversal[result.size()]);
+ }
+
+ public ModelProvider[] getModelProviders() {
+ Set result = new HashSet();
+ ResourceMapping[] mappings = getInputMappings();
+ for (int i = 0; i < mappings.length; i++) {
+ ResourceMapping mapping = mappings[i];
+ result.add(mapping.getModelProvider());
+ }
+ return (ModelProvider[]) result.toArray(new ModelProvider[result.size()]);
+ }
+
+ public ResourceMappingContext getContext() {
+ return context;
+ }
+
+ public ResourceMapping[] getMappings(ModelProvider provider) {
+ Set result = new HashSet();
+ ResourceMapping[] mappings = getInputMappings();
+ for (int i = 0; i < mappings.length; i++) {
+ ResourceMapping mapping = mappings[i];
+ if (mapping.getModelProviderId().equals(provider.getDescriptor().getId())) {
+ result.add(mapping);
+ }
+ }
+ return (ResourceMapping[]) result.toArray(new ResourceMapping[result.size()]);
+ }
+}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/TeamViewerContext.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/TeamViewerContext.java
index 291003e71..b875319c0 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/TeamViewerContext.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/TeamViewerContext.java
@@ -46,11 +46,7 @@ public class TeamViewerContext implements ITeamViewerContext {
Set providers = new HashSet();
for (int i = 0; i < mappings.length; i++) {
ResourceMapping mapping = mappings[i];
- try {
- providers.add(mapping.getModelProvider());
- } catch (CoreException e) {
- TeamUIPlugin.log(e);
- }
+ providers.add(mapping.getModelProvider());
}
return (ModelProvider[]) providers.toArray(new ModelProvider[providers.size()]);
}

Back to the top