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