1 package org.simantics.views.swt;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\r
5 import java.util.List;
\r
7 import org.eclipse.jface.viewers.IStructuredSelection;
\r
8 import org.eclipse.jface.wizard.IWizardPage;
\r
9 import org.eclipse.jface.wizard.Wizard;
\r
10 import org.eclipse.ui.IWorkbench;
\r
11 import org.eclipse.ui.IWorkbenchSite;
\r
12 import org.eclipse.ui.IWorkbenchWizard;
\r
13 import org.simantics.Simantics;
\r
14 import org.simantics.browsing.ui.swt.ModelledAction;
\r
15 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;
\r
16 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl;
\r
17 import org.simantics.db.ReadGraph;
\r
18 import org.simantics.db.Resource;
\r
19 import org.simantics.db.VirtualGraph;
\r
20 import org.simantics.db.WriteGraph;
\r
21 import org.simantics.db.common.primitiverequest.PossibleAdapter;
\r
22 import org.simantics.db.common.request.WriteResultRequest;
\r
23 import org.simantics.db.common.utils.ListUtils;
\r
24 import org.simantics.db.common.utils.Logger;
\r
25 import org.simantics.db.exception.DatabaseException;
\r
26 import org.simantics.db.management.ISessionContext;
\r
27 import org.simantics.db.request.Read;
\r
28 import org.simantics.layer0.Layer0;
\r
29 import org.simantics.scenegraph.ontology.ScenegraphResources;
\r
30 import org.simantics.scl.runtime.function.Function1;
\r
31 import org.simantics.views.ontology.ViewsResources;
\r
34 * @author Tuukka Lehtonen
\r
36 public class ModelledWizard extends Wizard implements IWorkbenchWizard, ModelledAction {
\r
38 final String configurationURI;
\r
40 final private ArrayList<IWizardPage> pages = new ArrayList<IWizardPage>();
\r
41 final private ArrayList<ModelledWizardPage> modelledPages = new ArrayList<ModelledWizardPage>();
\r
44 private Function1<Object, Object> finishAction;
\r
45 private Resource runtime;
\r
47 public ModelledWizard(String configurationURI) {
\r
48 setNeedsProgressMonitor(true);
\r
49 this.configurationURI = configurationURI;
\r
52 public List<ModelledWizardPage> getModelledPages() {
\r
53 return modelledPages;
\r
57 public void addPages() {
\r
59 for(IWizardPage page : pages) addPage(page);
\r
63 public boolean performFinish() {
\r
65 finishAction.apply(this);
\r
70 public void loadPages(IWorkbenchSite site, ISessionContext context, final WidgetSupport support) throws DatabaseException {
\r
72 runtime = Simantics.getSession().sync(new WriteResultRequest<Resource>(Simantics.getSession().getService(VirtualGraph.class)) {
\r
74 public Resource perform(WriteGraph graph) throws DatabaseException {
\r
75 Layer0 L0 = Layer0.getInstance(graph);
\r
76 ScenegraphResources SG = ScenegraphResources.getInstance(graph);
\r
77 Resource runtime = graph.newResource();
\r
78 graph.claim(runtime, L0.InstanceOf, null, SG.Runtime);
\r
83 finishAction = Simantics.getSession().syncRequest(new Read<Function1<Object, Object>>() {
\r
85 public Function1<Object, Object> perform(ReadGraph graph) throws DatabaseException {
\r
86 ViewsResources VIEW = ViewsResources.getInstance(graph);
\r
87 Resource configuration = graph.getResource(configurationURI);
\r
88 return graph.getPossibleRelatedValue2(configuration, VIEW.Wizard_FinishAction);
\r
92 List<Resource> pageResources = Simantics.getSession().syncRequest(new Read<List<Resource>>() {
\r
95 public List<Resource> perform(ReadGraph graph) throws DatabaseException {
\r
96 ViewsResources VIEW = ViewsResources.getInstance(graph);
\r
97 Resource configuration = graph.getResource(configurationURI);
\r
98 Resource pageList = graph.getPossibleObject(configuration, VIEW.Wizard_Pages);
\r
99 if(pageList == null) return Collections.emptyList();
\r
100 return ListUtils.toList(graph, pageList);
\r
105 for(final Resource page : pageResources) {
\r
107 ModelledWizardPage p = Simantics.getSession().syncRequest(new PossibleAdapter<ModelledWizardPage>(page, ModelledWizardPage.class));
\r
108 pages.add(p.create(context, support, runtime));
\r
109 modelledPages.add(p);
\r
116 public Runnable create(IWorkbenchSite site, ISessionContext context, final WidgetSupport support) throws DatabaseException {
\r
118 List<Resource> pageResources = Simantics.getSession().syncRequest(new Read<List<Resource>>() {
\r
121 public List<Resource> perform(ReadGraph graph) throws DatabaseException {
\r
122 ViewsResources VIEW = ViewsResources.getInstance(graph);
\r
123 Resource configuration = graph.getResource(configurationURI);
\r
124 Resource pageList = graph.getPossibleObject(configuration, VIEW.Wizard_Pages);
\r
125 if(pageList == null) return Collections.emptyList();
\r
126 return ListUtils.toList(graph, pageList);
\r
131 runtime = Simantics.getSession().sync(new WriteResultRequest<Resource>(Simantics.getSession().getService(VirtualGraph.class)) {
\r
133 public Resource perform(WriteGraph graph) throws DatabaseException {
\r
134 Layer0 L0 = Layer0.getInstance(graph);
\r
135 ScenegraphResources SG = ScenegraphResources.getInstance(graph);
\r
136 Resource runtime = graph.newResource();
\r
137 graph.claim(runtime, L0.InstanceOf, null, SG.Runtime);
\r
142 for(final Resource page : pageResources) {
\r
144 ModelledWizardPage p = Simantics.getSession().syncRequest(new PossibleAdapter<ModelledWizardPage>(page, ModelledWizardPage.class));
\r
145 pages.add(p.create(context, support, runtime));
\r
149 finishAction = Simantics.getSession().syncRequest(new Read<Function1<Object, Object>>() {
\r
151 public Function1<Object, Object> perform(ReadGraph graph) throws DatabaseException {
\r
152 ViewsResources VIEW = ViewsResources.getInstance(graph);
\r
153 Resource configuration = graph.getResource(configurationURI);
\r
154 return graph.getPossibleRelatedValue2(configuration, VIEW.Wizard_FinishAction);
\r
163 public void init(IWorkbench workbench, IStructuredSelection selection) {
\r
165 WidgetSupportImpl support = new WidgetSupportImpl();
\r
167 loadPages(null, Simantics.getSessionContext(), support);
\r
169 support.fireInput(Simantics.getSessionContext(), selection);
\r
170 } catch (DatabaseException e) {
\r
171 Logger.defaultLogError(e);
\r