1 package org.simantics.selectionview;
\r
3 import java.util.Collection;
\r
5 import org.eclipse.swt.SWT;
\r
6 import org.eclipse.swt.widgets.Composite;
\r
7 import org.eclipse.swt.widgets.Event;
\r
8 import org.eclipse.swt.widgets.Listener;
\r
9 import org.eclipse.ui.IWorkbenchSite;
\r
10 import org.simantics.Simantics;
\r
11 import org.simantics.databoard.Bindings;
\r
12 import org.simantics.db.ReadGraph;
\r
13 import org.simantics.db.Resource;
\r
14 import org.simantics.db.common.utils.Functions;
\r
15 import org.simantics.db.common.utils.Logger;
\r
16 import org.simantics.db.exception.DatabaseException;
\r
17 import org.simantics.db.layer0.variable.Variable;
\r
18 import org.simantics.db.layer0.variable.Variables;
\r
19 import org.simantics.layer0.Layer0;
\r
20 import org.simantics.scl.runtime.function.Function;
\r
21 import org.simantics.views.swt.SWTViewLoaderProcess;
\r
22 import org.simantics.views.swt.client.base.SWTRoot;
\r
24 public class VariableTabContribution implements TabContribution<Variable> {
\r
26 final private Resource configuration;
\r
28 public VariableTabContribution(ReadGraph graph, Resource configuration) throws DatabaseException {
\r
29 this.configuration = configuration;
\r
33 public boolean accept(ReadGraph graph, Object input) {
\r
34 return (input instanceof Variable);
\r
38 public void contribute(ReadGraph graph, final Variable variable, Collection<ComparableTabContributor> result) throws DatabaseException {
\r
40 Layer0 L0 = Layer0.getInstance(graph);
\r
41 SelectionViewResources SEL = SelectionViewResources.getInstance(graph);
\r
43 Resource view = graph.getPossibleObject(configuration, SEL.VariableTabContribution_HasView);
\r
44 if(view == null) throw new DatabaseException("No view for " + graph.getPossibleURI(configuration));
\r
46 Integer priority = graph.getPossibleRelatedValue(configuration, SEL.VariableTabContribution_HasPriority, Bindings.INTEGER);
\r
47 String label = graph.getPossibleRelatedValue(configuration, L0.HasLabel);
\r
49 for(Resource r : graph.getObjects(configuration, SEL.VariableTabContribution_HasTest)) {
\r
50 Boolean pass = Functions.exec(graph, r, graph, variable);
\r
54 Variable configurationVariable = Variables.getVariable(graph, configuration);
\r
55 Function f = configurationVariable.getPossiblePropertyValue(graph, SEL.AbstractVariableTabContribution_testFunction);
\r
57 Boolean pass = Simantics.<Boolean>applySCLRead(graph, f, variable);
\r
61 final String viewURI = graph.getPossibleURI(view);
\r
63 result.add(new ComparableTabContributor(new ModelledTabContributor() {
\r
66 public void createControls(Composite body, IWorkbenchSite site) {
\r
70 final SWTViewLoaderProcess loader = new SWTViewLoaderProcess(null, site);
\r
71 SWTRoot root = loader.load(viewURI, runtime);
\r
72 root.createControls(body);
\r
73 body.addListener(SWT.Dispose, new Listener() {
\r
76 public void handleEvent(Event event) {
\r
77 if(!loader.isDisposed())
\r
83 } catch (DatabaseException e) {
\r
85 e.printStackTrace();
\r
86 Logger.defaultLogError(e);
\r
92 }, priority, variable, label));
\r