[491001] Build application create a new Feature data
Bug: 491001
Change-Id: Ie4caacdd872b6ccce62ce4635fb9ae55b584c750
diff --git a/portfolio/org.eclipse.egf.portfolio.genchain.tools.ui/src/org/eclipse/egf/portfolio/genchain/tools/ui/actions/FeatureHelper.java b/portfolio/org.eclipse.egf.portfolio.genchain.tools.ui/src/org/eclipse/egf/portfolio/genchain/tools/ui/actions/FeatureHelper.java
index fd8135a..d882141 100644
--- a/portfolio/org.eclipse.egf.portfolio.genchain.tools.ui/src/org/eclipse/egf/portfolio/genchain/tools/ui/actions/FeatureHelper.java
+++ b/portfolio/org.eclipse.egf.portfolio.genchain.tools.ui/src/org/eclipse/egf/portfolio/genchain/tools/ui/actions/FeatureHelper.java
@@ -1,135 +1,165 @@
-package org.eclipse.egf.portfolio.genchain.tools.ui.actions;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.egf.portfolio.genchain.tools.Activator;
-import org.eclipse.pde.core.plugin.IPluginBase;
-import org.eclipse.pde.internal.core.bundle.WorkspaceBundlePluginModel;
-import org.eclipse.pde.internal.core.feature.FeaturePlugin;
-import org.eclipse.pde.internal.core.feature.WorkspaceFeatureModel;
-import org.eclipse.pde.internal.core.ifeature.IFeature;
-import org.eclipse.pde.internal.core.ifeature.IFeatureChild;
-import org.eclipse.pde.internal.core.ifeature.IFeaturePlugin;
-import org.eclipse.pde.internal.ui.wizards.feature.CreateFeatureProjectOperation;
-import org.eclipse.pde.internal.ui.wizards.feature.FeatureData;
-
-public class FeatureHelper {
- public static final String VERSION = "1.0.0.qualifier";
- // private static final Shell SHELL =
- // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
- private static final Path PLUGIN_PATH = new Path("/plugin.xml");
- private static final Path METAFEST_PATH = new Path("/META-INF/MANIFEST.MF");
- private static final IWorkspaceRoot ROOT = ResourcesPlugin.getWorkspace().getRoot();
-
- @SuppressWarnings("restriction")
- public static IProject createFeatureProject(Collection<String> includedFeatureList, Collection<String> pluginList, String id, String name, final IProgressMonitor monitor) throws CoreException {
-
- final IPluginBase[] pluginBase = getPluginBase(pluginList);
- final FeatureData featureData = getFeatureData(id, name);
- final IProject projectF = ROOT.getProject(featureData.id);
-
- CreateFeatureProjectOperation operation = new MyCreateFeatureProjectOperation(projectF, ROOT.getLocation(), featureData, pluginBase, new ArrayList<String>(includedFeatureList));
- try {
- operation.run(monitor);
- } catch (Exception e) {
- throw new CoreException(new Status(IStatus.ERROR, Activator.getDefault().getPluginID(), e.getMessage(), e));
- }
-
- return projectF;
- }
-
- private static IPluginBase[] getPluginBase(Collection<String> pluginList) {
- if (pluginList != null && pluginList.size() > 0) {
- int size = pluginList.size();
- IPluginBase[] result = new IPluginBase[size];
- size = 0;
- for (String id : pluginList) {
- result[size++] = getPluginBase(id);
- }
- return result;
- }
- return null;
-
- }
-
- @SuppressWarnings("restriction")
- private static IPluginBase getPluginBase(String pluginName) {
- IProject project = ROOT.getProject(pluginName);
- IFile manifestFile = project.getFile(METAFEST_PATH);
- IFile pluginFile = project.getFile(PLUGIN_PATH);
- WorkspaceBundlePluginModel model = new WorkspaceBundlePluginModel(manifestFile, pluginFile);
- IPluginBase pluginBase = model.getPluginBase();
- return pluginBase;
- }
-
- @SuppressWarnings("restriction")
- private static FeatureData getFeatureData(String id, String name) {
- FeatureData featureData = new FeatureData();
- featureData.id = id + ".feature";
- featureData.name = name + " Feature";
- featureData.version = VERSION;
- // featureData.provider = "THALESGROUP";
- return featureData;
- }
-
- @SuppressWarnings("restriction")
- private static class MyCreateFeatureProjectOperation extends CreateFeatureProjectOperation {
-
- private List<String> includedFeatureList;
-
- public MyCreateFeatureProjectOperation(IProject project, IPath location, FeatureData featureData, IPluginBase[] plugins, List<String> includedFeatureList) {
- super(project, location, featureData, plugins, null);
- this.includedFeatureList = includedFeatureList;
- }
-
- @Override
- protected void configureFeature(IFeature feature, WorkspaceFeatureModel model) throws CoreException {
- IFeaturePlugin[] added = new IFeaturePlugin[fPlugins.length];
- for (int i = 0; i < fPlugins.length; i++) {
- IPluginBase plugin = fPlugins[i];
- FeaturePlugin fplugin = (FeaturePlugin) model.getFactory().createPlugin();
- fplugin.loadFrom(plugin);
- fplugin.setVersion("0.0.0"); //$NON-NLS-1$
- fplugin.setUnpack(false);
- added[i] = fplugin;
- }
- feature.addPlugins(added);
- IFeatureChild[] features = new IFeatureChild[includedFeatureList.size()];
- for (int i = 0; i < includedFeatureList.size(); i++) {
- IFeatureChild child = model.getFactory().createChild();
- child.setId(includedFeatureList.get(i));
- child.setVersion("0.0.0");
- features[i] = child;
- }
- feature.addIncludedFeatures(features);
- }
-
- protected void openFeatureEditor(IFile manifestFile) {
- // we don't need such a feature
- }
-
- protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
- if (fProject.exists())
- fProject.delete(true, monitor);
- super.execute(monitor);
- }
-
- protected boolean shouldOverwriteFeature() {
- return true;
- }
-
- }
-}
+package org.eclipse.egf.portfolio.genchain.tools.ui.actions;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.egf.portfolio.genchain.tools.Activator;
+import org.eclipse.pde.core.plugin.IPluginBase;
+import org.eclipse.pde.internal.core.bundle.WorkspaceBundlePluginModel;
+import org.eclipse.pde.internal.core.feature.FeaturePlugin;
+import org.eclipse.pde.internal.core.feature.WorkspaceFeatureModel;
+import org.eclipse.pde.internal.core.ifeature.IFeature;
+import org.eclipse.pde.internal.core.ifeature.IFeatureChild;
+import org.eclipse.pde.internal.core.ifeature.IFeaturePlugin;
+import org.eclipse.pde.internal.core.project.PDEProject;
+import org.eclipse.pde.internal.ui.wizards.feature.CreateFeatureProjectOperation;
+import org.eclipse.pde.internal.ui.wizards.feature.FeatureData;
+
+public class FeatureHelper {
+ public static final String VERSION = "1.0.0.qualifier";
+ // private static final Shell SHELL =
+ // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+ private static final Path PLUGIN_PATH = new Path("/plugin.xml");
+ private static final Path METAFEST_PATH = new Path("/META-INF/MANIFEST.MF");
+ private static final IWorkspaceRoot ROOT = ResourcesPlugin.getWorkspace().getRoot();
+
+ @SuppressWarnings("restriction")
+ public static IProject createFeatureProject(Collection<String> includedFeatureList, Collection<String> pluginList, String id, String name, final IProgressMonitor monitor) throws CoreException {
+
+ final IPluginBase[] pluginBase = getPluginBase(pluginList);
+ final FeatureData featureData = getFeatureData(id, name);
+ final IProject projectF = ROOT.getProject(featureData.id);
+
+ CreateFeatureProjectOperation operation = new MyCreateFeatureProjectOperation(projectF, ROOT.getLocation(), featureData, pluginBase, new ArrayList<String>(includedFeatureList));
+ try {
+ operation.run(monitor);
+ } catch (Exception e) {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.getDefault().getPluginID(), e.getMessage(), e));
+ }
+
+ return projectF;
+ }
+
+ private static IPluginBase[] getPluginBase(Collection<String> pluginList) {
+ if (pluginList != null && pluginList.size() > 0) {
+ int size = pluginList.size();
+ IPluginBase[] result = new IPluginBase[size];
+ size = 0;
+ for (String id : pluginList) {
+ result[size++] = getPluginBase(id);
+ }
+ return result;
+ }
+ return null;
+
+ }
+
+ @SuppressWarnings("restriction")
+ private static IPluginBase getPluginBase(String pluginName) {
+ IProject project = ROOT.getProject(pluginName);
+ IFile manifestFile = project.getFile(METAFEST_PATH);
+ IFile pluginFile = project.getFile(PLUGIN_PATH);
+ WorkspaceBundlePluginModel model = new WorkspaceBundlePluginModel(manifestFile, pluginFile);
+ IPluginBase pluginBase = model.getPluginBase();
+ return pluginBase;
+ }
+
+ @SuppressWarnings("restriction")
+ private static FeatureData getFeatureData(String id, String name) {
+ FeatureData featureData = new FeatureData();
+ featureData.id = id + ".feature";
+ featureData.name = name + " Feature";
+ // featureData.provider = "THALESGROUP";
+ final IProject fproject = ResourcesPlugin.getWorkspace().getRoot().getProject(id + ".feature");
+ featureData.version = getFeatureProjectVersion(fproject);
+ return featureData;
+ }
+
+ @SuppressWarnings("restriction")
+ private static String getFeatureProjectVersion(IProject fproject){
+ String version = VERSION;
+ if (fproject.exists())
+ {
+ WorkspaceFeatureModel model = null;
+ try {
+ IFile file = PDEProject.getFeatureXml(fproject);
+ file.refreshLocal(IFile.DEPTH_ONE, new NullProgressMonitor());
+ model = new WorkspaceFeatureModel(file);
+ model.load();
+ IFeature feature = model.getFeature();
+ version = feature.getVersion();
+ } catch (Exception e) {
+ // Do nothing and return the default version
+ }
+ finally {
+ if (model!= null)
+ {
+ model.dispose();
+ }
+ }
+ }
+
+ return version;
+ }
+
+ @SuppressWarnings("restriction")
+ private static class MyCreateFeatureProjectOperation extends CreateFeatureProjectOperation {
+
+ private List<String> includedFeatureList;
+
+ public MyCreateFeatureProjectOperation(IProject project, IPath location, FeatureData featureData, IPluginBase[] plugins, List<String> includedFeatureList) {
+ super(project, location, featureData, plugins, null);
+ this.includedFeatureList = includedFeatureList;
+ }
+
+ @Override
+ protected void configureFeature(IFeature feature, WorkspaceFeatureModel model) throws CoreException {
+ IFeaturePlugin[] added = new IFeaturePlugin[fPlugins.length];
+ for (int i = 0; i < fPlugins.length; i++) {
+ IPluginBase plugin = fPlugins[i];
+ FeaturePlugin fplugin = (FeaturePlugin) model.getFactory().createPlugin();
+ fplugin.loadFrom(plugin);
+ fplugin.setVersion("0.0.0"); //$NON-NLS-1$
+ fplugin.setUnpack(false);
+ added[i] = fplugin;
+ }
+ feature.addPlugins(added);
+ IFeatureChild[] features = new IFeatureChild[includedFeatureList.size()];
+ for (int i = 0; i < includedFeatureList.size(); i++) {
+ IFeatureChild child = model.getFactory().createChild();
+ child.setId(includedFeatureList.get(i));
+ child.setVersion("0.0.0");
+ features[i] = child;
+ }
+ feature.addIncludedFeatures(features);
+ }
+
+ protected void openFeatureEditor(IFile manifestFile) {
+ // we don't need such a feature
+ }
+
+ protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
+ if (fProject.exists())
+ fProject.delete(true, monitor);
+ super.execute(monitor);
+ }
+
+ protected boolean shouldOverwriteFeature() {
+ return true;
+ }
+
+ }
+}