Index: src/org/eclipse/pde/internal/core/product/ProductModelFactory.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ProductModelFactory.java,v
retrieving revision 1.13
diff -u -r1.13 ProductModelFactory.java
--- src/org/eclipse/pde/internal/core/product/ProductModelFactory.java 2 Jan 2008 15:56:22 -0000 1.13
+++ src/org/eclipse/pde/internal/core/product/ProductModelFactory.java 23 Jul 2008 23:26:03 -0000
@@ -10,19 +10,7 @@
*******************************************************************************/
package org.eclipse.pde.internal.core.product;
-import org.eclipse.pde.internal.core.iproduct.IAboutInfo;
-import org.eclipse.pde.internal.core.iproduct.IArgumentsInfo;
-import org.eclipse.pde.internal.core.iproduct.IConfigurationFileInfo;
-import org.eclipse.pde.internal.core.iproduct.IIntroInfo;
-import org.eclipse.pde.internal.core.iproduct.IJREInfo;
-import org.eclipse.pde.internal.core.iproduct.ILauncherInfo;
-import org.eclipse.pde.internal.core.iproduct.IProduct;
-import org.eclipse.pde.internal.core.iproduct.IProductFeature;
-import org.eclipse.pde.internal.core.iproduct.IProductModel;
-import org.eclipse.pde.internal.core.iproduct.IProductModelFactory;
-import org.eclipse.pde.internal.core.iproduct.IProductPlugin;
-import org.eclipse.pde.internal.core.iproduct.ISplashInfo;
-import org.eclipse.pde.internal.core.iproduct.IWindowImages;
+import org.eclipse.pde.internal.core.iproduct.*;
public class ProductModelFactory implements IProductModelFactory {
@@ -54,6 +42,13 @@
}
/* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IProductModelFactory#createPluginConfiguration()
+ */
+ public IProductPluginConfiguration createPluginConfiguration() {
+ return new ProductPluginConfiguration(fModel);
+ }
+
+ /* (non-Javadoc)
* @see org.eclipse.pde.internal.core.iproduct.IProductModelFactory#createConfigFileInfo()
*/
public IConfigurationFileInfo createConfigFileInfo() {
Index: src/org/eclipse/pde/internal/core/product/Product.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java,v
retrieving revision 1.40
diff -u -r1.40 Product.java
--- src/org/eclipse/pde/internal/core/product/Product.java 26 Apr 2008 23:28:09 -0000 1.40
+++ src/org/eclipse/pde/internal/core/product/Product.java 23 Jul 2008 23:26:03 -0000
@@ -26,6 +26,7 @@
private IAboutInfo fAboutInfo;
private TreeMap fPlugins = new TreeMap();
+ private TreeMap fPluginConfigurations = new TreeMap();
private List fFeatures = new ArrayList();
private IConfigurationFileInfo fConfigIniInfo;
private IJREInfo fJVMInfo;
@@ -201,6 +202,14 @@
writer.println(indent + " "); //$NON-NLS-1$
}
+ writer.println(indent + " "); //$NON-NLS-1$
+ iter = fPluginConfigurations.values().iterator();
+ while (iter.hasNext()) {
+ IProductPluginConfiguration configuration = (IProductPluginConfiguration) iter.next();
+ configuration.write(indent + " ", writer); //$NON-NLS-1$
+ }
+ writer.println(indent + " "); //$NON-NLS-1$
+
writer.println();
writer.println(""); //$NON-NLS-1$
}
@@ -222,6 +231,7 @@
fUseFeatures = false;
fAboutInfo = null;
fPlugins.clear();
+ fPluginConfigurations.clear();
fFeatures.clear();
fConfigIniInfo = null;
fWindowImages = null;
@@ -256,6 +266,8 @@
parsePlugins(child.getChildNodes());
} else if (name.equals("features")) { //$NON-NLS-1$
parseFeatures(child.getChildNodes());
+ } else if (name.equals("configurations")) { //$NON-NLS-1$
+ parsePluginConfigurations(child.getChildNodes());
} else if (name.equals("configIni")) { //$NON-NLS-1$
fConfigIniInfo = factory.createConfigFileInfo();
fConfigIniInfo.parse(child);
@@ -296,6 +308,19 @@
}
}
+ private void parsePluginConfigurations(NodeList children) {
+ for (int i = 0; i < children.getLength(); i++) {
+ Node child = children.item(i);
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
+ if (child.getNodeName().equals("pluginConfiguration")) { //$NON-NLS-1$
+ IProductPluginConfiguration configuration = getModel().getFactory().createPluginConfiguration();
+ configuration.parse(child);
+ fPluginConfigurations.put(configuration.getId(), configuration);
+ }
+ }
+ }
+ }
+
private void parseFeatures(NodeList children) {
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
@@ -332,16 +357,63 @@
}
/* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IProduct#addPluginConfigurations(org.eclipse.pde.internal.core.iproduct.IPluginConfiguration[])
+ */
+ public void addPluginConfigurations(IProductPluginConfiguration[] configuration) {
+ boolean modified = false;
+ for (int i = 0; i < configuration.length; i++) {
+ if (configuration[i] == null)
+ continue;
+ String id = configuration[i].getId();
+ if (id == null || fPluginConfigurations.containsKey(id)) {
+ configuration[i] = null;
+ continue;
+ }
+
+ configuration[i].setModel(getModel());
+ fPluginConfigurations.put(id, configuration[i]);
+ modified = true;
+ }
+ if (modified && isEditable())
+ fireStructureChanged(configuration, IModelChangedEvent.INSERT);
+ }
+
+ /* (non-Javadoc)
* @see org.eclipse.pde.internal.core.iproduct.IProduct#removePlugins(org.eclipse.pde.internal.core.iproduct.IProductPlugin[])
*/
public void removePlugins(IProductPlugin[] plugins) {
boolean modified = false;
+ LinkedList removedConfigurations = new LinkedList();
for (int i = 0; i < plugins.length; i++) {
- if (fPlugins.remove(plugins[i].getId()) != null)
+ final String id = plugins[i].getId();
+ if (fPlugins.remove(id) != null) {
modified = true;
+ Object configuration = fPluginConfigurations.remove(id);
+ if (configuration != null)
+ removedConfigurations.add(configuration);
+ }
+ }
+ if (isEditable()) {
+ if (modified)
+ fireStructureChanged(plugins, IModelChangedEvent.REMOVE);
+ if (!removedConfigurations.isEmpty()) {
+ fireStructureChanged((IProductObject[]) removedConfigurations.toArray(new IProductObject[removedConfigurations.size()]), IModelChangedEvent.REMOVE);
+ }
}
- if (modified && isEditable())
- fireStructureChanged(plugins, IModelChangedEvent.REMOVE);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IProduct#removePluginConfigurations(org.eclipse.pde.internal.core.iproduct.IProductPluginConfiguration[])
+ */
+ public void removePluginConfigurations(IProductPluginConfiguration[] configurations) {
+ boolean modified = false;
+ for (int i = 0; i < configurations.length; i++) {
+ if (fPluginConfigurations.remove(configurations[i].getId()) != null) {
+ modified = true;
+ }
+ }
+ if (isEditable() && modified)
+ fireStructureChanged(configurations, IModelChangedEvent.REMOVE);
}
/* (non-Javadoc)
@@ -352,6 +424,13 @@
}
/* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IProduct#getPluginConfigurations()
+ */
+ public IProductPluginConfiguration[] getPluginConfigurations() {
+ return (IProductPluginConfiguration[]) fPluginConfigurations.values().toArray(new IProductPluginConfiguration[fPluginConfigurations.size()]);
+ }
+
+ /* (non-Javadoc)
* @see org.eclipse.pde.internal.core.iproduct.IProduct#getConfigurationFileInfo()
*/
public IConfigurationFileInfo getConfigurationFileInfo() {
@@ -485,4 +564,11 @@
fireStructureChanged(feature1, IModelChangedEvent.CHANGE);
}
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IProduct#findPluginConfiguration(java.lang.String)
+ */
+ public IProductPluginConfiguration findPluginConfiguration(String id) {
+ return (IProductPluginConfiguration) fPluginConfigurations.get(id);
+ }
+
}
Index: src/org/eclipse/pde/internal/core/iproduct/IProductModelFactory.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProductModelFactory.java,v
retrieving revision 1.12
diff -u -r1.12 IProductModelFactory.java
--- src/org/eclipse/pde/internal/core/iproduct/IProductModelFactory.java 2 Jan 2008 15:56:15 -0000 1.12
+++ src/org/eclipse/pde/internal/core/iproduct/IProductModelFactory.java 23 Jul 2008 23:26:03 -0000
@@ -18,6 +18,8 @@
IProductPlugin createPlugin();
+ IProductPluginConfiguration createPluginConfiguration();
+
IProductFeature createFeature();
IConfigurationFileInfo createConfigFileInfo();
Index: src/org/eclipse/pde/internal/core/iproduct/IProduct.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/iproduct/IProduct.java,v
retrieving revision 1.31
diff -u -r1.31 IProduct.java
--- src/org/eclipse/pde/internal/core/iproduct/IProduct.java 26 Apr 2008 23:28:09 -0000 1.31
+++ src/org/eclipse/pde/internal/core/iproduct/IProduct.java 23 Jul 2008 23:26:03 -0000
@@ -52,14 +52,22 @@
void addFeatures(IProductFeature[] feature);
+ void addPluginConfigurations(IProductPluginConfiguration[] configurations);
+
void removePlugins(IProductPlugin[] plugins);
void removeFeatures(IProductFeature[] feature);
+ void removePluginConfigurations(IProductPluginConfiguration[] configurations);
+
+ IProductPluginConfiguration findPluginConfiguration(String id);
+
IProductPlugin[] getPlugins();
IProductFeature[] getFeatures();
+ IProductPluginConfiguration[] getPluginConfigurations();
+
void setId(String id);
void setVersion(String version);
Index: src/org/eclipse/pde/internal/core/iproduct/IProductPluginConfiguration.java
===================================================================
RCS file: src/org/eclipse/pde/internal/core/iproduct/IProductPluginConfiguration.java
diff -N src/org/eclipse/pde/internal/core/iproduct/IProductPluginConfiguration.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/pde/internal/core/iproduct/IProductPluginConfiguration.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Bartosz Michalik 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
+ * Bartosz Michalik (bartosz.michalik@gmail.com)
+ *******************************************************************************/
+package org.eclipse.pde.internal.core.iproduct;
+
+/**
+ * PluginConfiguration description defines plug-in start level, and other properties that can be used
+ * during product launching/building
+ * @author Bartosz Michalik
+ */
+public interface IProductPluginConfiguration extends IProductObject {
+ public static final String P_AUTO_START = "autostart"; //$NON-NLS-1$
+ public static final String P_START_LEVEL = "startLevel"; //$NON-NLS-1$
+
+ String getId();
+
+ void setId(String id);
+
+ void setAutoStart(boolean autostart);
+
+ boolean isAutoStart();
+
+ void setStartLevel(int startLevel);
+
+ int getStartLevel();
+
+ /**
+ * Adds property, if property exists is overridden
+ * @param key
+ * @param value
+ * @throws IllegalArgumentException when key or value is empty
+ */
+ void addProperty(String key, String value) throws IllegalArgumentException;
+
+ /**
+ * @param key
+ */
+ void removeProperty(String key);
+
+ /**
+ * get property from key
+ * @param key
+ * @return property or null
+ */
+ String getProperty(String key);
+}
Index: src/org/eclipse/pde/internal/core/product/ProductPluginConfiguration.java
===================================================================
RCS file: src/org/eclipse/pde/internal/core/product/ProductPluginConfiguration.java
diff -N src/org/eclipse/pde/internal/core/product/ProductPluginConfiguration.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/pde/internal/core/product/ProductPluginConfiguration.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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
+ * Bartosz Michalik (bartosz.michalik@gmail.com)
+ *******************************************************************************/
+package org.eclipse.pde.internal.core.product;
+
+import java.io.PrintWriter;
+import java.util.*;
+import org.eclipse.pde.internal.core.iproduct.IProductModel;
+import org.eclipse.pde.internal.core.iproduct.IProductPluginConfiguration;
+import org.w3c.dom.*;
+
+public class ProductPluginConfiguration extends ProductObject implements IProductPluginConfiguration {
+
+ private static final long serialVersionUID = -3549668957352554876L;
+ private boolean fAutoStart;
+ private int fStartLevel;
+ private String fId;
+ private Map fPropertiesMap;
+
+ /**
+ * Only for parsing usage
+ * @param model
+ */
+ ProductPluginConfiguration(IProductModel model) {
+ super(model);
+ fPropertiesMap = new HashMap();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IProductObject#parse(org.w3c.dom.Node)
+ */
+ public void parse(Node node) {
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node;
+ fId = element.getAttribute("id");
+ fAutoStart = Boolean.parseBoolean(element.getAttribute(P_AUTO_START));
+ fStartLevel = Integer.parseInt(element.getAttribute(P_START_LEVEL));
+ NodeList children = node.getChildNodes();
+ int length = children.getLength();
+ for (int i = 0; i < length; ++i) {
+ Node item = children.item(i);
+ if (item.getNodeType() == Node.ELEMENT_NODE) {
+ element = (Element) item;
+ String key = element.getAttribute("key");
+ String value = element.getAttribute("value");
+ fPropertiesMap.put(key, value);
+ }
+ }
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.core.IWritable#write(java.lang.String, java.io.PrintWriter)
+ */
+ public void write(String indent, PrintWriter writer) {
+ writer.print(""); //$NON-NLS-1$
+ else {
+ writer.println(" >"); //$NON-NLS-1$
+ Iterator i = fPropertiesMap.keySet().iterator();
+ while (i.hasNext()) {
+ String key = (String) i.next();
+ writer.println(indent + ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ writer.println(""); //$NON-NLS-1$
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IPluginConfiguration#addProperty(java.lang.String, java.lang.String)
+ */
+ public void addProperty(String key, String value) throws IllegalArgumentException {
+ if (key == null || key.equals("")) //$NON-NLS-1$
+ throw new IllegalArgumentException("key cannot empty"); //$NON-NLS-1$
+ if (value == null || value.equals("")) //$NON-NLS-1$
+ throw new IllegalArgumentException("value cannot empty"); //$NON-NLS-1$
+ String oldValue = (String) fPropertiesMap.get(key);
+ fPropertiesMap.put(key, value);
+ if (isEditable() && !value.equals(oldValue))
+ firePropertyChanged(key, oldValue, value);
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IPluginConfiguration#getId()
+ */
+ public String getId() {
+ return fId;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IPluginConfiguration#getProperty(java.lang.String)
+ */
+ public String getProperty(String key) {
+ return (String) fPropertiesMap.get(key);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IPluginConfiguration#getStartLevel()
+ */
+ public int getStartLevel() {
+ return fStartLevel;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IPluginConfiguration#isAutoStart()
+ */
+ public boolean isAutoStart() {
+ return fAutoStart;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IPluginConfiguration#removeProperty(java.lang.String)
+ */
+ public void removeProperty(String key) {
+ String oldValue = (String) fPropertiesMap.get(key);
+ fPropertiesMap.remove(key);
+ if (isEditable() && oldValue != null)
+ firePropertyChanged(key, oldValue, null);
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IPluginConfiguration#setAutoStart(boolean)
+ */
+ public void setAutoStart(boolean autostart) {
+ boolean oldValue = fAutoStart;
+ fAutoStart = autostart;
+ if (isEditable() && oldValue != fAutoStart)
+ firePropertyChanged(P_AUTO_START, new Boolean(oldValue), new Boolean(fAutoStart));
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IPluginConfiguration#setStartLevel(java.lang.String)
+ */
+ public void setStartLevel(int startLevel) {
+ int oldValue = fStartLevel;
+ fStartLevel = startLevel;
+ if (isEditable() && oldValue != fStartLevel)
+ firePropertyChanged(P_START_LEVEL, new Integer(oldValue), new Integer(fStartLevel));
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.pde.internal.core.iproduct.IProductPluginConfiguration#setId(java.lang.String)
+ */
+ public void setId(String id) {
+ fId = id;
+ }
+
+}