]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/ModelingUIUtils.java
Option for exporting tg and pgraph with sharedlibrary
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / ModelingUIUtils.java
index db434bac487681acfdf8310b8ba19c9230f956b4..fa153e193500d4fa29804c5d723e627dc0047896 100644 (file)
-package org.simantics.modeling.ui;\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.function.Consumer;\r
-\r
-import org.eclipse.core.commands.ExecutionEvent;\r
-import org.eclipse.jface.dialogs.IDialogSettings;\r
-import org.eclipse.jface.resource.ImageDescriptor;\r
-import org.eclipse.jface.window.Window;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Shell;\r
-import org.eclipse.ui.IEditorPart;\r
-import org.eclipse.ui.PlatformUI;\r
-import org.eclipse.ui.handlers.HandlerUtil;\r
-import org.simantics.Simantics;\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.util.URIStringUtils;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.request.ReadRequest;\r
-import org.simantics.db.common.request.WriteRequest;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.adapter.Instances;\r
-import org.simantics.g2d.canvas.ICanvasContext;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.modeling.ModelingResources;\r
-import org.simantics.modeling.ui.diagramEditor.DiagramEditor;\r
-import org.simantics.modeling.ui.diagramEditor.DiagramViewer;\r
-import org.simantics.ui.workbench.dialogs.ResourceSelectionDialog3;\r
-import org.simantics.utils.datastructures.Pair;\r
-\r
-public class ModelingUIUtils {\r
-\r
-    public static DiagramViewer tryGetDiagramViewer(ExecutionEvent event) {\r
-\r
-       IEditorPart editorPart = HandlerUtil.getActiveEditor(event);\r
-       if(editorPart == null) return null;\r
-       if(editorPart instanceof DiagramEditor) {\r
-               return (DiagramViewer)editorPart.getAdapter(DiagramViewer.class);\r
-       }\r
-       \r
-       return null;\r
-       \r
-    }\r
-    \r
-    public static ICanvasContext tryGetCanvasContext(ExecutionEvent event) {\r
-       \r
-       DiagramViewer viewer = tryGetDiagramViewer(event);\r
-       if(viewer != null) return (ICanvasContext)viewer.getAdapter(ICanvasContext.class);\r
-       else return null;\r
-       \r
-    }\r
-       \r
-       protected static void findSCLQueryTypes(ReadGraph graph, Resource indexRoot, Map<Resource, Pair<String, ImageDescriptor>> map) throws DatabaseException {\r
-\r
-               Layer0 L0 = Layer0.getInstance(graph);\r
-               ModelingResources MOD = ModelingResources.getInstance(graph);\r
-\r
-               Instances query = graph.adapt(MOD.SCLQueryType, Instances.class);\r
-\r
-               String modelURI = graph.getURI(indexRoot);\r
-               \r
-               for(Resource _res : query.find(graph, indexRoot)) {\r
-                       \r
-                       // Don't allow instantiation of abstract query types.\r
-                       if (graph.hasStatement(_res, L0.Abstract))\r
-                               continue;\r
-\r
-                       Resource res = graph.getPossibleObject(_res, L0.HasRange_Inverse);\r
-                       if(res == null) {\r
-                               \r
-                               // Entry type\r
-\r
-                               String name = graph.getPossibleRelatedValue(_res, L0.HasName, Bindings.STRING);\r
-                               if (name == null)\r
-                                       continue;\r
-                               String label = graph.getPossibleRelatedValue2(_res, L0.HasLabel, Bindings.STRING);\r
-\r
-                               if (label != null && !name.equals(label)) {\r
-                                       name = label + " (" + name + ")";\r
-                               }\r
-\r
-                               Resource parent = graph.getPossibleObject(_res, L0.PartOf);\r
-                               if(parent == null) continue;\r
-\r
-                               String parentURI = graph.getURI(parent);\r
-                               if(parentURI.startsWith(modelURI)) {\r
-                                       parentURI = parentURI.substring(modelURI.length());\r
-                                       if(parentURI.startsWith("/")) parentURI = parentURI.substring(1);\r
-                               }\r
-\r
-                               name = name + " - " + URIStringUtils.unescape(parentURI);\r
-\r
-                               map.put(_res, new Pair<String, ImageDescriptor>(name, null));\r
-                               \r
-                       } else {\r
-                               \r
-                               // Property type\r
-                       \r
-                               String name = graph.getPossibleRelatedValue(res, L0.HasName, Bindings.STRING);\r
-                               if (name == null)\r
-                                       continue;\r
-                               String label = graph.getPossibleRelatedValue2(res, L0.HasLabel, Bindings.STRING);\r
-\r
-                               if (label != null && !name.equals(label)) {\r
-                                       name = label + " (" + name + ")";\r
-                               }\r
-\r
-                               Resource parent = graph.getPossibleObject(_res, L0.PartOf);\r
-                               if(parent == null) continue;\r
-\r
-                               String parentURI = graph.getURI(parent);\r
-                               if(parentURI.startsWith(modelURI)) {\r
-                                       parentURI = parentURI.substring(modelURI.length());\r
-                                       if(parentURI.startsWith("/")) parentURI = parentURI.substring(1);\r
-                               }\r
-\r
-                               name = name + " - " + URIStringUtils.unescape(parentURI);\r
-\r
-                               map.put(_res, new Pair<String, ImageDescriptor>(name, null));\r
-                       \r
-                       }\r
-                       \r
-               }\r
-\r
-       }\r
-       \r
-       public static void queryUserSelectedQueryType(\r
-                       final Map<Resource, Pair<String, ImageDescriptor>> map,\r
-                       final Consumer<Resource> selectionCallback)\r
-       {\r
-               Display.getDefault().asyncExec(new Runnable() {\r
-                       @Override\r
-                       public void run() {\r
-                               Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();\r
-                               ResourceSelectionDialog3<Resource> dialog = new ResourceSelectionDialog3<Resource>(shell, map, "Select query type from list") {\r
-                                       @Override\r
-                                       protected IDialogSettings getBaseDialogSettings() {\r
-                                               return Activator.getDefault().getDialogSettings();\r
-                                       }\r
-                               };\r
-                               if (dialog.open() == Window.OK) {\r
-                                       Object[] result = dialog.getResult();\r
-                                       if (result != null && result.length == 1) {\r
-                                               final Resource res = (Resource)result[0];\r
-                                               selectionCallback.accept(res);\r
-                                       }\r
-                               }\r
-                       }\r
-               });\r
-       }\r
-       \r
-       public static void newSCLQuery(final Resource parent, final Resource indexRoot) throws DatabaseException {\r
-        if (indexRoot == null)\r
-            return;\r
-        Simantics.getSession().syncRequest(new ReadRequest() {\r
-            @Override\r
-            public void run(ReadGraph graph) throws DatabaseException {\r
-                \r
-                final Map<Resource, Pair<String, ImageDescriptor>> map = new HashMap<Resource, Pair<String,ImageDescriptor>>();\r
-                findSCLQueryTypes(graph, indexRoot, map);\r
-                queryUserSelectedQueryType(map, selected -> {\r
-                    Simantics.getSession().async(new WriteRequest() {\r
-                        @Override\r
-                        public void perform(WriteGraph g) throws DatabaseException {\r
-                            g.markUndoPoint();\r
-                            Simantics.applySCL("Simantics/Query", "createSCLQueryDefault", g, parent, selected);\r
-                        }\r
-                    });\r
-                });\r
-            }\r
-        });\r
-    }\r
-    \r
-}\r
+package org.simantics.modeling.ui;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Consumer;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.simantics.Simantics;
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.util.URIStringUtils;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.request.ReadRequest;
+import org.simantics.db.common.request.WriteRequest;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.adapter.Instances;
+import org.simantics.g2d.canvas.ICanvasContext;
+import org.simantics.layer0.Layer0;
+import org.simantics.modeling.ModelingResources;
+import org.simantics.modeling.ui.diagramEditor.DiagramEditor;
+import org.simantics.modeling.ui.diagramEditor.DiagramViewer;
+import org.simantics.ui.workbench.dialogs.ResourceSelectionDialog3;
+import org.simantics.utils.datastructures.Pair;
+
+public class ModelingUIUtils {
+
+    public static DiagramViewer tryGetDiagramViewer(ExecutionEvent event) {
+
+       IEditorPart editorPart = HandlerUtil.getActiveEditor(event);
+       if(editorPart == null) return null;
+       if(editorPart instanceof DiagramEditor) {
+               return (DiagramViewer)editorPart.getAdapter(DiagramViewer.class);
+       }
+       
+       return null;
+       
+    }
+    
+    public static ICanvasContext tryGetCanvasContext(ExecutionEvent event) {
+       
+       DiagramViewer viewer = tryGetDiagramViewer(event);
+       if(viewer != null) return (ICanvasContext)viewer.getAdapter(ICanvasContext.class);
+       else return null;
+       
+    }
+       
+       protected static void findSCLQueryTypes(ReadGraph graph, Resource indexRoot, Map<Resource, Pair<String, ImageDescriptor>> map) throws DatabaseException {
+
+               Layer0 L0 = Layer0.getInstance(graph);
+               ModelingResources MOD = ModelingResources.getInstance(graph);
+
+               Instances query = graph.adapt(MOD.SCLQueryType, Instances.class);
+
+               String modelURI = graph.getURI(indexRoot);
+               
+               for(Resource _res : query.find(graph, indexRoot)) {
+                       
+                       // Don't allow instantiation of abstract query types.
+                       if (graph.hasStatement(_res, L0.Abstract))
+                               continue;
+
+                       Resource res = graph.getPossibleObject(_res, L0.HasRange_Inverse);
+                       if(res == null) {
+                               
+                               // Entry type
+
+                               String name = graph.getPossibleRelatedValue(_res, L0.HasName, Bindings.STRING);
+                               if (name == null)
+                                       continue;
+                               String label = graph.getPossibleRelatedValue2(_res, L0.HasLabel, Bindings.STRING);
+
+                               if (label != null && !name.equals(label)) {
+                                       name = label + " (" + name + ")";
+                               }
+
+                               Resource parent = graph.getPossibleObject(_res, L0.PartOf);
+                               if(parent == null) continue;
+
+                               String parentURI = graph.getURI(parent);
+                               if(parentURI.startsWith(modelURI)) {
+                                       parentURI = parentURI.substring(modelURI.length());
+                                       if(parentURI.startsWith("/")) parentURI = parentURI.substring(1);
+                               }
+
+                               name = name + " - " + URIStringUtils.unescape(parentURI);
+
+                               map.put(_res, new Pair<String, ImageDescriptor>(name, null));
+                               
+                       } else {
+                               
+                               // Property type
+                       
+                               String name = graph.getPossibleRelatedValue(res, L0.HasName, Bindings.STRING);
+                               if (name == null)
+                                       continue;
+                               String label = graph.getPossibleRelatedValue2(res, L0.HasLabel, Bindings.STRING);
+
+                               if (label != null && !name.equals(label)) {
+                                       name = label + " (" + name + ")";
+                               }
+
+                               Resource parent = graph.getPossibleObject(_res, L0.PartOf);
+                               if(parent == null) continue;
+
+                               String parentURI = graph.getURI(parent);
+                               if(parentURI.startsWith(modelURI)) {
+                                       parentURI = parentURI.substring(modelURI.length());
+                                       if(parentURI.startsWith("/")) parentURI = parentURI.substring(1);
+                               }
+
+                               name = name + " - " + URIStringUtils.unescape(parentURI);
+
+                               map.put(_res, new Pair<String, ImageDescriptor>(name, null));
+                       
+                       }
+                       
+               }
+
+       }
+       
+       public static void queryUserSelectedQueryType(
+                       final Map<Resource, Pair<String, ImageDescriptor>> map,
+                       final Consumer<Resource> selectionCallback)
+       {
+               Display.getDefault().asyncExec(new Runnable() {
+                       @Override
+                       public void run() {
+                               Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+                               ResourceSelectionDialog3<Resource> dialog = new ResourceSelectionDialog3<Resource>(shell, map, "Select query type from list") {
+                                       @Override
+                                       protected IDialogSettings getBaseDialogSettings() {
+                                               return Activator.getDefault().getDialogSettings();
+                                       }
+                               };
+                               if (dialog.open() == Window.OK) {
+                                       Object[] result = dialog.getResult();
+                                       if (result != null && result.length == 1) {
+                                               final Resource res = (Resource)result[0];
+                                               selectionCallback.accept(res);
+                                       }
+                               }
+                       }
+               });
+       }
+       
+       public static void newSCLQuery(final Resource parent, final Resource indexRoot) throws DatabaseException {
+        if (indexRoot == null)
+            return;
+        Simantics.getSession().syncRequest(new ReadRequest() {
+            @Override
+            public void run(ReadGraph graph) throws DatabaseException {
+                
+                final Map<Resource, Pair<String, ImageDescriptor>> map = new HashMap<Resource, Pair<String,ImageDescriptor>>();
+                findSCLQueryTypes(graph, indexRoot, map);
+                queryUserSelectedQueryType(map, selected -> {
+                    Simantics.getSession().async(new WriteRequest() {
+                        @Override
+                        public void perform(WriteGraph g) throws DatabaseException {
+                            g.markUndoPoint();
+                            Simantics.applySCL("Simantics/Query", "createSCLQueryDefault", g, parent, selected);
+                        }
+                    });
+                });
+            }
+        });
+    }
+    
+}