1 package org.simantics.scenegraph.loader.function;
\r
3 import org.simantics.databoard.Bindings;
\r
4 import org.simantics.db.ReadGraph;
\r
5 import org.simantics.db.Resource;
\r
6 import org.simantics.db.exception.DatabaseException;
\r
7 import org.simantics.db.layer0.variable.Variable;
\r
8 import org.simantics.db.layer0.variable.Variables;
\r
9 import org.simantics.layer0.Layer0;
\r
10 import org.simantics.scenegraph.loader.SceneGraphContext;
\r
11 import org.simantics.scenegraph.loader.ScenegraphLoaderUtils;
\r
12 import org.simantics.scenegraph.ontology.ScenegraphResources;
\r
13 import org.simantics.scl.reflection.annotations.SCLValue;
\r
17 @SCLValue(type = "ReadGraph -> Resource -> Variable -> Variable")
\r
18 public static Variable defaultRuntimeVariable(ReadGraph graph, Resource converter, Variable context) throws DatabaseException {
\r
20 SceneGraphContext vc = ScenegraphLoaderUtils.getContext(graph, context);
\r
21 if(vc == null) return null;
\r
23 ScenegraphResources SG = ScenegraphResources.getInstance(graph);
\r
24 String uri = graph.getRelatedValue(vc.getRuntime(), SG.Runtime_HasVariable, Bindings.STRING);
\r
25 return Variables.getVariable(graph, uri);
\r
29 @SCLValue(type = "ReadGraph -> Resource -> Variable -> Resource")
\r
30 public static Resource defaultRuntimeResource(ReadGraph graph, Resource converter, Variable context) throws DatabaseException {
\r
32 SceneGraphContext vc = ScenegraphLoaderUtils.getContext(graph, context);
\r
33 if(vc == null) return null;
\r
35 ScenegraphResources SG = ScenegraphResources.getInstance(graph);
\r
36 return graph.getSingleObject(vc.getRuntime(), SG.Runtime_HasResource);
\r
41 private static Object walk(ReadGraph graph, Variable context, String name) throws DatabaseException {
\r
43 Variable var = context.getPossibleProperty(graph, name);
\r
44 if(var != null) return var.getValue(graph);
\r
46 Variable parent = context.getParent(graph);
\r
47 if(parent == null) return null;
\r
49 return walk(graph, parent, name);
\r
53 @SCLValue(type = "ReadGraph -> Resource -> Variable -> a")
\r
54 public static Object liftedProperty(ReadGraph graph, Resource converter, Variable context) throws DatabaseException {
\r
56 ScenegraphResources SG = ScenegraphResources.getInstance(graph);
\r
57 final Resource predicate = graph.getSingleObject(converter, SG.LiftedProperty_HasPredicate);
\r
60 Layer0 L0 = Layer0.getInstance(graph);
\r
61 Variable parent = context.getParent(graph);
\r
62 String name = graph.getRelatedValue(predicate, L0.HasName, Bindings.STRING);
\r
63 return walk(graph, parent, name);
\r
64 } catch (DatabaseException e) {
\r
65 e.printStackTrace();
\r
71 @SCLValue(type = "ReadGraph -> Resource -> Variable -> Variable")
\r
72 public static Variable singleVariableSelection(ReadGraph graph, Resource resource, Variable context) throws DatabaseException {
\r
73 return ScenegraphLoaderUtils.getVariableSelection(graph, context);
\r