*** empty log message ***
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java index 652b2d9..0fc22e0 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ICoreConstants.java
@@ -26,7 +26,7 @@ String P_EXT_LOCATIONS = "ext_locations"; //$NON-NLS-1$ String PROGRAM_ARGS = "program_args"; //$NON-NLS-1$ String VM_ARGS = "vm_args"; //$NON-NLS-1$ - String IMPLICIT_DEPENDENCIES = "implicit_dependencies"; + String IMPLICIT_DEPENDENCIES = "implicit_dependencies"; //$NON-NLS-1$ // Target JRE String TARGET_JRE = "targetJRE"; //$NON-NLS-1$
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredDependencyManager.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredDependencyManager.java new file mode 100644 index 0000000..cf7c2bd --- /dev/null +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredDependencyManager.java
@@ -0,0 +1,115 @@ +/******************************************************************************* + * Copyright (c) 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.pde.internal.core; + + +public class RequiredDependencyManager { + + /*public static IPluginModelBase[] addRequiredPlugins( + IPluginModelBase[] selected, IPluginModelBase[] allModels) { + if (selected.length == 0 || selected.length == allModels.length) + return new IPluginModelBase[0]; + + HashSet existing = new HashSet(); + ArrayList result = new ArrayList(); + for (int i = 0; i < selected.length; i++) { + String id = selected[i].getPluginBase().getId(); + if (id != null) + existing.add(id); + } + + Iterator iter = existing.iterator(); + while (iter.hasNext()) { + addDependencies(iter.next().toString(), existing, result); + } + + + return (IPluginModelBase[])result.values().toArray(new IPluginModelBase[result.size()]); + } + + /*private void handleAddRequired() { + ArrayList result = new ArrayList(); + for (int i = 0; i < items.length; i++) { + IPluginModelBase model = (IPluginModelBase)items[i].getData(); + if (fTablePart.getTableViewer().getChecked(model)) + addPluginAndDependencies((IPluginModelBase) items[i].getData(), result); + } + fTablePart.setSelection(result.toArray()); + } + + protected void addPluginAndDependencies( + IPluginModelBase model, + ArrayList selected) { + + if (!selected.contains(model)) { + selected.add(model); + if (!model.isEnabled()) + fChangedModels.add(model); + addDependencies(getAllModels(), model, selected); + } + } + + protected void addDependencies( + IPluginModelBase[] models, + IPluginModelBase model, + ArrayList selected) { + + IPluginImport[] required = model.getPluginBase().getImports(); + if (required.length > 0) { + for (int i = 0; i < required.length; i++) { + IPluginModelBase found = findModel(models, required[i].getId()); + if (found != null) { + addPluginAndDependencies(found, selected); + } + } + } + + if (model instanceof IPluginModel) { + IFragmentModel[] fragments = findFragments(models, ((IPluginModel)model).getPlugin()); + for (int i = 0; i < fragments.length; i++) { + String id = fragments[i].getFragment().getId(); + if (!"org.eclipse.ui.workbench.compatibility".equals(id)) //$NON-NLS-1$ + addPluginAndDependencies(fragments[i], selected); + } + } else { + IFragment fragment = ((IFragmentModel) model).getFragment(); + IPluginModelBase found = findModel(models, fragment.getPluginId()); + if (found != null) { + addPluginAndDependencies(found, selected); + } + } + } + + private IPluginModelBase findModel(IPluginModelBase[] models, String id) { + for (int i = 0; i < models.length; i++) { + String modelId = models[i].getPluginBase().getId(); + if (modelId != null && modelId.equals(id)) + return models[i]; + } + return null; + } + + private IFragmentModel[] findFragments(IPluginModelBase[] models, IPlugin plugin) { + ArrayList result = new ArrayList(); + for (int i = 0; i < models.length; i++) { + if (models[i] instanceof IFragmentModel) { + IFragment fragment = ((IFragmentModel) models[i]).getFragment(); + if (plugin.getId().equalsIgnoreCase(fragment.getPluginId())) { + result.add(models[i]); + } + } + } + return (IFragmentModel[]) result.toArray(new IFragmentModel[result.size()]); + } + */ + + +}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetProfileManager.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetProfileManager.java index c075bee..1ef0edf 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetProfileManager.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetProfileManager.java
@@ -59,8 +59,8 @@ private String getString(IConfigurationElement elem){ String name = elem.getAttribute("name"); //$NON-NLS-1$ - String id = elem.getAttribute("id"); - name = name + " [" + id + "]"; + String id = elem.getAttribute("id"); //$NON-NLS-1$ + name = name + " [" + id + "]"; //$NON-NLS-1$ //$NON-NLS-2$ return name; } @@ -89,7 +89,7 @@ if (value == null || value.equals("")) //$NON-NLS-1$ return false; } - value = elem.getAttribute("path"); + value = elem.getAttribute("path"); //$NON-NLS-1$ String symbolicName = elem.getDeclaringExtension().getNamespace(); URL url = getResourceURL(symbolicName, value); try { @@ -118,7 +118,7 @@ for (int i = 0; i < elems.length; i++) { IConfigurationElement elem = elems[i]; if (isValid(elem)) { - String id = elem.getAttribute("id"); + String id = elem.getAttribute("id"); //$NON-NLS-1$ fTargets.put(id, elem); } } @@ -126,7 +126,7 @@ private void remove(IConfigurationElement[] elems) { for (int i = 0 ; i < elems.length; i++) { - fTargets.remove(elems[i].getAttribute("id")); + fTargets.remove(elems[i].getAttribute("id")); //$NON-NLS-1$ } }
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/IImplicitPluginsInfo.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/IImplicitPluginsInfo.java new file mode 100644 index 0000000..713a742 --- /dev/null +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/IImplicitPluginsInfo.java
@@ -0,0 +1,19 @@ +package org.eclipse.pde.internal.core.itarget; + +public interface IImplicitPluginsInfo extends ITargetObject { + + public static final String P_IMPLICIT_PLUGINS = "implicit-plugins"; //$NON-NLS-1$ + + ITargetPlugin[] getPlugins(); + + public void addPlugin(ITargetPlugin plugin); + + public void addPlugins(ITargetPlugin[] plugins); + + public void removePlugin(ITargetPlugin plugin); + + public void removePlugins(ITargetPlugin[] plugins); + + public boolean containsPlugin(String id); + +}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/ITarget.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/ITarget.java index 7bfdc34..eb391ab 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/ITarget.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/ITarget.java
@@ -40,8 +40,12 @@ ILocationInfo getLocationInfo(); - void setLocationInfo(ILocationInfo info); + void setImplicitPluginsInfo(IImplicitPluginsInfo info); + IImplicitPluginsInfo getImplicitPluginsInfo(); + + void setLocationInfo(ILocationInfo info); + void addPlugin(ITargetPlugin plugin); void addPlugins(ITargetPlugin[] plugins);
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/ITargetModelFactory.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/ITargetModelFactory.java index dc57075..f3ca575 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/ITargetModelFactory.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/itarget/ITargetModelFactory.java
@@ -22,6 +22,8 @@ ILocationInfo createLocation(); + IImplicitPluginsInfo createImplicitPluginInfo(); + ITargetPlugin createPlugin(); ITargetFeature createFeature();
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ImplicitPluginsInfo.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ImplicitPluginsInfo.java new file mode 100644 index 0000000..eef48a0 --- /dev/null +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ImplicitPluginsInfo.java
@@ -0,0 +1,95 @@ +package org.eclipse.pde.internal.core.target; + +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.eclipse.pde.internal.core.itarget.IImplicitPluginsInfo; +import org.eclipse.pde.internal.core.itarget.ITargetModel; +import org.eclipse.pde.internal.core.itarget.ITargetPlugin; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class ImplicitPluginsInfo extends TargetObject implements + IImplicitPluginsInfo { + + private static final long serialVersionUID = 1L; + + Map fPlugins = new HashMap(); + + public ImplicitPluginsInfo(ITargetModel model) { + super(model); + } + + public ITargetPlugin[] getPlugins() { + return (ITargetPlugin[]) fPlugins.values().toArray(new ITargetPlugin[fPlugins.size()]); + } + + public void addPlugin(ITargetPlugin plugin) { + addPlugins(new ITargetPlugin[] {plugin}); + } + + public void addPlugins(ITargetPlugin[] plugins) { + ArrayList addedPlugins = new ArrayList(); + for (int i = 0; i < plugins.length; i ++ ) { + String id = plugins[i].getId(); + if (fPlugins.containsKey(id)) + continue; + plugins[i].setModel(getModel()); + fPlugins.put(id, plugins[i]); + addedPlugins.add(plugins[i]); + } + if (isEditable() && (addedPlugins.size() > 0)) { + firePropertyChanged(P_IMPLICIT_PLUGINS, new ITargetPlugin[0], + (ITargetPlugin[])addedPlugins.toArray(new ITargetPlugin[addedPlugins.size()])); + } + + } + + public void removePlugin(ITargetPlugin plugin) { + removePlugins(new ITargetPlugin[] {plugin}); + } + + public void removePlugins(ITargetPlugin[] plugins) { + ArrayList removedPlugins = new ArrayList(); + for (int i =0; i < plugins.length; i++) + if (fPlugins.remove(plugins[i].getId()) != null) + removedPlugins.add(plugins[i]); + if (isEditable() && (removedPlugins.size() > 0)) + firePropertyChanged(P_IMPLICIT_PLUGINS, (ITargetPlugin[])removedPlugins.toArray(new ITargetPlugin[removedPlugins.size()]), + new ITargetPlugin[0]); + } + + public void parse(Node node) { + NodeList children = node.getChildNodes(); + for (int i = 0; i < children.getLength(); i++) { + Node child = children.item(i); + if (child.getNodeName().equals("plugin")) { //$NON-NLS-1$ + ITargetPlugin plugin = getModel().getFactory().createPlugin(); + plugin.parse(child); + fPlugins.put(plugin.getId(), plugin); + } + } + + } + + public void write(String indent, PrintWriter writer) { + if (fPlugins.size() == 0) + return; + writer.println(); + writer.println(indent + "<implicitPlugins>"); //$NON-NLS-1$ + Iterator it = fPlugins.values().iterator(); + while (it.hasNext()) { + TargetPlugin plugin = (TargetPlugin) it.next(); + plugin.write(indent + " ", writer); //$NON-NLS-1$ + } + writer.println(indent + "</implicitPlugins>"); //$NON-NLS-1$ + } + + public boolean containsPlugin(String id) { + return fPlugins.containsKey(id); + } + +}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Target.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Target.java index bac11b0..4ad00e6 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Target.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Target.java
@@ -17,6 +17,7 @@ import org.eclipse.pde.core.IModelChangedEvent; import org.eclipse.pde.internal.core.itarget.IArgumentsInfo; import org.eclipse.pde.internal.core.itarget.IEnvironmentInfo; +import org.eclipse.pde.internal.core.itarget.IImplicitPluginsInfo; import org.eclipse.pde.internal.core.itarget.ILocationInfo; import org.eclipse.pde.internal.core.itarget.IRuntimeInfo; import org.eclipse.pde.internal.core.itarget.ITarget; @@ -39,6 +40,7 @@ private IEnvironmentInfo fEnvInfo; private IRuntimeInfo fRuntimeInfo; private ILocationInfo fLocationInfo; + private IImplicitPluginsInfo fImplicitInfo; private boolean fUseAllTargetPlatform = false; public Target(ITargetModel model) { @@ -50,6 +52,7 @@ fEnvInfo = null; fRuntimeInfo = null; fLocationInfo = null; + fImplicitInfo = null; fPlugins.clear(); fFeatures.clear(); fUseAllTargetPlatform = false; @@ -81,6 +84,9 @@ } else if (name.equals("location")) { //$NON-NLS-1$ fLocationInfo = factory.createLocation(); fLocationInfo.parse(child); + } else if (name.equals("implicitPlugins")) { //$NON-NLS-1$ + fImplicitInfo = factory.createImplicitPluginInfo(); + fImplicitInfo.parse(child); } } } @@ -169,7 +175,9 @@ } writer.println(indent + " </features>"); //$NON-NLS-1$ writer.println(indent + " </content>"); //$NON-NLS-1$ - + if (fImplicitInfo != null) { + fImplicitInfo.write(indent + " ", writer); //$NON-NLS-1$ + } writer.println(); writer.println(indent + "</target>"); //$NON-NLS-1$ } @@ -315,4 +323,12 @@ if (isEditable()) firePropertyChanged(P_ALL_PLUGINS, new Boolean(oldValue), new Boolean(fUseAllTargetPlatform)); } + + public void setImplicitPluginsInfo(IImplicitPluginsInfo info) { + fImplicitInfo = info; + } + + public IImplicitPluginsInfo getImplicitPluginsInfo() { + return fImplicitInfo; + } }
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetModelFactory.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetModelFactory.java index d6d1359..01a09cb 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetModelFactory.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetModelFactory.java
@@ -12,6 +12,7 @@ import org.eclipse.pde.internal.core.itarget.IArgumentsInfo; import org.eclipse.pde.internal.core.itarget.IEnvironmentInfo; +import org.eclipse.pde.internal.core.itarget.IImplicitPluginsInfo; import org.eclipse.pde.internal.core.itarget.ILocationInfo; import org.eclipse.pde.internal.core.itarget.IRuntimeInfo; import org.eclipse.pde.internal.core.itarget.ITarget; @@ -47,6 +48,10 @@ public ILocationInfo createLocation() { return new LocationInfo(fModel); } + + public IImplicitPluginsInfo createImplicitPluginInfo() { + return new ImplicitPluginsInfo(fModel); + } public ITargetPlugin createPlugin() { return new TargetPlugin(fModel);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java index fe953b6..7246f80 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
@@ -2485,4 +2485,30 @@ public static String TargetPlatformPreferencePage_FileSelectionMessage; + public static String ImplicitDependenicesSection_Add; + + public static String ImplicitDependenicesSection_Remove; + + public static String ImplicitDependenicesSection_RemoveAll; + + public static String ImplicitDependenicesSection_Title; + + public static String ImplicitDependenicesSection_Description; + + public static String TargetImplicitPluginsTab_removeAllDescription; + + public static String TargetImplicitPluginsTab_removeAll3; + + public static String TargetImplicitPluginsTab_removeAll4; + + public static String TargetPluginsTab_readingPlatform; + + public static String TargetPluginsTab_readingFeatures; + + public static String TargetPlatformPreferencePage_implicitTab; + + public static String TargetPlatformPreferencePage_profileNotFoundTitle; + + public static String TargetPlatformPreferencePage_profileNotFoundDesc; + } \ No newline at end of file
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/ArgumentsSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/ArgumentsSection.java index da30268..8954ba1 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/ArgumentsSection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/ArgumentsSection.java
@@ -52,7 +52,7 @@ section.setText(PDEUIMessages.ArgumentsSection_editorTitle); section.setDescription(PDEUIMessages.ArgumentsSection_description); GridData data = new GridData(GridData.FILL_BOTH); - data.horizontalSpan = 2; + data.horizontalSpan = 1; section.setLayoutData(data); Composite client = toolkit.createComposite(section);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/EnvironmentPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/EnvironmentPage.java index 928af13..0376bf5 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/EnvironmentPage.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/EnvironmentPage.java
@@ -34,11 +34,13 @@ layout.marginRight = 10; layout.verticalSpacing = 15; layout.horizontalSpacing = 10; + layout.numColumns = 2; body.setLayout(layout); managedForm.addPart(new EnvironmentSection(this, body)); managedForm.addPart(new JRESection(this, body)); managedForm.addPart(new ArgumentsSection(this, body)); + managedForm.addPart(new ImplicitDependenicesSection(this, body)); } }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/EnvironmentSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/EnvironmentSection.java index 570629a..bd98968 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/EnvironmentSection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/EnvironmentSection.java
@@ -48,6 +48,7 @@ section.setDescription(PDEUIMessages.EnvironmentSection_description); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.verticalAlignment = SWT.TOP; + data.horizontalSpan = 2; section.setLayoutData(data); Composite client = toolkit.createComposite(section);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/ImplicitDependenicesSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/ImplicitDependenicesSection.java new file mode 100644 index 0000000..c3730c3 --- /dev/null +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/ImplicitDependenicesSection.java
@@ -0,0 +1,255 @@ +package org.eclipse.pde.internal.ui.editor.target; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; + +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.jface.window.Window; +import org.eclipse.osgi.service.resolver.BundleDescription; +import org.eclipse.pde.core.IModelChangedEvent; +import org.eclipse.pde.core.plugin.IPluginModelBase; +import org.eclipse.pde.internal.core.PDECore; +import org.eclipse.pde.internal.core.itarget.IImplicitPluginsInfo; +import org.eclipse.pde.internal.core.itarget.ITarget; +import org.eclipse.pde.internal.core.itarget.ITargetModel; +import org.eclipse.pde.internal.core.itarget.ITargetPlugin; +import org.eclipse.pde.internal.ui.PDEPlugin; +import org.eclipse.pde.internal.ui.PDEUIMessages; +import org.eclipse.pde.internal.ui.editor.PDEFormPage; +import org.eclipse.pde.internal.ui.editor.TableSection; +import org.eclipse.pde.internal.ui.editor.plugin.ManifestEditor; +import org.eclipse.pde.internal.ui.elements.DefaultTableProvider; +import org.eclipse.pde.internal.ui.parts.TablePart; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.dialogs.ElementListSelectionDialog; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Section; + +public class ImplicitDependenicesSection extends TableSection { + + private TableViewer fViewer; + private static final int ADD_INDEX = 0; + private static final int REMOVE_INDEX = 1; + private static final int REMOVE_ALL_INDEX = 2; + + public ImplicitDependenicesSection(PDEFormPage page, Composite parent) { + super(page, parent, Section.DESCRIPTION, new String[] {PDEUIMessages.ImplicitDependenicesSection_Add , PDEUIMessages.ImplicitDependenicesSection_Remove, PDEUIMessages.ImplicitDependenicesSection_RemoveAll}); + } + + protected void createClient(Section section, FormToolkit toolkit) { + section.setText(PDEUIMessages.ImplicitDependenicesSection_Title); + section.setDescription(PDEUIMessages.ImplicitDependenicesSection_Description); + Composite container = toolkit.createComposite(section); + GridLayout layout = new GridLayout(2, false); + container.setLayout(layout); + container.setLayoutData(new GridData(GridData.FILL_BOTH)); + createViewerPartControl(container, SWT.MULTI, 2, toolkit); + fViewer = getTablePart().getTableViewer(); + fViewer.setContentProvider(new DefaultTableProvider() { + public Object[] getElements(Object inputElement) { + return getImplicitPluginsInfo().getPlugins(); + } + }); + fViewer.setLabelProvider(PDEPlugin.getDefault().getLabelProvider()); + fViewer.setSorter(new ViewerSorter() { + public int compare(Viewer viewer, Object e1, Object e2) { + ITargetPlugin p1 = (ITargetPlugin) e1; + ITargetPlugin p2 = (ITargetPlugin) e2; + return super.compare(viewer, p1.getId(), p2.getId()); + } + }); + fViewer.setInput(getTarget()); + fViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + updateButtons(); + } + }); + + toolkit.paintBordersFor(container); + section.setClient(container); + GridData gd = new GridData(GridData.FILL_BOTH); + section.setLayoutData(gd); + updateButtons(); + getModel().addModelChangedListener(this); + } + + public boolean doGlobalAction(String actionId) { + if (actionId.equals(ActionFactory.DELETE.getId())) { + handleRemove(); + return true; + } + if (actionId.equals(ActionFactory.CUT.getId())) { + // delete here and let the editor transfer + // the selection to the clipboard + handleRemove(); + return false; + } + if (actionId.equals(ActionFactory.PASTE.getId())) { + doPaste(); + return true; + } + return false; + } + + private void updateButtons() { + TablePart part = getTablePart(); + boolean empty = fViewer.getSelection().isEmpty(); + part.setButtonEnabled(1, !empty); + boolean hasElements = fViewer.getTable().getItemCount() > 0; + part.setButtonEnabled(2, hasElements); + } + + protected void buttonSelected(int index) { + switch (index) { + case ADD_INDEX: + handleAdd(); + break; + case REMOVE_INDEX: + handleRemove(); + break; + case REMOVE_ALL_INDEX: + handleRemoveAll(); + } + } + + protected void handleAdd() { + ElementListSelectionDialog dialog = new ElementListSelectionDialog( + PDEPlugin.getActiveWorkbenchShell(), + PDEPlugin.getDefault().getLabelProvider()); + + dialog.setElements(getValidBundles()); + dialog.setTitle(PDEUIMessages.PluginSelectionDialog_title); + dialog.setMessage(PDEUIMessages.PluginSelectionDialog_message); + dialog.setMultipleSelection(true); + if (dialog.open() == Window.OK) { + Object[] models = dialog.getResult(); + ArrayList pluginsToAdd = new ArrayList(); + ITargetModel model = getModel(); + for (int i = 0; i < models.length; i++) { + BundleDescription desc = (BundleDescription) models[i]; + ITargetPlugin plugin = model.getFactory().createPlugin(); + plugin.setId(desc.getSymbolicName()); + plugin.setModel(model); + pluginsToAdd.add(plugin); + } + getImplicitPluginsInfo().addPlugins((ITargetPlugin[])pluginsToAdd.toArray(new ITargetPlugin[pluginsToAdd.size()])); + updateButtons(); + } + } + + protected Object[] getValidBundles() { + ITargetPlugin[] plugins = getImplicitPluginsInfo().getPlugins(); + Set currentPlugins = new HashSet((4/3) * plugins.length + 1); + for (int i = 0; i < plugins.length; i++) { + currentPlugins.add(plugins[i].getId()); + } + + IPluginModelBase[] models = PDECore.getDefault().getModelManager().getAllPlugins(); + Set result = new HashSet((4/3) * models.length + 1); + for (int i = 0; i < models.length; i++) { + BundleDescription desc = models[i].getBundleDescription(); + if (desc != null) { + if (!currentPlugins.contains(desc.getSymbolicName())) + result.add(desc); + } + } + return result.toArray(); + } + + protected void handleRemove() { + Object[] src = ((IStructuredSelection)fViewer.getSelection()).toArray(); + ITargetPlugin[] plugins = new ITargetPlugin[src.length]; + System.arraycopy(src, 0, plugins, 0, src.length); + getImplicitPluginsInfo().removePlugins(plugins); + } + + protected void handleRemoveAll() { + IImplicitPluginsInfo info =getImplicitPluginsInfo(); + info.removePlugins(info.getPlugins()); + } + + private IImplicitPluginsInfo getImplicitPluginsInfo() { + IImplicitPluginsInfo info = getTarget().getImplicitPluginsInfo(); + if (info == null) { + info = getModel().getFactory().createImplicitPluginInfo(); + getTarget().setImplicitPluginsInfo(info); + } + return info; + } + + private ITarget getTarget() { + return getModel().getTarget(); + } + + private ITargetModel getModel() { + return (ITargetModel)getPage().getPDEEditor().getAggregateModel(); + } + + /* (non-Javadoc) + * @see org.eclipse.pde.internal.ui.editor.PDESection#modelChanged(org.eclipse.pde.core.IModelChangedEvent) + */ + public void modelChanged(IModelChangedEvent e) { + if (e.getChangeType() == IModelChangedEvent.WORLD_CHANGED) { + markStale(); + return; + } + if (e.getChangeType() == IModelChangedEvent.CHANGE && + e.getChangedProperty().equals(IImplicitPluginsInfo.P_IMPLICIT_PLUGINS)) { + ITargetPlugin[] plugins = (ITargetPlugin[])e.getOldValue(); + for (int i = 0; i < plugins.length; i++) + fViewer.remove(plugins[i]); + plugins = (ITargetPlugin[])e.getNewValue(); + for (int i = 0; i < plugins.length; i++) + fViewer.add(plugins[i]); + } + } + + /* (non-Javadoc) + * @see org.eclipse.pde.internal.ui.editor.TableSection#handleDoubleClick(org.eclipse.jface.viewers.IStructuredSelection) + */ + protected void handleDoubleClick(IStructuredSelection selection) { + handleOpen(selection); + } + + private void handleOpen(IStructuredSelection selection) { + Object object = selection.getFirstElement(); + ManifestEditor.openPluginEditor(((ITargetPlugin)object).getId()); + } + + protected boolean canPaste(Object target, Object[] objects) { + for (int i = 0; i < objects.length; i++) { + if (!(objects[i] instanceof ITargetPlugin)) + return false; + } + return true; + } + + protected void doPaste(Object target, Object[] objects) { + for (int i = 0; i < objects.length; i++) { + if ( objects[i] instanceof ITargetPlugin ) + getImplicitPluginsInfo().addPlugin((ITargetPlugin)objects[i]); + } + } + + protected void selectionChanged(IStructuredSelection selection) { + getPage().getPDEEditor().setSelection(selection); + } + +// public void commit(boolean onSave) { +// +// } + + public void dispose() { + getModel().removeModelChangedListener(this); + } +}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/JRESection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/JRESection.java index f66d6c1..474cadf 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/JRESection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/target/JRESection.java
@@ -48,6 +48,7 @@ section.setLayout(new GridLayout()); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.verticalAlignment = SWT.TOP; + data.horizontalSpan = 2; section.setLayoutData(data); Composite client = toolkit.createComposite(section);
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 190e11c..f734dc51 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
@@ -1343,6 +1343,7 @@ ImportWizard_DetailedPage_title = Selection ImportWizard_DetailedPage_desc = Select plug-ins and fragments to import. ImportWizard_DetailedPage_availableList = &Plug-ins and Fragments Found: +ImplicitDependenicesSection_Description=Select plug-ins to be added to the explicit plug-in tab, to be included during dependency checking ImportWizard_DetailedPage_importList = P&lug-ins and Fragments to Import: ImportWizard_DetailedPage_add = &Add --> ImportWizard_DetailedPage_addAll = A&dd All --> @@ -1350,8 +1351,10 @@ ImportWizard_DetailedPage_removeAll = <-- Re&move All ImportWizard_DetailedPage_swap = <-- &Swap --> ImportWizard_DetailedPage_existing = Exis&ting Plug-ins --> +ImplicitDependenicesSection_Remove=Remove... ImportWizard_DetailedPage_existingUnshared = Existing &Unshared --> ImportWizard_DetailedPage_addRequired = Re&quired Plug-ins --> +ImplicitDependenicesSection_RemoveAll=Remove All ImportWizard_DetailedPage_count = {0} out of {1} selected ImportWizard_DetailedPage_locate = Locate Plug-ins and Fragments ImportWizard_DetailedPage_search = &ID (* = any string, ? = any character): @@ -2017,12 +2020,16 @@ TargetPlatformPreferencePage_pluginsTab=&Plug-ins TargetPlatformPreferencePage_sourceCode=S&ource Code Locations TargetProfileWizardPage_description=Create a new target profile definition. The file name must end with '.target'. +TargetImplicitPluginsTab_removeAll3=R&emoveAll +TargetImplicitPluginsTab_removeAll4=, TargetProfileWizardPage_title=Target Profile TargetProfileWizardPage_error=The file name must end with '.target' TargetDefinitionSection_title=Target Profile Definition TargetDefinitionSection_targetLocation=Target location: TargetDefinitionSection_sameAsHost=The target platform is the same as the host (running) platform TargetDefinitionSection_location=Location: +TargetPluginsTab_readingPlatform=Reading Target Platform... +TargetPluginsTab_readingFeatures=Reading Features... TargetDefinitionSection_fileSystem=File System... TargetDefinitionSection_variables=Variables... TargetDefinitionSection_name=Profile name: @@ -2031,12 +2038,16 @@ TargetOutlinePage_features=Features TargetPlatformPreferencePage_environmentTab=En&vironment TargetPlatformPreferencePage_TargetGroupTitle=Target Profiles +TargetImplicitPluginsTab_removeAllDescription=The plug-ins selected will be included as required bundles during dependency checking: TargetPlatformPreferencePage_CurrentProfileLabel=<a>Profile</a>: +TargetPlatformPreferencePage_profileNotFoundDesc=Target profile could not be found TargetPlatformPreferencePage_FileSelectionTitle=File Selection TargetPlatformPreferencePage_FileSelectionMessage=Select a target definition: +TargetPlatformPreferencePage_profileNotFoundTitle=Cannot open target profile TargetPlatformPreferencePage_agrumentsTab=La&unching Arguments TargetPlatformPreferencePage_BrowseButton=Bro&wse... TargetPlatformPreferencePage_ApplyButton=Load &Profile +TargetPlatformPreferencePage_implicitTab=Impli&cit Plug-ins EnvironmentBlock_jreGroup=&Target JRE: EnvironmentBlock_jreTitle=Java Runtime Environment EnvironmentSection_locale=Locale: @@ -2203,9 +2214,11 @@ ImportPackageSection_desc = Specify packages on which this plug-in depends without explicitly identifying their originating plug-in: ImportPackageSection_descFragment = Specify packages on which this fragment depends without explicitly identifying their originating plug-in: +ImplicitDependenicesSection_Title=Implicit Plug-in Dependencies ImportPackageSection_add=Add... ImportPackageSection_remove=Remove ImportPackageSection_properties=Properties... +ImplicitDependenicesSection_Add=Add... ImportPackageSection_required=Imported Packages ImportPackageSection_exported=Packages exported by other plug-ins: ImportPackageSection_selection=Package Selection
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/JavaArgumentsTab.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/JavaArgumentsTab.java index 8c7f168..3b59fdb 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/JavaArgumentsTab.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/JavaArgumentsTab.java
@@ -111,13 +111,13 @@ protected void loadTargetProfile(ITarget target) { IArgumentsInfo info = target.getArguments(); if (info == null) { - fProgramArgs.setText(""); - fVMArgs.setText(""); + fProgramArgs.setText(""); //$NON-NLS-1$ + fVMArgs.setText(""); //$NON-NLS-1$ return; } - String progArgs = (info.getProgramArguments() == null) ? "" : info.getProgramArguments(); + String progArgs = (info.getProgramArguments() == null) ? "" : info.getProgramArguments(); //$NON-NLS-1$ fProgramArgs.setText(progArgs); - String vmArgs = (info.getVMArguments() == null) ? "" : info.getVMArguments(); + String vmArgs = (info.getVMArguments() == null) ? "" : info.getVMArguments(); //$NON-NLS-1$ fVMArgs.setText(vmArgs); } }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetEnvironmentTab.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetEnvironmentTab.java index 4975fa4..86f1570 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetEnvironmentTab.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetEnvironmentTab.java
@@ -225,25 +225,25 @@ String nl = info.getNL(); nl = expandLocaleName(nl); - if (!os.equals("")) { + if (!os.equals("")) { //$NON-NLS-1$ if (fOSCombo.indexOf(os) == -1) fOSCombo.add(os); fOSCombo.setText(os); } - if (!ws.equals("")) { + if (!ws.equals("")) { //$NON-NLS-1$ if (fWSCombo.indexOf(ws) == -1) fWSCombo.add(ws); fWSCombo.setText(ws); } - if (!arch.equals("")) { + if (!arch.equals("")) { //$NON-NLS-1$ if (fArchCombo.indexOf(arch) == -1) fArchCombo.add(arch); fArchCombo.setText(arch); } - if (!nl.equals("")) { + if (!nl.equals("")) { //$NON-NLS-1$ if (fNLCombo.indexOf(nl) == -1) fNLCombo.add(nl); fNLCombo.setText(nl);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetImplicitPluginsTab.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetImplicitPluginsTab.java index 0330954..7dc62ca 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetImplicitPluginsTab.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetImplicitPluginsTab.java
@@ -49,7 +49,7 @@ private TargetPlatformPreferencePage fPage; public TargetImplicitPluginsTab(TargetPlatformPreferencePage page) { - ROOT = "Wassim"; + ROOT = ""; //$NON-NLS-1$ fPage = page; } @@ -83,7 +83,7 @@ private void createLabel(Composite container) { Label label = new Label(container, SWT.NONE); - label.setText("The plug-ins selected will be included as required bundles during dependency checking:"); + label.setText(PDEUIMessages.TargetImplicitPluginsTab_removeAllDescription); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; label.setLayoutData(gd); @@ -117,7 +117,7 @@ protected void loadTable() { Preferences preferences = PDECore.getDefault().getPluginPreferences(); String value = preferences.getString(ICoreConstants.IMPLICIT_DEPENDENCIES); - StringTokenizer tokens = new StringTokenizer(value,","); + StringTokenizer tokens = new StringTokenizer(value,","); //$NON-NLS-1$ fElements = new HashSet((4/3) * tokens.countTokens() + 1); PluginModelManager manager = PDECore.getDefault().getModelManager(); while (tokens.hasMoreElements()) { @@ -157,7 +157,7 @@ }); fRemoveAllButton = new Button(buttonContainer, SWT.PUSH); - fRemoveAllButton.setText("RemoveAll"); + fRemoveAllButton.setText(PDEUIMessages.TargetImplicitPluginsTab_removeAll3); fRemoveAllButton.setLayoutData(new GridData(GridData.FILL | GridData.VERTICAL_ALIGN_BEGINNING)); SWTUtil.setButtonDimensionHint(fRemoveAllButton); fRemoveAllButton.addSelectionListener(new SelectionAdapter() { @@ -249,7 +249,7 @@ Iterator it = fElements.iterator(); while (it.hasNext()) { if (buffer.length() > 0) - buffer.append(","); + buffer.append(PDEUIMessages.TargetImplicitPluginsTab_removeAll4); IPluginModelBase base = (IPluginModelBase) it.next(); buffer.append(getSymbolicName(base)); }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPlatformPreferencePage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPlatformPreferencePage.java index 8206251..741b10e 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPlatformPreferencePage.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPlatformPreferencePage.java
@@ -287,7 +287,7 @@ Control block = fExplicitPluginsTab.createContents(folder); TabItem tab = new TabItem(folder, SWT.NONE); - tab.setText("E&xplicit Plug-ins"); + tab.setText(PDEUIMessages.TargetPlatformPreferencePage_implicitTab); tab.setControl(block); } @@ -346,7 +346,7 @@ } IFile[] files; try { - URI uri = new URI("file", url.getPath(), null); + URI uri = new URI("file", url.getPath(), null); //$NON-NLS-1$ files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(uri); } catch (URISyntaxException e) { error = true; @@ -369,7 +369,7 @@ } } finally { if (error) { - MessageDialog.openError(getShell(), "Cannot open target profile", "Target profile could not be found"); + MessageDialog.openError(getShell(), PDEUIMessages.TargetPlatformPreferencePage_profileNotFoundTitle, PDEUIMessages.TargetPlatformPreferencePage_profileNotFoundDesc); } } } @@ -467,7 +467,7 @@ if (offSet > fProfileCombo.getSelectionIndex()) return null; IConfigurationElement elem = fElements[fProfileCombo.getSelectionIndex() - offSet]; - String path = elem.getAttribute("path"); + String path = elem.getAttribute("path"); //$NON-NLS-1$ String symbolicName = elem.getDeclaringExtension().getNamespace(); return TargetProfileManager.getResourceURL(symbolicName, path); } @@ -563,11 +563,11 @@ String value = fProfileCombo.getText().trim(); int index = value.lastIndexOf('['); value = value.substring(index + 1, value.length() - 1); - fPreferences.setValue(ICoreConstants.TARGET_PROFILE, "${workspace_loc:" + value + "}"); + fPreferences.setValue(ICoreConstants.TARGET_PROFILE, "${workspace_loc:" + value + "}"); //$NON-NLS-1$ //$NON-NLS-2$ } else { int offSet = fProfileCombo.getItemCount() - fElements.length; IConfigurationElement elem = fElements[fProfileCombo.getSelectionIndex() - offSet]; - fPreferences.setValue(ICoreConstants.TARGET_PROFILE, "id:" + elem.getAttribute("id")); + fPreferences.setValue(ICoreConstants.TARGET_PROFILE, "id:" + elem.getAttribute("id")); //$NON-NLS-1$ //$NON-NLS-2$ } }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPluginsTab.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPluginsTab.java index 249aad7..f19d68b 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPluginsTab.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/TargetPluginsTab.java
@@ -26,6 +26,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Preferences; +import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.CheckboxTableViewer; @@ -99,30 +100,35 @@ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { URL[] pluginPaths = PluginPathFinder.getPluginPaths(location); - fCurrentState = new PDEState(pluginPaths, true, monitor); + monitor.beginTask(PDEUIMessages.TargetPluginsTab_readingPlatform, 10); + SubProgressMonitor parsePluginMonitor = new SubProgressMonitor(monitor, 9); + fCurrentState = new PDEState(pluginPaths, true, parsePluginMonitor); fModels = fCurrentState.getModels(); - //TODO creating the state is getting the full progress monitor, - // while reloading features get no monitor. - // so you are ending up with a progress monitor going to completion - // then having to inexplicably wait for the progress dialog to go away - // while features are being parsed. - // I suggest splitting the monitor into two SubProgressMonitors (90%-10% split), - // with the 90% portion going to parsing the plug-ins - loadFeatures(); + loadFeatures(new SubProgressMonitor(monitor, 1)); + monitor.done(); } - private void loadFeatures() { + private void loadFeatures(IProgressMonitor monitor) { ExternalFeatureModelManager manager = new ExternalFeatureModelManager(); - manager.loadModels(fPage.getPlatformPath()); + manager.loadModels(location); IFeatureModel[] externalModels = manager.getModels(); IFeatureModel[] workspaceModels = PDECore.getDefault().getFeatureModelManager().getWorkspaceModels(); - fCurrentFeatures = new HashMap((4/3) * (externalModels.length + workspaceModels.length) + 1); + int numFeatures = externalModels.length + workspaceModels.length; + monitor.beginTask(PDEUIMessages.TargetPluginsTab_readingFeatures, numFeatures); + fCurrentFeatures = new HashMap((4/3) * (numFeatures) + 1); for (int i = 0; i < externalModels.length; i++) { - fCurrentFeatures.put(externalModels[i].getFeature().getId(), externalModels[i]); + String id = externalModels[i].getFeature().getId(); + monitor.subTask(id); + fCurrentFeatures.put(id, externalModels[i]); + monitor.worked(1); } for (int i = 0; i < workspaceModels.length; i++) { - fCurrentFeatures.put(workspaceModels[i].getFeature().getId(), workspaceModels[i]); + String id = workspaceModels[i].getFeature().getId(); + monitor.subTask(id); + fCurrentFeatures.put(id, workspaceModels[i]); + monitor.worked(1); } + monitor.done(); } }