]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.views.swt/src/org/simantics/views/swt/ModelledWizard.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.views.swt / src / org / simantics / views / swt / ModelledWizard.java
1 package org.simantics.views.swt;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 \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
32 \r
33 /**\r
34  * @author Tuukka Lehtonen\r
35  */\r
36 public class ModelledWizard extends Wizard implements IWorkbenchWizard, ModelledAction {\r
37 \r
38         final String configurationURI;\r
39         \r
40         final private ArrayList<IWizardPage> pages = new ArrayList<IWizardPage>();\r
41         final private ArrayList<ModelledWizardPage> modelledPages = new ArrayList<ModelledWizardPage>();\r
42         \r
43         \r
44         private Function1<Object, Object> finishAction;\r
45         private Resource runtime;\r
46         \r
47     public ModelledWizard(String configurationURI) {\r
48         setNeedsProgressMonitor(true);\r
49         this.configurationURI = configurationURI;\r
50     }\r
51     \r
52     public List<ModelledWizardPage> getModelledPages() {\r
53         return modelledPages;\r
54     }\r
55 \r
56     @Override\r
57     public void addPages() {\r
58         super.addPages();\r
59         for(IWizardPage page : pages) addPage(page);\r
60     }\r
61 \r
62     @Override\r
63     public boolean performFinish() {\r
64         \r
65         finishAction.apply(this);\r
66         return true;\r
67         \r
68     }\r
69 \r
70     public void loadPages(IWorkbenchSite site, ISessionContext context, final WidgetSupport support) throws DatabaseException {\r
71 \r
72                 runtime = Simantics.getSession().sync(new WriteResultRequest<Resource>(Simantics.getSession().getService(VirtualGraph.class)) {\r
73             @Override\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
79                                 return runtime;\r
80             }\r
81         });\r
82                 \r
83                 finishAction = Simantics.getSession().syncRequest(new Read<Function1<Object, Object>>() {\r
84                         @Override\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
89                         }\r
90                 });\r
91         \r
92                 List<Resource> pageResources = Simantics.getSession().syncRequest(new Read<List<Resource>>() {\r
93 \r
94                         @Override\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
101                         }\r
102                         \r
103                 });\r
104 \r
105                 for(final Resource page : pageResources) {\r
106 \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
110                         \r
111                 }\r
112         \r
113     }\r
114     \r
115         @Override\r
116         public Runnable create(IWorkbenchSite site, ISessionContext context, final WidgetSupport support) throws DatabaseException {\r
117 \r
118                 List<Resource> pageResources = Simantics.getSession().syncRequest(new Read<List<Resource>>() {\r
119 \r
120                         @Override\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
127                         }\r
128                         \r
129                 });\r
130 \r
131                 runtime = Simantics.getSession().sync(new WriteResultRequest<Resource>(Simantics.getSession().getService(VirtualGraph.class)) {\r
132             @Override\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
138                                 return runtime;\r
139             }\r
140         });\r
141                 \r
142                 for(final Resource page : pageResources) {\r
143 \r
144                         ModelledWizardPage p = Simantics.getSession().syncRequest(new PossibleAdapter<ModelledWizardPage>(page, ModelledWizardPage.class));                     \r
145                         pages.add(p.create(context, support, runtime));\r
146                         \r
147                 }\r
148                 \r
149                 finishAction = Simantics.getSession().syncRequest(new Read<Function1<Object, Object>>() {\r
150                         @Override\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
155                         }\r
156                 });\r
157                 \r
158                 return null;\r
159                 \r
160         }\r
161 \r
162         @Override\r
163         public void init(IWorkbench workbench, IStructuredSelection selection) {\r
164                 \r
165                 WidgetSupportImpl support = new WidgetSupportImpl();\r
166                 try {\r
167                         loadPages(null, Simantics.getSessionContext(), support);\r
168                         support.finish();\r
169                         support.fireInput(Simantics.getSessionContext(), selection);\r
170                 } catch (DatabaseException e) {\r
171                         Logger.defaultLogError(e);\r
172                 }\r
173                 \r
174         }\r
175 \r
176 }\r