]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.views.swt/src/org/simantics/views/swt/SWTViewLoaderProcess.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.views.swt / src / org / simantics / views / swt / SWTViewLoaderProcess.java
1 package org.simantics.views.swt;\r
2 \r
3 import org.eclipse.ui.IWorkbenchSite;\r
4 import org.simantics.Simantics;\r
5 import org.simantics.browsing.ui.common.ErrorLogger;\r
6 import org.simantics.browsing.ui.graph.impl.GraphInputSources;\r
7 import org.simantics.browsing.ui.graph.impl.InputSourceListener;\r
8 import org.simantics.browsing.ui.graph.impl.ObservableInputSource;\r
9 import org.simantics.browsing.ui.graph.impl.SessionContextInputSource;\r
10 import org.simantics.browsing.ui.graph.impl.WorkbenchSessionContextInputSource;\r
11 import org.simantics.db.ReadGraph;\r
12 import org.simantics.db.RequestProcessor;\r
13 import org.simantics.db.Resource;\r
14 import org.simantics.db.common.request.UniqueRead;\r
15 import org.simantics.db.exception.DatabaseException;\r
16 import org.simantics.db.layer0.variable.Variable;\r
17 import org.simantics.db.layer0.variable.VariableRepository;\r
18 import org.simantics.db.layer0.variable.Variables;\r
19 import org.simantics.scenegraph.INode;\r
20 import org.simantics.scenegraph.loader.ScenegraphLoaderProcess;\r
21 import org.simantics.views.ontology.ViewsResources;\r
22 import org.simantics.views.swt.client.base.SWTRoot;\r
23 \r
24 public class SWTViewLoaderProcess extends ScenegraphLoaderProcess {\r
25 \r
26         final private ModelledView view;\r
27         final private IWorkbenchSite site;\r
28         \r
29         public static class ISL implements InputSourceListener {\r
30                 \r
31                 private SWTViewLoaderProcess process;\r
32                 \r
33                 ISL(SWTViewLoaderProcess process) {\r
34                         this.process = process;\r
35                 }\r
36                 \r
37                 void dispose() {\r
38                         process = null;\r
39                 }\r
40                 \r
41         @Override\r
42         public void inputChanged(SessionContextInputSource source) {\r
43                 if(process == null) return;\r
44             Object input = source.get( Simantics.getSessionContext() );\r
45             if (input != null)\r
46                 process.view.inputChanged(source.getProvider(), input);\r
47             else\r
48                 ErrorLogger.defaultLogWarning("input source " + source + " invalidly returned null", new Exception("for stack trace only"));\r
49         }\r
50         };\r
51         \r
52     ISL inputSourceListener = new ISL(this);\r
53         \r
54         public SWTViewLoaderProcess(ModelledView view, IWorkbenchSite site, String name) {\r
55                 super(name);\r
56                 this.view = view;\r
57                 this.site = site;\r
58                 this.root = new SWTRoot(site);\r
59         }\r
60 \r
61         public SWTViewLoaderProcess(ModelledView view, IWorkbenchSite site) {\r
62                 this(view, site, "<unnamed SWTViewLoaderProcess>");\r
63         }\r
64 \r
65         @Override\r
66         public INode getRoot() {\r
67                 return root;\r
68         }\r
69         \r
70         @Override\r
71         protected void initialize(RequestProcessor processor, final Variable configuration) throws DatabaseException {\r
72                 \r
73                 SessionContextInputSource inputSource = processor.sync(new UniqueRead<SessionContextInputSource>() {\r
74                         @Override\r
75                         public SessionContextInputSource perform(ReadGraph graph) throws DatabaseException {\r
76                                 ViewsResources VIEW = ViewsResources.getInstance(graph);\r
77                                 Resource represents = configuration.getRepresents(graph);\r
78                                 Resource inputSource = graph.getPossibleObject(represents, VIEW.HasInputSource);\r
79                                 if (inputSource == null)\r
80                                         return GraphInputSources.projectSource();\r
81                                 return graph.adapt(inputSource, SessionContextInputSource.class);\r
82                         }\r
83                 });\r
84 \r
85         if(view != null)\r
86             view.setInputSource(inputSource);\r
87 \r
88         if (inputSource instanceof ObservableInputSource)\r
89             ((ObservableInputSource) inputSource).setListener(inputSourceListener);\r
90 \r
91         if (inputSource instanceof WorkbenchSessionContextInputSource)\r
92                         ((WorkbenchSessionContextInputSource) inputSource).init(site, view);\r
93 \r
94         }\r
95         \r
96         @Override\r
97         public void dispose() {\r
98                 \r
99                 if (isDisposed())\r
100                         return;\r
101                 \r
102                 inputSourceListener.dispose();\r
103                 for(String uri : registeredURIs) VariableRepository.unregister(uri);\r
104                 SWTRoot r = (SWTRoot)root;\r
105                 r.dispose();\r
106                 \r
107                 super.dispose();\r
108                 \r
109         }\r
110 \r
111 }\r