1 package org.simantics.modeling.ui.function;
\r
3 import java.util.Collection;
\r
4 import java.util.HashSet;
\r
5 import java.util.Set;
\r
6 import java.util.function.Consumer;
\r
8 import org.simantics.Simantics;
\r
9 import org.simantics.browsing.ui.StatePersistor;
\r
10 import org.simantics.db.ReadGraph;
\r
11 import org.simantics.db.Resource;
\r
12 import org.simantics.db.Session;
\r
13 import org.simantics.db.common.NamedResource;
\r
14 import org.simantics.db.exception.DatabaseException;
\r
15 import org.simantics.db.layer0.variable.Variable;
\r
16 import org.simantics.modeling.typicals.TypicalUtil;
\r
17 import org.simantics.modeling.ui.typicals.NewTypicalDiagramInstance;
\r
18 import org.simantics.scenegraph.loader.ScenegraphLoaderUtils;
\r
19 import org.simantics.scl.reflection.annotations.SCLValue;
\r
20 import org.simantics.ui.workbench.action.DefaultActions;
\r
21 import org.simantics.utils.ui.dialogs.ShowMessage;
\r
25 @SCLValue(type = "ReadGraph -> Resource -> Variable -> Variable")
\r
26 public static Variable singleVariableSelection(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {
\r
27 return ScenegraphLoaderUtils.getVariableSelection(graph, context);
\r
30 @SCLValue(type = "ReadGraph -> Resource -> Variable -> Resource")
\r
31 public static Resource projectSelection(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {
\r
32 return Simantics.getProjectResource();
\r
35 @SCLValue(type = "ReadGraph -> Resource -> Variable -> StatePersistor")
\r
36 public static StatePersistor standardPersistor(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {
\r
37 String configurationId = context.getParent(graph).getPossiblePropertyValue(graph, "browseContext");
\r
38 return new StandardPersistor(configurationId);
\r
41 @SCLValue(type = "Resource -> Resource -> Resource")
\r
42 public static Resource standardTypicalInstantiator(final Resource model, final Resource target) throws DatabaseException {
\r
43 final Session session = Simantics.getSession();
\r
45 Collection<Resource> typicals = TypicalUtil.findModelTypicals(session, model);
\r
46 if (typicals.isEmpty()) {
\r
47 ShowMessage.showInformation("No Typical Diagrams", "There are no typical diagrams in the selected model. Cannot instantiate.");
\r
50 final Collection<NamedResource> namedTypicals = TypicalUtil.toNamedResources(session, typicals);
\r
52 return TypicalUtil.syncExec(procedure -> {
\r
53 NewTypicalDiagramInstance.asyncQueryFromList(namedTypicals, selectedTypical -> {
\r
55 if (selectedTypical != null) {
\r
56 session.syncRequest(TypicalUtil.instantiateTemplate(target, selectedTypical, instance -> {
\r
58 Set<Resource> customlyNamed = new HashSet<Resource>();
\r
59 TypicalUtil.applyTypicalModuleNames(instance.first, instance.second, customlyNamed);
\r
60 //TypicalUtil.generateFreshModuleNames(instance.first, instance.second, customlyNamed);
\r
61 procedure.execute(instance.second);
\r
62 // Perform default action on the newly created diagram
\r
63 DefaultActions.asyncPerformDefaultAction(session, instance.second, false, false, true);
\r
64 } catch (DatabaseException e) {
\r
65 procedure.exception(e);
\r
69 } catch (Throwable e) {
\r
70 procedure.exception(e);
\r
72 procedure.execute(null);
\r