]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.selectionview/src/org/simantics/selectionview/AbstractTabContribution.java
Add createSVGElementR which returns the created resource
[simantics/platform.git] / bundles / org.simantics.selectionview / src / org / simantics / selectionview / AbstractTabContribution.java
1 package org.simantics.selectionview;
2
3 import java.lang.reflect.Array;
4 import java.util.Collection;
5 import java.util.Objects;
6
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;
13
14 public abstract class AbstractTabContribution<T> implements TabContribution<T> {
15
16     protected final Resource configuration;
17     protected final String uri;
18
19     public AbstractTabContribution(ReadGraph graph, Resource configuration) throws DatabaseException {
20         this.configuration = Objects.requireNonNull(configuration);
21         this.uri = graph.getURI(configuration);
22     }
23
24     @Override
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;
31             if (inputs.isEmpty())
32                 return false;
33             if (inputs.size() > 1 && !multi)
34                 return false;
35         } else if (input.getClass().isArray()) {
36             int arrayLength = Array.getLength(input);
37             if (arrayLength == 0)
38                 return false;
39             if (arrayLength > 1 && !multi)
40                 return false;
41         }
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);
45             if(!pass)
46                 return false;
47         }
48         return true;
49     }
50     
51     public abstract void getContributors(ReadGraph graph, T input, Integer priority, String label, Collection<ComparableTabContributor> result) throws DatabaseException;
52
53     @Override
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);
57
58         Integer priority = graph.getPossibleRelatedValue(configuration, SEL.TabContribution_HasPriority, Bindings.INTEGER);
59         String label = graph.getPossibleRelatedValue(configuration, L0.HasLabel);
60         
61         getContributors(graph, input, priority, label, result);
62     }
63     
64     @Override
65     public String toString() {
66         return getClass().getSimpleName() + "[" + uri + "]";
67     }
68 }