1 package org.simantics.views.swt;
\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
24 public class SWTViewLoaderProcess extends ScenegraphLoaderProcess {
\r
26 final private ModelledView view;
\r
27 final private IWorkbenchSite site;
\r
29 public static class ISL implements InputSourceListener {
\r
31 private SWTViewLoaderProcess process;
\r
33 ISL(SWTViewLoaderProcess process) {
\r
34 this.process = process;
\r
42 public void inputChanged(SessionContextInputSource source) {
\r
43 if(process == null) return;
\r
44 Object input = source.get( Simantics.getSessionContext() );
\r
46 process.view.inputChanged(source.getProvider(), input);
\r
48 ErrorLogger.defaultLogWarning("input source " + source + " invalidly returned null", new Exception("for stack trace only"));
\r
52 ISL inputSourceListener = new ISL(this);
\r
54 public SWTViewLoaderProcess(ModelledView view, IWorkbenchSite site, String name) {
\r
58 this.root = new SWTRoot(site);
\r
61 public SWTViewLoaderProcess(ModelledView view, IWorkbenchSite site) {
\r
62 this(view, site, "<unnamed SWTViewLoaderProcess>");
\r
66 public INode getRoot() {
\r
71 protected void initialize(RequestProcessor processor, final Variable configuration) throws DatabaseException {
\r
73 SessionContextInputSource inputSource = processor.sync(new UniqueRead<SessionContextInputSource>() {
\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
86 view.setInputSource(inputSource);
\r
88 if (inputSource instanceof ObservableInputSource)
\r
89 ((ObservableInputSource) inputSource).setListener(inputSourceListener);
\r
91 if (inputSource instanceof WorkbenchSessionContextInputSource)
\r
92 ((WorkbenchSessionContextInputSource) inputSource).init(site, view);
\r
97 public void dispose() {
\r
102 inputSourceListener.dispose();
\r
103 for(String uri : registeredURIs) VariableRepository.unregister(uri);
\r
104 SWTRoot r = (SWTRoot)root;
\r