1 package org.simantics.db.layer0.function;
\r
3 import java.util.Collection;
\r
4 import java.util.Map;
\r
5 import java.util.Set;
\r
7 import org.simantics.db.ReadGraph;
\r
8 import org.simantics.db.Resource;
\r
9 import org.simantics.db.exception.DatabaseException;
\r
10 import org.simantics.db.layer0.variable.AbstractVariable;
\r
11 import org.simantics.db.layer0.variable.Variable;
\r
12 import org.simantics.db.layer0.variable.VariableMapImpl;
\r
14 import gnu.trove.set.hash.THashSet;
\r
16 public class StandardChildDomainChildren extends VariableMapImpl {
\r
19 public Variable getVariable(ReadGraph graph, Variable context, String name) throws DatabaseException {
\r
20 return getStandardChildDomainChildVariable(graph, context, name);
\r
24 public Map<String, Variable> getVariables(ReadGraph graph, Variable context, Map<String, Variable> map) throws DatabaseException {
\r
25 return getStandardChildDomainChildVariables(graph, context, map);
\r
28 public static Variable getStandardChildDomainChildVariable(ReadGraph graph, Variable context, String name) throws DatabaseException {
\r
29 Resource graphChild = All.getPossibleGraphChild(graph, context, name);
\r
30 return getStandardChildDomainChildVariable(graph, context, graphChild, name);
\r
33 public static Variable getStandardChildDomainChildVariable(ReadGraph graph, Variable context, Resource graphChild, String name) throws DatabaseException {
\r
34 AbstractVariable variable = (AbstractVariable)context;
\r
35 Object childNode = All.getPossibleNodeChild(graph, variable, name);
\r
36 if(graphChild != null)
\r
37 return All.buildChildVariable(graph, context, graphChild, childNode);
\r
38 if(childNode != null)
\r
39 return All.createStandardGraphChildVariable(variable, childNode);
\r
43 public static Map<String, Variable> getStandardChildDomainChildVariables(ReadGraph graph, Variable context, Map<String, Variable> map) throws DatabaseException {
\r
44 Map<String,Resource> graphChildren = All.getPossibleGraphChildren(graph, context);
\r
45 return StandardChildDomainChildren.getStandardChildDomainChildVariables(graph, context, graphChildren, map);
\r
48 public static Map<String, Variable> getStandardChildDomainChildVariables(ReadGraph graph, Variable context, Map<String,Resource> graphChildren, Map<String, Variable> map) throws DatabaseException {
\r
50 AbstractVariable variable = (AbstractVariable)context;
\r
52 Collection<Object> nodeChildren = All.getPossibleNodeChildren(graph, variable);
\r
54 if(graphChildren.isEmpty() && nodeChildren.isEmpty()) return map;
\r
56 Set<String> used = new THashSet<String>(nodeChildren.size());
\r
58 map = All.ensureVariableMap(map, graphChildren.size());
\r
60 for(Object nodeChild : nodeChildren) {
\r
61 String name = All.getNodeName(variable, nodeChild);
\r
63 Resource graphChild = graphChildren.get(name);
\r
64 if(graphChild != null){
\r
65 Variable var = All.buildChildVariable(graph, context, graphChild, nodeChild);
\r
71 map.put(name, All.createStandardGraphChildVariable(variable, nodeChild));
\r
74 for(Map.Entry<String, Resource> entry : graphChildren.entrySet()) {
\r
75 String name = entry.getKey();
\r
76 if(used.contains(name)) continue;
\r
77 Resource child = entry.getValue();
\r
78 Variable var = All.buildChildVariable(graph, context, child, null);
\r
79 if(var != null) map.put(name, var);
\r