diff options
| author | cwindatt | 2011-09-09 21:24:20 +0000 |
|---|---|---|
| committer | cwindatt | 2011-09-09 21:24:20 +0000 |
| commit | f8569bc8cfebc6fc5e89fcf9a3c340baec8ba672 (patch) | |
| tree | 2d9fe23d95c6097e255ad991f205dcc32927f0f1 | |
| parent | ea44007a37c60f475268c5a5a97c0fa3801ec5e1 (diff) | |
| parent | afb11a7d9294e76f4a0c84ada7249deeb8cfac2e (diff) | |
| download | eclipse.pde.ui-f8569bc8cfebc6fc5e89fcf9a3c340baec8ba672.tar.gz eclipse.pde.ui-f8569bc8cfebc6fc5e89fcf9a3c340baec8ba672.tar.xz eclipse.pde.ui-f8569bc8cfebc6fc5e89fcf9a3c340baec8ba672.zip | |
Bug 313392 - Support Import operations on 'Plug-in Dependencies' entriesv20110909-2124
in Project and Package Explorer
Merge branch '313392_import_pkg_exp'
Conflicts:
ui/org.eclipse.pde.ui/plugin.xml
8 files changed, 159 insertions, 6 deletions
diff --git a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF index fd88cadbae..72c46e7822 100644 --- a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF +++ b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF @@ -76,7 +76,8 @@ Require-Bundle: org.eclipse.equinox.p2.repository;bundle-version="[2.0.0,3.0.0]", org.eclipse.equinox.p2.metadata.repository;bundle-version="[1.0.100,2.0.0)", org.eclipse.equinox.p2.garbagecollector;bundle-version="[1.0.100,2.0.0)", - org.eclipse.equinox.p2.touchpoint.eclipse;bundle-version="[2.0.0,3.0.0)" + org.eclipse.equinox.p2.touchpoint.eclipse;bundle-version="[2.0.0,3.0.0)", + org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)" Eclipse-LazyStart: true Bundle-RequiredExecutionEnvironment: J2SE-1.4 Import-Package: com.ibm.icu.util diff --git a/ui/org.eclipse.pde.core/plugin.xml b/ui/org.eclipse.pde.core/plugin.xml index e7362b5387..8bd40b5ffb 100644 --- a/ui/org.eclipse.pde.core/plugin.xml +++ b/ui/org.eclipse.pde.core/plugin.xml @@ -353,4 +353,14 @@ <factory class="org.eclipse.pde.internal.core.content.DefaultDocumentFactory" contentTypeId="org.eclipse.pde.schema"/> </extension> + <extension + point="org.eclipse.core.expressions.propertyTesters"> + <propertyTester + class="org.eclipse.pde.internal.core.util.PackageFragmentRootPropertyTester" + id="org.eclipse.pde.core.packageFragmentRoot" + namespace="org.eclipse.pde.core" + properties="inPluginContainer" + type="org.eclipse.jdt.core.IPackageFragmentRoot"> + </propertyTester> + </extension> </plugin> diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/PackageFragmentRootPropertyTester.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/PackageFragmentRootPropertyTester.java new file mode 100644 index 0000000000..0279f6e39b --- /dev/null +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/PackageFragmentRootPropertyTester.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2011 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.pde.internal.core.util; + +import org.eclipse.core.expressions.PropertyTester; +import org.eclipse.jdt.core.*; +import org.eclipse.pde.internal.core.PDECore; + +/** + * Tests whether an object is a package fragment root with + * a parent of the PDE classpath container (Plug-in Dependencies). Intended for + * use with the command/menu framework. This tester is registered for the type + * {@link IPackageFragmentRoot}. + * + * <p>This class must always have a default contructor to function as a property tester</p> + */ +public class PackageFragmentRootPropertyTester extends PropertyTester { + + /** + * A property indicating a whether a package fragment root belongs to the PDE + * classpath container. (value <code>"inPluginContainer"</code>). No expected + * value is required. + */ + public static final String PROP_IN_PLUGIN_CONTAINER = "inPluginContainer"; //$NON-NLS-1$ + + /* (non-Javadoc) + * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object) + */ + public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { + if (property.equals(PROP_IN_PLUGIN_CONTAINER)) { + + if (receiver instanceof IPackageFragmentRoot) { + IPackageFragmentRoot element = (IPackageFragmentRoot) receiver; + try { + IClasspathEntry entry = element.getRawClasspathEntry(); + if (entry.getPath().equals(PDECore.REQUIRED_PLUGINS_CONTAINER_PATH)) { + return true; + } + } catch (JavaModelException e) { + return false; + } + } + } + return false; + } + +} diff --git a/ui/org.eclipse.pde.ui/plugin.properties b/ui/org.eclipse.pde.ui/plugin.properties index 0dbd231e8a..0a76fe9464 100644 --- a/ui/org.eclipse.pde.ui/plugin.properties +++ b/ui/org.eclipse.pde.ui/plugin.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000, 2010 IBM Corporation and others. +# Copyright (c) 2000, 2011 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 @@ -245,6 +245,10 @@ pluginsearch.action.name = Open Plug-in Artifact pluginsearch.action.menu.name = Open &Plug-in Artifact... pluginsearch.action.desc = Open a plug-in artifact in the manifest editor +importFromRepository.action.name = Import plug-in from a repository +importFromRepository.action.menu.name = Import from repository... +importFromRepository.action.desc = Imports a plug-in from a source repository + addpluginstojavasearch.action.name = Add All Plug-ins to Java Search addpluginstojavasearch.action.desc = Adds all plug-ins in the target platform to java search @@ -262,4 +266,4 @@ structureMergeViewers.plugin.label=Plug-in Structure Compare commandParameter.name = The initial search pattern for the artifact search dialog consoleFactory.label = Host OSGi Console open.manifest.description = Open the plug-in manifest -open.manifest.name = Open Manifest
\ No newline at end of file +open.manifest.name = Open Manifest diff --git a/ui/org.eclipse.pde.ui/plugin.xml b/ui/org.eclipse.pde.ui/plugin.xml index 578d3bf38d..1648dbcbeb 100644 --- a/ui/org.eclipse.pde.ui/plugin.xml +++ b/ui/org.eclipse.pde.ui/plugin.xml @@ -577,6 +577,11 @@ id="org.eclipse.pde.ui.openManifest" name="%open.manifest.name"> </command> + <command + description="%importFromRepository.action.desc" + id="org.eclipse.pde.ui.import.repository" + name="%importFromRepository.action.name"> + </command> </extension> <extension point="org.eclipse.ui.popupMenus"> @@ -1917,6 +1922,10 @@ class="org.eclipse.pde.internal.ui.editor.OpenManifestHandler" commandId="org.eclipse.pde.ui.openManifest"> </handler> + <handler + class="org.eclipse.pde.internal.ui.views.plugins.ImportFromRepositoryActionDelegate" + commandId="org.eclipse.pde.ui.import.repository"> + </handler> </extension> <extension point="org.eclipse.ui.menus"> @@ -1993,6 +2002,30 @@ style="push"> </command> </menuContribution> + <menuContribution + allPopups="false" + locationURI="popup:org.eclipse.ui.popup.any?after=additions"> + <command + commandId="org.eclipse.pde.ui.import.repository" + disabledIcon="icons/dtool16/imp_extplug.gif" + icon="icons/etool16/imp_extplug.gif" + label="%importFromRepository.action.menu.name" + style="push" + tooltip="%importFromRepository.action.desc"> + <visibleWhen> + <iterate + ifEmpty="false" + operator="or"> + <adapt + type="org.eclipse.jdt.core.IPackageFragmentRoot"> + <test + property="org.eclipse.pde.core.inPluginContainer"> + </test> + </adapt> + </iterate> + </visibleWhen> + </command> + </menuContribution> <!-- <menuContribution locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions"> diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties index aaa04962da..002bc190b2 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties @@ -1067,7 +1067,7 @@ TemplateSelectionPage_column_name = Name TemplateSelectionPage_column_point = Extension Point ImportActionGroup_binaryWithLinkedContent=Binary Project with &Linked Content -ImportActionGroup_cannot_import=The selected plug-ins cannot be imported from a repository. +ImportActionGroup_cannot_import=The selected plug-ins cannot be imported from a repository. The plug-ins do not have an Eclipse-SourceReferences manifest header that can be processed. ImportActionGroup_importContributingPlugin=&Import Contributing Plug-in as ImportActionGroup_Repository_project=P&roject from a Repository... diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportActionGroup.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportActionGroup.java index d792f220ef..1cd3be65fd 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportActionGroup.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportActionGroup.java @@ -12,6 +12,7 @@ package org.eclipse.pde.internal.ui.views.plugins; import java.util.*; import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jface.action.*; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; @@ -81,7 +82,7 @@ public class ImportActionGroup extends ActionGroup { } } - private void handleImport(int importType, IStructuredSelection selection) { + static void handleImport(int importType, IStructuredSelection selection) { ArrayList externalModels = new ArrayList(); for (Iterator iter = selection.iterator(); iter.hasNext();) { IPluginModelBase model = getModel(iter.next()); @@ -111,7 +112,7 @@ public class ImportActionGroup extends ActionGroup { * @param models candidate models * @return map of importer to import descriptions */ - private Map getImportDescriptions(Shell shell, IPluginModelBase[] models) { + private static Map getImportDescriptions(Shell shell, IPluginModelBase[] models) { BundleProjectService service = (BundleProjectService) BundleProjectService.getDefault(); try { Map descriptions = service.getImportDescriptions(models); // all possible descriptions @@ -149,10 +150,23 @@ public class ImportActionGroup extends ActionGroup { } else if (next instanceof BundleDescription) { model = PDECore.getDefault().getModelManager().findModel((BundleDescription) next); } else if (next instanceof BundleSpecification) { + // Required for contents of Target Platform State View BundleDescription desc = (BundleDescription) ((BundleSpecification) next).getSupplier(); if (desc != null) { model = PDECore.getDefault().getModelManager().findModel(desc); } + } else if (next instanceof IPackageFragmentRoot) { + // Required for context menu on PDE classpath container entries + IPackageFragmentRoot root = (IPackageFragmentRoot) next; + if (root.isExternal()) { + String path = root.getPath().toOSString(); + IPluginModelBase[] externalModels = PDECore.getDefault().getModelManager().getExternalModels(); + for (int i = 0; i < externalModels.length; i++) { + if (path.equals(externalModels[i].getInstallLocation())) { + return externalModels[i]; + } + } + } } return model; diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportFromRepositoryActionDelegate.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportFromRepositoryActionDelegate.java new file mode 100644 index 0000000000..deb7578b99 --- /dev/null +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportFromRepositoryActionDelegate.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2011 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.pde.internal.ui.views.plugins; + +import org.eclipse.core.commands.*; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.pde.internal.ui.wizards.imports.PluginImportOperation; +import org.eclipse.ui.handlers.HandlerUtil; + +/** + * Action delegate to import a selected object if it represents a plug-in with a + * Eclipse-SourceReferences header that can be processed by Team. + * + * @see ImportActionGroup + */ +public class ImportFromRepositoryActionDelegate extends AbstractHandler { + + public Object execute(ExecutionEvent event) throws ExecutionException { +// enable = ImportActionGroup.canImport((IStructuredSelection) selection); + + ISelection selection = HandlerUtil.getCurrentSelection(event); + if (selection instanceof IStructuredSelection) { + ImportActionGroup.handleImport(PluginImportOperation.IMPORT_FROM_REPOSITORY, (IStructuredSelection) selection); + } + return null; + } +} |
