]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.selectionview/src/org/simantics/selectionview/SelectionViewUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.selectionview / src / org / simantics / selectionview / SelectionViewUtils.java
1 package org.simantics.selectionview;\r
2 \r
3 import java.util.List;\r
4 \r
5 import org.simantics.db.ReadGraph;\r
6 import org.simantics.db.Resource;\r
7 import org.simantics.db.exception.DatabaseException;\r
8 import org.simantics.db.layer0.variable.Variable;\r
9 import org.simantics.db.layer0.variable.Variables;\r
10 import org.simantics.db.layer0.variable.Variables.Role;\r
11 import org.simantics.scl.runtime.SCLContext;\r
12 import org.simantics.scl.runtime.function.Function1;\r
13 \r
14 public class SelectionViewUtils {\r
15 \r
16         public static Variable getSpecialCategory(ReadGraph graph, Resource rule, Variable info) throws DatabaseException {\r
17         \r
18                 SelectionViewResources SEL = SelectionViewResources.getInstance(graph);\r
19                 Resource categoryResource = info.getPossibleRepresents(graph);\r
20                 \r
21                 if(SEL.CategoryHidden.equals(categoryResource)) {\r
22                         \r
23                         Variable property = info.getParent(graph);\r
24                         Variable parent = property.getParent(graph);\r
25                         if(Role.PROPERTY.equals(parent.getPossibleRole(graph))) return null;\r
26                         \r
27                         Resource predicate = property.getPossiblePredicateResource(graph);\r
28                         Variable ruleVariable = Variables.getVariable(graph, rule);\r
29 \r
30                         Function1<Object,List<?>> getSpecialCategory = ruleVariable.getPossiblePropertyValue(graph, SEL.getSpecialCategory);\r
31                         if(getSpecialCategory == null) return null;\r
32 \r
33                         SCLContext sclContext = SCLContext.getCurrent();\r
34                 Object oldGraph = sclContext.get("graph");\r
35                         try {\r
36                                 sclContext.put("graph", graph);\r
37                                 Resource cat = (Resource)getSpecialCategory.apply(predicate);\r
38                                 if(cat != null) return Variables.getVariable(graph, cat);\r
39                         } catch (Throwable t) {\r
40                                 throw new DatabaseException(t);\r
41                         } finally {\r
42                     sclContext.put("graph", oldGraph);\r
43                         }\r
44                 }\r
45                 \r
46                 return null;\r
47 \r
48         }\r
49 \r
50 }\r