1 package org.simantics.document.linking.wizard;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\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
39 * Wizard page for selecting report type and file.
\r
41 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
\r
44 public class ReportSelectionPage extends WizardPage{
\r
46 protected ReportSelectionPage(String pageName) {
\r
47 super(pageName,pageName,null);
\r
48 setPageComplete(false);
\r
53 Button browseButton;
\r
55 ModelToComboListener modelToComboListener;
\r
57 List<Button> reportSelectionButtons = new ArrayList<Button>();
\r
58 List<ReportWriter<?>> reportWriters = new ArrayList<ReportWriter<?>>();
\r
60 ReportWriter<?> selectedWriter;
\r
61 Resource selectedModel;
\r
65 public void createControl(Composite parent) {
\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
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
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
87 Group group = new Group(composite, SWT.NONE);
\r
88 group.setText("Report templates");
\r
89 group.setLayout(new FillLayout(SWT.VERTICAL));
\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
95 browseButton.addSelectionListener(new SelectionAdapter() {
\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
106 filenameText.setText(filename);
\r
112 SelectionListener listener = new SelectionAdapter() {
\r
114 public void widgetSelected(SelectionEvent e) {
\r
115 Button selected = (Button)e.widget;
\r
120 for (ReportWriter<?> rw : reportWriters) {
\r
121 Button b = new Button(group, SWT.RADIO);
\r
122 b.setText(rw.getName());
\r
124 b.addSelectionListener(listener);
\r
125 reportSelectionButtons.add(b);
\r
128 SimanticsUI.getSession().asyncRequest(new ReadRequest() {
\r
131 public void run(ReadGraph graph) throws DatabaseException {
\r
132 Resource project = SimanticsUI.getProject().get();
\r
133 modelToComboListener = new ModelToComboListener(modelCombo) {
\r
135 public Resource getCurrentModel() {
\r
136 return selectedModel;
\r
140 public void loaded() {
\r
144 graph.syncRequest(new ModelRead(project),modelToComboListener);
\r
149 modelCombo.addSelectionListener(new SelectionAdapter() {
\r
151 public void widgetSelected(SelectionEvent e) {
\r
152 int index = modelCombo.getSelectionIndex();
\r
155 Resource model = (Resource)modelCombo.getData(Integer.toString(index));
\r
157 selectedModel = model;
\r
162 select(reportSelectionButtons.get(0));
\r
163 setControl(composite);
\r
166 public List<Button> getReportSelectionButtons() {
\r
167 return reportSelectionButtons;
\r
170 private void select(Button selected) {
\r
171 selected.setSelection(true);
\r
172 for (Button b : reportSelectionButtons) {
\r
174 b.setSelection(false);
\r
176 selectedWriter = (ReportWriter<?>)selected.getData();
\r
180 private void validate() {
\r
181 setPageComplete(selectedWriter!= null && selectedModel != null && filenameText.getText().length() > 0);
\r
184 public ReportWriter<?> getSelectedWriter() {
\r
185 return selectedWriter;
\r
188 public String getFilename() {
\r
189 return filenameText.getText();
\r
192 public Resource getSelectedModel() {
\r
193 return selectedModel;
\r
196 public void setInput(Resource input) {
\r
197 this.input = input;
\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
212 public void setVisible(boolean visible) {
\r
216 super.setVisible(visible);
\r