1 package org.simantics.databoard.example;
4 import java.util.Random;
6 import org.eclipse.swt.SWT;
7 import org.eclipse.swt.custom.ScrolledComposite;
8 import org.eclipse.swt.events.SelectionAdapter;
9 import org.eclipse.swt.events.SelectionEvent;
10 import org.eclipse.swt.layout.FillLayout;
11 import org.eclipse.swt.layout.GridData;
12 import org.eclipse.swt.layout.GridLayout;
13 import org.eclipse.swt.widgets.Button;
14 import org.eclipse.swt.widgets.Composite;
15 import org.eclipse.swt.widgets.Control;
16 import org.eclipse.swt.widgets.Display;
17 import org.eclipse.swt.widgets.Event;
18 import org.eclipse.swt.widgets.Listener;
19 import org.eclipse.swt.widgets.MessageBox;
20 import org.eclipse.swt.widgets.Shell;
21 import org.simantics.databoard.Bindings;
22 import org.simantics.databoard.Datatypes;
23 import org.simantics.databoard.accessor.error.AccessorConstructionException;
24 import org.simantics.databoard.accessor.error.AccessorException;
25 import org.simantics.databoard.accessor.reference.ChildReference;
26 import org.simantics.databoard.binding.RecordBinding;
27 import org.simantics.databoard.binding.error.BindingException;
28 import org.simantics.databoard.forms.DataboardForm;
29 import org.simantics.databoard.forms.DataboardForm.Problem;
30 import org.simantics.databoard.type.Datatype;
31 import org.simantics.databoard.type.DoubleType;
32 import org.simantics.databoard.type.RecordType;
33 import org.simantics.databoard.type.StringType;
34 import org.simantics.databoard.type.UnionType;
37 public class DataboardFormExample {
39 public static void main(String [] args) throws BindingException, AccessorConstructionException, AccessorException {
40 final Display display = new Display ();
41 final Shell shell = new Shell (display);
42 shell.setLayout(new FillLayout());
44 UnionType experiments = UnionType.newEnum("Result 1 - 5.11.2011 12:50", "Result 2 - 5.11.2011 13:40", "Result 3 - 5.11.2011 15:40" );
45 //UnionType mergeType = UnionType.newEnum("One file", "Many files");
48 //mergeType = UnionType.newEnum("Merge to one file", "Separate files");
50 RecordType fileOptions = new RecordType();
51 fileOptions.metadata.put("style", "no-border");
52 fileOptions.addComponent("Overwrite file(s)", Datatypes.BOOLEAN);
53 fileOptions.addComponent("case1_h.pdf", DataboardForm.fileSaveDialog(".pdf", "*.pdf"));
54 fileOptions.addComponent("case1_h.aprosModel", DataboardForm.fileSaveDialog(".aprosModel", "*.aprosModel"));
55 fileOptions.addComponent("Chart.csv", DataboardForm.fileSaveDialog(".csv", "*.csv"));
57 RecordType dirOptions = new RecordType();
58 dirOptions.metadata.put("style", "no-border");
59 dirOptions.addComponent("Overwrite file(s)", Datatypes.BOOLEAN);
60 dirOptions.addComponent("Export location", DataboardForm.directoryDialog());
62 RecordType zipOptions = new RecordType();
63 zipOptions.metadata.put("style", "no-border");
64 zipOptions.addComponent("Overwrite file(s)", Datatypes.BOOLEAN);
65 zipOptions.addComponent("Export to .zip", DataboardForm.fileSaveDialog(".zip", "*.zip"));
68 RecordType outputOptions = new RecordType();
69 UnionType mergeType = new UnionType();
70 mergeType.metadata.put("style", "no-border");
71 mergeType.addComponent("One file", DataboardForm.fileSaveDialog("Comma Separated Value (.csv)", ".csv"));
72 mergeType.addComponent("Separate files", DataboardForm.directoryDialog());
73 outputOptions.addComponent("Output", mergeType);
74 UnionType publisherType = UnionType.newEnum("File", "Dir", "Zip", "Smartplant Foundation", "Webserver");
75 outputOptions.addComponent("Publish to", publisherType);
78 RecordType outputOptions2 = new RecordType();
79 RecordType tabType = new RecordType();
80 tabType.metadata.put("style", "tabbed");
81 tabType.addComponent("File", fileOptions);
82 tabType.addComponent("Dir", dirOptions);
83 tabType.addComponent("Zip", zipOptions);
84 outputOptions2.addComponent("Output2", tabType);
87 RecordType diagramOptions = new RecordType();
88 Datatype second = new DoubleType("s");
90 RecordType layers = new RecordType();
91 layers.metadata.put("style", "dialog");
92 layers.addComponent("Layer 1", Datatypes.BOOLEAN);
93 layers.addComponent("Layer 2", Datatypes.BOOLEAN);
94 layers.addComponent("Layer 3", Datatypes.BOOLEAN);
95 diagramOptions.addComponent("Layers", layers);
97 // Diagram PDF Export Format options
98 diagramOptions.addComponent("Fit to content", Datatypes.BOOLEAN);
100 // Experiment options
101 RecordType experimentOptions = new RecordType();
102 experimentOptions.addComponent("Start Time", second);
103 experimentOptions.addComponent("End Time", second);
104 experimentOptions.addComponent("Experiment", experiments);
107 RecordType csvOptions = new RecordType();
108 csvOptions.addComponent("Step Size", second);
111 RecordType chartOptions = new RecordType();
112 chartOptions.addComponent("Autoscale", UnionType.newEnum("Stacked", "Overlapping"));
113 chartOptions.addComponent("TimeFormat", UnionType.newEnum("Decimal", "Time"));
114 chartOptions.addComponent("ValueFormat", UnionType.newEnum("Currency", "Scientific", "Engineering", "Default"));
117 RecordType pdfOptions = new RecordType();
119 pdfOptions.addComponent("Title", Datatypes.STRING );
120 pdfOptions.addComponent("Author", Datatypes.STRING );
121 pdfOptions.addComponent("Subject", Datatypes.STRING );
122 pdfOptions.addComponent("Keywords", DataboardForm.TEXTBOX );
124 StringType privatekeys = DataboardForm.fileOpenDialog("PKCS#12 keystore (.p12)", ".p12", "PFX (.pfx)", ".pfx");
125 pdfOptions.addComponent("Private Key", privatekeys);
126 pdfOptions.addComponent("Keystore Password", DataboardForm.PASSWORD);
127 pdfOptions.addComponent("Private Key Password", DataboardForm.PASSWORD);
129 pdfOptions.addComponent("Compression", UnionType.newEnum("0 (No compression)", "1", "2", "3", "4", "5", "6", "7", "8", "9 (Best)"));
132 ScrolledComposite scroll = new ScrolledComposite(shell, SWT.V_SCROLL);
133 final Composite composite = new Composite(scroll, 0);
134 scroll.setContent(composite);
135 scroll.setExpandHorizontal(true);
136 scroll.setExpandVertical(false);
137 final DataboardForm form = new DataboardForm();
138 form.setFirstColumnWidth(150);
140 composite.setLayout( new GridLayout(3, false) );
141 composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
143 // form.addField(composite, "File", fileOptions);
144 // form.addField(composite, "Dir", dirOptions);
145 // form.addField(composite, "Zip", zipOptions);
147 form.addField(composite, "Output Options", outputOptions);
148 form.addField(composite, "Output Options2", outputOptions2);
149 form.addField(composite, "Diagram", diagramOptions);
150 form.addField(composite, "Experiment", experimentOptions);
151 form.addField(composite, "Comma Separated Value (CSV)", csvOptions);
152 form.addField(composite, "Chart", chartOptions);
153 form.addField(composite, "Portable Document Format (PDF)", pdfOptions);
155 form.addListener(composite, form.type(), new Listener() {
156 public void handleEvent(Event event) {
157 System.out.println(event);
160 // Find control by reference
161 ChildReference ref = ChildReference.parsePath("Output Options/Publish to");
162 Control c = form.getControl(composite, ref );
163 System.out.println( ref+" = "+c );
165 // Button that validates all fields
166 Button validate = new Button(composite, SWT.DEFAULT);
167 validate.setText( "Validate" );
168 validate.addSelectionListener(new SelectionAdapter() {
169 public void widgetSelected(SelectionEvent e) {
170 List<Problem> problems = form.validate(composite);
171 StringBuilder sb = new StringBuilder();
172 if ( problems.isEmpty() ) {
173 sb.append("No problemo!");
175 for (Problem problem : problems) {
176 sb.append(problem.fieldReference+": "+problem.error);
181 MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);
182 dialog.setText("Form");
183 dialog.setMessage( sb.toString() );
189 // Button that reads all fields
190 Button read = new Button(composite, SWT.DEFAULT);
191 read.setText( "Read" );
192 read.addSelectionListener(new SelectionAdapter() {
193 public void widgetSelected(SelectionEvent e) {
194 // Read result values
196 RecordBinding binding = (RecordBinding) Bindings.getMutableBinding( form.type() );
197 Object formValues = binding.createDefault();
198 form.readFields(composite, binding, formValues);
199 String txt = binding.toString(formValues, false);
201 MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);
202 dialog.setText("Form");
203 dialog.setMessage(txt);
206 } catch (AccessorConstructionException e1) {
207 e1.printStackTrace();
208 } catch (AccessorException e1) {
209 e1.printStackTrace();
210 } catch (BindingException e1) {
211 e1.printStackTrace();
216 // Button that writes fields
217 Button write = new Button(composite, SWT.DEFAULT);
218 write.setText( "Write" );
219 write.addSelectionListener(new SelectionAdapter() {
220 public void widgetSelected(SelectionEvent e) {
222 RecordType type = form.type();
223 RecordBinding binding = (RecordBinding) Bindings.getBinding( type );
224 Object values = binding.createRandom( new Random() );
225 form.writeFields(composite, binding, values);
226 } catch (AccessorConstructionException e1) {
227 e1.printStackTrace();
228 } catch (AccessorException e1) {
229 e1.printStackTrace();
230 } catch (BindingException e1) {
231 e1.printStackTrace();
237 Button modal = new Button(composite, SWT.DEFAULT);
238 modal.setText("Modal");
239 modal.addSelectionListener( new SelectionAdapter() {
241 public void widgetSelected(SelectionEvent e) {
242 Shell dialogShell = new Shell(display, SWT.DIALOG_TRIM);
243 // populate dialogShell
245 while (!dialogShell.isDisposed()) {
246 if (!display.readAndDispatch()) {
255 shell.setSize(800,400);
258 while (!shell.isDisposed()) {
259 if (!display.readAndDispatch ()) display.sleep ();