1 package org.simantics.document.linking.wizard;
4 import java.lang.reflect.InvocationTargetException;
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.jface.operation.IRunnableWithProgress;
9 import org.eclipse.jface.wizard.WizardPage;
10 import org.eclipse.osgi.util.NLS;
11 import org.eclipse.swt.SWT;
12 import org.eclipse.swt.events.SelectionAdapter;
13 import org.eclipse.swt.events.SelectionEvent;
14 import org.eclipse.swt.layout.GridLayout;
15 import org.eclipse.swt.widgets.Button;
16 import org.eclipse.swt.widgets.Composite;
17 import org.eclipse.swt.widgets.Display;
18 import org.eclipse.swt.widgets.Label;
19 import org.eclipse.ui.PartInitException;
20 import org.simantics.Simantics;
21 import org.simantics.db.Resource;
22 import org.simantics.document.linking.report.ExportToPDF;
23 import org.simantics.document.linking.report.templates.ReportWriter;
24 import org.simantics.editors.Editors;
25 import org.simantics.utils.ui.ErrorLogger;
26 import org.simantics.utils.ui.ExceptionUtils;
30 * Wizard page for generating a report.
32 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
35 public class ReportGeneratePage extends WizardPage {
37 private Resource model;
38 private String filename;
39 private ReportWriter<?> reportWriter;
42 private Label fileLabel;
43 private Label reportLabel;
44 private Label statusLabel;
45 private Button generateButton;
46 private Button showButton;
47 private boolean generated = false;
49 protected ReportGeneratePage(String pageName) {
50 super(pageName,pageName,null);
54 public void setFilename(String filename) {
55 this.filename = filename;
59 public void setReportWriter(ReportWriter<?> reportWriter) {
60 this.reportWriter = reportWriter;
64 public void setModel(Resource model) {
70 public void createControl(Composite parent) {
71 Composite composite = new Composite(parent, SWT.NONE);
72 composite.setLayout(new GridLayout(2,false));
73 Label label = new Label(composite, SWT.NONE);
74 label.setText(Messages.ReportGeneratePage_File);
75 fileLabel = new Label(composite, SWT.NONE);
76 label = new Label(composite, SWT.NONE);
77 label.setText(Messages.ReportGeneratePage_Report);
78 reportLabel = new Label(composite, SWT.NONE);
79 label = new Label(composite, SWT.NONE);
80 label.setText(Messages.ReportGeneratePage_Status);
81 this.statusLabel = new Label(composite, SWT.NONE);
82 this.statusLabel.setText(Messages.ReportGeneratePage_ReportNotGenerated);
83 generateButton = new Button(composite, SWT.PUSH);
84 generateButton.setText(Messages.ReportGeneratePage_GenerateReport);
85 generateButton.addSelectionListener(new SelectionAdapter() {
87 public void widgetSelected(SelectionEvent e) {
91 showButton = new Button(composite, SWT.PUSH);
92 showButton.setText(Messages.ReportGeneratePage_ShowReport);
93 showButton.addSelectionListener(new SelectionAdapter() {
96 public void widgetSelected(SelectionEvent e) {
97 File file = new File(filename);
98 if (file.exists() && file.canRead()) {
100 Editors.openExternalEditor(file);
101 } catch (PartInitException err) {
102 ExceptionUtils.logAndShowError(err);
107 showButton.setEnabled(false);
109 setControl(composite);
112 private void updateContent() {
113 fileLabel.setText(filename == null ? Messages.ReportGeneratePage_FileNotSelected : filename);
114 reportLabel.setText(reportWriter == null ? Messages.ReportGeneratePage_ReportWriterNotSelected : reportWriter.getName());
115 generateButton.setEnabled(filename != null && reportWriter != null && model != null);
116 showButton.setEnabled(generated);
117 generateButton.setEnabled(!generated);
119 statusLabel.setText(Messages.ReportGeneratePage_ReportNotGenerated);
122 public void setGenerated(boolean b) {
124 setPageComplete(generated);
127 private void generate() {
128 generateButton.setEnabled(false);
129 statusLabel.setText(Messages.ReportGeneratePage_GeneratingReport);
131 getWizard().getContainer().run(true, false, new IRunnableWithProgress() {
134 public void run(final IProgressMonitor monitor) throws InvocationTargetException,
135 InterruptedException {
137 ExportToPDF exportToPDF = new ExportToPDF(Simantics.getSession(), model);
138 final IStatus status = exportToPDF.export(filename, reportWriter, monitor);
139 Display.getDefault().asyncExec(new Runnable() {
141 if (!statusLabel.isDisposed()) {
143 statusLabel.setText(status.getMessage());
145 statusLabel.setText(status.getMessage());
146 ExceptionUtils.logError(status.getException());
148 setPageComplete(true);
149 ((Composite)getControl()).layout(true, true);
157 } catch (InterruptedException err) {
158 setErrorMessage(NLS.bind(Messages.ReportGeneratePage_ReportFailed , err.getMessage()));
159 ErrorLogger.defaultLogError(Messages.ReportGeneratePage_ReportFail,err);
160 statusLabel.setText(Messages.ReportGeneratePage_ReportFail);
161 } catch (InvocationTargetException e) {
162 Throwable err = e.getCause();
163 setErrorMessage(NLS.bind(Messages.ReportGeneratePage_ReportFailed , err.getMessage()));
164 ErrorLogger.defaultLogError(Messages.ReportGeneratePage_ReportFail,err);
165 statusLabel.setText(Messages.ReportGeneratePage_ReportFail);
169 showButton.setEnabled(true);
170 generateButton.setEnabled(false);
171 getContainer().updateButtons();
175 public void setVisible(boolean visible) {
181 super.setVisible(visible);
184 public boolean isGenerated() {