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.db.procedure.Procedure;
\r
17 import org.simantics.modeling.typicals.TypicalUtil;
\r
18 import org.simantics.modeling.ui.typicals.NewTypicalDiagramInstance;
\r
19 import org.simantics.scenegraph.loader.ScenegraphLoaderUtils;
\r
20 import org.simantics.scl.reflection.annotations.SCLValue;
\r
21 import org.simantics.ui.workbench.action.DefaultActions;
\r
22 import org.simantics.utils.ui.dialogs.ShowMessage;
\r
26 @SCLValue(type = "ReadGraph -> Resource -> Variable -> Variable")
\r
27 public static Variable singleVariableSelection(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {
\r
28 return ScenegraphLoaderUtils.getVariableSelection(graph, context);
\r
31 @SCLValue(type = "ReadGraph -> Resource -> Variable -> Resource")
\r
32 public static Resource projectSelection(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {
\r
33 return Simantics.getProjectResource();
\r
36 @SCLValue(type = "ReadGraph -> Resource -> Variable -> StatePersistor")
\r
37 public static StatePersistor standardPersistor(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {
\r
38 String configurationId = context.getParent(graph).getPossiblePropertyValue(graph, "browseContext");
\r
39 return new StandardPersistor(configurationId);
\r
42 @SCLValue(type = "Resource -> Resource -> Resource")
\r
43 public static Resource standardTypicalInstantiator(final Resource model, final Resource target) throws DatabaseException {
\r
44 final Session session = Simantics.getSession();
\r
46 Collection<Resource> typicals = TypicalUtil.findModelTypicals(session, model);
\r
47 if (typicals.isEmpty()) {
\r
48 ShowMessage.showInformation("No Typical Diagrams", "There are no typical diagrams in the selected model. Cannot instantiate.");
\r
51 final Collection<NamedResource> namedTypicals = TypicalUtil.toNamedResources(session, typicals);
\r
53 return TypicalUtil.syncExec(new Consumer<Procedure<Resource>>() {
\r
55 public void accept(final Procedure<Resource> procedure) {
\r
56 NewTypicalDiagramInstance.asyncQueryFromList(namedTypicals, selectedTypical -> {
\r
57 if (selectedTypical == null) {
\r
58 procedure.execute(null);
\r
62 session.syncRequest(TypicalUtil.instantiateTemplate(target, selectedTypical, instance -> {
\r
64 Set<Resource> customlyNamed = new HashSet<Resource>();
\r
65 TypicalUtil.applyTypicalModuleNames(instance.first, instance.second, customlyNamed);
\r
66 //TypicalUtil.generateFreshModuleNames(instance.first, instance.second, customlyNamed);
\r
67 procedure.execute(instance.second);
\r
68 // Perform default action on the newly created diagram
\r
69 DefaultActions.asyncPerformDefaultAction(session, instance.second, false, false, true);
\r
70 } catch (DatabaseException e) {
\r
71 procedure.exception(e);
\r
74 } catch (Throwable e) {
\r
75 procedure.exception(e);
\r
77 procedure.execute(null);
\r