]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/ModelledWizard.java
Merge remote-tracking branch 'origin/svn' commit 'ccc1271c9d6657fb9dcf4cf3cb115fa0c8c...
[simantics/platform.git] / bundles / org.simantics.browsing.ui.swt / src / org / simantics / browsing / ui / swt / ModelledWizard.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.browsing.ui.swt;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.Collections;\r
16 import java.util.List;\r
17 \r
18 import org.eclipse.jface.wizard.IWizardPage;\r
19 import org.eclipse.jface.wizard.Wizard;\r
20 import org.eclipse.jface.wizard.WizardDialog;\r
21 import org.eclipse.swt.widgets.Display;\r
22 import org.eclipse.ui.IWorkbenchSite;\r
23 import org.simantics.Simantics;\r
24 import org.simantics.browsing.ui.swt.stubs.BrowsingResource;\r
25 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
26 import org.simantics.databoard.Bindings;\r
27 import org.simantics.db.ReadGraph;\r
28 import org.simantics.db.Resource;\r
29 import org.simantics.db.common.primitiverequest.PossibleAdapter;\r
30 import org.simantics.db.common.utils.OrderedSetUtils;\r
31 import org.simantics.db.exception.DatabaseException;\r
32 import org.simantics.db.management.ISessionContext;\r
33 import org.simantics.db.request.Read;\r
34 \r
35 /**\r
36  * @author Tuukka Lehtonen\r
37  */\r
38 public class ModelledWizard extends Wizard implements ModelledAction {\r
39 \r
40         final Resource configuration;\r
41         \r
42         final private ArrayList<IWizardPage> pages = new ArrayList<IWizardPage>();\r
43         \r
44         private Runnable finishAction;\r
45         \r
46     public ModelledWizard(Resource configuration) {\r
47         setNeedsProgressMonitor(true);\r
48         this.configuration = configuration;\r
49     }\r
50 \r
51     @Override\r
52     public void addPages() {\r
53         super.addPages();\r
54         for(IWizardPage page : pages) addPage(page);\r
55     }\r
56 \r
57     @Override\r
58     public boolean performFinish() {\r
59         return true;\r
60     }\r
61 \r
62         @Override\r
63         public Runnable create(IWorkbenchSite site, ISessionContext context, final WidgetSupport support) throws DatabaseException {\r
64 \r
65                 String title = Simantics.getSession().syncRequest(new Read<String>() {\r
66 \r
67                         @Override\r
68                         public String perform(ReadGraph graph) throws DatabaseException {\r
69                                 BrowsingResource br = BrowsingResource.getInstance(graph);\r
70                                 return graph.getPossibleRelatedValue(configuration, br.Wizard_Title, Bindings.STRING);\r
71                         }\r
72                         \r
73                 });\r
74                 \r
75                 setWindowTitle(title);\r
76                 \r
77                 List<Resource> pageResources = Simantics.getSession().syncRequest(new Read<List<Resource>>() {\r
78 \r
79                         @Override\r
80                         public List<Resource> perform(ReadGraph graph) throws DatabaseException {\r
81                                 BrowsingResource br = BrowsingResource.getInstance(graph);\r
82                                 Resource pageList = graph.getPossibleObject(configuration, br.Wizard_Pages);\r
83                                 if(pageList == null) return Collections.emptyList();\r
84                                 return OrderedSetUtils.toList(graph, pageList);\r
85                         }\r
86                         \r
87                 });\r
88 \r
89                 for(final Resource page : pageResources) {\r
90 \r
91                         ModelledWizardPage p = Simantics.getSession().syncRequest(new PossibleAdapter<ModelledWizardPage>(page, ModelledWizardPage.class));                     \r
92                         pages.add(p.create(context, support));\r
93                         \r
94                 }\r
95                 \r
96                 ModelledAction finishAction = Simantics.getSession().syncRequest(new Read<ModelledAction>() {\r
97                         @Override\r
98                         public ModelledAction perform(ReadGraph graph) throws DatabaseException {\r
99                                 BrowsingResource BRO = BrowsingResource.getInstance(graph);\r
100                                 Resource actionResource = graph.getPossibleObject(configuration, BRO.Wizard_FinishAction);\r
101                                 return graph.adapt(actionResource, ModelledAction.class);\r
102                         }\r
103                 }); \r
104                 \r
105                 this.finishAction = finishAction.create(null, null, support);\r
106                 \r
107                 return new Runnable() {\r
108 \r
109                         @Override\r
110                         public void run() {\r
111                                 \r
112                                 WizardDialog dialog = new WizardDialog(Display.getCurrent().getActiveShell(), ModelledWizard.this);\r
113                             dialog.create();\r
114                             support.update();\r
115                             dialog.open();      \r
116                             \r
117                             if(ModelledWizard.this.finishAction != null) ModelledWizard.this.finishAction.run();\r
118                             \r
119                         }\r
120                         \r
121                 };\r
122                 \r
123         }\r
124 \r
125 }\r