*** empty log message ***
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
index 9fd8028..0f54c7b 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
@@ -31,6 +31,8 @@
import org.eclipse.pde.core.plugin.IPlugin;
import org.eclipse.pde.core.plugin.IPluginExtensionPoint;
import org.eclipse.pde.core.plugin.IPluginModel;
+import org.eclipse.pde.internal.core.ifeature.*;
+import org.eclipse.pde.internal.core.ifeature.IFeature;
import org.eclipse.pde.internal.core.schema.SchemaRegistry;
public class PDECore extends Plugin {
@@ -131,6 +133,24 @@
}
return null;
}
+
+ private IFeature findFeature(
+ IFeatureModel[] models,
+ String id,
+ String version,
+ int match) {
+
+ for (int i = 0; i < models.length; i++) {
+ IFeatureModel model = models[i];
+
+ IFeature feature = model.getFeature();
+ String pid = feature.getId();
+ String pversion = feature.getVersion();
+ if (compare(id, version, pid, pversion, match))
+ return feature;
+ }
+ return null;
+ }
public static boolean compare(
String id1,
@@ -189,6 +209,16 @@
ExternalModelManager exmanager = getExternalModelManager();
return findPlugin(exmanager.getModels(), id, version, match);
}
+
+ public IFeature findFeature(String id) {
+ return findFeature(id, null, IMatchRules.NONE);
+ }
+
+ public IFeature findFeature(String id, String version, int match) {
+ WorkspaceModelManager manager = getWorkspaceModelManager();
+ return findFeature(manager.getWorkspaceFeatureModels(), id, version, match);
+ }
+
public static PDECore getDefault() {
return inst;
}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
index c9fcf81..bff6978 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
@@ -61,11 +61,13 @@
fireStructureChanged(features, IModelChangedEvent.INSERT);
}
- public void addImport(IFeatureImport iimport) throws CoreException {
+ public void addImports(IFeatureImport [] iimports) throws CoreException {
ensureModelEditable();
- imports.add(iimport);
- ((FeatureImport) iimport).setInTheModel(true);
- fireStructureChanged(iimport, IModelChangedEvent.INSERT);
+ for (int i=0; i<iimports.length; i++) {
+ imports.add(iimports[i]);
+ ((FeatureImport)iimports[i]).setInTheModel(true);
+ }
+ fireStructureChanged(iimports, IModelChangedEvent.INSERT);
}
public IFeaturePlugin[] getPlugins() {
@@ -321,11 +323,13 @@
}
fireStructureChanged(features, IModelChangedEvent.REMOVE);
}
- public void removeImport(IFeatureImport iimport) throws CoreException {
+ public void removeImports(IFeatureImport [] iimports) throws CoreException {
ensureModelEditable();
- imports.remove(iimport);
- ((FeatureImport) iimport).setInTheModel(false);
- fireStructureChanged(iimport, IModelChangedEvent.REMOVE);
+ for (int i=0; i<iimports.length; i++) {
+ imports.remove(iimports[i]);
+ ((FeatureImport)iimports[i]).setInTheModel(false);
+ }
+ fireStructureChanged(iimports, IModelChangedEvent.REMOVE);
}
public String getOS() {
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
index 5071620..877fe2f 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
@@ -18,21 +18,45 @@
private IFeature feature;
private String name;
private boolean optional;
+ private int searchLocation = ROOT;
+ private int match = NONE;
protected void reset() {
super.reset();
version = null;
optional = false;
name = null;
+ searchLocation = ROOT;
+ match = NONE;
}
protected void parse(Node node) {
super.parse(node);
version = getNodeAttribute(node, "version");
name = getNodeAttribute(node, "name");
optional = getBooleanAttribute(node, "optional");
+ String matchName = getNodeAttribute(node, "match");
+ if (matchName != null) {
+ for (int i = 0; i < RULE_NAME_TABLE.length; i++) {
+ if (matchName.equals(RULE_NAME_TABLE[i])) {
+ match = i;
+ break;
+ }
+ }
+ }
+ String searchLocationName = getNodeAttribute(node, "search_location");
+ if (searchLocationName == null)
+ searchLocationName = getNodeAttribute(node, "search-location");
+ if (searchLocationName != null) {
+ if (searchLocationName.equals("root"))
+ searchLocation = ROOT;
+ else if (searchLocationName.equals("self"))
+ searchLocation = SELF;
+ else if (searchLocationName.equals("both"))
+ searchLocation = BOTH;
+ }
hookWithWorkspace();
}
-
+
public void loadFrom(IFeature feature) {
id = feature.getId();
version = feature.getVersion();
@@ -46,28 +70,39 @@
public String getVersion() {
return version;
}
-
+
public boolean isOptional() {
return optional;
}
-
+
public String getName() {
return name;
}
-
+
+ public int getSearchLocation() {
+ return searchLocation;
+ }
+
+ public int getMatch() {
+ return match;
+ }
+
public IFeature getReferencedFeature() {
- if (feature==null)
+ if (feature == null)
hookWithWorkspace();
return feature;
}
public void hookWithWorkspace() {
IFeatureModel[] models =
- PDECore.getDefault().getWorkspaceModelManager().getWorkspaceFeatureModels();
+ PDECore
+ .getDefault()
+ .getWorkspaceModelManager()
+ .getWorkspaceFeatureModels();
for (int i = 0; i < models.length; i++) {
IFeature feature = models[i].getFeature();
-
- if (feature!=null && feature.getId().equals(getId())) {
+
+ if (feature != null && feature.getId().equals(getId())) {
if (version == null || feature.getVersion().equals(version)) {
this.feature = feature;
break;
@@ -86,32 +121,55 @@
firePropertyChanged(P_VERSION, oldValue, version);
hookWithWorkspace();
}
-
+
public void setName(String name) throws CoreException {
ensureModelEditable();
Object oldValue = this.name;
this.name = name;
firePropertyChanged(P_NAME, oldValue, name);
}
-
+
+ public void setMatch(int match) throws CoreException {
+ ensureModelEditable();
+ Integer oldValue = new Integer(this.match);
+ this.match = match;
+ firePropertyChanged(P_MATCH, oldValue, new Integer(match));
+ }
+
+ public void setSearchLocation(int searchLocation) throws CoreException {
+ ensureModelEditable();
+ Integer oldValue = new Integer(this.searchLocation);
+ this.searchLocation = searchLocation;
+ firePropertyChanged(
+ P_SEARCH_LOCATION,
+ oldValue,
+ new Integer(searchLocation));
+ }
+
public void setOptional(boolean optional) throws CoreException {
ensureModelEditable();
Object oldValue = new Boolean(this.optional);
this.optional = optional;
firePropertyChanged(P_NAME, oldValue, new Boolean(optional));
}
-
- public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
+
+ public void restoreProperty(String name, Object oldValue, Object newValue)
+ throws CoreException {
if (name.equals(P_VERSION)) {
- setVersion((String)newValue);
+ setVersion((String) newValue);
} else if (name.equals(P_OPTIONAL)) {
- setOptional(((Boolean)newValue).booleanValue());
+ setOptional(((Boolean) newValue).booleanValue());
} else if (name.equals(P_NAME)) {
- setName((String)newValue);
- } else
+ setName((String) newValue);
+ } else if (name.equals(P_MATCH)) {
+ setMatch(newValue != null ? ((Integer) newValue).intValue() : NONE);
+ } else if (name.equals(P_SEARCH_LOCATION)) {
+ setSearchLocation(
+ newValue != null ? ((Integer) newValue).intValue() : ROOT);
+ } else
super.restoreProperty(name, oldValue, newValue);
}
-
+
public void setId(String id) throws CoreException {
super.setId(id);
hookWithWorkspace();
@@ -139,7 +197,15 @@
writer.println();
writer.print(indent2 + "optional=\"true\"");
}
+ if (match!=NONE) {
+ writer.println();
+ writer.print(indent2 + "match=\""+RULE_NAME_TABLE[match]+"\"");
+ }
+ if (searchLocation!=ROOT) {
+ writer.println();
+ String value=searchLocation==SELF?"self":"both";
+ writer.print(indent2 + "search_location=\""+value+"\"");
+ }
writer.println("/>");
- //writer.println(indent + "</includes>");
}
}
\ No newline at end of file
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java
index 225f6eb..0e44397 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java
@@ -9,6 +9,7 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.pde.core.plugin.IPlugin;
import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.ifeature.*;
import org.eclipse.pde.internal.core.ifeature.IFeatureImport;
import org.w3c.dom.Node;
@@ -17,6 +18,9 @@
implements IFeatureImport {
private int match = NONE;
private IPlugin plugin;
+ private IFeature feature;
+ private int type = PLUGIN;
+ private boolean patch = false;
public FeatureImport() {
}
@@ -24,14 +28,35 @@
public IPlugin getPlugin() {
return plugin;
}
+
+ public IFeature getFeature() {
+ return feature;
+ }
public void setPlugin(IPlugin plugin) {
this.plugin = plugin;
}
+
+ public void setFeature(IFeature feature) {
+ this.feature = feature;
+ }
+
+ protected void reset() {
+ super.reset();
+ patch = false;
+ type = PLUGIN;
+ match = NONE;
+ }
protected void parse(Node node) {
super.parse(node);
this.id = getNodeAttribute(node, "plugin");
+ if (id != null)
+ type = PLUGIN;
+ else {
+ this.id = getNodeAttribute(node, "feature");
+ type = FEATURE;
+ }
String mvalue = getNodeAttribute(node, "match");
if (mvalue != null && mvalue.length() > 0) {
String[] choices = RULE_NAME_TABLE;
@@ -42,7 +67,19 @@
}
}
}
- setPlugin(PDECore.getDefault().findPlugin(id, getVersion(), match));
+ patch = getBooleanAttribute(node, "patch");
+ if (type==PLUGIN)
+ setPlugin(PDECore.getDefault().findPlugin(id, getVersion(), match));
+ else
+ setFeature(PDECore.getDefault().findFeature(id, getVersion(), match));
+ }
+
+ public void loadFrom(IFeature feature) {
+ reset();
+ this.feature = feature;
+ type = FEATURE;
+ id = feature.getId();
+ version = feature.getVersion();
}
public int getMatch() {
@@ -56,27 +93,61 @@
firePropertyChanged(P_MATCH, oldValue, new Integer(match));
}
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) throws CoreException {
+ ensureModelEditable();
+ Integer oldValue = new Integer(this.type);
+ this.type = type;
+ firePropertyChanged(P_TYPE, oldValue, new Integer(type));
+ }
+
+ public boolean isPatch() {
+ return patch;
+ }
+
+ public void setPatch(boolean patch) throws CoreException {
+ ensureModelEditable();
+ Boolean oldValue = new Boolean(this.patch);
+ this.patch = patch;
+ firePropertyChanged(P_PATCH, oldValue, new Boolean(patch));
+ }
+
public void restoreProperty(String name, Object oldValue, Object newValue)
throws CoreException {
if (name.equals(P_MATCH)) {
setMatch(newValue != null ? ((Integer) newValue).intValue() : 0);
+ } else if (name.equals(P_TYPE)) {
+ setType(
+ newValue != null ? ((Integer) newValue).intValue() : PLUGIN);
+ } else if (name.equals(P_PATCH)) {
+ setPatch(
+ newValue != null ? ((Boolean) newValue).booleanValue() : false);
} else
super.restoreProperty(name, oldValue, newValue);
}
public void write(String indent, PrintWriter writer) {
- writer.print(indent + "<import plugin=\"" + getId() + "\"");
+ String typeAtt = type==FEATURE ? "feature":"plugin";
+ writer.print(indent + "<import "+typeAtt+"=\"" + getId() + "\"");
if (getVersion() != null) {
writer.print(" version=\"" + getVersion() + "\"");
}
if (match != NONE) {
writer.print(" match=\"" + RULE_NAME_TABLE[match] + "\"");
}
+ if (patch) {
+ writer.print(" patch=\"true\"");
+ }
writer.println("/>");
}
public String toString() {
if (plugin != null)
return plugin.getTranslatedName();
+ else if (feature != null)
+ return feature.getLabel();
return getId();
}
}
\ No newline at end of file
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java
index 4157301..b90478b 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeature.java
@@ -100,7 +100,7 @@
*
* @param reference a required plug-in reference to add
*/
-public void addImport(IFeatureImport iimport) throws CoreException;
+public void addImports(IFeatureImport [] imports) throws CoreException;
/**
* Returns references to plug-ins in this feature
*
@@ -181,7 +181,7 @@
*
* @param iimport a required plug-in reference to add
*/
-public void removeImport(IFeatureImport iimport) throws CoreException;
+public void removeImports(IFeatureImport [] imports) throws CoreException;
/**
* Sets the provider name of this feature. This method
* may throw a CoreException if the model is not editable.
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureChild.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureChild.java
index 7341258..5c8fcdd 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureChild.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureChild.java
@@ -6,17 +6,29 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.pde.core.IIdentifiable;
+import org.eclipse.pde.core.plugin.IMatchRules;
/**
* The reference to a plug-in that is part of this feature.
*/
-public interface IFeatureChild extends IFeatureObject, IIdentifiable {
+public interface IFeatureChild extends IFeatureObject, IIdentifiable, IMatchRules {
String P_VERSION = "version";
String P_OPTIONAL = "optional";
String P_NAME = "name";
+ String P_MATCH = "match";
+ String P_SEARCH_LOCATION = "search-location";
+
+ int ROOT = 0;
+ int SELF = 1;
+ int BOTH = 2;
+
String getVersion();
void setVersion(String version) throws CoreException;
boolean isOptional();
void setOptional(boolean optional) throws CoreException;
String getName();
void setName(String name) throws CoreException;
+ int getSearchLocation();
+ void setSearchLocation(int location) throws CoreException;
+ int getMatch();
+ void setMatch(int match) throws CoreException;
}
\ No newline at end of file
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureImport.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureImport.java
index 920aa4b..1915190 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureImport.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ifeature/IFeatureImport.java
@@ -6,10 +6,23 @@
*/
package org.eclipse.pde.internal.core.ifeature;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.pde.core.plugin.IPluginReference;
/**
* @version 1.0
* @author
*/
public interface IFeatureImport extends IFeatureObject, IPluginReference {
+ String P_TYPE = "type";
+ String P_PATCH = "patch";
+
+ int PLUGIN = 0;
+ int FEATURE = 1;
+
+ int getType();
+
+ void setType(int type) throws CoreException;
+
+ boolean isPatch();
+ void setPatch(boolean patch) throws CoreException;
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDELabelProvider.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDELabelProvider.java
index ae4e0d2..1397ed2 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDELabelProvider.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDELabelProvider.java
@@ -164,9 +164,17 @@
}
public String getObjectText(FeatureImport obj) {
- IPlugin plugin = obj.getPlugin();
- if (plugin != null && isFullNameModeEnabled()) {
- return plugin.getTranslatedName();
+ int type = obj.getType();
+ if (type == IFeatureImport.PLUGIN) {
+ IPlugin plugin = obj.getPlugin();
+ if (plugin != null && isFullNameModeEnabled()) {
+ return plugin.getTranslatedName();
+ }
+ } else if (type == IFeatureImport.FEATURE) {
+ IFeature feature = obj.getFeature();
+ if (feature != null && isFullNameModeEnabled()) {
+ return feature.getLabel();
+ }
}
return obj.getId();
}
@@ -193,7 +201,7 @@
}
public String getObjectText(ISiteCategory obj) {
ISiteCategoryDefinition def = obj.getDefinition();
- if (def!=null)
+ if (def != null)
return def.getLabel();
return obj.getName();
}
@@ -282,7 +290,7 @@
return getObjectImage((ISiteCategoryDefinition) obj);
}
if (obj instanceof ISiteCategory) {
- return getObjectImage((ISiteCategory)obj);
+ return getObjectImage((ISiteCategory) obj);
}
if (obj instanceof ISiteBuildFeature) {
return getObjectImage((ISiteBuildFeature) obj);
@@ -461,11 +469,24 @@
private Image getObjectImage(IFeatureImport obj) {
FeatureImport iimport = (FeatureImport) obj;
- IPlugin plugin = iimport.getPlugin();
+ int type = iimport.getType();
+ ImageDescriptor base;
int flags = 0;
- if (plugin == null)
- flags = F_ERROR;
- return get(PDEPluginImages.DESC_REQ_PLUGIN_OBJ, flags);
+
+ if (type==IFeatureImport.FEATURE) {
+ base = PDEPluginImages.DESC_FEATURE_OBJ;
+ IFeature feature = iimport.getFeature();
+ if (feature == null)
+ flags = F_ERROR;
+ }
+ else {
+ base = PDEPluginImages.DESC_REQ_PLUGIN_OBJ;
+ IPlugin plugin = iimport.getPlugin();
+ if (plugin == null)
+ flags = F_ERROR;
+ }
+
+ return get(base, flags);
}
private Image getObjectImage(IFeatureInfo info) {
int flags = 0;
@@ -481,7 +502,7 @@
public Image getObjectImage(ISiteFeature obj) {
int flags = 0;
- if (obj.getArchiveFile()!=null) {
+ if (obj.getArchiveFile() != null) {
flags = F_BINARY;
}
return get(PDEPluginImages.DESC_JAVA_LIB_OBJ, flags);
@@ -493,9 +514,9 @@
public Image getObjectImage(ISiteCategoryDefinition obj) {
return get(PDEPluginImages.DESC_CATEGORY_OBJ);
}
-
+
public Image getObjectImage(ISiteCategory obj) {
- int flags = obj.getDefinition()==null?F_ERROR:0;
+ int flags = obj.getDefinition() == null ? F_ERROR : 0;
return get(PDEPluginImages.DESC_CATEGORY_OBJ, flags);
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureMatchSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureMatchSection.java
new file mode 100644
index 0000000..b86ea96
--- /dev/null
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureMatchSection.java
@@ -0,0 +1,117 @@
+package org.eclipse.pde.internal.ui.editor.feature;
+
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.pde.internal.core.ifeature.IFeatureImport;
+import org.eclipse.pde.internal.ui.PDEPlugin;
+import org.eclipse.pde.internal.ui.editor.PDEFormPage;
+import org.eclipse.pde.internal.ui.editor.manifest.MatchSection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.update.ui.forms.internal.FormWidgetFactory;
+
+/**
+ * @author dejan
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class FeatureMatchSection extends MatchSection {
+ private Button patchButton;
+
+ /**
+ * Constructor for FeatureMatchSection.
+ * @param formPage
+ */
+ public FeatureMatchSection(PDEFormPage formPage) {
+ super(formPage, false);
+ }
+
+ public Composite createClient(
+ Composite parent,
+ FormWidgetFactory factory) {
+ Composite client = super.createClient(parent, factory);
+ patchButton = factory.createButton(client, "Patch", SWT.CHECK);
+ GridData gd = new GridData();
+ gd.horizontalSpan = 2;
+ patchButton.setLayoutData(gd);
+ patchButton.setEnabled(false);
+ patchButton.setSelection(false);
+ patchButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handlePatchChange(patchButton.getSelection());
+ }
+ });
+ return client;
+ }
+
+ private void handlePatchChange(boolean patch) {
+ if (currentImport != null) {
+ IFeatureImport iimport = (IFeatureImport) currentImport;
+ if (iimport.getType() == IFeatureImport.FEATURE) {
+ try {
+ iimport.setPatch(patch);
+ } catch (CoreException e) {
+ PDEPlugin.logException(e);
+ }
+ }
+ }
+ if (multiSelection != null) {
+ for (Iterator iter=multiSelection.iterator(); iter.hasNext();) {
+ IFeatureImport iimport = (IFeatureImport)iter.next();
+ try {
+ iimport.setPatch(patch);
+ }
+ catch (CoreException e) {
+ PDEPlugin.logException(e);
+ break;
+ }
+ }
+ }
+ }
+
+ protected void update(IStructuredSelection selection) {
+ super.update(selection);
+ if (patchButton==null) return;
+ if (selection.isEmpty()) {
+ update((IFeatureImport)null);
+ return;
+ }
+ if (selection.size()==1) {
+ update((IFeatureImport)selection.getFirstElement());
+ return;
+ }
+ int ntrue=0, nfalse=0;
+
+ for (Iterator iter=selection.iterator(); iter.hasNext();) {
+ IFeatureImport iimport = (IFeatureImport)iter.next();
+ if (iimport.getType()==IFeatureImport.FEATURE) {
+ if (iimport.isPatch())
+ ntrue++;
+ else
+ nfalse++;
+ }
+ }
+ patchButton.setEnabled(!isReadOnly() && (ntrue>0 || nfalse>0));
+ patchButton.setSelection(ntrue>0);
+ }
+
+ private void update(IFeatureImport iimport) {
+ super.update(iimport);
+ if (patchButton==null) return;
+ IFeatureImport fimport = (IFeatureImport) iimport;
+ if (fimport == null || fimport.getType() == IFeatureImport.PLUGIN) {
+ patchButton.setSelection(false);
+ patchButton.setEnabled(false);
+ return;
+ }
+ patchButton.setEnabled(!isReadOnly());
+ patchButton.setSelection(fimport.isPatch());
+ }
+}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureUndoManager.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureUndoManager.java
index 580e9c5..c405a57 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureUndoManager.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureUndoManager.java
@@ -90,7 +90,7 @@
} else if (element instanceof IFeatureData) {
feature.addData(new IFeatureData [] {(IFeatureData) element});
} else if (element instanceof IFeatureImport) {
- feature.addImport((IFeatureImport) element);
+ feature.addImports(new IFeatureImport [] {(IFeatureImport) element});
} else if (element instanceof IFeatureChild) {
feature.addIncludedFeatures(new IFeatureChild [] {(IFeatureChild) element});
}
@@ -112,7 +112,7 @@
} else if (element instanceof IFeatureData) {
feature.removeData(new IFeatureData [] {(IFeatureData) element});
} else if (element instanceof IFeatureImport) {
- feature.removeImport((IFeatureImport) element);
+ feature.removeImports(new IFeatureImport [] {(IFeatureImport) element});
} else if (element instanceof IFeatureChild) {
feature.removeIncludedFeatures(new IFeatureChild [] {(IFeatureChild) element});
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/NewFeatureRequireWizardPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/NewFeatureRequireWizardPage.java
index 1faa7bd..363cf41 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/NewFeatureRequireWizardPage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/NewFeatureRequireWizardPage.java
@@ -20,11 +20,11 @@
import org.eclipse.ui.help.WorkbenchHelp;
public class NewFeatureRequireWizardPage extends ReferenceWizardPage {
- public static final String KEY_TITLE = "FeatureEditor.RequiresSection.new.title";
- public static final String KEY_DESC = "FeatureEditor.RequiresSection.new.desc";
- public static final String KEY_ADDING = "FeatureEditor.RequiresSection.new.adding";
+ public static final String KEY_TITLE = "FeatureEditor.RequiresSection.newPlugin.title";
+ public static final String KEY_DESC = "FeatureEditor.RequiresSection.newPlugin.desc";
+ public static final String KEY_ADDING = "FeatureEditor.RequiresSection.newPlugin.adding";
public static final String KEY_UPDATING =
- "FeatureEditor.RequiresSection.new.updating";
+ "FeatureEditor.RequiresSection.newPlugin.updating";
public NewFeatureRequireWizardPage(IFeatureModel model) {
super(model);
@@ -64,12 +64,12 @@
FeatureImport fimport = (FeatureImport) model.getFactory().createImport();
fimport.setPlugin((IPlugin)candidate.getPluginBase());
fimport.setId(pluginBase.getId());
- feature.addImport(fimport);
added[i] = fimport;
monitor.worked(1);
}
monitor.subTask("");
monitor.setTaskName(PDEPlugin.getResourceString(KEY_UPDATING));
+ feature.addImports(added);
monitor.worked(1);
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/ReferenceForm.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/ReferenceForm.java
index 178495b..c704e99 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/ReferenceForm.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/ReferenceForm.java
@@ -4,10 +4,8 @@
* All Rights Reserved.
*/
-import org.eclipse.pde.internal.ui.IHelpContextIds;
-import org.eclipse.pde.internal.ui.PDEPlugin;
-import org.eclipse.pde.internal.ui.editor.manifest.MatchSection;
import org.eclipse.pde.internal.core.ifeature.*;
+import org.eclipse.pde.internal.ui.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.help.WorkbenchHelp;
@@ -18,7 +16,7 @@
private FeatureReferencePage page;
private PluginSection pluginSection;
private RequiresSection requiresSection;
- private MatchSection matchSection;
+ private FeatureMatchSection matchSection;
public ReferenceForm(FeatureReferencePage page) {
this.page = page;
@@ -59,7 +57,7 @@
gd = new GridData(GridData.FILL_BOTH);
control.setLayoutData(gd);
- matchSection = new MatchSection(page, false);
+ matchSection = new FeatureMatchSection(page);
control = matchSection.createControl(right, factory);
gd = new GridData(GridData.FILL_HORIZONTAL);
control.setLayoutData(gd);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiredFeaturesWizard.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiredFeaturesWizard.java
new file mode 100644
index 0000000..f91447f
--- /dev/null
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiredFeaturesWizard.java
@@ -0,0 +1,31 @@
+package org.eclipse.pde.internal.ui.editor.feature;
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+
+import org.eclipse.jface.wizard.*;
+import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
+import org.eclipse.pde.internal.ui.*;
+
+public class RequiredFeaturesWizard extends Wizard {
+ private IFeatureModel model;
+ private RequiredFeaturesWizardPage mainPage;
+
+public RequiredFeaturesWizard(IFeatureModel model) {
+ this.model = model;
+ setDefaultPageImageDescriptor(PDEPluginImages.DESC_NEWPPRJ_WIZ);
+ setDialogSettings(PDEPlugin.getDefault().getDialogSettings());
+ setNeedsProgressMonitor(true);
+}
+
+public void addPages() {
+ mainPage = new RequiredFeaturesWizardPage(model);
+ addPage(mainPage);
+}
+
+public boolean performFinish() {
+ return mainPage.finish();
+}
+
+}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiredFeaturesWizardPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiredFeaturesWizardPage.java
new file mode 100644
index 0000000..868aa73
--- /dev/null
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiredFeaturesWizardPage.java
@@ -0,0 +1,191 @@
+package org.eclipse.pde.internal.ui.editor.feature;
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.*;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.pde.internal.core.*;
+import org.eclipse.pde.internal.core.feature.*;
+import org.eclipse.pde.internal.core.ifeature.*;
+import org.eclipse.pde.internal.ui.IHelpContextIds;
+import org.eclipse.pde.internal.ui.PDEPlugin;
+import org.eclipse.pde.internal.ui.elements.DefaultContentProvider;
+import org.eclipse.pde.internal.ui.parts.WizardCheckboxTablePart;
+import org.eclipse.pde.internal.ui.wizards.ListUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.help.WorkbenchHelp;
+import org.eclipse.update.ui.forms.internal.FormWidgetFactory;
+
+public class RequiredFeaturesWizardPage extends WizardPage {
+ public static final String KEY_TITLE = "FeatureEditor.RequiresSection.newFeature.title";
+ public static final String KEY_DESC = "FeatureEditor.RequiresSection.newFeature.desc";
+ public static final String KEY_FEATURES =
+ "FeatureEditor.RequiresSection.newFeature.label";
+ public static final String KEY_ADDING = "FeatureEditor.RequiresSection.newFeature.adding";
+ public static final String KEY_UPDATING =
+ "FeatureEditor.RequiresSection.newFeature.updating";
+ private IFeatureModel model;
+ private TablePart checkboxTablePart;
+ private CheckboxTableViewer pluginViewer;
+
+ class PluginContentProvider
+ extends DefaultContentProvider
+ implements IStructuredContentProvider {
+ public Object[] getElements(Object parent) {
+ return getChoices();
+ }
+ }
+
+ class TablePart extends WizardCheckboxTablePart {
+ public TablePart() {
+ super(PDEPlugin.getResourceString(KEY_FEATURES));
+ }
+ public void updateCounter(int count) {
+ super.updateCounter(count);
+ setPageComplete(count>0);
+ }
+ protected StructuredViewer createStructuredViewer(
+ Composite parent,
+ int style,
+ FormWidgetFactory factory) {
+ StructuredViewer viewer =
+ super.createStructuredViewer(parent, style, factory);
+ viewer.setSorter(ListUtil.FEATURE_SORTER);
+ return viewer;
+ }
+ }
+
+ public RequiredFeaturesWizardPage(IFeatureModel model) {
+ super("RequiredFeaturesPage");
+ this.model = model;
+ setTitle(PDEPlugin.getResourceString(KEY_TITLE));
+ setDescription(PDEPlugin.getResourceString(KEY_DESC));
+ setPageComplete(false);
+
+ checkboxTablePart = new TablePart();
+ PDEPlugin.getDefault().getLabelProvider().connect(this);
+ }
+
+ public void dispose() {
+ PDEPlugin.getDefault().getLabelProvider().disconnect(this);
+ super.dispose();
+ }
+
+ public void createControl(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ container.setLayout(layout);
+
+ createPluginList(container);
+ initialize();
+ setControl(container);
+ WorkbenchHelp.setHelp(container, IHelpContextIds.FEATURE_INCLUDED_FEATURES_WIZARD);
+ }
+
+ protected void createPluginList(Composite parent) {
+ checkboxTablePart.createControl(parent);
+ pluginViewer = checkboxTablePart.getTableViewer();
+ pluginViewer.setContentProvider(new PluginContentProvider());
+ pluginViewer.setLabelProvider(PDEPlugin.getDefault().getLabelProvider());
+ pluginViewer.addFilter(new ViewerFilter() {
+ public boolean select(Viewer v, Object parent, Object object) {
+ if (object instanceof IFeatureModel) {
+ IFeatureModel model = (IFeatureModel) object;
+ return !isOnTheList(model);
+ }
+ return true;
+ }
+ });
+ GridData gd = (GridData)checkboxTablePart.getControl().getLayoutData();
+ gd.heightHint = 300;
+ }
+
+ private boolean isOnTheList(IFeatureModel candidate) {
+ IFeatureImport[] imports = model.getFeature().getImports();
+ IFeature cfeature = candidate.getFeature();
+
+ if (isThisModel(cfeature)) return true;
+
+ for (int i = 0; i < imports.length; i++) {
+ IFeatureImport iimport = imports[i];
+
+ if (iimport.getType()==IFeatureImport.PLUGIN) continue;
+ if (iimport.getId().equals(cfeature.getId()) &&
+ iimport.getVersion().equals(cfeature.getVersion())) return true;
+ }
+ return false;
+ }
+
+ private boolean isThisModel(IFeature cfeature) {
+ IFeature thisFeature = this.model.getFeature();
+
+ return cfeature.getId().equals(thisFeature.getId()) &&
+ cfeature.getVersion().equals(thisFeature.getVersion());
+ }
+
+ public void init(IWorkbench workbench) {
+ }
+
+ private void initialize() {
+ pluginViewer.setInput(model.getFeature());
+ checkboxTablePart.setSelection(new Object[0]);
+ }
+
+ private Object[] getChoices() {
+ WorkspaceModelManager mng = PDECore.getDefault().getWorkspaceModelManager();
+ return mng.getWorkspaceFeatureModels();
+ }
+
+ public boolean finish() {
+ final Object [] candidates = checkboxTablePart.getSelection();
+ IRunnableWithProgress op = new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException {
+ try {
+ doAdd(candidates, monitor);
+ } catch (CoreException e) {
+ throw new InvocationTargetException(e);
+ }
+ }
+ };
+ try {
+ getContainer().run(false, false, op);
+ } catch (InterruptedException e) {
+ return false;
+ } catch (InvocationTargetException e) {
+ PDEPlugin.logException(e);
+ return false;
+ }
+ return true;
+ }
+
+ private void doAdd(Object [] candidates, IProgressMonitor monitor) throws CoreException {
+ monitor.beginTask(
+ PDEPlugin.getResourceString(KEY_ADDING),
+ candidates.length + 1);
+ IFeature feature = model.getFeature();
+ IFeatureImport[] added = new IFeatureImport[candidates.length];
+ for (int i = 0; i < candidates.length; i++) {
+ IFeatureModel candidate = (IFeatureModel) candidates[i];
+ String name = candidate.getFeature().getLabel();
+ monitor.subTask(candidate.getResourceString(name));
+ FeatureImport iimport = (FeatureImport) model.getFactory().createImport();
+ iimport.loadFrom(candidate.getFeature());
+ added[i] = iimport;
+ monitor.worked(1);
+ }
+ monitor.subTask("");
+ monitor.setTaskName(PDEPlugin.getResourceString(KEY_UPDATING));
+ feature.addImports(added);
+ monitor.worked(1);
+ }
+}
\ No newline at end of file
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java
index 2d96845..13625ad 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/RequiresSection.java
@@ -11,16 +11,13 @@
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.pde.core.IModelChangedEvent;
-import org.eclipse.pde.core.plugin.IFragment;
-import org.eclipse.pde.core.plugin.IFragmentModel;
+import org.eclipse.pde.core.plugin.*;
import org.eclipse.pde.internal.core.*;
import org.eclipse.pde.internal.core.feature.FeatureImport;
import org.eclipse.pde.internal.core.ifeature.*;
-import org.eclipse.pde.internal.core.plugin.Fragment;
-import org.eclipse.pde.internal.core.plugin.Plugin;
+import org.eclipse.pde.internal.core.plugin.*;
import org.eclipse.pde.internal.ui.PDEPlugin;
-import org.eclipse.pde.internal.ui.editor.ModelDataTransfer;
-import org.eclipse.pde.internal.ui.editor.TableSection;
+import org.eclipse.pde.internal.ui.editor.*;
import org.eclipse.pde.internal.ui.elements.DefaultContentProvider;
import org.eclipse.pde.internal.ui.parts.TablePart;
import org.eclipse.pde.internal.ui.wizards.ListUtil;
@@ -35,18 +32,19 @@
public class RequiresSection
extends TableSection
implements IModelProviderListener {
- public static final int MULTI_SELECTION = 33;
+ public static final int MULTI_SELECTION = 33;
private static final String KEY_TITLE =
"FeatureEditor.RequiresSection.title";
private static final String KEY_DESC = "FeatureEditor.RequiresSection.desc";
- private static final String KEY_NEW_BUTTON =
- "FeatureEditor.RequiresSection.newButton";
+ private static final String KEY_NEW_PLUGIN_BUTTON =
+ "FeatureEditor.RequiresSection.newPluginButton";
+ private static final String KEY_NEW_FEATURE_BUTTON =
+ "FeatureEditor.RequiresSection.newFeatureButton";
private static final String KEY_SYNC_BUTTON =
"FeatureEditor.RequiresSection.syncButton";
private static final String KEY_COMPUTE =
"FeatureEditor.RequiresSection.compute";
- private static final String KEY_DELETE =
- "Actions.delete.label";
+ private static final String KEY_DELETE = "Actions.delete.label";
private boolean updateNeeded;
private Button syncButton;
private TableViewer pluginViewer;
@@ -66,7 +64,9 @@
super(
page,
new String[] {
- PDEPlugin.getResourceString(KEY_NEW_BUTTON),
+ PDEPlugin.getResourceString(KEY_NEW_PLUGIN_BUTTON),
+ PDEPlugin.getResourceString(KEY_NEW_FEATURE_BUTTON),
+ null,
PDEPlugin.getResourceString(KEY_COMPUTE)});
setHeaderText(PDEPlugin.getResourceString(KEY_TITLE));
setDescription(PDEPlugin.getResourceString(KEY_DESC));
@@ -99,7 +99,7 @@
pluginViewer.setSorter(ListUtil.NAME_SORTER);
pluginViewer.setLabelProvider(
PDEPlugin.getDefault().getLabelProvider());
-
+
deleteAction = new Action() {
public void run() {
handleDelete();
@@ -111,13 +111,22 @@
}
protected void buttonSelected(int index) {
- if (index == 0)
- handleNew();
- else if (index == 1)
- recomputeImports();
+ switch (index) {
+ case 0 :
+ handleNewPlugin();
+ break;
+ case 1 :
+ handleNewFeature();
+ break;
+ case 2 :
+ break;
+ case 3 :
+ recomputeImports();
+ break;
+ }
}
- private void handleNew() {
+ private void handleNewPlugin() {
final IFeatureModel model = (IFeatureModel) getFormPage().getModel();
BusyIndicator
.showWhile(pluginViewer.getTable().getDisplay(), new Runnable() {
@@ -135,6 +144,23 @@
});
}
+ private void handleNewFeature() {
+ final IFeatureModel model = (IFeatureModel) getFormPage().getModel();
+ BusyIndicator
+ .showWhile(pluginViewer.getTable().getDisplay(), new Runnable() {
+ public void run() {
+ RequiredFeaturesWizard wizard =
+ new RequiredFeaturesWizard(model);
+ WizardDialog dialog =
+ new WizardDialog(
+ PDEPlugin.getActiveWorkbenchShell(),
+ wizard);
+ dialog.create();
+ dialog.open();
+ }
+ });
+ }
+
private void handleDelete() {
IFeatureModel model = (IFeatureModel) getFormPage().getModel();
IFeature feature = model.getFeature();
@@ -144,10 +170,13 @@
return;
try {
+ IFeatureImport[] deleted = new IFeatureImport[selection.size()];
+ int i = 0;
for (Iterator iter = selection.iterator(); iter.hasNext();) {
IFeatureImport iimport = (IFeatureImport) iter.next();
- feature.removeImport(iimport);
+ deleted[i++] = iimport;
}
+ feature.removeImports(deleted);
} catch (CoreException e) {
PDEPlugin.logException(e);
}
@@ -171,7 +200,10 @@
public boolean doGlobalAction(String actionId) {
if (actionId.equals(org.eclipse.ui.IWorkbenchActionConstants.DELETE)) {
- BusyIndicator.showWhile(pluginViewer.getTable().getDisplay(), new Runnable() {
+ BusyIndicator
+ .showWhile(
+ pluginViewer.getTable().getDisplay(),
+ new Runnable() {
public void run() {
handleDelete();
}
@@ -189,7 +221,10 @@
return true;
}
if (actionId.equals(IWorkbenchActionConstants.SELECT_ALL)) {
- BusyIndicator.showWhile(pluginViewer.getTable().getDisplay(), new Runnable() {
+ BusyIndicator
+ .showWhile(
+ pluginViewer.getTable().getDisplay(),
+ new Runnable() {
public void run() {
handleSelectAll();
}
@@ -211,7 +246,8 @@
manager.add(propertiesAction);
manager.add(new Separator());
*/
- IStructuredSelection selection = (StructuredSelection)pluginViewer.getSelection();
+ IStructuredSelection selection =
+ (StructuredSelection) pluginViewer.getSelection();
if (!selection.isEmpty()) {
manager.add(deleteAction);
manager.add(new Separator());
@@ -234,6 +270,8 @@
update(input);
if (model.isEditable() == false) {
getTablePart().setButtonEnabled(0, false);
+ getTablePart().setButtonEnabled(1, false);
+ getTablePart().setButtonEnabled(3, false);
syncButton.setEnabled(false);
}
model.addModelChangedListener(this);
@@ -304,7 +342,8 @@
* @see org.eclipse.pde.internal.ui.editor.StructuredViewerSection#canPaste(Clipboard)
*/
public boolean canPaste(Clipboard clipboard) {
- Object [] objects = (Object[])clipboard.getContents(ModelDataTransfer.getInstance());
+ Object[] objects =
+ (Object[]) clipboard.getContents(ModelDataTransfer.getInstance());
if (objects != null && objects.length > 0) {
return canPaste(null, objects);
}
@@ -325,8 +364,9 @@
*/
protected void doPaste() {
Clipboard clipboard = getFormPage().getEditor().getClipboard();
- Object [] objects = (Object[])clipboard.getContents(ModelDataTransfer.getInstance());
- if (objects != null && canPaste(null,objects))
+ Object[] objects =
+ (Object[]) clipboard.getContents(ModelDataTransfer.getInstance());
+ if (objects != null && canPaste(null, objects))
doPaste(null, objects);
}
/**
@@ -335,37 +375,56 @@
protected void doPaste(Object target, Object[] objects) {
IFeatureModel model = (IFeatureModel) getFormPage().getModel();
IFeature feature = model.getFeature();
+
+ IFeatureImport[] imports = new IFeatureImport[objects.length];
try {
for (int i = 0; i < objects.length; i++) {
FeatureImport fImport = (FeatureImport) objects[i];
fImport.setModel(model);
fImport.setParent(feature);
- setPluginModel(fImport);
- feature.addImport(fImport);
+ reconnectReference(fImport);
+ imports[i] = fImport;
}
+ feature.addImports(imports);
} catch (CoreException e) {
PDEPlugin.logException(e);
}
}
-
- private void setPluginModel(FeatureImport fImport) {
- Plugin plugin = (Plugin)fImport.getPlugin();
- if (plugin.getPluginBase() instanceof Fragment) {
- IFragmentModel[] fragments =
- PDECore.getDefault().getWorkspaceModelManager().getWorkspaceFragmentModels();
- for (int i = 0; i < fragments.length; i++) {
- IFragment fragment = fragments[i].getFragment();
- if (fragment.getId().equals(plugin.getId())) {
- if (plugin.getVersion() == null || fragment.getVersion().equals(plugin.getVersion())) {
- plugin.setModel(fragment.getModel());
- return;
+
+ private void reconnectReference(FeatureImport fImport) {
+ if (fImport.getType() == IFeatureImport.FEATURE) {
+ fImport.setFeature(
+ PDECore
+ .getDefault()
+ .findFeature(fImport.getId(), fImport.getVersion(), fImport.getMatch()));
+ } else {
+ Plugin plugin = (Plugin) fImport.getPlugin();
+ if (plugin.getPluginBase() instanceof Fragment) {
+ IFragmentModel[] fragments =
+ PDECore
+ .getDefault()
+ .getWorkspaceModelManager()
+ .getWorkspaceFragmentModels();
+ for (int i = 0; i < fragments.length; i++) {
+ IFragment fragment = fragments[i].getFragment();
+ if (fragment.getId().equals(plugin.getId())) {
+ if (plugin.getVersion() == null
+ || fragment.getVersion().equals(
+ plugin.getVersion())) {
+ plugin.setModel(fragment.getModel());
+ return;
+ }
}
}
+ } else {
+ plugin.setModel(
+ PDECore
+ .getDefault()
+ .findPlugin(plugin.getId(), plugin.getVersion(), 0)
+ .getModel());
}
- } else {
- plugin.setModel(PDECore.getDefault().findPlugin(plugin.getId(), plugin.getVersion(), 0).getModel());
}
}
-
+
}
\ No newline at end of file
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/manifest/MatchSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/manifest/MatchSection.java
index 77cb879..898ced5 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/manifest/MatchSection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/manifest/MatchSection.java
@@ -28,8 +28,8 @@
private FormEntry versionText;
private Button reexportButton;
private CCombo matchCombo;
- private IPluginReference currentImport;
- private IStructuredSelection multiSelection;
+ protected IPluginReference currentImport;
+ protected IStructuredSelection multiSelection;
private boolean blockChanges = false;
private boolean ignoreModelEvents = false;
private boolean addReexport = true;
@@ -315,7 +315,7 @@
matchCombo.select(match);
}
- private void update(IStructuredSelection selection) {
+ protected void update(IStructuredSelection selection) {
blockChanges = true;
currentImport = null;
int size = selection.size();
@@ -349,7 +349,7 @@
blockChanges = false;
}
- private void update(IPluginReference iimport) {
+ protected void update(IPluginReference iimport) {
blockChanges = true;
if (iimport == null) {
if (addReexport) {
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 66167c0..f0e7bc9 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
@@ -178,11 +178,19 @@
FeatureEditor.RequiresSection.desc = Compute plug-ins that will need to be present before installing this feature.
FeatureEditor.RequiresSection.syncButton = Recompute on each change
FeatureEditor.RequiresSection.compute = Compute
-FeatureEditor.RequiresSection.newButton = Add...
-FeatureEditor.RequiresSection.new.title= New Required Plug-in
-FeatureEditor.RequiresSection.new.desc=Choose plug-ins that will be required by this feature.
-FeatureEditor.RequiresSection.new.adding= Adding References:
-FeatureEditor.RequiresSection.new.updating= Updating...
+FeatureEditor.RequiresSection.newPluginButton = Add Plugin...
+FeatureEditor.RequiresSection.newFeatureButton = Add Feature...
+
+FeatureEditor.RequiresSection.newPlugin.title= New Required Plug-in
+FeatureEditor.RequiresSection.newPlugin.desc=Choose plug-ins that will be required by this feature.
+FeatureEditor.RequiresSection.newPlugin.adding= Adding References:
+FeatureEditor.RequiresSection.newPlugin.updating= Updating...
+
+FeatureEditor.RequiresSection.newFeature.title= New Required Feature
+FeatureEditor.RequiresSection.newFeature.desc=Choose features that will be required by this feature.
+FeatureEditor.RequiresSection.newFeature.label=Available Features:
+FeatureEditor.RequiresSection.newFeature.adding= Adding References:
+FeatureEditor.RequiresSection.newFeature.updating= Updating...
FeatureEditor.URLSection.title = Feature URLs
FeatureEditor.URLSection.desc = Define update and discovery URLs.