]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/adapters/SCLChildRule.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / adapters / SCLChildRule.java
1 package org.simantics.modeling.adapters;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 \r
7 import org.simantics.browsing.ui.model.children.ChildRule;\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.db.layer0.variable.Variables;\r
13 import org.simantics.modeling.ModelingResources;\r
14 import org.simantics.scl.runtime.SCLContext;\r
15 import org.simantics.scl.runtime.function.Function1;\r
16 \r
17 public class SCLChildRule implements ChildRule {\r
18 \r
19     private Resource rule;\r
20     \r
21     public SCLChildRule(ReadGraph graph, Resource rule) {\r
22         this.rule = rule;\r
23     }\r
24     \r
25     @Override\r
26     public boolean isCompatible(Class<?> contentType) {\r
27         return contentType.equals(Resource.class) || contentType.equals(Variable.class);\r
28     }\r
29 \r
30     @Override\r
31     public Collection<?> getChildren(ReadGraph graph, Object parent) throws DatabaseException {\r
32         \r
33         ModelingResources MOD = ModelingResources.getInstance(graph);\r
34         \r
35         Variable ruleVariable = Variables.getVariable(graph, rule);\r
36 \r
37         Function1<Object,List<?>> getChildren = ruleVariable.getPossiblePropertyValue(graph, MOD.SCLChildRule_getChildren);\r
38         if(getChildren == null) return Collections.emptyList();\r
39 \r
40         SCLContext sclContext = SCLContext.getCurrent();\r
41         Object oldGraph = sclContext.get("graph");\r
42         try {\r
43             sclContext.put("graph", graph);\r
44             Object value = getChildren.apply(parent);\r
45             return (Collection<?>)value;\r
46         } catch (Throwable t) {\r
47                 throw new DatabaseException(t);\r
48         } finally {\r
49             sclContext.put("graph", oldGraph);\r
50         }\r
51 \r
52     }\r
53 \r
54     @Override\r
55     public Collection<?> getParents(ReadGraph graph, Object child) throws DatabaseException {\r
56         return null;\r
57     }\r
58 \r
59 }\r