]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/actions/ModeledDoubleClickActions.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / actions / ModeledDoubleClickActions.java
index d0da5d3c75d3ee6c8b14f52fa2781b0639942f60..5f3d55ff04968845f96f27b46ae527b87bc1810f 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.modeling.ui.actions;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.Collection;\r
-import java.util.Collections;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.eclipse.core.runtime.CoreException;\r
-import org.eclipse.core.runtime.IConfigurationElement;\r
-import org.eclipse.core.runtime.IExecutableExtension;\r
-import org.eclipse.jface.action.Action;\r
-import org.simantics.browsing.ui.NodeContext;\r
-import org.simantics.browsing.ui.common.NodeContextBuilder;\r
-import org.simantics.browsing.ui.model.InvalidContribution;\r
-import org.simantics.browsing.ui.model.actions.ActionBrowseContext;\r
-import org.simantics.browsing.ui.model.actions.IActionCategory;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.request.ResourceRead;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.project.ontology.ProjectResource;\r
-import org.simantics.ui.DoubleClickEvent;\r
-import org.simantics.ui.IDoubleClickAction;\r
-import org.simantics.ui.utils.ResourceAdaptionUtils;\r
-import org.simantics.utils.ui.action.PriorityAction;\r
-\r
-public class ModeledDoubleClickActions implements IDoubleClickAction, IExecutableExtension {\r
-\r
-    private Set<String> browseContexts = defaultBrowseContexts;\r
-\r
-    final static public Set<String> defaultBrowseContexts = Collections.singleton(ProjectResource.URIs.ProjectDoubleClickActionContext);\r
-    \r
-    public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {\r
-       if(data instanceof String) {\r
-               String str = (String)data;\r
-               String[] parms = str.split(";");\r
-               for(String parm : parms) {\r
-                       String[] keyValue = parm.split("=");\r
-                       if(keyValue.length == 2) {\r
-                               String key = keyValue[0].trim();\r
-                               if("context".equals(key)) {\r
-                                       browseContexts = Collections.singleton(keyValue[1]);\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-    }\r
-    \r
-    public Collection<String> getBrowseContexts() {\r
-        return browseContexts;\r
-    }\r
-    \r
-    public Collection<Resource> getBrowseContextResources(ReadGraph graph) throws DatabaseException {\r
-        Collection<String> names = getBrowseContexts(); \r
-        ArrayList<Resource> result = new ArrayList<Resource>(names.size());\r
-        for(String name : names)\r
-            result.add(graph.getResource(name));\r
-        return result;\r
-    }\r
-       \r
-    @Override\r
-    public void doubleClickEvent(DoubleClickEvent e) throws DatabaseException {\r
-       \r
-        ReadGraph g = e.getGraph();\r
-        final Resource resource = ResourceAdaptionUtils.toSingleResource(e.getResource());\r
-        if (resource == null)\r
-            return;\r
-\r
-        Collection<PriorityAction> actions = g.syncRequest(new ResourceRead<Collection<PriorityAction>>(resource) {\r
-\r
-                       @Override\r
-                       public Collection<PriorityAction> perform(ReadGraph graph) throws DatabaseException {\r
-                               \r
-                       List<NodeContext> contexts = Collections.singletonList(NodeContextBuilder.buildWithInput(resource));\r
-                       \r
-                       try {\r
-\r
-                               NodeContext nodeContext = contexts.get(0);\r
-                               \r
-                           ActionBrowseContext defaultContext = ActionBrowseContext.create(graph,\r
-                                   getBrowseContextResources(graph));\r
-                           \r
-                           ActionBrowseContext browseContext = defaultContext;//ActionBrowseContext.get(graph, nodeContext, defaultContext);\r
-                           \r
-                           Map<IActionCategory, List<Action>> result = browseContext.getActions(graph, nodeContext, contexts);\r
-                           Map<IActionCategory, List<Action>> current = result;\r
-                           \r
-                           for(int i=0;i<contexts.size();i++) {\r
-\r
-                               defaultContext = ActionBrowseContext.create(graph,\r
-                                       getBrowseContextResources(graph));\r
-                               \r
-                               browseContext = ActionBrowseContext.get(graph, nodeContext, defaultContext);\r
-                               \r
-                               Map<IActionCategory, List<Action>> m = browseContext.getActions(graph, contexts.get(i), contexts);\r
-\r
-                               result = new HashMap<IActionCategory, List<Action>>();\r
-                               \r
-                               for(Map.Entry<IActionCategory, List<Action>> entry : m.entrySet()) {\r
-                                       List<Action> exist = current.get(entry.getKey());\r
-                                       if (exist == null)\r
-                                               continue;\r
-\r
-                                       ArrayList<Action> l = new ArrayList<Action>();\r
-                                       for(Action e : exist) {\r
-                                               String id = e.getId();\r
-                                               boolean found = false;\r
-                                               for(Action a : entry.getValue()) {\r
-                                                       if(id.equals(a.getId())) {\r
-                                                               found = true;\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-                                               if(found) l.add(e);\r
-                                       }\r
-                                       if(!l.isEmpty()) result.put(entry.getKey(), l);\r
-                               }\r
-                               \r
-                               current = result;\r
-                               \r
-                           }\r
-                           \r
-                           return toContributionItems(result);\r
-                           \r
-                       } catch (InvalidContribution e) {\r
-                           e.printStackTrace();\r
-                       }\r
-                       \r
-                       return Collections.emptyList();\r
-                       \r
-                       }\r
-               \r
-        });\r
-        \r
-        for(PriorityAction act : actions)\r
-               e.add(act);\r
-        \r
-    }\r
-    \r
-    private static Collection<PriorityAction> toContributionItems(\r
-            Map<IActionCategory, List<Action>> map) {\r
-\r
-       if(map.isEmpty())\r
-            return Collections.emptyList();\r
-        \r
-        IActionCategory[] categories = map.keySet().toArray(new IActionCategory[map.size()]);\r
-        Arrays.sort(categories, IActionCategory.ACTION_CATEGORY_COMPARATOR);\r
-        \r
-        ArrayList<PriorityAction> items = new ArrayList<PriorityAction>();\r
-        for(IActionCategory category : categories) {\r
-            List<Action> actions = map.get(category);\r
-            for(Action act : actions)\r
-                items.add(new PriorityAction(PriorityAction.HIGH+10) {\r
-                    @Override\r
-                    public void run() {\r
-                       act.run();\r
-                    }\r
-                });\r
-        }\r
-        return items;\r
-    }    \r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * 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:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.modeling.ui.actions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.jface.action.Action;
+import org.simantics.browsing.ui.NodeContext;
+import org.simantics.browsing.ui.common.NodeContextBuilder;
+import org.simantics.browsing.ui.model.InvalidContribution;
+import org.simantics.browsing.ui.model.actions.ActionBrowseContext;
+import org.simantics.browsing.ui.model.actions.IActionCategory;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.request.ResourceRead;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.project.ontology.ProjectResource;
+import org.simantics.ui.DoubleClickEvent;
+import org.simantics.ui.IDoubleClickAction;
+import org.simantics.ui.utils.ResourceAdaptionUtils;
+import org.simantics.utils.ui.action.PriorityAction;
+
+public class ModeledDoubleClickActions implements IDoubleClickAction, IExecutableExtension {
+
+    private Set<String> browseContexts = defaultBrowseContexts;
+
+    final static public Set<String> defaultBrowseContexts = Collections.singleton(ProjectResource.URIs.ProjectDoubleClickActionContext);
+    
+    public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
+       if(data instanceof String) {
+               String str = (String)data;
+               String[] parms = str.split(";");
+               for(String parm : parms) {
+                       String[] keyValue = parm.split("=");
+                       if(keyValue.length == 2) {
+                               String key = keyValue[0].trim();
+                               if("context".equals(key)) {
+                                       browseContexts = Collections.singleton(keyValue[1]);
+                               }
+                       }
+               }
+       }
+    }
+    
+    public Collection<String> getBrowseContexts() {
+        return browseContexts;
+    }
+    
+    public Collection<Resource> getBrowseContextResources(ReadGraph graph) throws DatabaseException {
+        Collection<String> names = getBrowseContexts(); 
+        ArrayList<Resource> result = new ArrayList<Resource>(names.size());
+        for(String name : names)
+            result.add(graph.getResource(name));
+        return result;
+    }
+       
+    @Override
+    public void doubleClickEvent(DoubleClickEvent e) throws DatabaseException {
+       
+        ReadGraph g = e.getGraph();
+        final Resource resource = ResourceAdaptionUtils.toSingleResource(e.getResource());
+        if (resource == null)
+            return;
+
+        Collection<PriorityAction> actions = g.syncRequest(new ResourceRead<Collection<PriorityAction>>(resource) {
+
+                       @Override
+                       public Collection<PriorityAction> perform(ReadGraph graph) throws DatabaseException {
+                               
+                       List<NodeContext> contexts = Collections.singletonList(NodeContextBuilder.buildWithInput(resource));
+                       
+                       try {
+
+                               NodeContext nodeContext = contexts.get(0);
+                               
+                           ActionBrowseContext defaultContext = ActionBrowseContext.create(graph,
+                                   getBrowseContextResources(graph));
+                           
+                           ActionBrowseContext browseContext = defaultContext;//ActionBrowseContext.get(graph, nodeContext, defaultContext);
+                           
+                           Map<IActionCategory, List<Action>> result = browseContext.getActions(graph, nodeContext, contexts);
+                           Map<IActionCategory, List<Action>> current = result;
+                           
+                           for(int i=0;i<contexts.size();i++) {
+
+                               defaultContext = ActionBrowseContext.create(graph,
+                                       getBrowseContextResources(graph));
+                               
+                               browseContext = ActionBrowseContext.get(graph, nodeContext, defaultContext);
+                               
+                               Map<IActionCategory, List<Action>> m = browseContext.getActions(graph, contexts.get(i), contexts);
+
+                               result = new HashMap<IActionCategory, List<Action>>();
+                               
+                               for(Map.Entry<IActionCategory, List<Action>> entry : m.entrySet()) {
+                                       List<Action> exist = current.get(entry.getKey());
+                                       if (exist == null)
+                                               continue;
+
+                                       ArrayList<Action> l = new ArrayList<Action>();
+                                       for(Action e : exist) {
+                                               String id = e.getId();
+                                               boolean found = false;
+                                               for(Action a : entry.getValue()) {
+                                                       if(id.equals(a.getId())) {
+                                                               found = true;
+                                                               break;
+                                                       }
+                                               }
+                                               if(found) l.add(e);
+                                       }
+                                       if(!l.isEmpty()) result.put(entry.getKey(), l);
+                               }
+                               
+                               current = result;
+                               
+                           }
+                           
+                           return toContributionItems(result);
+                           
+                       } catch (InvalidContribution e) {
+                           e.printStackTrace();
+                       }
+                       
+                       return Collections.emptyList();
+                       
+                       }
+               
+        });
+        
+        for(PriorityAction act : actions)
+               e.add(act);
+        
+    }
+    
+    private static Collection<PriorityAction> toContributionItems(
+            Map<IActionCategory, List<Action>> map) {
+
+       if(map.isEmpty())
+            return Collections.emptyList();
+        
+        IActionCategory[] categories = map.keySet().toArray(new IActionCategory[map.size()]);
+        Arrays.sort(categories, IActionCategory.ACTION_CATEGORY_COMPARATOR);
+        
+        ArrayList<PriorityAction> items = new ArrayList<PriorityAction>();
+        for(IActionCategory category : categories) {
+            List<Action> actions = map.get(category);
+            for(Action act : actions)
+                items.add(new PriorityAction(PriorityAction.HIGH+10) {
+                    @Override
+                    public void run() {
+                       act.run();
+                    }
+                });
+        }
+        return items;
+    }    
+
+}