]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/function/StandardChildDomainChildren.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / function / StandardChildDomainChildren.java
1 package org.simantics.db.layer0.function;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Map;\r
5 import java.util.Set;\r
6 \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
13 \r
14 import gnu.trove.set.hash.THashSet;\r
15 \r
16 public class StandardChildDomainChildren extends VariableMapImpl {\r
17 \r
18         @Override\r
19         public Variable getVariable(ReadGraph graph, Variable context, String name) throws DatabaseException {\r
20                 return getStandardChildDomainChildVariable(graph, context, name);\r
21         }\r
22 \r
23         @Override\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
26         }\r
27 \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
31     }\r
32 \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
40         return null;\r
41     }\r
42     \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
46     }\r
47 \r
48     public static Map<String, Variable> getStandardChildDomainChildVariables(ReadGraph graph, Variable context, Map<String,Resource> graphChildren, Map<String, Variable> map) throws DatabaseException {\r
49             \r
50         AbstractVariable variable = (AbstractVariable)context;\r
51         \r
52         Collection<Object> nodeChildren = All.getPossibleNodeChildren(graph, variable);\r
53         \r
54         if(graphChildren.isEmpty() && nodeChildren.isEmpty()) return map;\r
55         \r
56         Set<String> used = new THashSet<String>(nodeChildren.size());\r
57 \r
58         map = All.ensureVariableMap(map, graphChildren.size());\r
59 \r
60         for(Object nodeChild : nodeChildren) {\r
61             String name = All.getNodeName(variable, nodeChild);\r
62             used.add(name);\r
63             Resource graphChild = graphChildren.get(name); \r
64             if(graphChild != null){\r
65                 Variable var = All.buildChildVariable(graph, context, graphChild, nodeChild);\r
66                 if(var != null) {\r
67                     map.put(name, var);\r
68                     continue;\r
69                 }\r
70             }\r
71             map.put(name, All.createStandardGraphChildVariable(variable, nodeChild));\r
72         }\r
73         \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
80         }\r
81         \r
82         return map;\r
83         \r
84     }\r
85     \r
86 }\r