]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/function/All.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / function / All.java
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/function/All.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/function/All.java
new file mode 100644 (file)
index 0000000..6cfd619
--- /dev/null
@@ -0,0 +1,84 @@
+package org.simantics.modeling.ui.function;\r
+\r
+import java.util.Collection;\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+import java.util.function.Consumer;\r
+\r
+import org.simantics.Simantics;\r
+import org.simantics.browsing.ui.StatePersistor;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.common.NamedResource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.db.procedure.Procedure;\r
+import org.simantics.modeling.typicals.TypicalUtil;\r
+import org.simantics.modeling.ui.typicals.NewTypicalDiagramInstance;\r
+import org.simantics.scenegraph.loader.ScenegraphLoaderUtils;\r
+import org.simantics.scl.reflection.annotations.SCLValue;\r
+import org.simantics.ui.workbench.action.DefaultActions;\r
+import org.simantics.utils.ui.dialogs.ShowMessage;\r
+\r
+public class All {\r
+\r
+    @SCLValue(type = "ReadGraph -> Resource -> Variable -> Variable")\r
+    public static Variable singleVariableSelection(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {\r
+       return ScenegraphLoaderUtils.getVariableSelection(graph, context);\r
+    }\r
+\r
+    @SCLValue(type = "ReadGraph -> Resource -> Variable -> Resource")\r
+    public static Resource projectSelection(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {\r
+       return Simantics.getProjectResource();\r
+    }\r
+    \r
+    @SCLValue(type = "ReadGraph -> Resource -> Variable -> StatePersistor")\r
+    public static StatePersistor standardPersistor(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {\r
+       String configurationId = context.getParent(graph).getPossiblePropertyValue(graph, "browseContext");\r
+       return new StandardPersistor(configurationId);\r
+    }\r
+\r
+    @SCLValue(type = "Resource -> Resource -> Resource")\r
+    public static Resource standardTypicalInstantiator(final Resource model, final Resource target) throws DatabaseException {\r
+        final Session session = Simantics.getSession();\r
+\r
+        Collection<Resource> typicals = TypicalUtil.findModelTypicals(session, model);\r
+        if (typicals.isEmpty()) {\r
+            ShowMessage.showInformation("No Typical Diagrams", "There are no typical diagrams in the selected model. Cannot instantiate.");\r
+            return null;\r
+        }\r
+        final Collection<NamedResource> namedTypicals = TypicalUtil.toNamedResources(session, typicals);\r
+\r
+        return TypicalUtil.syncExec(new Consumer<Procedure<Resource>>() {\r
+            @Override\r
+            public void accept(final Procedure<Resource> procedure) {\r
+                NewTypicalDiagramInstance.asyncQueryFromList(namedTypicals, selectedTypical -> {\r
+                    if (selectedTypical == null) {\r
+                        procedure.execute(null);\r
+                        return;\r
+                    }\r
+                    try {\r
+                        session.syncRequest(TypicalUtil.instantiateTemplate(target, selectedTypical, instance -> {\r
+                            try {\r
+                                Set<Resource> customlyNamed = new HashSet<Resource>();\r
+                                TypicalUtil.applyTypicalModuleNames(instance.first, instance.second, customlyNamed);\r
+                                //TypicalUtil.generateFreshModuleNames(instance.first, instance.second, customlyNamed);\r
+                                procedure.execute(instance.second);\r
+                                // Perform default action on the newly created diagram\r
+                                DefaultActions.asyncPerformDefaultAction(session, instance.second, false, false, true);\r
+                            } catch (DatabaseException e) {\r
+                                procedure.exception(e);\r
+                            }\r
+                        }));\r
+                    } catch (Throwable e) {\r
+                        procedure.exception(e);\r
+                    } finally {\r
+                        procedure.execute(null);\r
+                    }\r
+                });\r
+            }\r
+        });\r
+    }\r
+\r
+}
\ No newline at end of file