package cideplus.ui.editor.popup; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.Separator; import org.eclipse.jface.text.ITextSelection; import org.eclipse.swt.SWT; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.CompoundContributionItem; import org.eclipse.ui.menus.CommandContributionItem; import org.eclipse.ui.menus.CommandContributionItemParameter; import org.eclipse.ui.services.IServiceLocator; import cideplus.model.Feature; import cideplus.model.ast.utils.ASTUtils; import cideplus.model.exceptions.FeatureNotFoundException; import cideplus.ui.configuration.FeaturesConfigurationUtil; import cideplus.ui.configuration.ICompilationUnitFeaturesManager; import cideplus.ui.configuration.IFeaturesManager; import cideplus.utils.PluginUtils; public class MenuContentProvider extends CompoundContributionItem { private ICompilationUnitFeaturesManager managerForFile; private Set<Feature> features; public static final String paramFeatureId = "cideplus.commands.markFeature.featureIdParameter"; public static final String paramChecked = "cideplus.commands.markFeature.checkedParameter"; private static final String markFeatureCommandId = "cideplus.commands.markFeature"; private static final String configureFeaturesCommandId = "cideplus.commands.configureFeatures"; public MenuContentProvider() { setFeatures(); } public MenuContentProvider(String id) { super(id); setFeatures(); } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override protected IContributionItem[] getContributionItems() { IServiceLocator serviceLocator = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); String id = "cideplus.commands.markFeature.commandParameterId"; if (features.isEmpty()) { final CommandContributionItemParameter contributionParameter = new CommandContributionItemParameter(serviceLocator, id, configureFeaturesCommandId, SWT.NONE); contributionParameter.label = "Configure Features..."; return new IContributionItem[] { new CommandContributionItem(contributionParameter) }; } else { IContributionItem[] menuItems = new IContributionItem[features.size() + 1]; ITextSelection selection = PluginUtils.getCurrentEditorTextSelection(); ASTNode node = ASTUtils.getNodeFromSelection(managerForFile.getCompilationUnit(), selection); Iterator<Feature> it = features.iterator(); int i; for (i = 0; it.hasNext(); i++) { Feature feature = it.next(); Boolean checked = managerForFile.hasFeature(node, feature); final CommandContributionItemParameter item = new CommandContributionItemParameter(serviceLocator, id, markFeatureCommandId, CommandContributionItem.STYLE_CHECK); item.label = feature.getName(); item.parameters = new HashMap(); item.parameters.put(paramFeatureId, feature.getId().toString()); item.parameters.put(paramChecked, checked.toString()); menuItems[i] = new CommandContributionItem(item); } menuItems[i++] = new Separator(); return menuItems; } } private void setFeatures() { IFeaturesManager featuresManager = FeaturesConfigurationUtil.getFeaturesManager(PluginUtils.getCurrentProject()); try { features = featuresManager.getFeatures(); managerForFile = featuresManager.getManagerForFile(PluginUtils.getCurrentCompilationUnit()); } catch (IOException e) { System.out.println("IOException"); e.printStackTrace(); throw new RuntimeException(e); } catch (CoreException e) { System.out.println("CoreException"); e.printStackTrace(); throw new RuntimeException(e); } catch (FeatureNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }