diff options
author | Jean Michel-Lemieux | 2004-10-28 20:57:07 +0000 |
---|---|---|
committer | Jean Michel-Lemieux | 2004-10-28 20:57:07 +0000 |
commit | 519f4f13b31904589766f051eaa85ca5d7240f01 (patch) | |
tree | 6ece9b23ed671e62a6410076599fb18bbeaec233 | |
parent | dcf90ad4390d66b03b609a297a416cce9a9fa7e2 (diff) | |
download | eclipse.platform.team-519f4f13b31904589766f051eaa85ca5d7240f01.tar.gz eclipse.platform.team-519f4f13b31904589766f051eaa85ca5d7240f01.tar.xz eclipse.platform.team-519f4f13b31904589766f051eaa85ca5d7240f01.zip |
*** empty log message ***
-rw-r--r-- | bundles/org.eclipse.team.cvs.ui/plugin.xml | 4 | ||||
-rw-r--r-- | bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CommitAction2.java | 76 | ||||
-rw-r--r-- | bundles/org.eclipse.team.ui/plugin.xml | 90 | ||||
-rw-r--r-- | bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java | 24 | ||||
-rw-r--r-- | bundles/org.eclipse.team.ui/src/resourcemapping/LogicalResourceAction.java (renamed from bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/LogicalResourceAction.java) | 25 | ||||
-rw-r--r-- | bundles/org.eclipse.team.ui/src/resourcemapping/ModelElementlJavaFactory.java (renamed from bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ModelElementlJavaFactory.java) | 46 | ||||
-rw-r--r-- | bundles/org.eclipse.team.ui/src/resourcemapping/PropertyTester.java | 56 | ||||
-rw-r--r-- | bundles/org.eclipse.team.ui/src/resourcemapping/ResourceMappingSelectionDialog.java | 42 | ||||
-rw-r--r-- | bundles/org.eclipse.team.ui/src/resourcemapping/ResourceMappingWorkbenchAdapter.java | 78 |
9 files changed, 311 insertions, 130 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/plugin.xml b/bundles/org.eclipse.team.cvs.ui/plugin.xml index 2138bfd3d..375da82fd 100644 --- a/bundles/org.eclipse.team.cvs.ui/plugin.xml +++ b/bundles/org.eclipse.team.cvs.ui/plugin.xml @@ -235,9 +235,9 @@ </action> </objectContribution> <objectContribution - objectClass="org.eclipse.team.core.traversals.IModelElement" + objectClass="org.eclipse.core.resources.mapping.IResourceMapper" adaptable="true" - id="org.eclipse.team.ccvs.ui.ModelElementContributions"> + id="org.eclipse.team.ccvs.ui.ResourceMapperContributions"> <filter name="projectPersistentProperty" value="org.eclipse.team.core.repository=org.eclipse.team.cvs.core.cvsnature"> diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CommitAction2.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CommitAction2.java deleted file mode 100644 index 8e988c5e2..000000000 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/actions/CommitAction2.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ccvs.ui.actions; - -import java.lang.reflect.InvocationTargetException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.traversals.ITraversal; -import org.eclipse.team.internal.ccvs.core.CVSException; -import org.eclipse.team.internal.ccvs.core.CVSProviderPlugin; -import org.eclipse.team.internal.ccvs.ui.Policy; -import org.eclipse.team.internal.ccvs.ui.operations.CommitOperation; - -/** - * Action for checking in files to a CVS provider. - * Prompts the user for a release comment. - */ -public class CommitAction2 extends WorkspaceAction { - - /* - * @see CVSAction#execute(IAction) - */ - public void execute(IAction action) throws InvocationTargetException, InterruptedException { - - try { - ITraversal[] traversals = getSelectedTraversals(CVSProviderPlugin.getTypeId()); - } catch (TeamException e1) { - e1.printStackTrace(); - } - - final CommitOperation operation = new CommitOperation(getTargetPart(), getSelectedResources(), null); - final boolean[] retVal = {true}; - run(new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - retVal[0] = operation.performPrompting(monitor); - } catch (CVSException e) { - new InvocationTargetException(e); - } - } - }, false, PROGRESS_BUSYCURSOR); - if(retVal[0]) - operation.run(); - } - - /** - * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle() - */ - protected String getErrorTitle() { - return Policy.bind("CommitAction.commitFailed"); //$NON-NLS-1$ - } - - /** - * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() - */ - protected boolean isEnabledForUnmanagedResources() { - return true; - } - - /* (non-Javadoc) - * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForNonExistantResources() - */ - protected boolean isEnabledForNonExistantResources() { - return true; - } -} diff --git a/bundles/org.eclipse.team.ui/plugin.xml b/bundles/org.eclipse.team.ui/plugin.xml index fb63687d1..ff915ac69 100644 --- a/bundles/org.eclipse.team.ui/plugin.xml +++ b/bundles/org.eclipse.team.ui/plugin.xml @@ -27,6 +27,7 @@ <import plugin="org.eclipse.ui.forms"/> <import plugin="org.eclipse.jdt.core"/> <import plugin="org.eclipse.jdt.ui"/> + <import plugin="org.eclipse.core.expressions"/> </requires> @@ -116,7 +117,7 @@ enablesFor="1" id="nonbound.org.eclipse.team.ui.ConfigureProject"> </action> - </objectContribution> + </objectContribution> </extension> <!-- ************** Views ********************** --> <extension @@ -289,20 +290,97 @@ <validator class="org.eclipse.team.internal.ui.DefaultUIFileModificationValidator"/> </extension> + <!-- RESOURCE MAPPINGS TESTS --> <extension - id="org.eclipse.team.ui.modelElementAdapters" + id="org.eclipse.team.ui.resourceMappingAdapters" point="org.eclipse.core.runtime.adapters"> <factory - class="org.eclipse.team.internal.ui.ModelElementlJavaFactory" + class="resourcemapping.ModelElementlJavaFactory" adaptableType="org.eclipse.jdt.core.IJavaElement"> - <adapter type="org.eclipse.team.core.traversals.IModelElement"/> + <adapter type="org.eclipse.core.resources.mapping.IResourceMapper"/> </factory> <factory - class="org.eclipse.team.internal.ui.ModelElementlJavaFactory" + class="resourcemapping.ModelElementlJavaFactory" adaptableType="org.eclipse.core.resources.IResource"> - <adapter type="org.eclipse.team.core.traversals.IModelElement"/> + <adapter type="org.eclipse.core.resources.mapping.IResourceMapper"/> + </factory> + <factory + class="resourcemapping.ModelElementlJavaFactory" + adaptableType="org.eclipse.core.resources.mapping.IResourceMapper"> + <adapter type=" org.eclipse.ui.model.IWorkbenchAdapter"/> </factory> </extension> + + <extension + point="org.eclipse.ui.popupMenus"> + <objectContribution + adaptable="true" + objectClass="org.eclipse.core.resources.mapping.IResourceMapper" + id="org.eclipse.team.ui.ResourceMappingContributions"> + <enablement> + <adapt type="org.eclipse.core.resources.mapping.IResourceMapper"> + <test property="org.eclipse.team.ui.repositoryId" args="org.eclipse.team.cvs.core.cvsnature" /> + </adapt> + </enablement> + <menu + label="%TeamGroupMenu.label" + path="additions" + id="team.main"> + <separator + name="group1"> + </separator> + <separator + name="group2"> + </separator> + <separator + name="group3"> + </separator> + <separator + name="group4"> + </separator> + <separator + name="group5"> + </separator> + <separator + name="group6"> + </separator> + <separator + name="group7"> + </separator> + <separator + name="group8"> + </separator> + <separator + name="group9"> + </separator> + <separator + name="group10"> + </separator> + <separator + name="targetGroup"> + </separator> + <separator + name="projectGroup"> + </separator> + </menu> + <action + label="Test Logical Resource Action" + icon="icons/full/elcl16/checkin_action.gif" + class="resourcemapping.LogicalResourceAction" + menubarPath="team.main/projectGroup" + id="org.eclipse.team.ui.logicalResourceAction"/> + </objectContribution> + </extension> + + <extension + point="org.eclipse.core.expressions.propertyTesters"> + <propertyTester + namespace="org.eclipse.team.ui" + type="org.eclipse.core.resources.mapping.IResourceMapper" + class="resourcemapping.PropertyTester" + properties="repositoryId" + id="org.eclipse.team.ui.repositoryIdTester"/> + </extension> </plugin> diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java index b17ac03b6..4eb21c4e7 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/TeamAction.java @@ -23,6 +23,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.resources.IStorage; +import org.eclipse.core.resources.mapping.*; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; @@ -37,9 +38,6 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.traversals.IModelContext; -import org.eclipse.team.core.traversals.IModelElement; -import org.eclipse.team.core.traversals.ITraversal; import org.eclipse.team.internal.core.TeamPlugin; import org.eclipse.team.internal.ui.TeamUIPlugin; import org.eclipse.team.internal.ui.Utils; @@ -164,6 +162,10 @@ public abstract class TeamAction extends ActionDelegate implements IObjectAction return (IResource[])getSelectedResources(IResource.class); } + protected IStructuredSelection getSelection() { + return selection; + } + /** * Returns the selected resource based on the available traversals. * @@ -171,18 +173,22 @@ public abstract class TeamAction extends ActionDelegate implements IObjectAction */ public ITraversal[] getSelectedTraversals(String providerId) throws TeamException { try { - Object[] elements = getSelectedAdaptables(selection, IModelElement.class); + Object[] elements = getSelectedAdaptables(selection, IResourceMapper.class); ArrayList providerTraversals = new ArrayList(); if(elements.length > 0) { for (int i = 0; i < elements.length; i++) { - IModelElement element = (IModelElement) elements[i]; + IResourceMapper element = (IResourceMapper) elements[i]; ITraversal[] traversals = element.getTraversals(getModelContext(), null); for (int j = 0; j < traversals.length; j++) { ITraversal traversal = traversals[j]; boolean addIt = true; if(providerId != null) { - RepositoryProvider provider = RepositoryProvider.getProvider(traversal.getProject()); - addIt = (providerId != null && provider.getID().equals(providerId)); + IProject[] projects = traversal.getProjects(); + for (int k = 0; k < projects.length; k++) { + IProject project = projects[k]; + RepositoryProvider provider = RepositoryProvider.getProvider(project); + addIt = (providerId != null && provider.getID().equals(providerId)); + } } if(addIt) providerTraversals.add(traversal); @@ -196,8 +202,8 @@ public abstract class TeamAction extends ActionDelegate implements IObjectAction } } - protected IModelContext getModelContext() { - return new IModelContext() { + protected ITraversalContext getModelContext() { + return new ITraversalContext() { public boolean contentDiffers(IFile file, IProgressMonitor monitor) throws CoreException { return false; } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/LogicalResourceAction.java b/bundles/org.eclipse.team.ui/src/resourcemapping/LogicalResourceAction.java index b6334fd27..a668dd904 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/actions/LogicalResourceAction.java +++ b/bundles/org.eclipse.team.ui/src/resourcemapping/LogicalResourceAction.java @@ -8,31 +8,24 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.team.internal.ui.actions; +package resourcemapping; -import java.util.ArrayList; -import java.util.List; -import org.eclipse.core.runtime.IAdapterManager; -import org.eclipse.core.runtime.Platform; +import org.eclipse.core.resources.mapping.IResourceMapper; import org.eclipse.jface.action.IAction; +import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.TeamException; -import org.eclipse.team.core.traversals.IModelElement; -import org.eclipse.ui.model.IWorkbenchAdapter; - +import org.eclipse.team.internal.ui.actions.TeamAction; public class LogicalResourceAction extends TeamAction { public void run(IAction action) { - IAdapterManager adapterManager = Platform.getAdapterManager(); - Object[] elements = getSelectedAdaptables(selection, IModelElement.class); - List uiAdapters = new ArrayList(); - for (int i = 0; i < elements.length; i++) { - IModelElement element = (IModelElement)elements[i]; - IWorkbenchAdapter adapter = (IWorkbenchAdapter)adapterManager.getAdapter(element, IWorkbenchAdapter.class); - } + IResourceMapper[] m = (IResourceMapper[])getSelectedAdaptables(getSelection(), IResourceMapper.class); + ResourceMappingSelectionDialog d = new ResourceMappingSelectionDialog(Display.getDefault().getActiveShell(), m); + d.open(); } protected boolean isEnabled() throws TeamException { - return true; + IResourceMapper[] m = (IResourceMapper[])getSelectedAdaptables(getSelection(), IResourceMapper.class); + return (m != null && m.length > 0); } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ModelElementlJavaFactory.java b/bundles/org.eclipse.team.ui/src/resourcemapping/ModelElementlJavaFactory.java index eecf02239..799de481a 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/ModelElementlJavaFactory.java +++ b/bundles/org.eclipse.team.ui/src/resourcemapping/ModelElementlJavaFactory.java @@ -8,40 +8,42 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.team.internal.ui; +package resourcemapping; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.mapping.*; import org.eclipse.core.runtime.*; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.internal.ui.JavaWorkbenchAdapter; import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.team.core.traversals.*; -import org.eclipse.ui.internal.ide.model.WorkbenchFolder; import org.eclipse.ui.model.IWorkbenchAdapter; public class ModelElementlJavaFactory implements IAdapterFactory { - private static class JavaModelElement extends PlatformObject implements IModelElement{ + private static class JavaModelElement extends PlatformObject implements IResourceMapper{ - private final IJavaElement fragment; + private final IJavaElement javaElement; private ITraversal[] traversals; public JavaModelElement(IJavaElement fragment) { - this.fragment = fragment; + this.javaElement = fragment; } - public ITraversal[] getTraversals(IModelContext context, IProgressMonitor monitor) throws CoreException { + public Object getModelObject() { + return javaElement; + } + public ITraversal[] getTraversals(ITraversalContext context, IProgressMonitor monitor) throws CoreException { if(traversals == null) { traversals = new ITraversal[]{ new ITraversal() { - public IProject getProject() { - return fragment.getResource().getProject(); + public IProject[] getProjects() { + return new IProject[] {javaElement.getResource().getProject()}; } public IResource[] getResources() { - return new IResource[]{fragment.getResource()}; + return new IResource[]{javaElement.getResource()}; } public int getDepth() { @@ -79,7 +81,7 @@ public class ModelElementlJavaFactory implements IAdapterFactory { } } - private static class ResourceModelElement extends PlatformObject implements IModelElement { + private static class ResourceModelElement extends PlatformObject implements IResourceMapper { private final IResource resource; private ITraversal[] traversals; @@ -88,13 +90,17 @@ public class ModelElementlJavaFactory implements IAdapterFactory { this.resource = resource; } - public ITraversal[] getTraversals(IModelContext context, IProgressMonitor monitor) throws CoreException { + public Object getModelObject() { + return resource; + } + + public ITraversal[] getTraversals(ITraversalContext context, IProgressMonitor monitor) throws CoreException { if(traversals == null) { traversals = new ITraversal[]{ new ITraversal() { - public IProject getProject() { - return resource.getProject(); + public IProject[] getProjects() { + return new IProject[] {resource.getProject()}; } public IResource[] getResources() { @@ -117,19 +123,17 @@ public class ModelElementlJavaFactory implements IAdapterFactory { if (adapterType.isInstance(o)) { return o; } - if (adapterType == IModelElement.class && o instanceof IJavaElement) { + if (adapterType == IResourceMapper.class && o instanceof IJavaElement) { return new JavaModelElement((IJavaElement)o); - } else if(adapterType == IModelElement.class && o instanceof IResource) { + } else if(adapterType == IResourceMapper.class && o instanceof IResource) { return new ResourceModelElement((IResource)o); - } else if(adapterType == IWorkbenchAdapter.class && o instanceof JavaModelElement) { - return new JavaWorkbenchAdapter(); - } else if(adapterType == IWorkbenchAdapter.class && o instanceof ResourceModelElement) { - return new WorkbenchFolder(); + } else if(adapterType == IWorkbenchAdapter.class && o instanceof IResourceMapper) { + return new ResourceMappingWorkbenchAdapter(); } return null; } public Class[] getAdapterList() { - return new Class[]{IModelElement.class, IWorkbenchAdapter.class}; + return new Class[]{IResourceMapper.class, IWorkbenchAdapter.class}; } } diff --git a/bundles/org.eclipse.team.ui/src/resourcemapping/PropertyTester.java b/bundles/org.eclipse.team.ui/src/resourcemapping/PropertyTester.java new file mode 100644 index 000000000..26c5b58e8 --- /dev/null +++ b/bundles/org.eclipse.team.ui/src/resourcemapping/PropertyTester.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package resourcemapping; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.mapping.IResourceMapper; +import org.eclipse.core.resources.mapping.ITraversal; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.team.core.RepositoryProvider; + + +public class PropertyTester extends org.eclipse.core.expressions.PropertyTester { + + private static final String REPOSITORYID_PROPERTY = "repositoryId"; //$NON-NLS-1$ + + private boolean sharedWith(IResourceMapper mapper, String id) { + ITraversal[] traversals; + try { + traversals = mapper.getTraversals(null, null); + for (int j = 0; j < traversals.length; j++) { + ITraversal traversal = traversals[j]; + IProject[] projects = traversal.getProjects(); + if(projects.length == 0) return false; + for (int k = 0; k < projects.length; k++) { + IProject project = projects[k]; + RepositoryProvider provider = RepositoryProvider.getProvider(project); + if (provider == null || !provider.getID().equals(id)) + return false; + } + } + return true; + } catch (CoreException e) { + return false; + } + } + + public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { + IResourceMapper mapper = (IResourceMapper)receiver; + if(property.equals(REPOSITORYID_PROPERTY)) { + // check that all selected resources are shared with the same + // repository provider. + if(args == null) return false; + String repoId = (String)args[0]; + return sharedWith(mapper, repoId); + } + return false; + } +} diff --git a/bundles/org.eclipse.team.ui/src/resourcemapping/ResourceMappingSelectionDialog.java b/bundles/org.eclipse.team.ui/src/resourcemapping/ResourceMappingSelectionDialog.java new file mode 100644 index 000000000..f871d1dd1 --- /dev/null +++ b/bundles/org.eclipse.team.ui/src/resourcemapping/ResourceMappingSelectionDialog.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package resourcemapping; + +import org.eclipse.core.resources.mapping.IResourceMapper; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.*; +import org.eclipse.ui.model.*; + +public class ResourceMappingSelectionDialog extends Dialog { + + private final IResourceMapper[] mappers; + private StructuredViewer viewer; + + protected ResourceMappingSelectionDialog(Shell parentShell, IResourceMapper[] mappers) { + super(parentShell); + this.mappers = mappers; + } + + protected Control createDialogArea(Composite parent) { + Composite top = (Composite) super.createDialogArea(parent); + viewer = new TreeViewer(top); + GridData data = new GridData(GridData.FILL_BOTH); + data.heightHint = 300; + viewer.getControl().setLayoutData(data); + viewer.setContentProvider(new BaseWorkbenchContentProvider()); + viewer.setLabelProvider(new WorkbenchLabelProvider()); + viewer.setInput(new AdaptableList(mappers)); + return top; + } +} diff --git a/bundles/org.eclipse.team.ui/src/resourcemapping/ResourceMappingWorkbenchAdapter.java b/bundles/org.eclipse.team.ui/src/resourcemapping/ResourceMappingWorkbenchAdapter.java new file mode 100644 index 000000000..15a6eb2ee --- /dev/null +++ b/bundles/org.eclipse.team.ui/src/resourcemapping/ResourceMappingWorkbenchAdapter.java @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package resourcemapping; + +import java.util.*; +import java.util.ArrayList; +import java.util.List; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.mapping.IResourceMapper; +import org.eclipse.core.resources.mapping.ITraversal; +import org.eclipse.core.runtime.*; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.model.IWorkbenchAdapter; + +public class ResourceMappingWorkbenchAdapter implements IWorkbenchAdapter { + + public Object[] getChildren(Object o) { + if (o instanceof IResourceMapper) { + try { + List resources = new ArrayList(); + ITraversal[] traversals = ((IResourceMapper) o).getTraversals(null, new NullProgressMonitor()); + for (int i = 0; i < traversals.length; i++) { + ITraversal traversal = traversals[i]; + resources.addAll(Arrays.asList(traversal.getResources())); + } + if(resources.size() == 1) { + return new Object[0]; + } else { + return (IResource[]) resources.toArray(new IResource[resources.size()]); + } + } catch (CoreException e) { + // break and return no children + } + } + return new Object[0]; + } + + public ImageDescriptor getImageDescriptor(Object o) { + IWorkbenchAdapter wbadapter = getModelObjectAdapter(o); + if (wbadapter != null) { + return wbadapter.getImageDescriptor(((IResourceMapper)o).getModelObject()); + } + return null; //$NON-NLS-1$ + } + + public String getLabel(Object o) { + IWorkbenchAdapter wbadapter = getModelObjectAdapter(o); + if (wbadapter != null) { + return wbadapter.getLabel(((IResourceMapper)o).getModelObject()); + } + return ""; //$NON-NLS-1$ + } + + public Object getParent(Object o) { + return null; + } + + protected IWorkbenchAdapter getModelObjectAdapter(Object o) { + if (o instanceof IResourceMapper) { + Object object = ((IResourceMapper) o).getModelObject(); + if (object instanceof IAdaptable) { + IWorkbenchAdapter wbadapter = (IWorkbenchAdapter) ((IAdaptable) object).getAdapter(IWorkbenchAdapter.class); + if (wbadapter != null) { + return wbadapter; + } + } + } + return null; + } +} |