-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 + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ 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); //$NON-NLS-1$
+ }
+
+ name = name + " - " + URIStringUtils.unescape(parentURI); //$NON-NLS-1$
+
+ 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 + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ 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); //$NON-NLS-1$
+ }
+
+ name = name + " - " + URIStringUtils.unescape(parentURI); //$NON-NLS-1$
+
+ 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, Messages.ModelingUIUtils_SelectQueryType) {
+ @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); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ });
+ });
+ }
+ });
+ }
+
+}