]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/viewpoint/ChildrenInActiveExperiment.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / viewpoint / ChildrenInActiveExperiment.java
1 package org.simantics.modeling.ui.viewpoint;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Collections;\r
5 \r
6 import org.simantics.browsing.ui.model.children.ChildRule;\r
7 import org.simantics.databoard.Bindings;\r
8 import org.simantics.db.ReadGraph;\r
9 import org.simantics.db.Resource;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.db.layer0.variable.Variable;\r
12 import org.simantics.layer0.Layer0;\r
13 import org.simantics.scl.runtime.function.Function;\r
14 import org.simantics.simulation.ontology.SimulationResource;\r
15 import org.simantics.structural.stubs.StructuralResource2;\r
16 \r
17 public class ChildrenInActiveExperiment implements ChildRule {\r
18 \r
19     Layer0 L0;\r
20     SimulationResource SIMU;\r
21     StructuralResource2 STR;\r
22     \r
23     public ChildrenInActiveExperiment(ReadGraph graph) {\r
24         this.L0 = Layer0.getInstance(graph);\r
25         this.SIMU = SimulationResource.getInstance(graph);\r
26         this.STR = StructuralResource2.getInstance(graph);\r
27     }\r
28 \r
29     private Variable getVariable(ReadGraph graph, Resource r) throws DatabaseException {\r
30         Resource model = graph.getPossibleObject(r, SIMU.IsConfigurationOf);\r
31         if(model != null) {\r
32             return (Variable)graph.adapt(SIMU.ActiveExperiment, Function.class)\r
33                 .apply(graph, model);\r
34         }\r
35         String name = graph.getPossibleRelatedValue(r, L0.HasName, Bindings.STRING);\r
36         Resource parent = graph.getPossibleObject(r, L0.PartOf);\r
37         if(name == null || parent == null)\r
38             return null;\r
39         Variable parentVariable = getVariable(graph, parent);\r
40         if(parentVariable == null)\r
41             return null;\r
42         return parentVariable.getPossibleChild(graph, name);\r
43     }\r
44 \r
45     @Override\r
46     public boolean isCompatible(Class<?> contentType) {\r
47         return contentType.equals(Resource.class);\r
48     }\r
49 \r
50     @Override\r
51     public Collection<?> getChildren(ReadGraph graph, Object parent_)\r
52             throws DatabaseException {\r
53         Resource parent = (Resource)parent_;\r
54         if(graph.isInstanceOf(parent, STR.Composite))\r
55             return Collections.emptyList();\r
56         Variable variable = getVariable(graph, parent);\r
57         if(variable == null)\r
58             return Collections.emptyList();\r
59         Collection<Variable> children = variable.getChildren(graph);\r
60         return VariableChildren.filterByClassification(graph, children, StructuralResource2.URIs.Component);\r
61     }\r
62 \r
63     @Override\r
64     public Collection<?> getParents(ReadGraph graph, Object child)\r
65             throws DatabaseException {\r
66         return Collections.emptyList();\r
67     }\r
68 \r
69 }\r