1 package org.simantics.selectionview;
\r
3 import java.util.Collection;
\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
17 abstract public class AbstractVariableTabContribution implements TabContribution<Object> {
\r
19 final private String uri;
\r
20 final protected Resource configuration;
\r
22 public AbstractVariableTabContribution(ReadGraph graph, Resource configuration) throws DatabaseException {
\r
23 this.configuration = configuration;
\r
24 this.uri = graph.getURI(configuration);
\r
27 public abstract void getContributors(ReadGraph graph, Variable variable, Integer priority, String label, Collection<ComparableTabContributor> result) throws DatabaseException;
\r
30 public boolean accept(ReadGraph graph, Object input) throws DatabaseException {
\r
34 public boolean accept(ReadGraph graph, Variable variable, Object selection) throws DatabaseException {
\r
36 if(selection instanceof SelectionInput) {
\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
44 Variable configurationVariable = Variables.getVariable(graph, configuration);
\r
45 Function f = configurationVariable.getPossiblePropertyValue(graph, SEL.AbstractVariableTabContribution_testFunction);
\r
47 Boolean pass = Simantics.<Boolean>applySCLRead(graph, f, variable);
\r
48 if(!pass) return false;
\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
72 final public void contribute(ReadGraph graph, final Object selection, Collection<ComparableTabContributor> result) throws DatabaseException {
\r
74 Variable variable = getPossibleVariable(graph, selection);
\r
75 if(variable == null) return;
\r
77 Layer0 L0 = Layer0.getInstance(graph);
\r
78 SelectionViewResources SEL = SelectionViewResources.getInstance(graph);
\r
80 Integer priority = graph.getPossibleRelatedValue(configuration, SEL.AbstractVariableTabContribution_HasPriority, Bindings.INTEGER);
\r
81 String label = graph.getPossibleRelatedValue(configuration, L0.HasLabel);
\r
83 if(!accept(graph, variable, selection)) return;
\r
85 getContributors(graph, variable, priority, label, result);
\r
90 public String toString() {
\r
91 return "AbstractVariableTabContribution[" + uri + "]";
\r