]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/examples/org/simantics/databoard/example/DataboardFormExample.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.databoard / examples / org / simantics / databoard / example / DataboardFormExample.java
1 package org.simantics.databoard.example;
2
3 import java.util.List;
4 import java.util.Random;
5
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;
35
36
37 public class DataboardFormExample {
38
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());
43
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");
46             
47             
48             //mergeType = UnionType.newEnum("Merge to one file", "Separate files");
49
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"));           
56
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());
61
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"));
66             
67             // Output format
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);        
76
77             // Output format
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);
85             
86             // Diagram layers
87             RecordType diagramOptions = new RecordType();
88             Datatype second = new DoubleType("s");
89             
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);
96             
97             // Diagram PDF Export Format options
98             diagramOptions.addComponent("Fit to content", Datatypes.BOOLEAN);
99
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);      
105             
106             // CSV Export
107             RecordType csvOptions = new RecordType();       
108             csvOptions.addComponent("Step Size", second);
109
110             // Chart options
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"));
115             
116             // PDF options
117             RecordType pdfOptions = new RecordType();
118             // PDF metadata         
119             pdfOptions.addComponent("Title", Datatypes.STRING );
120             pdfOptions.addComponent("Author", Datatypes.STRING );
121             pdfOptions.addComponent("Subject", Datatypes.STRING );
122             pdfOptions.addComponent("Keywords", DataboardForm.TEXTBOX );            
123             // PDF Encryption
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);        
128             // Formatter options 
129             pdfOptions.addComponent("Compression", UnionType.newEnum("0 (No compression)", "1", "2", "3", "4", "5", "6", "7", "8", "9 (Best)"));
130
131             
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);          
139             
140                 composite.setLayout( new GridLayout(3, false) );                        
141                 composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));                   
142             
143 //              form.addField(composite, "File", fileOptions);
144 //              form.addField(composite, "Dir", dirOptions);
145 //              form.addField(composite, "Zip", zipOptions);
146                 
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);
154                 
155                 form.addListener(composite, form.type(), new Listener() {
156                         public void handleEvent(Event event) {
157                                 System.out.println(event);
158                         } } );
159                 
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 );
164                 
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!");
174                                 } else {
175                                         for (Problem problem : problems) {
176                                                 sb.append(problem.fieldReference+": "+problem.error);
177                                                 sb.append("\n");
178                                         }
179                                 }
180                                         
181                                 MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);
182                                 dialog.setText("Form");
183                                 dialog.setMessage( sb.toString() );
184                                 dialog.open();                                                                          
185                         }
186                 });
187                 
188                 
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
195                                 try {
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);
200                                         
201                                         MessageBox dialog = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK| SWT.CANCEL);
202                                         dialog.setText("Form");
203                                         dialog.setMessage(txt);
204                                         dialog.open();                                  
205                                         
206                                 } catch (AccessorConstructionException e1) {
207                                         e1.printStackTrace();
208                                 } catch (AccessorException e1) {
209                                         e1.printStackTrace();
210                                 } catch (BindingException e1) {
211                                         e1.printStackTrace();
212                                 }
213                         }
214                 });
215
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) {
221                                 try {
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();
232                                 }
233                                 
234                         }
235                 });
236                 
237                 Button modal = new Button(composite, SWT.DEFAULT);
238                 modal.setText("Modal");
239                 modal.addSelectionListener( new SelectionAdapter() {
240                         @Override
241                         public void widgetSelected(SelectionEvent e) {
242                                 Shell dialogShell = new Shell(display, SWT.DIALOG_TRIM);
243                                 // populate dialogShell
244                                 dialogShell.open();
245                                 while (!dialogShell.isDisposed()) {
246                                     if (!display.readAndDispatch()) {
247                                         display.sleep();
248                                     }
249                                 }
250                         }
251                 });
252                                         
253             composite.pack();
254             
255             shell.setSize(800,400);
256             //shell.layout();
257             shell.open ();
258             while (!shell.isDisposed()) {
259                 if (!display.readAndDispatch ()) display.sleep ();
260             }
261             
262             display.dispose ();
263         }
264                 
265 }