]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/wizard/ReportSelectionPage.java
Sync git svn branch with SVN repository r33144.
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / wizard / ReportSelectionPage.java
1 package org.simantics.document.linking.wizard;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.List;\r
5 \r
6 import org.eclipse.jface.layout.GridDataFactory;\r
7 import org.eclipse.jface.wizard.WizardPage;\r
8 import org.eclipse.swt.SWT;\r
9 import org.eclipse.swt.custom.CCombo;\r
10 import org.eclipse.swt.events.SelectionAdapter;\r
11 import org.eclipse.swt.events.SelectionEvent;\r
12 import org.eclipse.swt.events.SelectionListener;\r
13 import org.eclipse.swt.layout.FillLayout;\r
14 import org.eclipse.swt.layout.GridLayout;\r
15 import org.eclipse.swt.widgets.Button;\r
16 import org.eclipse.swt.widgets.Composite;\r
17 import org.eclipse.swt.widgets.Display;\r
18 import org.eclipse.swt.widgets.FileDialog;\r
19 import org.eclipse.swt.widgets.Group;\r
20 import org.eclipse.swt.widgets.Label;\r
21 import org.eclipse.swt.widgets.Text;\r
22 import org.simantics.db.ReadGraph;\r
23 import org.simantics.db.Resource;\r
24 import org.simantics.db.common.request.ReadRequest;\r
25 import org.simantics.db.exception.DatabaseException;\r
26 import org.simantics.document.linking.report.templates.CompleteStructureWriter;\r
27 import org.simantics.document.linking.report.templates.DiagramStructureWithDependenciesWriter;\r
28 import org.simantics.document.linking.report.templates.DiagramStructureWriter;\r
29 import org.simantics.document.linking.report.templates.DocumentStructureWriter;\r
30 import org.simantics.document.linking.report.templates.ModelDocumentWriter;\r
31 import org.simantics.document.linking.report.templates.ReferredDocumentWriter;\r
32 import org.simantics.document.linking.report.templates.ReportWriter;\r
33 import org.simantics.document.linking.views.ModelRead;\r
34 import org.simantics.document.linking.views.ModelToComboListener;\r
35 import org.simantics.ui.SimanticsUI;\r
36 \r
37 \r
38 /**\r
39  * Wizard page for selecting report type and file.\r
40  * \r
41  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
42  *\r
43  */\r
44 public class ReportSelectionPage extends WizardPage{\r
45         \r
46         protected ReportSelectionPage(String pageName) {\r
47                 super(pageName,pageName,null);\r
48                 setPageComplete(false);\r
49         }\r
50 \r
51         CCombo modelCombo;\r
52         Text filenameText;\r
53         Button browseButton;\r
54         \r
55         ModelToComboListener modelToComboListener;\r
56         \r
57         List<Button> reportSelectionButtons = new ArrayList<Button>();\r
58         List<ReportWriter<?>> reportWriters = new ArrayList<ReportWriter<?>>();\r
59         \r
60         ReportWriter<?> selectedWriter;\r
61         Resource selectedModel;\r
62         Resource input;\r
63         \r
64         @Override\r
65         public void createControl(Composite parent) {\r
66                 \r
67                 \r
68                 Composite composite = new Composite(parent, SWT.NONE);\r
69                 composite.setLayout(new GridLayout(3,false));\r
70                 Label label = new Label(composite, SWT.NONE);\r
71                 label.setText("Model:");\r
72                 modelCombo = new CCombo(composite, SWT.BORDER|SWT.READ_ONLY);\r
73                 \r
74                 label = new Label(composite, SWT.NONE);\r
75                 label.setText("File:");\r
76                 filenameText = new Text(composite, SWT.BORDER|SWT.SINGLE);\r
77                 browseButton = new Button(composite, SWT.PUSH);\r
78                 browseButton.setText("Browse");\r
79                 \r
80                 reportWriters.add(new ModelDocumentWriter());\r
81                 reportWriters.add(new ReferredDocumentWriter());\r
82                 reportWriters.add(new DocumentStructureWriter());\r
83                 reportWriters.add(new DiagramStructureWriter());\r
84                 reportWriters.add(new DiagramStructureWithDependenciesWriter());\r
85                 reportWriters.add(new CompleteStructureWriter());\r
86                 \r
87                 Group group = new Group(composite, SWT.NONE);\r
88                 group.setText("Report templates");\r
89                 group.setLayout(new FillLayout(SWT.VERTICAL));\r
90                 \r
91                 GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(filenameText);\r
92                 GridDataFactory.fillDefaults().span(2, 1).applyTo(modelCombo);\r
93                 GridDataFactory.fillDefaults().span(3, 1).applyTo(group);\r
94                 \r
95                 browseButton.addSelectionListener(new SelectionAdapter() {\r
96                         \r
97                         @Override\r
98                         public void widgetSelected(SelectionEvent e) {\r
99                                 FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(),SWT.SAVE);\r
100                                 dialog.setFilterExtensions(new String[]{"*.pdf","*.html"});\r
101                                 dialog.setFilterNames(new String[]{"PDF Document","HTML Document"});\r
102                                 String filename = dialog.open();\r
103                                 if (filename == null)\r
104                                         filenameText.setText("");\r
105                                 else\r
106                                         filenameText.setText(filename);\r
107                                 validate();\r
108                         }\r
109                 });\r
110                 \r
111                 \r
112                 SelectionListener listener = new SelectionAdapter() {\r
113                         @Override\r
114                         public void widgetSelected(SelectionEvent e) {\r
115                                 Button selected = (Button)e.widget;\r
116                                 select(selected);\r
117                         }\r
118                 };\r
119                 \r
120                 for (ReportWriter<?> rw : reportWriters) {\r
121                         Button b = new Button(group, SWT.RADIO);\r
122                         b.setText(rw.getName());\r
123                         b.setData(rw);\r
124                         b.addSelectionListener(listener);\r
125                         reportSelectionButtons.add(b);\r
126                 }\r
127                 \r
128                 SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
129                         \r
130                         @Override\r
131                         public void run(ReadGraph graph) throws DatabaseException {\r
132                                 Resource project = SimanticsUI.getProject().get();\r
133                                 modelToComboListener = new ModelToComboListener(modelCombo) {\r
134                                         @Override\r
135                                         public Resource getCurrentModel() {\r
136                                                 return selectedModel;\r
137                                         } \r
138                                         \r
139                                         @Override\r
140                                         public void loaded() {\r
141                                                 preselectModel();\r
142                                         }\r
143                                 };\r
144                                 graph.syncRequest(new ModelRead(project),modelToComboListener);\r
145                                 \r
146                         }\r
147                 });\r
148                 \r
149                 modelCombo.addSelectionListener(new SelectionAdapter() {\r
150                         @Override\r
151                         public void widgetSelected(SelectionEvent e) {\r
152                                 int index = modelCombo.getSelectionIndex();\r
153                                 if (index == -1)\r
154                                         return;\r
155                                 Resource model = (Resource)modelCombo.getData(Integer.toString(index));\r
156                                 if (model != null)\r
157                                         selectedModel = model;\r
158                                 validate();\r
159                         }\r
160                 });\r
161                 \r
162                 select(reportSelectionButtons.get(0));\r
163                 setControl(composite);\r
164         }\r
165         \r
166         public List<Button> getReportSelectionButtons() {\r
167                 return reportSelectionButtons;\r
168         }\r
169         \r
170         private void select(Button selected) {\r
171                 selected.setSelection(true);\r
172                 for (Button b : reportSelectionButtons) {\r
173                         if (b != selected)\r
174                                 b.setSelection(false);\r
175                 }\r
176                 selectedWriter = (ReportWriter<?>)selected.getData();\r
177                 validate();\r
178         }\r
179         \r
180         private void validate() {\r
181                 setPageComplete(selectedWriter!= null && selectedModel != null && filenameText.getText().length() > 0);\r
182         }\r
183         \r
184         public ReportWriter<?> getSelectedWriter() {\r
185                 return selectedWriter;\r
186         }\r
187         \r
188         public String getFilename() {\r
189                 return filenameText.getText();\r
190         }\r
191         \r
192         public Resource getSelectedModel() {\r
193                 return selectedModel;\r
194         }\r
195         \r
196         public void setInput(Resource input) {\r
197                 this.input = input;\r
198         }\r
199         \r
200         private void preselectModel() {\r
201                 if (input != null) {\r
202                         for (int i = 0; i < modelCombo.getItemCount(); i++) {\r
203                                 if (input.equals(modelCombo.getData(Integer.toString(i)))) {\r
204                                         modelCombo.select(i);\r
205                                         selectedModel = input;\r
206                                 }\r
207                         }\r
208                 }\r
209         }\r
210         \r
211         @Override\r
212         public void setVisible(boolean visible) {\r
213                 if (visible) {\r
214                         preselectModel();\r
215                 }\r
216                 super.setVisible(visible);\r
217         }\r
218 \r
219 }\r