]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/adapters/SCLTest.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / adapters / SCLTest.java
1 package org.simantics.modeling.adapters;\r
2 \r
3 import org.simantics.browsing.ui.model.tests.Test;\r
4 import org.simantics.db.ReadGraph;\r
5 import org.simantics.db.Resource;\r
6 import org.simantics.db.exception.DatabaseException;\r
7 import org.simantics.db.layer0.variable.Variable;\r
8 import org.simantics.db.layer0.variable.Variables;\r
9 import org.simantics.modeling.ModelingResources;\r
10 import org.simantics.scl.runtime.SCLContext;\r
11 import org.simantics.scl.runtime.function.Function1;\r
12 \r
13 public class SCLTest implements Test {\r
14 \r
15     private Resource rule;\r
16     \r
17     public SCLTest(ReadGraph graph, Resource rule) {\r
18         this.rule = rule;\r
19     }\r
20     \r
21     @Override\r
22     public boolean isCompatible(Class<?> contentType) {\r
23         return contentType.equals(Resource.class) || contentType.equals(Variable.class);\r
24     }\r
25 \r
26     @Override\r
27     public boolean test(ReadGraph graph, Object content) throws DatabaseException {\r
28         \r
29         ModelingResources MOD = ModelingResources.getInstance(graph);\r
30         \r
31         Variable ruleVariable = Variables.getVariable(graph, rule);\r
32         Function1<Object,Boolean> test = ruleVariable.getPossiblePropertyValue(graph, MOD.SCLTest_test);\r
33         if(test == null) return false;\r
34 \r
35         SCLContext sclContext = SCLContext.getCurrent();\r
36         Object oldGraph = sclContext.get("graph");\r
37         try {\r
38             sclContext.put("graph", graph);\r
39             Object value = test.apply((Resource)content);\r
40             return (Boolean)value;\r
41         } catch (Throwable t) {\r
42                 throw new DatabaseException(t);\r
43         } finally {\r
44             sclContext.put("graph", oldGraph);\r
45         }\r
46         \r
47     }\r
48 \r
49 }\r