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