]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/wizard/ReportGeneratePage.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / wizard / ReportGeneratePage.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/wizard/ReportGeneratePage.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/wizard/ReportGeneratePage.java
new file mode 100644 (file)
index 0000000..12fe523
--- /dev/null
@@ -0,0 +1,186 @@
+package org.simantics.document.linking.wizard;\r
+\r
+import java.io.File;\r
+import java.lang.reflect.InvocationTargetException;\r
+\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.jface.operation.IRunnableWithProgress;\r
+import org.eclipse.jface.wizard.WizardPage;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.SelectionAdapter;\r
+import org.eclipse.swt.events.SelectionEvent;\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.Label;\r
+import org.eclipse.ui.PartInitException;\r
+import org.simantics.Simantics;\r
+import org.simantics.db.Resource;\r
+import org.simantics.document.linking.report.ExportToPDF;\r
+import org.simantics.document.linking.report.templates.ReportWriter;\r
+import org.simantics.editors.Editors;\r
+import org.simantics.utils.ui.ErrorLogger;\r
+import org.simantics.utils.ui.ExceptionUtils;\r
+\r
+\r
+/**\r
+ * Wizard page for generating a report.\r
+ * \r
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
+ *\r
+ */\r
+public class ReportGeneratePage extends WizardPage {\r
+       \r
+       private Resource model;\r
+       private String filename;\r
+       private ReportWriter<?> reportWriter;\r
+       \r
+       \r
+       private Label fileLabel;\r
+       private Label reportLabel;\r
+       private Label statusLabel;\r
+       private Button generateButton;\r
+       private Button showButton;\r
+       private boolean generated = false;\r
+       \r
+       protected ReportGeneratePage(String pageName) {\r
+               super(pageName,pageName,null);\r
+               setGenerated(false);\r
+       }\r
+       \r
+       public void setFilename(String filename) {\r
+               this.filename = filename;\r
+               setGenerated(false);\r
+       }\r
+       \r
+       public void setReportWriter(ReportWriter<?> reportWriter) {\r
+               this.reportWriter = reportWriter;\r
+               setGenerated(false);\r
+       }\r
+       \r
+       public void setModel(Resource model) {\r
+               this.model = model;\r
+               setGenerated(false);\r
+       }\r
+\r
+       @Override\r
+       public void createControl(Composite parent) {\r
+               Composite composite = new Composite(parent, SWT.NONE);\r
+               composite.setLayout(new GridLayout(2,false));\r
+               Label label = new Label(composite, SWT.NONE);\r
+               label.setText("File:");\r
+               fileLabel = new Label(composite, SWT.NONE);\r
+               label = new Label(composite, SWT.NONE);\r
+               label.setText("Report:");\r
+               reportLabel = new Label(composite, SWT.NONE);\r
+               label = new Label(composite, SWT.NONE);\r
+               label.setText("Status:");\r
+               this.statusLabel = new Label(composite, SWT.NONE);\r
+               this.statusLabel.setText("Report has not been generated");\r
+               generateButton = new Button(composite, SWT.PUSH);\r
+               generateButton.setText("Generate report");\r
+               generateButton.addSelectionListener(new SelectionAdapter() {\r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               generate();\r
+                       }\r
+               });\r
+               showButton = new Button(composite, SWT.PUSH);\r
+               showButton.setText("Show Report");\r
+               showButton.addSelectionListener(new SelectionAdapter() {\r
+                       \r
+                       @Override\r
+                       public void widgetSelected(SelectionEvent e) {\r
+                               File file = new File(filename);\r
+                               if (file.exists() && file.canRead()) {\r
+                                       try {\r
+                                               Editors.openExternalEditor(file);\r
+                                       } catch (PartInitException err) {\r
+                                               ExceptionUtils.logAndShowError(err);\r
+                                       }\r
+                               }\r
+                       }\r
+               });\r
+               showButton.setEnabled(false);\r
+               updateContent();\r
+               setControl(composite);\r
+       }\r
+       \r
+       private void updateContent() {\r
+               fileLabel.setText(filename == null ? "File has not been selected" : filename);\r
+               reportLabel.setText(reportWriter == null ? "Report Writer has not been selected" : reportWriter.getName());\r
+               generateButton.setEnabled(filename != null && reportWriter != null && model != null);\r
+               showButton.setEnabled(generated);\r
+               generateButton.setEnabled(!generated);\r
+               if (!generated)\r
+                       statusLabel.setText("Report has not been generated");\r
+       }\r
+       \r
+       public void setGenerated(boolean b) {\r
+               generated = b;\r
+               setPageComplete(generated);\r
+       }\r
+       \r
+       private void generate() {\r
+               generateButton.setEnabled(false);\r
+               statusLabel.setText("Generating report");\r
+               try {\r
+                       getWizard().getContainer().run(true, false, new IRunnableWithProgress() {\r
+                               \r
+                               @Override\r
+                               public void run(final IProgressMonitor monitor) throws InvocationTargetException,\r
+                                               InterruptedException {\r
+\r
+                                       ExportToPDF exportToPDF = new ExportToPDF(Simantics.getSession(), model);\r
+                                       final IStatus status = exportToPDF.export(filename, reportWriter, monitor);\r
+                                       Display.getDefault().asyncExec(new Runnable() {\r
+                                               public void run() {\r
+                                                       if (!statusLabel.isDisposed()) {\r
+                                                               if (status.isOK())\r
+                                                                       statusLabel.setText(status.getMessage());\r
+                                                               else {\r
+                                                                       statusLabel.setText(status.getMessage());\r
+                                                                       ExceptionUtils.logError(status.getException());\r
+                                                               }\r
+                                                               setPageComplete(true);  \r
+                                                               ((Composite)getControl()).layout(true, true);\r
+                                                       }\r
+                                                       \r
+                                               };\r
+                                       });\r
+                                       monitor.done();\r
+                               }\r
+                       });\r
+               }  catch (InterruptedException err) {\r
+                       setErrorMessage("Report failed: " + err.getMessage());\r
+                       ErrorLogger.defaultLogError("Report failed.",err);\r
+                       statusLabel.setText("Report failed.");\r
+               } catch (InvocationTargetException err) {\r
+                       setErrorMessage("Report failed: " + err.getMessage());\r
+                       ErrorLogger.defaultLogError("Report failed.",err);\r
+                       statusLabel.setText("Report failed.");\r
+               }\r
+               setGenerated(true);\r
+               \r
+               showButton.setEnabled(true);\r
+               generateButton.setEnabled(false);\r
+               getContainer().updateButtons();\r
+       }\r
+       \r
+       @Override\r
+       public void setVisible(boolean visible) {\r
+               if (visible) {\r
+                       updateContent();\r
+               } else {\r
+                       setGenerated(false);\r
+               }\r
+               super.setVisible(visible);\r
+       }\r
+       \r
+       public boolean isGenerated() {\r
+               return generated;\r
+       }\r
+\r
+}\r