]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.selectionview/src/org/simantics/selectionview/AbstractVariableTabContribution.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.selectionview / src / org / simantics / selectionview / AbstractVariableTabContribution.java
1 package org.simantics.selectionview;\r
2 \r
3 import java.util.Collection;\r
4 \r
5 import org.simantics.Simantics;\r
6 import org.simantics.databoard.Bindings;\r
7 import org.simantics.db.ReadGraph;\r
8 import org.simantics.db.Resource;\r
9 import org.simantics.db.common.utils.Functions;\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.layer0.Layer0;\r
14 import org.simantics.scl.runtime.function.Function;\r
15 import org.simantics.ui.selection.WorkbenchSelectionUtils;\r
16 \r
17 abstract public class AbstractVariableTabContribution implements TabContribution<Object> {\r
18 \r
19         final private String uri;\r
20         final protected Resource configuration;\r
21 \r
22         public AbstractVariableTabContribution(ReadGraph graph, Resource configuration) throws DatabaseException {\r
23                 this.configuration = configuration;\r
24                 this.uri = graph.getURI(configuration);\r
25         }\r
26 \r
27         public abstract void getContributors(ReadGraph graph, Variable variable, Integer priority, String label, Collection<ComparableTabContributor> result) throws DatabaseException;\r
28 \r
29         @Override\r
30         public boolean accept(ReadGraph graph, Object input) throws DatabaseException {\r
31                 return true;\r
32         }\r
33 \r
34         public boolean accept(ReadGraph graph, Variable variable, Object selection) throws DatabaseException {\r
35 \r
36                 if(selection instanceof SelectionInput) {\r
37                 \r
38                         SelectionViewResources SEL = SelectionViewResources.getInstance(graph);\r
39                         for(Resource r : graph.getObjects(configuration, SEL.AbstractVariableTabContribution_HasTest)) {\r
40                                 Boolean pass = Functions.exec(graph, r, graph, (SelectionInput)selection);\r
41                                 if(!pass) return false;\r
42                         }\r
43                 \r
44                         Variable configurationVariable = Variables.getVariable(graph, configuration);\r
45                         Function f = configurationVariable.getPossiblePropertyValue(graph, SEL.AbstractVariableTabContribution_testFunction);\r
46                         if(f != null) {\r
47                                 Boolean pass = Simantics.<Boolean>applySCLRead(graph, f, variable);\r
48                                 if(!pass) return false;\r
49                         }\r
50                         \r
51                 } else {\r
52                         \r
53                         return false;\r
54                         \r
55                 }\r
56                 \r
57                 return true;\r
58                 \r
59         }\r
60         \r
61         final private Variable getPossibleVariable(ReadGraph graph, Object selection) throws DatabaseException {\r
62                 if(selection instanceof SelectionInput) {\r
63                         SelectionInput si = (SelectionInput)selection;\r
64                         if(si.getElements().size() == 1) {\r
65                                 return WorkbenchSelectionUtils.getPossibleVariable(graph, si.getElements().iterator().next());\r
66                         }\r
67                 }\r
68                 return null;\r
69         } \r
70         \r
71         @Override\r
72         final public void contribute(ReadGraph graph, final Object selection, Collection<ComparableTabContributor> result) throws DatabaseException {\r
73                 \r
74                 Variable variable = getPossibleVariable(graph, selection);\r
75                 if(variable == null) return;\r
76 \r
77                 Layer0 L0 = Layer0.getInstance(graph);\r
78                 SelectionViewResources SEL = SelectionViewResources.getInstance(graph);\r
79 \r
80                 Integer priority = graph.getPossibleRelatedValue(configuration, SEL.AbstractVariableTabContribution_HasPriority, Bindings.INTEGER);\r
81                 String label = graph.getPossibleRelatedValue(configuration, L0.HasLabel);\r
82                 \r
83                 if(!accept(graph, variable, selection)) return;\r
84 \r
85                 getContributors(graph, variable, priority, label, result);              \r
86 \r
87         }\r
88         \r
89         @Override\r
90         public String toString() {\r
91                 return "AbstractVariableTabContribution[" + uri + "]";\r
92         }\r
93 \r
94 }\r