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