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