]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.selectionview/src/org/simantics/selectionview/VariablePropertyCategoryRule.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.selectionview / src / org / simantics / selectionview / VariablePropertyCategoryRule.java
1 package org.simantics.selectionview;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.HashSet;\r
6 \r
7 import org.simantics.browsing.ui.model.children.ChildRule;\r
8 import org.simantics.databoard.Bindings;\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.modeling.ModelingResources;\r
14 \r
15 public class VariablePropertyCategoryRule implements ChildRule {\r
16 \r
17         final private ArrayList<String> requiredProperties = new ArrayList<String>();\r
18         final Resource rule;\r
19         \r
20         public VariablePropertyCategoryRule(ReadGraph graph, Resource rule) throws DatabaseException {\r
21 \r
22                 ModelingResources MOD = ModelingResources.getInstance(graph);\r
23                 for(Resource r : graph.getObjects(rule, MOD.ModelingBrowseContext_VariablePropertyRule_RequireProperty)) {\r
24                         String name = graph.getValue(r, Bindings.STRING);\r
25                         requiredProperties.add(name);\r
26                 }\r
27                 \r
28                 this.rule = rule;\r
29                 \r
30         }\r
31         \r
32     @Override\r
33     public boolean isCompatible(Class<?> contentType) {\r
34         return contentType.equals(Variable.class);\r
35     }\r
36 \r
37     @Override\r
38     public Collection<?> getChildren(ReadGraph graph, Object parent) throws DatabaseException {\r
39         \r
40         HashSet<CategoryNode> result = new HashSet<CategoryNode>();\r
41 \r
42         props: for(Variable property : ((Variable)parent).getProperties(graph)) {\r
43 \r
44                 for(String req : requiredProperties) {\r
45                         if(property.getPossibleProperty(graph, req) == null) continue props;\r
46                 }\r
47                 \r
48                 Variable info = property.getPossibleProperty(graph, SelectionVariables.PROPERTY_INFO);\r
49                 if(info != null) {\r
50                         \r
51                         Variable special = SelectionViewUtils.getSpecialCategory(graph, rule, info);\r
52                         if(special != null) info = special;\r
53                         \r
54                         Boolean hidden = info.getPossiblePropertyValue(graph, SelectionVariables.CATEGORY_HIDDEN, Bindings.BOOLEAN);\r
55                         if(hidden != null && hidden) continue;\r
56                         String name = info.getPossiblePropertyValue(graph, SelectionVariables.CATEGORY_NAME, Bindings.STRING);\r
57                         if(name == null) continue;\r
58                         String sortName = info.getPossiblePropertyValue(graph, SelectionVariables.CATEGORY_SORTING_NAME, Bindings.STRING);\r
59                         result.add(new CategoryNodeImpl(name, sortName));\r
60                         \r
61                 }\r
62                                 \r
63         }\r
64         \r
65         return result;\r
66         \r
67     }\r
68 \r
69     @Override\r
70     public Collection<?> getParents(ReadGraph graph, Object child)\r
71             throws DatabaseException {\r
72         return null;\r
73     }\r
74 \r
75 }\r