Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.projectconfig.editor/src/org/eclipse/emf/cdo/releng/projectconfig/presentation/handlers/NavigateHandler.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.projectconfig.editor/src/org/eclipse/emf/cdo/releng/projectconfig/presentation/handlers/NavigateHandler.java133
1 files changed, 133 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.projectconfig.editor/src/org/eclipse/emf/cdo/releng/projectconfig/presentation/handlers/NavigateHandler.java b/plugins/org.eclipse.emf.cdo.releng.projectconfig.editor/src/org/eclipse/emf/cdo/releng/projectconfig/presentation/handlers/NavigateHandler.java
new file mode 100644
index 0000000000..89553e6ee1
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.releng.projectconfig.editor/src/org/eclipse/emf/cdo/releng/projectconfig/presentation/handlers/NavigateHandler.java
@@ -0,0 +1,133 @@
+package org.eclipse.emf.cdo.releng.projectconfig.presentation.handlers;
+
+import org.eclipse.emf.cdo.releng.preferences.PreferenceNode;
+import org.eclipse.emf.cdo.releng.preferences.util.PreferencesUtil;
+import org.eclipse.emf.cdo.releng.projectconfig.PreferenceFilter;
+import org.eclipse.emf.cdo.releng.projectconfig.PreferenceProfile;
+import org.eclipse.emf.cdo.releng.projectconfig.Project;
+import org.eclipse.emf.cdo.releng.projectconfig.WorkspaceConfiguration;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.edit.provider.IWrapperItemProvider;
+import org.eclipse.emf.edit.provider.ItemProvider;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.ISources;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Our sample handler extends AbstractHandler, an IHandler base class.
+ * @see org.eclipse.core.commands.IHandler
+ * @see org.eclipse.core.commands.AbstractHandler
+ */
+public class NavigateHandler extends AbstractHandler
+{
+ protected IStructuredSelection targetSelection;
+
+ protected Viewer viewer;
+
+ public NavigateHandler()
+ {
+ }
+
+ /**
+ * the command has been executed, so extract extract the needed information
+ * from the application context.
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException
+ {
+ if (viewer != null)
+ {
+ viewer.setSelection(targetSelection, true);
+ }
+ return null;
+ }
+
+ @Override
+ public void setEnabled(Object evaluationContext)
+ {
+ IEvaluationContext evaluationContext2 = (IEvaluationContext)evaluationContext;
+ Object activeEditorPart = evaluationContext2.getVariable(ISources.ACTIVE_EDITOR_NAME);
+ if (activeEditorPart instanceof IViewerProvider)
+ {
+ viewer = ((IViewerProvider)activeEditorPart).getViewer();
+ }
+ Object selection = evaluationContext2.getVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME);
+ if (selection instanceof IStructuredSelection)
+ {
+ updateSelection((IStructuredSelection)selection);
+ }
+
+ setBaseEnabled(viewer != null && !targetSelection.isEmpty());
+ }
+
+ public boolean updateSelection(IStructuredSelection selection)
+ {
+ List<Object> targets = new ArrayList<Object>();
+ for (Object object : selection.toArray())
+ {
+ if (object instanceof WorkspaceConfiguration)
+ {
+ WorkspaceConfiguration workspaceConfiguration = (WorkspaceConfiguration)object;
+ for (Project project : workspaceConfiguration.getProjects())
+ {
+ targets.addAll(project.getPreferenceProfiles());
+ }
+ }
+ else if (object instanceof Project)
+ {
+ Project project = (Project)object;
+ targets.add(project.getPreferenceNode());
+ }
+ else if (object instanceof PreferenceProfile)
+ {
+ PreferenceProfile preferenceProfile = (PreferenceProfile)object;
+ targets.addAll(preferenceProfile.getReferentProjects());
+ }
+ else if (object instanceof PreferenceFilter)
+ {
+ PreferenceFilter preferenceFilter = (PreferenceFilter)object;
+ PreferenceNode preferenceNode = preferenceFilter.getPreferenceNode();
+ if (preferenceNode != null)
+ {
+ targets.add(preferenceNode);
+ }
+ }
+ else if (object instanceof IWrapperItemProvider)
+ {
+ IWrapperItemProvider wrapperItemProvider = (IWrapperItemProvider)object;
+ targets.add(wrapperItemProvider.getValue());
+ }
+ else if (object instanceof ItemProvider)
+ {
+ ItemProvider itemProvider = (ItemProvider)object;
+ for (Object child : itemProvider.getChildren())
+ {
+ if (child instanceof IWrapperItemProvider)
+ {
+ targets.add(((IWrapperItemProvider)child).getValue());
+ }
+ }
+ }
+ else if (object instanceof PreferenceNode)
+ {
+ PreferenceNode preferenceNode = (PreferenceNode)object;
+ PreferenceNode ancestor = PreferencesUtil.getAncestor(preferenceNode);
+ if (ancestor != null)
+ {
+ targets.add(ancestor);
+ }
+ }
+ }
+ targetSelection = new StructuredSelection(targets);
+ return !targetSelection.isEmpty();
+ }
+}

Back to the top