1 package org.simantics.modeling.adapters;
\r
3 import java.util.Collection;
\r
4 import java.util.Collections;
\r
5 import java.util.List;
\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
17 public class SCLChildRule implements ChildRule {
\r
19 private Resource rule;
\r
21 public SCLChildRule(ReadGraph graph, Resource rule) {
\r
26 public boolean isCompatible(Class<?> contentType) {
\r
27 return contentType.equals(Resource.class) || contentType.equals(Variable.class);
\r
31 public Collection<?> getChildren(ReadGraph graph, Object parent) throws DatabaseException {
\r
33 ModelingResources MOD = ModelingResources.getInstance(graph);
\r
35 Variable ruleVariable = Variables.getVariable(graph, rule);
\r
37 Function1<Object,List<?>> getChildren = ruleVariable.getPossiblePropertyValue(graph, MOD.SCLChildRule_getChildren);
\r
38 if(getChildren == null) return Collections.emptyList();
\r
40 SCLContext sclContext = SCLContext.getCurrent();
\r
41 Object oldGraph = sclContext.get("graph");
\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
49 sclContext.put("graph", oldGraph);
\r
55 public Collection<?> getParents(ReadGraph graph, Object child) throws DatabaseException {
\r