]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/adapters/SCLLabelRule.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / adapters / SCLLabelRule.java
1 package org.simantics.modeling.adapters;\r
2 \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
7 \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
17 \r
18 public class SCLLabelRule implements LabelRule {\r
19 \r
20     private Resource rule;\r
21     \r
22     public SCLLabelRule(ReadGraph graph, Resource rule) {\r
23         this.rule = rule;\r
24     }\r
25     \r
26     @Override\r
27     public boolean isCompatible(Class<?> contentType) {\r
28         return contentType.equals(Resource.class) || contentType.equals(Variable.class);\r
29     }\r
30 \r
31     @Override\r
32     public Map<String, String> getLabel(ReadGraph graph, Object content) throws DatabaseException {\r
33         ModelingResources MOD = ModelingResources.getInstance(graph);\r
34         \r
35         Variable ruleVariable = Variables.getVariable(graph, rule);\r
36 \r
37         Function1<Object,List<String>> getLabels = ruleVariable.getPossiblePropertyValue(graph, MOD.SCLLabelRule_getLabels);\r
38         if(getLabels == null) return Collections.emptyMap();\r
39 \r
40         SCLContext sclContext = SCLContext.getCurrent();\r
41         Object oldGraph = sclContext.get("graph");\r
42         try {\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
48             }\r
49             return result;\r
50         } catch (Throwable t) {\r
51                 throw new DatabaseException(t);\r
52         } finally {\r
53             sclContext.put("graph", oldGraph);\r
54         }\r
55     }\r
56 \r
57 }\r