]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.district.imports.ui/src/org/simantics/district/imports/ui/CSVImportWizardPage.java
Elimination of compiler warnings.
[simantics/district.git] / org.simantics.district.imports.ui / src / org / simantics / district / imports / ui / CSVImportWizardPage.java
1 package org.simantics.district.imports.ui;
2
3 import java.io.IOException;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.Map.Entry;
8 import java.util.Set;
9
10 import org.apache.commons.csv.CSVRecord;
11 import org.eclipse.jface.dialogs.IPageChangeProvider;
12 import org.eclipse.jface.dialogs.IPageChangedListener;
13 import org.eclipse.jface.dialogs.PageChangedEvent;
14 import org.eclipse.jface.layout.GridDataFactory;
15 import org.eclipse.jface.layout.TableColumnLayout;
16 import org.eclipse.jface.viewers.ColumnWeightData;
17 import org.eclipse.jface.wizard.IWizardContainer;
18 import org.eclipse.jface.wizard.WizardPage;
19 import org.eclipse.swt.SWT;
20 import org.eclipse.swt.events.ModifyEvent;
21 import org.eclipse.swt.events.ModifyListener;
22 import org.eclipse.swt.events.SelectionAdapter;
23 import org.eclipse.swt.events.SelectionEvent;
24 import org.eclipse.swt.events.SelectionListener;
25 import org.eclipse.swt.layout.GridLayout;
26 import org.eclipse.swt.widgets.Button;
27 import org.eclipse.swt.widgets.Combo;
28 import org.eclipse.swt.widgets.Composite;
29 import org.eclipse.swt.widgets.Group;
30 import org.eclipse.swt.widgets.Label;
31 import org.eclipse.swt.widgets.Table;
32 import org.eclipse.swt.widgets.TableColumn;
33 import org.eclipse.swt.widgets.TableItem;
34 import org.eclipse.swt.widgets.Text;
35 import org.geotools.referencing.CRS;
36 import org.simantics.district.imports.ui.controls.DynamicComboFieldEditor;
37
38 public class CSVImportWizardPage extends WizardPage {
39
40     private CSVImportModel model;
41
42     private Map<Integer, String> headerIndexAndValues = new HashMap<>();
43
44     private Table headerTable;
45 //    private Button firstAsHeader;
46
47     private Combo delimiterCombo;
48     private TableColumnLayout tableColumnLayout;
49     private Composite tableComposite;
50 //    private FileSelectionWidget wktFileSelection;
51
52     // Common for vertex and edge
53     private DynamicComboFieldEditor componentMappingSelector;
54     private DynamicComboFieldEditor idSelector;
55     
56     // For vertex import
57     private DynamicComboFieldEditor xCoordSelector;
58     private DynamicComboFieldEditor yCoordSelector;
59     private DynamicComboFieldEditor zValueSelector;
60
61     private DynamicComboFieldEditor supplyTempValueSelector;
62     private DynamicComboFieldEditor returnTempValueSelector;
63     private DynamicComboFieldEditor supplyPressureValueSelector;
64     private DynamicComboFieldEditor returnPressureValueSelector;
65     private DynamicComboFieldEditor dpSelector;
66     private DynamicComboFieldEditor dtSelector;
67     private DynamicComboFieldEditor heatPowerSelector;
68     private DynamicComboFieldEditor nominalHeadMSelector;
69     private DynamicComboFieldEditor nominalHeadBSelector;
70     private DynamicComboFieldEditor nominalFlowSelector;
71     private DynamicComboFieldEditor maximumHeadMSelector;
72     private DynamicComboFieldEditor heatLoadDsSelector;
73     private DynamicComboFieldEditor massFlowSelector;
74     private DynamicComboFieldEditor volFlowSelector;
75     private DynamicComboFieldEditor velocitySelector;
76     private DynamicComboFieldEditor flowAreaSelector;
77     private DynamicComboFieldEditor nominalPressureLossSelector;
78     private DynamicComboFieldEditor valvePositionSelector;
79     private DynamicComboFieldEditor addressSelector;
80     private DynamicComboFieldEditor lengthSelector;
81
82     // For edge import
83     private DynamicComboFieldEditor startXCoordSelector;
84     private DynamicComboFieldEditor startYCoordSelector;
85     private DynamicComboFieldEditor startZValueSelector;
86     private DynamicComboFieldEditor endXCoordSelector;
87     private DynamicComboFieldEditor endYCoordSelector;
88     private DynamicComboFieldEditor endZValueSelector;
89     private DynamicComboFieldEditor detailedGeometrySelector;
90
91     private Text edgeConnectionPadding;
92     
93     private DynamicComboFieldEditor outerDiameterSelector;
94     private DynamicComboFieldEditor diameterSelector;
95     private DynamicComboFieldEditor nominalMassFlowSelector;
96
97     private Group indexMappingGroup;
98
99     private Composite composite;
100
101     private Button isVertexImport;
102
103     private Combo sourceCRSCombo;
104
105     private DynamicComboFieldEditor edgeFlowAreaSelector;
106
107     private DynamicComboFieldEditor kReturnSelector;
108
109     private DynamicComboFieldEditor kSupplySelector;
110
111     private DynamicComboFieldEditor tGroundSelector;
112     
113     protected CSVImportWizardPage(CSVImportModel model) {
114         super("Import CSV Data");
115         this.model = model;
116         setMessage("Select column index mappings");
117     }
118
119     @Override
120     public void createControl(Composite parent) {
121         composite = new Composite(parent, SWT.NONE);
122         composite.setLayout(new GridLayout(1, false));
123         GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);
124
125         Label label = new Label(composite, SWT.NONE);
126         label.setText("Select delimiter");
127         
128         delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
129         delimiterCombo.setToolTipText("Select the delimiter that is used to separate elements in the CSV file");
130         String[] formats = model.getDelimiterFormats();
131         delimiterCombo.setItems(formats);
132         if (formats.length > 0)
133             delimiterCombo.select(0);
134         delimiterCombo.addSelectionListener(new SelectionListener() {
135
136             @Override
137             public void widgetSelected(SelectionEvent e) {
138                 model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex()));
139                 updateHeaders();
140                 updateCombos();
141             }
142
143             @Override
144             public void widgetDefaultSelected(SelectionEvent e) {
145                 widgetSelected(e);
146             }
147         });
148
149 //        firstAsHeader = new Button(composite, SWT.CHECK);
150 //        firstAsHeader.setText("Read first row as header");
151 //        firstAsHeader.setSelection(model.getReadFirstAsHeader());
152 //        firstAsHeader.addSelectionListener(new SelectionListener() {
153 //
154 //            @Override
155 //            public void widgetSelected(SelectionEvent e) {
156 //                model.setReadFirstAsHeader(firstAsHeader.getSelection());
157 //                updateHeaders();
158 //                updateCombos();
159 //            }
160 //
161 //            @Override
162 //            public void widgetDefaultSelected(SelectionEvent e) {
163 //                widgetSelected(e);
164 //            }
165 //        });
166
167         tableComposite = new Composite(composite, SWT.BORDER);
168         tableColumnLayout = new TableColumnLayout();
169         tableComposite.setLayout(tableColumnLayout);
170
171         label = new Label(composite, SWT.NONE);
172         label.setText("Select source Coordinate Reference System");
173         
174         sourceCRSCombo = new Combo(composite, SWT.NONE);
175         sourceCRSCombo.setToolTipText("Select the coordinate reference system that is used in the source material for possible transformation to target coordinate reference system (EPSG:4326)");
176         Set<String> codes = CRS.getSupportedCodes("EPSG");
177         sourceCRSCombo.setItems(codes.toArray(new String[codes.size()]));
178         sourceCRSCombo.addSelectionListener(new SelectionAdapter() {
179             
180             @Override
181             public void widgetSelected(SelectionEvent e) {
182                 String current = sourceCRSCombo.getItem(sourceCRSCombo.getSelectionIndex());
183                 model.setSourceCRS("EPSG:" + current);
184             }
185         });
186         
187         sourceCRSCombo.addModifyListener(new ModifyListener() {
188             
189             @Override
190             public void modifyText(ModifyEvent e) {
191                 String currentText = sourceCRSCombo.getText();
192                 if (codes.contains(currentText)) {
193                     // Select this
194                     String[] items = sourceCRSCombo.getItems();
195                     int i;
196                     for (i = 0; i < items.length; i++) {
197                         String item = items[i];
198                         if (currentText.equals(item)) {
199                             break;
200                         }
201                     }
202                     if (i != 0) {
203                         sourceCRSCombo.select(i);
204                         model.setSourceCRS("EPSG:" + currentText);
205                     } else {
206                         System.err.println("this should not happen");
207                     }
208                 }
209             }
210         });
211         
212 //        wktFileSelection = new FileSelectionWidget(composite, "WKT file", SWT.OPEN);
213 //        wktFileSelection.addListener(new FileSelectionListener() {
214 //
215 //            @Override
216 //            public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {
217 //                String[] selection = wktFileSelection.getFilename();
218 //                if (selection != null && selection.length > 0) {
219 //                    Path wktFile = Paths.get(selection[0]);
220 //                    if (!Files.exists(wktFile)) {
221 //                        setErrorMessage("File " + wktFile.toAbsolutePath() + " does not exist");
222 //                    } else {
223 //                        model.setWKTFile(wktFile);
224 //                        validatePageComplete();
225 //                    }
226 //                }
227 //            }
228 //        });
229
230         isVertexImport = new Button(composite, SWT.CHECK);
231         isVertexImport.setText("File contains vertices");
232         isVertexImport.setToolTipText("Enable this if the file contains vertices, i.e. points");
233         isVertexImport.setSelection(model.isVertexImport());
234         isVertexImport.addSelectionListener(new SelectionListener() {
235
236             @Override
237             public void widgetSelected(SelectionEvent e) {
238                 model.setVertexImport(isVertexImport.getSelection());
239                 updateControls(false);
240             }
241
242             @Override
243             public void widgetDefaultSelected(SelectionEvent e) {
244                 widgetSelected(e);
245             }
246         });
247         
248         updateControls(true);
249         updateHeaders();
250         setControl(composite);
251
252         final IWizardContainer container = getContainer();
253         
254         if (container instanceof IPageChangeProvider) {
255             ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() {
256
257                 @Override
258                 public void pageChanged(PageChangedEvent event) {
259                     if (isCurrentPage())
260                         CSVImportWizardPage.this.updateControls(false);
261                 }
262             });
263         }
264
265         validatePageComplete();
266     }
267     
268     private void updateControls(boolean initial) {
269         createIndexMappingGroup();
270         updateCombos();
271         if (!initial)
272             composite.layout(true, true);
273     }
274     
275     private void createIndexMappingGroup() {
276         if (indexMappingGroup != null)
277             indexMappingGroup.dispose();
278         
279         indexMappingGroup = new Group(composite, SWT.NONE);
280         indexMappingGroup.setText("Column index mapping");
281         GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(indexMappingGroup);
282         
283         if (model.isVertexImport())
284             createVertexIndexMappingField(indexMappingGroup);
285         else
286             createEdgeIndexMappingField(indexMappingGroup);
287         
288         createCommonIndexMappingField(indexMappingGroup);
289         
290         if (!model.isVertexImport()) {
291             Label label = new Label(indexMappingGroup, SWT.NONE);
292             label.setText("Connection point padding");
293             GridDataFactory.fillDefaults().applyTo(label);
294             edgeConnectionPadding = new Text(indexMappingGroup, SWT.BORDER);
295             GridDataFactory.fillDefaults().applyTo(edgeConnectionPadding);
296             edgeConnectionPadding.setText("0.0001"); // default
297             edgeConnectionPadding.addModifyListener(new ModifyListener() {
298                 
299                 @Override
300                 public void modifyText(ModifyEvent e) {
301                     try {
302                         double padding = Double.parseDouble(edgeConnectionPadding.getText());
303                         model.setEdgePapping(padding);
304                     } catch (NumberFormatException ee) {
305                         // ignore
306                     }
307                 }
308             });
309         }
310     }
311
312     private void createCommonIndexMappingField(Group parent) {
313         
314         componentMappingSelector = new DynamicComboFieldEditor("componentMapping", "Apros component mapping", parent);
315         componentMappingSelector.addComboListener(new SelectionListener() {
316
317             @Override
318             public void widgetSelected(SelectionEvent e) {
319                 widgetDefaultSelected(e);
320             }
321
322             @Override
323             public void widgetDefaultSelected(SelectionEvent e) {
324                 model.setComponentMappingIndex(Integer.parseInt(componentMappingSelector.getValue()));
325                 validatePageComplete();
326             }
327         });
328         
329         idSelector = new DynamicComboFieldEditor("id", "ID", parent);
330         idSelector.addComboListener(new SelectionListener() {
331
332             @Override
333             public void widgetSelected(SelectionEvent e) {
334                 widgetDefaultSelected(e);
335             }
336
337             @Override
338             public void widgetDefaultSelected(SelectionEvent e) {
339                 model.setIdIndex(Integer.parseInt(idSelector.getValue()));
340                 validatePageComplete();
341             }
342         });
343         
344     }
345
346     private void createVertexIndexMappingField(Group parent) {
347         xCoordSelector = new DynamicComboFieldEditor("xCoord", "X Coordinate", parent);
348         xCoordSelector.addComboListener(new SelectionListener() {
349
350             @Override
351             public void widgetSelected(SelectionEvent e) {
352                 widgetDefaultSelected(e);
353             }
354
355             @Override
356             public void widgetDefaultSelected(SelectionEvent e) {
357                 model.setXCoordIndex(Integer.parseInt(xCoordSelector.getValue()));
358                 validatePageComplete();
359             }
360         });
361
362         yCoordSelector = new DynamicComboFieldEditor("yCoord", "Y Coordinate", parent);
363         yCoordSelector.addComboListener(new SelectionListener() {
364
365             @Override
366             public void widgetSelected(SelectionEvent e) {
367                 widgetDefaultSelected(e);
368             }
369
370             @Override
371             public void widgetDefaultSelected(SelectionEvent e) {
372                 model.setYCoordIndex(Integer.parseInt(yCoordSelector.getValue()));
373                 validatePageComplete();
374             }
375         });
376         zValueSelector = new DynamicComboFieldEditor("zValue", "Z Value", parent);
377         zValueSelector.addComboListener(new SelectionListener() {
378
379             @Override
380             public void widgetSelected(SelectionEvent e) {
381                 widgetDefaultSelected(e);
382             }
383
384             @Override
385             public void widgetDefaultSelected(SelectionEvent e) {
386                 model.setZCoordIndex(Integer.parseInt(zValueSelector.getValue()));
387                 validatePageComplete();
388             }
389         });
390         supplyTempValueSelector = new DynamicComboFieldEditor("tempValue", "Supply Temperature value", parent);
391         supplyTempValueSelector.addComboListener(new SelectionListener() {
392
393             @Override
394             public void widgetSelected(SelectionEvent e) {
395                 widgetDefaultSelected(e);
396             }
397
398             @Override
399             public void widgetDefaultSelected(SelectionEvent e) {
400                 model.setSupplyTempIndex(Integer.parseInt(supplyTempValueSelector.getValue()));
401                 validatePageComplete();
402             }
403         });
404         returnTempValueSelector = new DynamicComboFieldEditor("returnTempValue", "Return Temperature value", parent);
405         returnTempValueSelector.addComboListener(new SelectionListener() {
406
407             @Override
408             public void widgetSelected(SelectionEvent e) {
409                 widgetDefaultSelected(e);
410             }
411
412             @Override
413             public void widgetDefaultSelected(SelectionEvent e) {
414                 model.setReturnTempIndex(Integer.parseInt(returnTempValueSelector.getValue()));
415                 validatePageComplete();
416             }
417         });
418         supplyPressureValueSelector = new DynamicComboFieldEditor("pressureValue", "Supply Pressure value", parent);
419         supplyPressureValueSelector.addComboListener(new SelectionListener() {
420
421             @Override
422             public void widgetSelected(SelectionEvent e) {
423                 widgetDefaultSelected(e);
424             }
425
426             @Override
427             public void widgetDefaultSelected(SelectionEvent e) {
428                 model.setSupplyPressureIndex(Integer.parseInt(supplyPressureValueSelector.getValue()));
429                 validatePageComplete();
430             }
431         });
432         returnPressureValueSelector = new DynamicComboFieldEditor("returnPressureValue", "Return Pressure value", parent);
433         returnPressureValueSelector.addComboListener(new SelectionListener() {
434
435             @Override
436             public void widgetSelected(SelectionEvent e) {
437                 widgetDefaultSelected(e);
438             }
439
440             @Override
441             public void widgetDefaultSelected(SelectionEvent e) {
442                 model.setReturnPressureIndex(Integer.parseInt(returnPressureValueSelector.getValue()));
443                 validatePageComplete();
444             }
445         });
446         dpSelector = new DynamicComboFieldEditor("dpValue", "Delta pressure ", parent);
447         dpSelector.addComboListener(new SelectionListener() {
448
449             @Override
450             public void widgetSelected(SelectionEvent e) {
451                 widgetDefaultSelected(e);
452             }
453
454             @Override
455             public void widgetDefaultSelected(SelectionEvent e) {
456                 model.setDeltaPressureIndex(Integer.parseInt(dpSelector.getValue()));
457                 validatePageComplete();
458             }
459         });
460         dtSelector = new DynamicComboFieldEditor("dtValue", "Delta temperature ", parent);
461         dtSelector.addComboListener(new SelectionListener() {
462
463             @Override
464             public void widgetSelected(SelectionEvent e) {
465                 widgetDefaultSelected(e);
466             }
467
468             @Override
469             public void widgetDefaultSelected(SelectionEvent e) {
470                 model.setDeltaTemperatureIndex(Integer.parseInt(dtSelector.getValue()));
471                 validatePageComplete();
472             }
473         });
474         heatPowerSelector = new DynamicComboFieldEditor("heatPowerValue", "Heat Power", parent);
475         heatPowerSelector.addComboListener(new SelectionListener() {
476
477             @Override
478             public void widgetSelected(SelectionEvent e) {
479                 widgetDefaultSelected(e);
480             }
481
482             @Override
483             public void widgetDefaultSelected(SelectionEvent e) {
484                 model.setHeatPowerIndex(Integer.parseInt(heatPowerSelector.getValue()));
485                 validatePageComplete();
486             }
487         });
488         nominalHeadMSelector = new DynamicComboFieldEditor("nominalHeadMValue", "nominalHeadM", parent);
489         nominalHeadMSelector.addComboListener(new SelectionListener() {
490
491             @Override
492             public void widgetSelected(SelectionEvent e) {
493                 widgetDefaultSelected(e);
494             }
495
496             @Override
497             public void widgetDefaultSelected(SelectionEvent e) {
498                 model.setNominalHeadMIndex(Integer.parseInt(nominalHeadMSelector.getValue()));
499                 validatePageComplete();
500             }
501         });
502         nominalHeadBSelector = new DynamicComboFieldEditor("nominalHeadBValue", "nominalHeadB", parent);
503         nominalHeadBSelector.addComboListener(new SelectionListener() {
504
505             @Override
506             public void widgetSelected(SelectionEvent e) {
507                 widgetDefaultSelected(e);
508             }
509
510             @Override
511             public void widgetDefaultSelected(SelectionEvent e) {
512                 model.setNominalHeadBIndex(Integer.parseInt(nominalHeadBSelector.getValue()));
513                 validatePageComplete();
514             }
515         });
516         nominalFlowSelector = new DynamicComboFieldEditor("nominalFlowValue", "nominalFlow", parent);
517         nominalFlowSelector.addComboListener(new SelectionListener() {
518
519             @Override
520             public void widgetSelected(SelectionEvent e) {
521                 widgetDefaultSelected(e);
522             }
523
524             @Override
525             public void widgetDefaultSelected(SelectionEvent e) {
526                 model.setNominalFlowIndex(Integer.parseInt(nominalFlowSelector.getValue()));
527                 validatePageComplete();
528             }
529         });
530
531         maximumHeadMSelector = new DynamicComboFieldEditor("maximumHeadMValue", "maximumHeadM", parent);
532         maximumHeadMSelector.addComboListener(new SelectionListener() {
533
534             @Override
535             public void widgetSelected(SelectionEvent e) {
536                 widgetDefaultSelected(e);
537             }
538
539             @Override
540             public void widgetDefaultSelected(SelectionEvent e) {
541                 model.setMaximumHeadMIndex(Integer.parseInt(maximumHeadMSelector.getValue()));
542                 validatePageComplete();
543             }
544         });
545         heatLoadDsSelector = new DynamicComboFieldEditor("heatLoadDsValue", "heatLoadDs", parent);
546         heatLoadDsSelector.addComboListener(new SelectionListener() {
547
548             @Override
549             public void widgetSelected(SelectionEvent e) {
550                 widgetDefaultSelected(e);
551             }
552
553             @Override
554             public void widgetDefaultSelected(SelectionEvent e) {
555                 model.setHeatLoadDsIndex(Integer.parseInt(heatLoadDsSelector.getValue()));
556                 validatePageComplete();
557             }
558         });
559         massFlowSelector = new DynamicComboFieldEditor("massFlowValue", "massFlow", parent);
560         massFlowSelector.addComboListener(new SelectionListener() {
561
562             @Override
563             public void widgetSelected(SelectionEvent e) {
564                 widgetDefaultSelected(e);
565             }
566
567             @Override
568             public void widgetDefaultSelected(SelectionEvent e) {
569                 model.setMassFlowIndex(Integer.parseInt(massFlowSelector.getValue()));
570                 validatePageComplete();
571             }
572         });
573         volFlowSelector = new DynamicComboFieldEditor("volFlowValue", "volFlow", parent);
574         volFlowSelector.addComboListener(new SelectionListener() {
575
576             @Override
577             public void widgetSelected(SelectionEvent e) {
578                 widgetDefaultSelected(e);
579             }
580
581             @Override
582             public void widgetDefaultSelected(SelectionEvent e) {
583                 model.setVolFlowIndex(Integer.parseInt(volFlowSelector.getValue()));
584                 validatePageComplete();
585             }
586         });
587         velocitySelector = new DynamicComboFieldEditor("velocityValue", "velocity", parent);
588         velocitySelector.addComboListener(new SelectionListener() {
589
590             @Override
591             public void widgetSelected(SelectionEvent e) {
592                 widgetDefaultSelected(e);
593             }
594
595             @Override
596             public void widgetDefaultSelected(SelectionEvent e) {
597                 model.setVelocityIndex(Integer.parseInt(velocitySelector.getValue()));
598                 validatePageComplete();
599             }
600         });
601         flowAreaSelector = new DynamicComboFieldEditor("flowAreaValue", "flowArea", parent);
602         flowAreaSelector.addComboListener(new SelectionListener() {
603
604             @Override
605             public void widgetSelected(SelectionEvent e) {
606                 widgetDefaultSelected(e);
607             }
608
609             @Override
610             public void widgetDefaultSelected(SelectionEvent e) {
611                 model.setFlowAreaIndex(Integer.parseInt(flowAreaSelector.getValue()));
612                 validatePageComplete();
613             }
614         });
615         nominalPressureLossSelector = new DynamicComboFieldEditor("nominalPressureLossValue", "nominalPressureLoss", parent);
616         nominalPressureLossSelector.addComboListener(new SelectionListener() {
617
618             @Override
619             public void widgetSelected(SelectionEvent e) {
620                 widgetDefaultSelected(e);
621             }
622
623             @Override
624             public void widgetDefaultSelected(SelectionEvent e) {
625                 model.setNominalPressureLossIndex(Integer.parseInt(nominalPressureLossSelector.getValue()));
626                 validatePageComplete();
627             }
628         });
629         valvePositionSelector = new DynamicComboFieldEditor("valvePositionSelectorValue", "valvePositionSelector", parent);
630         valvePositionSelector.addComboListener(new SelectionListener() {
631
632             @Override
633             public void widgetSelected(SelectionEvent e) {
634                 widgetDefaultSelected(e);
635             }
636
637             @Override
638             public void widgetDefaultSelected(SelectionEvent e) {
639                 model.setValvePositionIndex(Integer.parseInt(valvePositionSelector.getValue()));
640                 validatePageComplete();
641             }
642         });
643         addressSelector = new DynamicComboFieldEditor("addressValue", "addressSelector", parent);
644         addressSelector.addComboListener(new SelectionListener() {
645
646             @Override
647             public void widgetSelected(SelectionEvent e) {
648                 widgetDefaultSelected(e);
649             }
650
651             @Override
652             public void widgetDefaultSelected(SelectionEvent e) {
653                 model.setAddressIndex(Integer.parseInt(addressSelector.getValue()));
654                 validatePageComplete();
655             }
656         });
657         
658
659     }
660
661     private void createEdgeIndexMappingField(Group parent) {
662         
663 //        Composite paddingComposite = new Composite(parent, SWT.NONE);
664 //        GridLayoutFactory.fillDefaults().numColumns(2).applyTo(paddingComposite);
665         
666         startXCoordSelector = new DynamicComboFieldEditor("startxCoord", "Start X Coordinate", parent);
667         startXCoordSelector.addComboListener(new SelectionListener() {
668
669             @Override
670             public void widgetSelected(SelectionEvent e) {
671                 widgetDefaultSelected(e);
672             }
673
674             @Override
675             public void widgetDefaultSelected(SelectionEvent e) {
676                 model.setStartXCoordIndex(Integer.parseInt(startXCoordSelector.getValue()));
677                 validatePageComplete();
678             }
679         });
680
681         startYCoordSelector = new DynamicComboFieldEditor("startyCoord", "Start Y Coordinate", parent);
682         startYCoordSelector.addComboListener(new SelectionListener() {
683
684             @Override
685             public void widgetSelected(SelectionEvent e) {
686                 widgetDefaultSelected(e);
687             }
688
689             @Override
690             public void widgetDefaultSelected(SelectionEvent e) {
691                 model.setStartYCoordIndex(Integer.parseInt(startYCoordSelector.getValue()));
692                 validatePageComplete();
693             }
694         });
695         startZValueSelector = new DynamicComboFieldEditor("startzValue", "Start Z Value", parent);
696         startZValueSelector.addComboListener(new SelectionListener() {
697
698             @Override
699             public void widgetSelected(SelectionEvent e) {
700                 widgetDefaultSelected(e);
701             }
702
703             @Override
704             public void widgetDefaultSelected(SelectionEvent e) {
705                 model.setStartZCoordIndex(Integer.parseInt(startZValueSelector.getValue()));
706                 validatePageComplete();
707             }
708         });
709         
710         endXCoordSelector = new DynamicComboFieldEditor("endxCoord", "End X Coordinate", parent);
711         endXCoordSelector.addComboListener(new SelectionListener() {
712
713             @Override
714             public void widgetSelected(SelectionEvent e) {
715                 widgetDefaultSelected(e);
716             }
717
718             @Override
719             public void widgetDefaultSelected(SelectionEvent e) {
720                 model.setEndXCoordIndex(Integer.parseInt(endXCoordSelector.getValue()));
721                 validatePageComplete();
722             }
723         });
724
725         endYCoordSelector = new DynamicComboFieldEditor("endyCoord", "End Y Coordinate", parent);
726         endYCoordSelector.addComboListener(new SelectionListener() {
727
728             @Override
729             public void widgetSelected(SelectionEvent e) {
730                 widgetDefaultSelected(e);
731             }
732
733             @Override
734             public void widgetDefaultSelected(SelectionEvent e) {
735                 model.setEndYCoordIndex(Integer.parseInt(endYCoordSelector.getValue()));
736                 validatePageComplete();
737             }
738         });
739         endZValueSelector = new DynamicComboFieldEditor("endzValue", "End Z Value", parent);
740         endZValueSelector.addComboListener(new SelectionListener() {
741
742             @Override
743             public void widgetSelected(SelectionEvent e) {
744                 widgetDefaultSelected(e);
745             }
746
747             @Override
748             public void widgetDefaultSelected(SelectionEvent e) {
749                 model.setEndZCoordIndex(Integer.parseInt(endZValueSelector.getValue()));
750                 validatePageComplete();
751             }
752         });
753         detailedGeometrySelector = new DynamicComboFieldEditor("detailedGeometryValue", "Geometry", parent);
754         detailedGeometrySelector.addComboListener(new SelectionListener() {
755
756             @Override
757             public void widgetSelected(SelectionEvent e) {
758                 widgetDefaultSelected(e);
759             }
760
761             @Override
762             public void widgetDefaultSelected(SelectionEvent e) {
763                 model.detailedGeometryIndex(Integer.parseInt(detailedGeometrySelector.getValue()));
764                 validatePageComplete();
765             }
766         });
767         diameterSelector = new DynamicComboFieldEditor("diameterValue", "Diameter value", parent);
768         diameterSelector.addComboListener(new SelectionListener() {
769
770             @Override
771             public void widgetSelected(SelectionEvent e) {
772                 widgetDefaultSelected(e);
773             }
774
775             @Override
776             public void widgetDefaultSelected(SelectionEvent e) {
777                 model.setDiameterIndex(Integer.parseInt(diameterSelector.getValue()));
778                 validatePageComplete();
779             }
780         });
781         outerDiameterSelector = new DynamicComboFieldEditor("outerDiameterValue", "Outer Diameter value", parent);
782         outerDiameterSelector.addComboListener(new SelectionListener() {
783
784             @Override
785             public void widgetSelected(SelectionEvent e) {
786                 widgetDefaultSelected(e);
787             }
788
789             @Override
790             public void widgetDefaultSelected(SelectionEvent e) {
791                 model.setOuterDiameterIndex(Integer.parseInt(outerDiameterSelector.getValue()));
792                 validatePageComplete();
793             }
794         });
795         nominalMassFlowSelector = new DynamicComboFieldEditor("nominalMassFlowValue", "Nominal Mass Flow", parent);
796         nominalMassFlowSelector.addComboListener(new SelectionListener() {
797
798             @Override
799             public void widgetSelected(SelectionEvent e) {
800                 widgetDefaultSelected(e);
801             }
802
803             @Override
804             public void widgetDefaultSelected(SelectionEvent e) {
805                 model.setNominalMassFlowIndex(Integer.parseInt(nominalMassFlowSelector.getValue()));
806                 validatePageComplete();
807             }
808         });
809         edgeFlowAreaSelector = new DynamicComboFieldEditor("edgeFlowAreaValue", "Flow Area", parent);
810         edgeFlowAreaSelector.addComboListener(new SelectionListener() {
811
812             @Override
813             public void widgetSelected(SelectionEvent e) {
814                 widgetDefaultSelected(e);
815             }
816
817             @Override
818             public void widgetDefaultSelected(SelectionEvent e) {
819                 model.setEdgeFlowAreaIndex(Integer.parseInt(edgeFlowAreaSelector.getValue()));
820                 validatePageComplete();
821             }
822         });
823         kReturnSelector = new DynamicComboFieldEditor("kReturnValue", "K Return", parent);
824         kReturnSelector.addComboListener(new SelectionListener() {
825
826             @Override
827             public void widgetSelected(SelectionEvent e) {
828                 widgetDefaultSelected(e);
829             }
830
831             @Override
832             public void widgetDefaultSelected(SelectionEvent e) {
833                 model.setKReturnIndex(Integer.parseInt(kReturnSelector.getValue()));
834                 validatePageComplete();
835             }
836         });
837         kSupplySelector = new DynamicComboFieldEditor("kSupplyValue", "K Supply", parent);
838         kSupplySelector.addComboListener(new SelectionListener() {
839
840             @Override
841             public void widgetSelected(SelectionEvent e) {
842                 widgetDefaultSelected(e);
843             }
844
845             @Override
846             public void widgetDefaultSelected(SelectionEvent e) {
847                 model.setKSupplyIndex(Integer.parseInt(kSupplySelector.getValue()));
848                 validatePageComplete();
849             }
850         });
851         tGroundSelector = new DynamicComboFieldEditor("tGroundValue", "Temperature Ground", parent);
852         tGroundSelector.addComboListener(new SelectionListener() {
853
854             @Override
855             public void widgetSelected(SelectionEvent e) {
856                 widgetDefaultSelected(e);
857             }
858
859             @Override
860             public void widgetDefaultSelected(SelectionEvent e) {
861                 model.setTGroundIndex(Integer.parseInt(tGroundSelector.getValue()));
862                 validatePageComplete();
863             }
864         });
865         lengthSelector = new DynamicComboFieldEditor("lengthValue", "lengthSelector", parent);
866         lengthSelector.addComboListener(new SelectionListener() {
867
868             @Override
869             public void widgetSelected(SelectionEvent e) {
870                 widgetDefaultSelected(e);
871             }
872
873             @Override
874             public void widgetDefaultSelected(SelectionEvent e) {
875                 model.setLengthIndex(Integer.parseInt(lengthSelector.getValue()));
876                 validatePageComplete();
877             }
878         });
879     }
880
881     private void updateCombos() {
882         String[][] namesAndValues = new String[headerIndexAndValues.size() + 1][];
883
884         namesAndValues[0] = new String[] {"", "-1"};
885         int i = 1;
886         for (Entry<Integer, String> entry : headerIndexAndValues.entrySet()) {
887             int key = entry.getKey();
888             String value = entry.getValue();
889
890             String[] nameAndValue = new String[2];
891             nameAndValue[0] = value;
892             nameAndValue[1] = Integer.toString(key);
893             namesAndValues[i++] = nameAndValue;
894         }
895
896         if (model.isVertexImport())
897             updateVertexCombos(namesAndValues);
898         else
899             updateEdgeCombos(namesAndValues);
900
901         componentMappingSelector.updateCombo(namesAndValues);
902         idSelector.updateCombo(namesAndValues);
903     }
904
905     private void updateEdgeCombos(String[][] namesAndValues) {
906         startXCoordSelector.updateCombo(namesAndValues);
907         endXCoordSelector.updateCombo(namesAndValues);
908         startYCoordSelector.updateCombo(namesAndValues);
909         endYCoordSelector.updateCombo(namesAndValues);
910         startZValueSelector.updateCombo(namesAndValues);
911         endZValueSelector.updateCombo(namesAndValues);
912         detailedGeometrySelector.updateCombo(namesAndValues);
913         diameterSelector.updateCombo(namesAndValues);
914         outerDiameterSelector.updateCombo(namesAndValues);
915         nominalMassFlowSelector.updateCombo(namesAndValues);
916         edgeFlowAreaSelector.updateCombo(namesAndValues);
917         kReturnSelector.updateCombo(namesAndValues);
918         kSupplySelector.updateCombo(namesAndValues);
919         tGroundSelector.updateCombo(namesAndValues);
920         lengthSelector.updateCombo(namesAndValues);
921     }
922
923     private void updateVertexCombos(String[][] namesAndValues) {
924         xCoordSelector.updateCombo(namesAndValues);
925         yCoordSelector.updateCombo(namesAndValues);
926         zValueSelector.updateCombo(namesAndValues);
927         supplyTempValueSelector.updateCombo(namesAndValues);       
928         returnTempValueSelector.updateCombo(namesAndValues);       
929         supplyPressureValueSelector.updateCombo(namesAndValues);   
930         returnPressureValueSelector.updateCombo(namesAndValues);   
931         dpSelector.updateCombo(namesAndValues);                    
932         dtSelector.updateCombo(namesAndValues);                    
933         heatPowerSelector.updateCombo(namesAndValues);             
934         valvePositionSelector.updateCombo(namesAndValues);             
935         nominalHeadMSelector.updateCombo(namesAndValues);          
936         nominalHeadBSelector.updateCombo(namesAndValues);          
937         nominalFlowSelector.updateCombo(namesAndValues);           
938         maximumHeadMSelector.updateCombo(namesAndValues);          
939         heatLoadDsSelector.updateCombo(namesAndValues);            
940         massFlowSelector.updateCombo(namesAndValues);              
941         volFlowSelector.updateCombo(namesAndValues);               
942         velocitySelector.updateCombo(namesAndValues);              
943         flowAreaSelector.updateCombo(namesAndValues);              
944         nominalPressureLossSelector.updateCombo(namesAndValues);   
945         addressSelector.updateCombo(namesAndValues);
946     }
947     
948     
949
950     private void updateHeaders() {
951         if (headerTable != null)
952             headerTable.dispose();
953         headerTable = new Table(tableComposite, SWT.NONE);
954         headerTable.setHeaderVisible(true);
955         headerTable.setLinesVisible(true);
956         GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite);
957         for (int i = 0; i < headerTable.getColumns().length; i++) {
958             TableColumn column = headerTable.getColumns()[i];
959             column.dispose();
960         }
961         for (int i = 0; i < headerTable.getItemCount(); i++) {
962             TableItem item = headerTable.getItem(i);
963             item.dispose();
964         }
965
966         headerIndexAndValues.clear();
967
968         try {
969             List<CSVRecord> rows = model.getRows(5, false);
970
971             for (int k = 0; k < rows.size(); k++) {
972                 CSVRecord row = rows.get(k);
973
974                 int columnCount = row.size();
975                 for (int i = 0; i < columnCount; i++) {
976                     String value = row.get(i);
977                     if (k == 0) {
978                         TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);
979                         headerCol.setText(value);
980
981                         tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));
982                         headerCol.pack();
983
984                         headerIndexAndValues.put(i, value);
985                     } else {
986                         int actualK = k - 1;
987                         TableItem item;
988                         int itemCount = headerTable.getItemCount();
989                         if (actualK >= itemCount) {
990                             item = new TableItem(headerTable, SWT.NONE);
991                         } else {
992                             item = headerTable.getItem(actualK);
993                         }
994                         item.setText(i, value);
995                     }
996                 }
997             }
998
999         } catch (IOException e) {
1000             setErrorMessage(e.getMessage());
1001         }
1002     }
1003
1004     protected void validatePageComplete() {
1005         if (model.isVertexImport())
1006             setPageComplete(model.getXCoordIndex() != -1 && model.getYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);
1007         else
1008             setPageComplete(model.getStartXCoordIndex() != 1 && model.getStartYCoordIndex() != -1 && model.getEndXCoordIndex() != -1 && model.getEndYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);
1009     }
1010
1011 }