1 package org.simantics.modeling.adapters;
\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
13 public class SCLTest implements Test {
\r
15 private Resource rule;
\r
17 public SCLTest(ReadGraph graph, Resource rule) {
\r
22 public boolean isCompatible(Class<?> contentType) {
\r
23 return contentType.equals(Resource.class) || contentType.equals(Variable.class);
\r
27 public boolean test(ReadGraph graph, Object content) throws DatabaseException {
\r
29 ModelingResources MOD = ModelingResources.getInstance(graph);
\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
35 SCLContext sclContext = SCLContext.getCurrent();
\r
36 Object oldGraph = sclContext.get("graph");
\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
44 sclContext.put("graph", oldGraph);
\r