1 package org.simantics.modeling.adapters;
\r
3 import java.util.Collections;
\r
4 import java.util.HashMap;
\r
5 import java.util.List;
\r
6 import java.util.Map;
\r
8 import org.simantics.browsing.ui.model.labels.LabelRule;
\r
9 import org.simantics.db.ReadGraph;
\r
10 import org.simantics.db.Resource;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.db.layer0.variable.Variable;
\r
13 import org.simantics.db.layer0.variable.Variables;
\r
14 import org.simantics.modeling.ModelingResources;
\r
15 import org.simantics.scl.runtime.SCLContext;
\r
16 import org.simantics.scl.runtime.function.Function1;
\r
18 public class SCLLabelRule implements LabelRule {
\r
20 private Resource rule;
\r
22 public SCLLabelRule(ReadGraph graph, Resource rule) {
\r
27 public boolean isCompatible(Class<?> contentType) {
\r
28 return contentType.equals(Resource.class) || contentType.equals(Variable.class);
\r
32 public Map<String, String> getLabel(ReadGraph graph, Object content) throws DatabaseException {
\r
33 ModelingResources MOD = ModelingResources.getInstance(graph);
\r
35 Variable ruleVariable = Variables.getVariable(graph, rule);
\r
37 Function1<Object,List<String>> getLabels = ruleVariable.getPossiblePropertyValue(graph, MOD.SCLLabelRule_getLabels);
\r
38 if(getLabels == null) return Collections.emptyMap();
\r
40 SCLContext sclContext = SCLContext.getCurrent();
\r
41 Object oldGraph = sclContext.get("graph");
\r
43 sclContext.put("graph", graph);
\r
44 List<String> value = getLabels.apply(content);
\r
45 Map<String,String> result = new HashMap<>();
\r
46 for(int i=0;i<value.size();i+=2) {
\r
47 result.put(value.get(i), value.get(i+1));
\r
50 } catch (Throwable t) {
\r
51 throw new DatabaseException(t);
\r
53 sclContext.put("graph", oldGraph);
\r