]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.selectionview/src/org/simantics/selectionview/VariableTabContribution.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.selectionview / src / org / simantics / selectionview / VariableTabContribution.java
1 package org.simantics.selectionview;\r
2 \r
3 import java.util.Collection;\r
4 \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
23 \r
24 public class VariableTabContribution implements TabContribution<Variable> {\r
25 \r
26         final private Resource configuration;\r
27 \r
28         public VariableTabContribution(ReadGraph graph, Resource configuration) throws DatabaseException {\r
29                 this.configuration = configuration;\r
30         }\r
31 \r
32         @Override\r
33         public boolean accept(ReadGraph graph, Object input) {\r
34                 return (input instanceof Variable);\r
35         }\r
36 \r
37         @Override\r
38         public void contribute(ReadGraph graph, final Variable variable, Collection<ComparableTabContributor> result) throws DatabaseException {\r
39 \r
40                 Layer0 L0 = Layer0.getInstance(graph);\r
41                 SelectionViewResources SEL = SelectionViewResources.getInstance(graph);\r
42 \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
45 \r
46                 Integer priority = graph.getPossibleRelatedValue(configuration, SEL.VariableTabContribution_HasPriority, Bindings.INTEGER);\r
47                 String label = graph.getPossibleRelatedValue(configuration, L0.HasLabel);\r
48                 \r
49                 for(Resource r : graph.getObjects(configuration, SEL.VariableTabContribution_HasTest)) {\r
50                         Boolean pass = Functions.exec(graph, r, graph, variable);\r
51                         if(!pass) return;\r
52                 }\r
53                 \r
54                 Variable configurationVariable = Variables.getVariable(graph, configuration);\r
55                 Function f = configurationVariable.getPossiblePropertyValue(graph, SEL.AbstractVariableTabContribution_testFunction);\r
56                 if(f != null) {\r
57                         Boolean pass = Simantics.<Boolean>applySCLRead(graph, f, variable);\r
58                         if(!pass) return;\r
59                 }\r
60 \r
61                 final String viewURI = graph.getPossibleURI(view);\r
62                 \r
63                 result.add(new ComparableTabContributor(new ModelledTabContributor() {\r
64 \r
65                         @Override\r
66                         public void createControls(Composite body, IWorkbenchSite site) {\r
67 \r
68                                 try {\r
69 \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
74                                                 \r
75                                                 @Override\r
76                                                 public void handleEvent(Event event) {\r
77                                                         if(!loader.isDisposed())\r
78                                                                 loader.dispose();\r
79                                                 }\r
80                                                 \r
81                                         });\r
82 \r
83                                 } catch (DatabaseException e) {\r
84 \r
85                                         e.printStackTrace();\r
86                                         Logger.defaultLogError(e);\r
87 \r
88                                 }\r
89 \r
90                         }\r
91 \r
92                 }, priority, variable, label));\r
93 \r
94         }\r
95 \r
96 }\r