1 package org.simantics.selectionview;
3 import java.lang.reflect.Array;
4 import java.util.Collection;
5 import java.util.Objects;
7 import org.simantics.databoard.Bindings;
8 import org.simantics.db.ReadGraph;
9 import org.simantics.db.Resource;
10 import org.simantics.db.common.utils.Functions;
11 import org.simantics.db.exception.DatabaseException;
12 import org.simantics.layer0.Layer0;
14 public abstract class AbstractTabContribution<T> implements TabContribution<T> {
16 protected final Resource configuration;
17 protected final String uri;
19 public AbstractTabContribution(ReadGraph graph, Resource configuration) throws DatabaseException {
20 this.configuration = Objects.requireNonNull(configuration);
21 this.uri = graph.getURI(configuration);
25 public boolean accept(ReadGraph graph, Object input) throws DatabaseException {
26 SelectionViewResources SEL = SelectionViewResources.getInstance(graph);
27 // Lets see if multi or single support
28 Boolean multi = graph.getRelatedValue2(configuration, SEL.TabContribution_Multi, Bindings.BOOLEAN);
29 if (input instanceof Collection<?>) {
30 Collection<?> inputs = (Collection<?>) input;
33 if (inputs.size() > 1 && !multi)
35 } else if (input.getClass().isArray()) {
36 int arrayLength = Array.getLength(input);
39 if (arrayLength > 1 && !multi)
42 // HasTest seems to be deprecated but lets support it just for fun
43 for(Resource r : graph.getObjects(configuration, SEL.TabContribution_HasTest)) {
44 Boolean pass = Functions.exec(graph, r, graph, input);
51 public abstract void getContributors(ReadGraph graph, T input, Integer priority, String label, Collection<ComparableTabContributor> result) throws DatabaseException;
54 public final void contribute(ReadGraph graph, T input, Collection<ComparableTabContributor> result) throws DatabaseException {
55 Layer0 L0 = Layer0.getInstance(graph);
56 SelectionViewResources SEL = SelectionViewResources.getInstance(graph);
58 Integer priority = graph.getPossibleRelatedValue(configuration, SEL.TabContribution_HasPriority, Bindings.INTEGER);
59 String label = graph.getPossibleRelatedValue(configuration, L0.HasLabel);
61 getContributors(graph, input, priority, label, result);
65 public String toString() {
66 return getClass().getSimpleName() + "[" + uri + "]";