--- /dev/null
+package org.simantics.document.linking.wizard;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.eclipse.jface.layout.GridDataFactory;\r
+import org.eclipse.jface.wizard.WizardPage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.CCombo;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\r
+import org.eclipse.swt.events.SelectionListener;\r
+import org.eclipse.swt.layout.FillLayout;\r
+import org.eclipse.swt.layout.GridLayout;\r
+import org.eclipse.swt.widgets.Button;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.FileDialog;\r
+import org.eclipse.swt.widgets.Group;\r
+import org.eclipse.swt.widgets.Label;\r
+import org.eclipse.swt.widgets.Text;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.document.linking.report.templates.CompleteStructureWriter;\r
+import org.simantics.document.linking.report.templates.DiagramStructureWithDependenciesWriter;\r
+import org.simantics.document.linking.report.templates.DiagramStructureWriter;\r
+import org.simantics.document.linking.report.templates.DocumentStructureWriter;\r
+import org.simantics.document.linking.report.templates.ModelDocumentWriter;\r
+import org.simantics.document.linking.report.templates.ReferredDocumentWriter;\r
+import org.simantics.document.linking.report.templates.ReportWriter;\r
+import org.simantics.document.linking.views.ModelRead;\r
+import org.simantics.document.linking.views.ModelToComboListener;\r
+import org.simantics.ui.SimanticsUI;\r
+\r
+\r
+/**\r
+ * Wizard page for selecting report type and file.\r
+ * \r
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
+ *\r
+ */\r
+public class ReportSelectionPage extends WizardPage{\r
+ \r
+ protected ReportSelectionPage(String pageName) {\r
+ super(pageName,pageName,null);\r
+ setPageComplete(false);\r
+ }\r
+\r
+ CCombo modelCombo;\r
+ Text filenameText;\r
+ Button browseButton;\r
+ \r
+ ModelToComboListener modelToComboListener;\r
+ \r
+ List<Button> reportSelectionButtons = new ArrayList<Button>();\r
+ List<ReportWriter<?>> reportWriters = new ArrayList<ReportWriter<?>>();\r
+ \r
+ ReportWriter<?> selectedWriter;\r
+ Resource selectedModel;\r
+ Resource input;\r
+ \r
+ @Override\r
+ public void createControl(Composite parent) {\r
+ \r
+ \r
+ Composite composite = new Composite(parent, SWT.NONE);\r
+ composite.setLayout(new GridLayout(3,false));\r
+ Label label = new Label(composite, SWT.NONE);\r
+ label.setText("Model:");\r
+ modelCombo = new CCombo(composite, SWT.BORDER|SWT.READ_ONLY);\r
+ \r
+ label = new Label(composite, SWT.NONE);\r
+ label.setText("File:");\r
+ filenameText = new Text(composite, SWT.BORDER|SWT.SINGLE);\r
+ browseButton = new Button(composite, SWT.PUSH);\r
+ browseButton.setText("Browse");\r
+ \r
+ reportWriters.add(new ModelDocumentWriter());\r
+ reportWriters.add(new ReferredDocumentWriter());\r
+ reportWriters.add(new DocumentStructureWriter());\r
+ reportWriters.add(new DiagramStructureWriter());\r
+ reportWriters.add(new DiagramStructureWithDependenciesWriter());\r
+ reportWriters.add(new CompleteStructureWriter());\r
+ \r
+ Group group = new Group(composite, SWT.NONE);\r
+ group.setText("Report templates");\r
+ group.setLayout(new FillLayout(SWT.VERTICAL));\r
+ \r
+ GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(filenameText);\r
+ GridDataFactory.fillDefaults().span(2, 1).applyTo(modelCombo);\r
+ GridDataFactory.fillDefaults().span(3, 1).applyTo(group);\r
+ \r
+ browseButton.addSelectionListener(new SelectionAdapter() {\r
+ \r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ FileDialog dialog = new FileDialog(Display.getCurrent().getActiveShell(),SWT.SAVE);\r
+ dialog.setFilterExtensions(new String[]{"*.pdf","*.html"});\r
+ dialog.setFilterNames(new String[]{"PDF Document","HTML Document"});\r
+ String filename = dialog.open();\r
+ if (filename == null)\r
+ filenameText.setText("");\r
+ else\r
+ filenameText.setText(filename);\r
+ validate();\r
+ }\r
+ });\r
+ \r
+ \r
+ SelectionListener listener = new SelectionAdapter() {\r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ Button selected = (Button)e.widget;\r
+ select(selected);\r
+ }\r
+ };\r
+ \r
+ for (ReportWriter<?> rw : reportWriters) {\r
+ Button b = new Button(group, SWT.RADIO);\r
+ b.setText(rw.getName());\r
+ b.setData(rw);\r
+ b.addSelectionListener(listener);\r
+ reportSelectionButtons.add(b);\r
+ }\r
+ \r
+ SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
+ \r
+ @Override\r
+ public void run(ReadGraph graph) throws DatabaseException {\r
+ Resource project = SimanticsUI.getProject().get();\r
+ modelToComboListener = new ModelToComboListener(modelCombo) {\r
+ @Override\r
+ public Resource getCurrentModel() {\r
+ return selectedModel;\r
+ } \r
+ \r
+ @Override\r
+ public void loaded() {\r
+ preselectModel();\r
+ }\r
+ };\r
+ graph.syncRequest(new ModelRead(project),modelToComboListener);\r
+ \r
+ }\r
+ });\r
+ \r
+ modelCombo.addSelectionListener(new SelectionAdapter() {\r
+ @Override\r
+ public void widgetSelected(SelectionEvent e) {\r
+ int index = modelCombo.getSelectionIndex();\r
+ if (index == -1)\r
+ return;\r
+ Resource model = (Resource)modelCombo.getData(Integer.toString(index));\r
+ if (model != null)\r
+ selectedModel = model;\r
+ validate();\r
+ }\r
+ });\r
+ \r
+ select(reportSelectionButtons.get(0));\r
+ setControl(composite);\r
+ }\r
+ \r
+ public List<Button> getReportSelectionButtons() {\r
+ return reportSelectionButtons;\r
+ }\r
+ \r
+ private void select(Button selected) {\r
+ selected.setSelection(true);\r
+ for (Button b : reportSelectionButtons) {\r
+ if (b != selected)\r
+ b.setSelection(false);\r
+ }\r
+ selectedWriter = (ReportWriter<?>)selected.getData();\r
+ validate();\r
+ }\r
+ \r
+ private void validate() {\r
+ setPageComplete(selectedWriter!= null && selectedModel != null && filenameText.getText().length() > 0);\r
+ }\r
+ \r
+ public ReportWriter<?> getSelectedWriter() {\r
+ return selectedWriter;\r
+ }\r
+ \r
+ public String getFilename() {\r
+ return filenameText.getText();\r
+ }\r
+ \r
+ public Resource getSelectedModel() {\r
+ return selectedModel;\r
+ }\r
+ \r
+ public void setInput(Resource input) {\r
+ this.input = input;\r
+ }\r
+ \r
+ private void preselectModel() {\r
+ if (input != null) {\r
+ for (int i = 0; i < modelCombo.getItemCount(); i++) {\r
+ if (input.equals(modelCombo.getData(Integer.toString(i)))) {\r
+ modelCombo.select(i);\r
+ selectedModel = input;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public void setVisible(boolean visible) {\r
+ if (visible) {\r
+ preselectModel();\r
+ }\r
+ super.setVisible(visible);\r
+ }\r
+\r
+}\r