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