Bug 313392 - Support Import operations on 'Plug-in Dependencies' entries
in Project and Package Explorer
Add import from repository option to project/package explorer
diff --git a/ui/org.eclipse.pde.ui/plugin.properties b/ui/org.eclipse.pde.ui/plugin.properties
index 70f38c4..2ec2bc1 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
@@ -260,4 +260,5 @@
structureMergeViewers.manifest.label=Manifest Structure Compare
structureMergeViewers.plugin.label=Plug-in Structure Compare
commandParameter.name = The initial search pattern for the artifact search dialog
-consoleFactory.label = Host OSGi Console
\ No newline at end of file
+consoleFactory.label = Host OSGi Console
+importFromRepository.label = Import from repository...
\ No newline at end of file
diff --git a/ui/org.eclipse.pde.ui/plugin.xml b/ui/org.eclipse.pde.ui/plugin.xml
index e3c2e18..9b90153 100644
--- a/ui/org.eclipse.pde.ui/plugin.xml
+++ b/ui/org.eclipse.pde.ui/plugin.xml
@@ -925,6 +925,18 @@
id="org.eclipse.pde.ui.OpenManifestAction">
</action>
</objectContribution>
+ <objectContribution
+ adaptable="false"
+ id="org.eclipse.pde.ui.referencedLibsToolSet"
+ objectClass="org.eclipse.jdt.core.IPackageFragmentRoot">
+ <action
+ class="org.eclipse.pde.internal.ui.views.plugins.ImportFromRepositoryActionDelegate"
+ icon="icons/etool16/imp_extplug.gif"
+ id="org.eclipse.pde.ui.importFromRepo"
+ label="%importFromRepository.label"
+ menubarPath="group.import">
+ </action>
+ </objectContribution>
</extension>
<extension
point="org.eclipse.debug.ui.launchConfigurationTypeImages">
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 aaa0496..002bc19 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_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 d792f22..1cd3be6 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 @@
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 @@
}
}
- 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 @@
* @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 @@
} 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 0000000..ce41d1f
--- /dev/null
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/plugins/ImportFromRepositoryActionDelegate.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * 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.jface.action.IAction;
+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.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * 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 implements IObjectActionDelegate {
+
+ /**
+ * Stores the last selection to pass to import operation
+ */
+ private ISelection fSelection;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+ */
+ public void run(IAction action) {
+ if (fSelection instanceof IStructuredSelection) {
+ ImportActionGroup.handleImport(PluginImportOperation.IMPORT_FROM_REPOSITORY, (IStructuredSelection) fSelection);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ fSelection = selection;
+ boolean enable = false;
+ if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+ enable = ImportActionGroup.canImport((IStructuredSelection) selection);
+ }
+ action.setEnabled(enable);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+ */
+ public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+ }
+
+}