package org.archstudio.releng.pde.actions; import java.util.Arrays; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.pde.internal.core.feature.WorkspaceFeatureModel; import org.eclipse.pde.internal.core.ifeature.IFeature; import org.eclipse.pde.internal.core.ifeature.IFeatureImport; import org.eclipse.pde.internal.core.ifeature.IFeaturePlugin; import com.google.common.base.Function; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; @SuppressWarnings("restriction") public class AddRequiredWorkspacePlugins extends AbstractProjectHandler { public AddRequiredWorkspacePlugins() { } @Override protected void execute(IProject project) { try { IFile featureFile = project.getFile("feature.xml"); if (featureFile.exists()) { WorkspaceFeatureModel featureModel = new WorkspaceFeatureModel(featureFile); featureModel.load(); IFeature feature = featureModel.getFeature(); Multimap<String, IFeaturePlugin> pluginMultimap = Multimaps.index(Arrays.asList(feature.getPlugins()), new Function<IFeaturePlugin, String>() { @Override public String apply(IFeaturePlugin input) { return input.getId(); } }); for (IFeatureImport featureImport : feature.getImports()) { String id = featureImport.getId(); if (!pluginMultimap.containsKey(id)) { IProject projectImport = project.getWorkspace().getRoot().getProject(id); if (projectImport.exists()) { IFeaturePlugin pluginImport = featureModel.getFactory().createPlugin(); pluginImport.setVersion("0.0.0"); pluginImport.setId(id); feature.addPlugins(new IFeaturePlugin[] { pluginImport }); } } } featureModel.save(); } } catch (Exception e) { e.printStackTrace(); } } }