1 package org.simantics.district.imports.ui;
3 import java.io.IOException;
4 import java.util.HashMap;
7 import java.util.Map.Entry;
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.GridLayoutFactory;
16 import org.eclipse.jface.layout.TableColumnLayout;
17 import org.eclipse.jface.viewers.ColumnWeightData;
18 import org.eclipse.jface.wizard.IWizardContainer;
19 import org.eclipse.jface.wizard.WizardPage;
20 import org.eclipse.swt.SWT;
21 import org.eclipse.swt.events.ModifyEvent;
22 import org.eclipse.swt.events.ModifyListener;
23 import org.eclipse.swt.events.SelectionAdapter;
24 import org.eclipse.swt.events.SelectionEvent;
25 import org.eclipse.swt.events.SelectionListener;
26 import org.eclipse.swt.layout.GridLayout;
27 import org.eclipse.swt.widgets.Button;
28 import org.eclipse.swt.widgets.Combo;
29 import org.eclipse.swt.widgets.Composite;
30 import org.eclipse.swt.widgets.Group;
31 import org.eclipse.swt.widgets.Label;
32 import org.eclipse.swt.widgets.Table;
33 import org.eclipse.swt.widgets.TableColumn;
34 import org.eclipse.swt.widgets.TableItem;
35 import org.eclipse.swt.widgets.Text;
36 import org.geotools.referencing.CRS;
37 import org.simantics.district.imports.ui.controls.DynamicComboFieldEditor;
39 public class CSVImportWizardPage extends WizardPage {
41 private CSVImportModel model;
43 private Map<Integer, String> headerIndexAndValues = new HashMap<>();
45 private Table headerTable;
46 // private Button firstAsHeader;
48 private Combo delimiterCombo;
49 private TableColumnLayout tableColumnLayout;
50 private Composite tableComposite;
51 // private FileSelectionWidget wktFileSelection;
53 // Common for vertex and edge
54 private DynamicComboFieldEditor componentMappingSelector;
55 private DynamicComboFieldEditor idSelector;
56 private DynamicComboFieldEditor labelSelector;
59 private DynamicComboFieldEditor xCoordSelector;
60 private DynamicComboFieldEditor yCoordSelector;
61 private DynamicComboFieldEditor zValueSelector;
63 private DynamicComboFieldEditor supplyTempValueSelector;
64 private DynamicComboFieldEditor returnTempValueSelector;
65 private DynamicComboFieldEditor supplyPressureValueSelector;
66 private DynamicComboFieldEditor returnPressureValueSelector;
67 private DynamicComboFieldEditor dpSelector;
68 private DynamicComboFieldEditor dtSelector;
69 private DynamicComboFieldEditor heatPowerSelector;
70 private DynamicComboFieldEditor nominalHeadMSelector;
71 private DynamicComboFieldEditor nominalHeadBSelector;
72 private DynamicComboFieldEditor nominalFlowSelector;
73 private DynamicComboFieldEditor maximumHeadMSelector;
74 private DynamicComboFieldEditor heatLoadDsSelector;
75 private DynamicComboFieldEditor massFlowSelector;
76 private DynamicComboFieldEditor volFlowSelector;
77 private DynamicComboFieldEditor velocitySelector;
78 private DynamicComboFieldEditor flowAreaSelector;
79 private DynamicComboFieldEditor nominalPressureLossSelector;
80 private DynamicComboFieldEditor valvePositionSelector;
83 private DynamicComboFieldEditor startXCoordSelector;
84 private DynamicComboFieldEditor startYCoordSelector;
85 private DynamicComboFieldEditor startZValueSelector;
86 private DynamicComboFieldEditor endXCoordSelector;
87 private DynamicComboFieldEditor endYCoordSelector;
88 private DynamicComboFieldEditor endZValueSelector;
90 private Text edgeConnectionPadding;
92 private DynamicComboFieldEditor outerDiameterSelector;
93 private DynamicComboFieldEditor diameterSelector;
94 private DynamicComboFieldEditor nominalMassFlowSelector;
96 private Group indexMappingGroup;
98 private Composite composite;
100 private Button isVertexImport;
102 private Combo sourceCRSCombo;
104 private DynamicComboFieldEditor edgeFlowAreaSelector;
106 private DynamicComboFieldEditor kReturnSelector;
108 private DynamicComboFieldEditor kSupplySelector;
110 private DynamicComboFieldEditor tGroundSelector;
112 protected CSVImportWizardPage(CSVImportModel model) {
113 super("Import CSV Data");
115 setMessage("Select column index mappings");
119 public void createControl(Composite parent) {
120 composite = new Composite(parent, SWT.NONE);
121 composite.setLayout(new GridLayout(1, false));
122 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);
124 Label label = new Label(composite, SWT.NONE);
125 label.setText("Select delimiter");
127 delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
128 delimiterCombo.setToolTipText("Select the delimiter that is used to separate elements in the CSV file");
129 String[] formats = model.getDelimiterFormats();
130 delimiterCombo.setItems(formats);
131 if (formats.length > 0)
132 delimiterCombo.select(0);
133 delimiterCombo.addSelectionListener(new SelectionListener() {
136 public void widgetSelected(SelectionEvent e) {
137 model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex()));
143 public void widgetDefaultSelected(SelectionEvent e) {
148 // firstAsHeader = new Button(composite, SWT.CHECK);
149 // firstAsHeader.setText("Read first row as header");
150 // firstAsHeader.setSelection(model.getReadFirstAsHeader());
151 // firstAsHeader.addSelectionListener(new SelectionListener() {
154 // public void widgetSelected(SelectionEvent e) {
155 // model.setReadFirstAsHeader(firstAsHeader.getSelection());
161 // public void widgetDefaultSelected(SelectionEvent e) {
162 // widgetSelected(e);
166 tableComposite = new Composite(composite, SWT.BORDER);
167 tableColumnLayout = new TableColumnLayout();
168 tableComposite.setLayout(tableColumnLayout);
170 label = new Label(composite, SWT.NONE);
171 label.setText("Select source Coordinate Reference System");
173 sourceCRSCombo = new Combo(composite, SWT.NONE);
174 sourceCRSCombo.setToolTipText("Select the coordinate reference system that is used in the source material for possible transformation to target coordinate reference system (EPSG:4326)");
175 Set<String> codes = CRS.getSupportedCodes("EPSG");
176 sourceCRSCombo.setItems(codes.toArray(new String[codes.size()]));
177 sourceCRSCombo.addSelectionListener(new SelectionAdapter() {
180 public void widgetSelected(SelectionEvent e) {
181 String current = sourceCRSCombo.getItem(sourceCRSCombo.getSelectionIndex());
182 model.setSourceCRS("EPSG:" + current);
186 sourceCRSCombo.addModifyListener(new ModifyListener() {
189 public void modifyText(ModifyEvent e) {
190 String currentText = sourceCRSCombo.getText();
191 if (codes.contains(currentText)) {
193 String[] items = sourceCRSCombo.getItems();
195 for (i = 0; i < items.length; i++) {
196 String item = items[i];
197 if (currentText.equals(item)) {
202 sourceCRSCombo.select(i);
203 model.setSourceCRS("EPSG:" + currentText);
205 System.err.println("this should not happen");
211 // wktFileSelection = new FileSelectionWidget(composite, "WKT file", SWT.OPEN);
212 // wktFileSelection.addListener(new FileSelectionListener() {
215 // public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {
216 // String[] selection = wktFileSelection.getFilename();
217 // if (selection != null && selection.length > 0) {
218 // Path wktFile = Paths.get(selection[0]);
219 // if (!Files.exists(wktFile)) {
220 // setErrorMessage("File " + wktFile.toAbsolutePath() + " does not exist");
222 // model.setWKTFile(wktFile);
223 // validatePageComplete();
229 isVertexImport = new Button(composite, SWT.CHECK);
230 isVertexImport.setText("File contains vertices");
231 isVertexImport.setToolTipText("Enable this if the file contains vertices, i.e. points");
232 isVertexImport.setSelection(model.isVertexImport());
233 isVertexImport.addSelectionListener(new SelectionListener() {
236 public void widgetSelected(SelectionEvent e) {
237 model.setVertexImport(isVertexImport.getSelection());
238 updateControls(false);
242 public void widgetDefaultSelected(SelectionEvent e) {
247 updateControls(true);
249 setControl(composite);
251 final IWizardContainer container = getContainer();
253 if (container instanceof IPageChangeProvider) {
254 ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() {
257 public void pageChanged(PageChangedEvent event) {
259 CSVImportWizardPage.this.updateControls(false);
264 validatePageComplete();
267 private void updateControls(boolean initial) {
268 createIndexMappingGroup();
271 composite.layout(true, true);
274 private void createIndexMappingGroup() {
275 if (indexMappingGroup != null)
276 indexMappingGroup.dispose();
278 indexMappingGroup = new Group(composite, SWT.NONE);
279 indexMappingGroup.setText("Column index mapping");
280 GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(indexMappingGroup);
282 if (model.isVertexImport())
283 createVertexIndexMappingField(indexMappingGroup);
285 createEdgeIndexMappingField(indexMappingGroup);
287 createCommonIndexMappingField(indexMappingGroup);
289 if (!model.isVertexImport()) {
290 Label label = new Label(indexMappingGroup, SWT.NONE);
291 label.setText("Connection point padding");
292 GridDataFactory.fillDefaults().applyTo(label);
293 edgeConnectionPadding = new Text(indexMappingGroup, SWT.BORDER);
294 GridDataFactory.fillDefaults().applyTo(edgeConnectionPadding);
295 edgeConnectionPadding.setText("0.0001"); // default
296 edgeConnectionPadding.addModifyListener(new ModifyListener() {
299 public void modifyText(ModifyEvent e) {
301 double padding = Double.parseDouble("");
302 model.setEdgePapping(padding);
303 } catch (NumberFormatException ee) {
311 private void createCommonIndexMappingField(Group parent) {
313 componentMappingSelector = new DynamicComboFieldEditor("componentMapping", "Apros component mapping", parent);
314 componentMappingSelector.addComboListener(new SelectionListener() {
317 public void widgetSelected(SelectionEvent e) {
318 widgetDefaultSelected(e);
322 public void widgetDefaultSelected(SelectionEvent e) {
323 model.setComponentMappingIndex(Integer.parseInt(componentMappingSelector.getValue()));
324 validatePageComplete();
328 idSelector = new DynamicComboFieldEditor("id", "ID", parent);
329 idSelector.addComboListener(new SelectionListener() {
332 public void widgetSelected(SelectionEvent e) {
333 widgetDefaultSelected(e);
337 public void widgetDefaultSelected(SelectionEvent e) {
338 model.setIdIndex(Integer.parseInt(idSelector.getValue()));
339 validatePageComplete();
345 private void createVertexIndexMappingField(Group parent) {
346 xCoordSelector = new DynamicComboFieldEditor("xCoord", "X Coordinate", parent);
347 xCoordSelector.addComboListener(new SelectionListener() {
350 public void widgetSelected(SelectionEvent e) {
351 widgetDefaultSelected(e);
355 public void widgetDefaultSelected(SelectionEvent e) {
356 model.setXCoordIndex(Integer.parseInt(xCoordSelector.getValue()));
357 validatePageComplete();
361 yCoordSelector = new DynamicComboFieldEditor("yCoord", "Y Coordinate", parent);
362 yCoordSelector.addComboListener(new SelectionListener() {
365 public void widgetSelected(SelectionEvent e) {
366 widgetDefaultSelected(e);
370 public void widgetDefaultSelected(SelectionEvent e) {
371 model.setYCoordIndex(Integer.parseInt(yCoordSelector.getValue()));
372 validatePageComplete();
375 zValueSelector = new DynamicComboFieldEditor("zValue", "Z Value", parent);
376 zValueSelector.addComboListener(new SelectionListener() {
379 public void widgetSelected(SelectionEvent e) {
380 widgetDefaultSelected(e);
384 public void widgetDefaultSelected(SelectionEvent e) {
385 model.setZCoordIndex(Integer.parseInt(zValueSelector.getValue()));
386 validatePageComplete();
389 supplyTempValueSelector = new DynamicComboFieldEditor("tempValue", "Supply Temperature value", parent);
390 supplyTempValueSelector.addComboListener(new SelectionListener() {
393 public void widgetSelected(SelectionEvent e) {
394 widgetDefaultSelected(e);
398 public void widgetDefaultSelected(SelectionEvent e) {
399 model.setSupplyTempIndex(Integer.parseInt(supplyTempValueSelector.getValue()));
400 validatePageComplete();
403 returnTempValueSelector = new DynamicComboFieldEditor("returnTempValue", "Return Temperature value", parent);
404 returnTempValueSelector.addComboListener(new SelectionListener() {
407 public void widgetSelected(SelectionEvent e) {
408 widgetDefaultSelected(e);
412 public void widgetDefaultSelected(SelectionEvent e) {
413 model.setReturnTempIndex(Integer.parseInt(returnTempValueSelector.getValue()));
414 validatePageComplete();
417 supplyPressureValueSelector = new DynamicComboFieldEditor("pressureValue", "Supply Pressure value", parent);
418 supplyPressureValueSelector.addComboListener(new SelectionListener() {
421 public void widgetSelected(SelectionEvent e) {
422 widgetDefaultSelected(e);
426 public void widgetDefaultSelected(SelectionEvent e) {
427 model.setSupplyPressureIndex(Integer.parseInt(supplyPressureValueSelector.getValue()));
428 validatePageComplete();
431 returnPressureValueSelector = new DynamicComboFieldEditor("returnPressureValue", "Return Pressure value", parent);
432 returnPressureValueSelector.addComboListener(new SelectionListener() {
435 public void widgetSelected(SelectionEvent e) {
436 widgetDefaultSelected(e);
440 public void widgetDefaultSelected(SelectionEvent e) {
441 model.setReturnPressureIndex(Integer.parseInt(returnPressureValueSelector.getValue()));
442 validatePageComplete();
445 dpSelector = new DynamicComboFieldEditor("dpValue", "Delta pressure ", parent);
446 dpSelector.addComboListener(new SelectionListener() {
449 public void widgetSelected(SelectionEvent e) {
450 widgetDefaultSelected(e);
454 public void widgetDefaultSelected(SelectionEvent e) {
455 model.setDeltaPressureIndex(Integer.parseInt(dpSelector.getValue()));
456 validatePageComplete();
459 dtSelector = new DynamicComboFieldEditor("dtValue", "Delta temperature ", parent);
460 dtSelector.addComboListener(new SelectionListener() {
463 public void widgetSelected(SelectionEvent e) {
464 widgetDefaultSelected(e);
468 public void widgetDefaultSelected(SelectionEvent e) {
469 model.setDeltaTemperatureIndex(Integer.parseInt(dtSelector.getValue()));
470 validatePageComplete();
473 heatPowerSelector = new DynamicComboFieldEditor("heatPowerValue", "Heat Power", parent);
474 heatPowerSelector.addComboListener(new SelectionListener() {
477 public void widgetSelected(SelectionEvent e) {
478 widgetDefaultSelected(e);
482 public void widgetDefaultSelected(SelectionEvent e) {
483 model.setHeatPowerIndex(Integer.parseInt(heatPowerSelector.getValue()));
484 validatePageComplete();
487 nominalHeadMSelector = new DynamicComboFieldEditor("nominalHeadMValue", "nominalHeadM", parent);
488 nominalHeadMSelector.addComboListener(new SelectionListener() {
491 public void widgetSelected(SelectionEvent e) {
492 widgetDefaultSelected(e);
496 public void widgetDefaultSelected(SelectionEvent e) {
497 model.setNominalHeadMIndex(Integer.parseInt(nominalHeadMSelector.getValue()));
498 validatePageComplete();
501 nominalHeadBSelector = new DynamicComboFieldEditor("nominalHeadBValue", "nominalHeadB", parent);
502 nominalHeadBSelector.addComboListener(new SelectionListener() {
505 public void widgetSelected(SelectionEvent e) {
506 widgetDefaultSelected(e);
510 public void widgetDefaultSelected(SelectionEvent e) {
511 model.setNominalHeadBIndex(Integer.parseInt(nominalHeadBSelector.getValue()));
512 validatePageComplete();
515 nominalFlowSelector = new DynamicComboFieldEditor("nominalFlowValue", "nominalFlow", parent);
516 nominalFlowSelector.addComboListener(new SelectionListener() {
519 public void widgetSelected(SelectionEvent e) {
520 widgetDefaultSelected(e);
524 public void widgetDefaultSelected(SelectionEvent e) {
525 model.setNominalFlowIndex(Integer.parseInt(nominalFlowSelector.getValue()));
526 validatePageComplete();
530 maximumHeadMSelector = new DynamicComboFieldEditor("maximumHeadMValue", "maximumHeadM", parent);
531 maximumHeadMSelector.addComboListener(new SelectionListener() {
534 public void widgetSelected(SelectionEvent e) {
535 widgetDefaultSelected(e);
539 public void widgetDefaultSelected(SelectionEvent e) {
540 model.setMaximumHeadMIndex(Integer.parseInt(maximumHeadMSelector.getValue()));
541 validatePageComplete();
544 heatLoadDsSelector = new DynamicComboFieldEditor("heatLoadDsValue", "heatLoadDs", parent);
545 heatLoadDsSelector.addComboListener(new SelectionListener() {
548 public void widgetSelected(SelectionEvent e) {
549 widgetDefaultSelected(e);
553 public void widgetDefaultSelected(SelectionEvent e) {
554 model.setHeatLoadDsIndex(Integer.parseInt(heatLoadDsSelector.getValue()));
555 validatePageComplete();
558 massFlowSelector = new DynamicComboFieldEditor("massFlowValue", "massFlow", parent);
559 massFlowSelector.addComboListener(new SelectionListener() {
562 public void widgetSelected(SelectionEvent e) {
563 widgetDefaultSelected(e);
567 public void widgetDefaultSelected(SelectionEvent e) {
568 model.setMassFlowIndex(Integer.parseInt(massFlowSelector.getValue()));
569 validatePageComplete();
572 volFlowSelector = new DynamicComboFieldEditor("volFlowValue", "volFlow", parent);
573 volFlowSelector.addComboListener(new SelectionListener() {
576 public void widgetSelected(SelectionEvent e) {
577 widgetDefaultSelected(e);
581 public void widgetDefaultSelected(SelectionEvent e) {
582 model.setVolFlowIndex(Integer.parseInt(volFlowSelector.getValue()));
583 validatePageComplete();
586 velocitySelector = new DynamicComboFieldEditor("velocityValue", "velocity", parent);
587 velocitySelector.addComboListener(new SelectionListener() {
590 public void widgetSelected(SelectionEvent e) {
591 widgetDefaultSelected(e);
595 public void widgetDefaultSelected(SelectionEvent e) {
596 model.setVelocityIndex(Integer.parseInt(velocitySelector.getValue()));
597 validatePageComplete();
600 flowAreaSelector = new DynamicComboFieldEditor("flowAreaValue", "flowArea", parent);
601 flowAreaSelector.addComboListener(new SelectionListener() {
604 public void widgetSelected(SelectionEvent e) {
605 widgetDefaultSelected(e);
609 public void widgetDefaultSelected(SelectionEvent e) {
610 model.setFlowAreaIndex(Integer.parseInt(flowAreaSelector.getValue()));
611 validatePageComplete();
614 nominalPressureLossSelector = new DynamicComboFieldEditor("nominalPressureLossValue", "nominalPressureLoss", parent);
615 nominalPressureLossSelector.addComboListener(new SelectionListener() {
618 public void widgetSelected(SelectionEvent e) {
619 widgetDefaultSelected(e);
623 public void widgetDefaultSelected(SelectionEvent e) {
624 model.setNominalPressureLossIndex(Integer.parseInt(nominalPressureLossSelector.getValue()));
625 validatePageComplete();
628 valvePositionSelector = new DynamicComboFieldEditor("valvePositionSelectorValue", "valvePositionSelector", parent);
629 valvePositionSelector.addComboListener(new SelectionListener() {
632 public void widgetSelected(SelectionEvent e) {
633 widgetDefaultSelected(e);
637 public void widgetDefaultSelected(SelectionEvent e) {
638 model.setValvePositionIndex(Integer.parseInt(valvePositionSelector.getValue()));
639 validatePageComplete();
644 private void createEdgeIndexMappingField(Group parent) {
646 // Composite paddingComposite = new Composite(parent, SWT.NONE);
647 // GridLayoutFactory.fillDefaults().numColumns(2).applyTo(paddingComposite);
649 startXCoordSelector = new DynamicComboFieldEditor("startxCoord", "Start X Coordinate", parent);
650 startXCoordSelector.addComboListener(new SelectionListener() {
653 public void widgetSelected(SelectionEvent e) {
654 widgetDefaultSelected(e);
658 public void widgetDefaultSelected(SelectionEvent e) {
659 model.setStartXCoordIndex(Integer.parseInt(startXCoordSelector.getValue()));
660 validatePageComplete();
664 startYCoordSelector = new DynamicComboFieldEditor("startyCoord", "Start Y Coordinate", parent);
665 startYCoordSelector.addComboListener(new SelectionListener() {
668 public void widgetSelected(SelectionEvent e) {
669 widgetDefaultSelected(e);
673 public void widgetDefaultSelected(SelectionEvent e) {
674 model.setStartYCoordIndex(Integer.parseInt(startYCoordSelector.getValue()));
675 validatePageComplete();
678 startZValueSelector = new DynamicComboFieldEditor("startzValue", "Start Z Value", parent);
679 startZValueSelector.addComboListener(new SelectionListener() {
682 public void widgetSelected(SelectionEvent e) {
683 widgetDefaultSelected(e);
687 public void widgetDefaultSelected(SelectionEvent e) {
688 model.setStartZCoordIndex(Integer.parseInt(startZValueSelector.getValue()));
689 validatePageComplete();
693 endXCoordSelector = new DynamicComboFieldEditor("endxCoord", "End X Coordinate", parent);
694 endXCoordSelector.addComboListener(new SelectionListener() {
697 public void widgetSelected(SelectionEvent e) {
698 widgetDefaultSelected(e);
702 public void widgetDefaultSelected(SelectionEvent e) {
703 model.setEndXCoordIndex(Integer.parseInt(endXCoordSelector.getValue()));
704 validatePageComplete();
708 endYCoordSelector = new DynamicComboFieldEditor("endyCoord", "End Y Coordinate", parent);
709 endYCoordSelector.addComboListener(new SelectionListener() {
712 public void widgetSelected(SelectionEvent e) {
713 widgetDefaultSelected(e);
717 public void widgetDefaultSelected(SelectionEvent e) {
718 model.setEndYCoordIndex(Integer.parseInt(endYCoordSelector.getValue()));
719 validatePageComplete();
722 endZValueSelector = new DynamicComboFieldEditor("endzValue", "End Z Value", parent);
723 endZValueSelector.addComboListener(new SelectionListener() {
726 public void widgetSelected(SelectionEvent e) {
727 widgetDefaultSelected(e);
731 public void widgetDefaultSelected(SelectionEvent e) {
732 model.setEndZCoordIndex(Integer.parseInt(endZValueSelector.getValue()));
733 validatePageComplete();
736 diameterSelector = new DynamicComboFieldEditor("diameterValue", "Diameter value", parent);
737 diameterSelector.addComboListener(new SelectionListener() {
740 public void widgetSelected(SelectionEvent e) {
741 widgetDefaultSelected(e);
745 public void widgetDefaultSelected(SelectionEvent e) {
746 model.setDiameterIndex(Integer.parseInt(diameterSelector.getValue()));
747 validatePageComplete();
750 outerDiameterSelector = new DynamicComboFieldEditor("outerDiameterValue", "Outer Diameter value", parent);
751 outerDiameterSelector.addComboListener(new SelectionListener() {
754 public void widgetSelected(SelectionEvent e) {
755 widgetDefaultSelected(e);
759 public void widgetDefaultSelected(SelectionEvent e) {
760 model.setOuterDiameterIndex(Integer.parseInt(outerDiameterSelector.getValue()));
761 validatePageComplete();
764 nominalMassFlowSelector = new DynamicComboFieldEditor("nominalMassFlowValue", "Nominal Mass Flow", parent);
765 nominalMassFlowSelector.addComboListener(new SelectionListener() {
768 public void widgetSelected(SelectionEvent e) {
769 widgetDefaultSelected(e);
773 public void widgetDefaultSelected(SelectionEvent e) {
774 model.setNominalMassFlowIndex(Integer.parseInt(nominalMassFlowSelector.getValue()));
775 validatePageComplete();
778 edgeFlowAreaSelector = new DynamicComboFieldEditor("edgeFlowAreaValue", "Flow Area", parent);
779 edgeFlowAreaSelector.addComboListener(new SelectionListener() {
782 public void widgetSelected(SelectionEvent e) {
783 widgetDefaultSelected(e);
787 public void widgetDefaultSelected(SelectionEvent e) {
788 model.setEdgeFlowAreaIndex(Integer.parseInt(edgeFlowAreaSelector.getValue()));
789 validatePageComplete();
792 kReturnSelector = new DynamicComboFieldEditor("kReturnValue", "K Return", parent);
793 kReturnSelector.addComboListener(new SelectionListener() {
796 public void widgetSelected(SelectionEvent e) {
797 widgetDefaultSelected(e);
801 public void widgetDefaultSelected(SelectionEvent e) {
802 model.setKReturnIndex(Integer.parseInt(kReturnSelector.getValue()));
803 validatePageComplete();
806 kSupplySelector = new DynamicComboFieldEditor("kSupplyValue", "K Supply", parent);
807 kSupplySelector.addComboListener(new SelectionListener() {
810 public void widgetSelected(SelectionEvent e) {
811 widgetDefaultSelected(e);
815 public void widgetDefaultSelected(SelectionEvent e) {
816 model.setKSupplyIndex(Integer.parseInt(kSupplySelector.getValue()));
817 validatePageComplete();
820 tGroundSelector = new DynamicComboFieldEditor("tGroundValue", "Temperature Ground", parent);
821 tGroundSelector.addComboListener(new SelectionListener() {
824 public void widgetSelected(SelectionEvent e) {
825 widgetDefaultSelected(e);
829 public void widgetDefaultSelected(SelectionEvent e) {
830 model.setTGroundIndex(Integer.parseInt(tGroundSelector.getValue()));
831 validatePageComplete();
836 private void updateCombos() {
837 String[][] namesAndValues = new String[headerIndexAndValues.size() + 1][];
839 namesAndValues[0] = new String[] {"", "-1"};
841 for (Entry<Integer, String> entry : headerIndexAndValues.entrySet()) {
842 int key = entry.getKey();
843 String value = entry.getValue();
845 String[] nameAndValue = new String[2];
846 nameAndValue[0] = value;
847 nameAndValue[1] = Integer.toString(key);
848 namesAndValues[i++] = nameAndValue;
851 if (model.isVertexImport())
852 updateVertexCombos(namesAndValues);
854 updateEdgeCombos(namesAndValues);
856 componentMappingSelector.updateCombo(namesAndValues);
857 idSelector.updateCombo(namesAndValues);
860 private void updateEdgeCombos(String[][] namesAndValues) {
861 startXCoordSelector.updateCombo(namesAndValues);
862 endXCoordSelector.updateCombo(namesAndValues);
863 startYCoordSelector.updateCombo(namesAndValues);
864 endYCoordSelector.updateCombo(namesAndValues);
865 startZValueSelector.updateCombo(namesAndValues);
866 endZValueSelector.updateCombo(namesAndValues);
867 diameterSelector.updateCombo(namesAndValues);
868 outerDiameterSelector.updateCombo(namesAndValues);
869 nominalMassFlowSelector.updateCombo(namesAndValues);
870 edgeFlowAreaSelector.updateCombo(namesAndValues);
871 kReturnSelector.updateCombo(namesAndValues);
872 kSupplySelector.updateCombo(namesAndValues);
873 tGroundSelector.updateCombo(namesAndValues);
876 private void updateVertexCombos(String[][] namesAndValues) {
877 xCoordSelector.updateCombo(namesAndValues);
878 yCoordSelector.updateCombo(namesAndValues);
879 zValueSelector.updateCombo(namesAndValues);
880 supplyTempValueSelector.updateCombo(namesAndValues);
881 returnTempValueSelector.updateCombo(namesAndValues);
882 supplyPressureValueSelector.updateCombo(namesAndValues);
883 returnPressureValueSelector.updateCombo(namesAndValues);
884 dpSelector.updateCombo(namesAndValues);
885 dtSelector.updateCombo(namesAndValues);
886 heatPowerSelector.updateCombo(namesAndValues);
887 valvePositionSelector.updateCombo(namesAndValues);
888 nominalHeadMSelector.updateCombo(namesAndValues);
889 nominalHeadBSelector.updateCombo(namesAndValues);
890 nominalFlowSelector.updateCombo(namesAndValues);
891 maximumHeadMSelector.updateCombo(namesAndValues);
892 heatLoadDsSelector.updateCombo(namesAndValues);
893 massFlowSelector.updateCombo(namesAndValues);
894 volFlowSelector.updateCombo(namesAndValues);
895 velocitySelector.updateCombo(namesAndValues);
896 flowAreaSelector.updateCombo(namesAndValues);
897 nominalPressureLossSelector.updateCombo(namesAndValues);
902 private void updateHeaders() {
903 if (headerTable != null)
904 headerTable.dispose();
905 headerTable = new Table(tableComposite, SWT.NONE);
906 headerTable.setHeaderVisible(true);
907 headerTable.setLinesVisible(true);
908 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite);
909 for (int i = 0; i < headerTable.getColumns().length; i++) {
910 TableColumn column = headerTable.getColumns()[i];
913 for (int i = 0; i < headerTable.getItemCount(); i++) {
914 TableItem item = headerTable.getItem(i);
918 headerIndexAndValues.clear();
921 List<CSVRecord> rows = model.getRows(5);
923 for (int k = 0; k < rows.size(); k++) {
924 CSVRecord row = rows.get(k);
926 int columnCount = row.size();
927 for (int i = 0; i < columnCount; i++) {
928 String value = row.get(i);
930 TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);
931 headerCol.setText(value);
933 tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));
936 headerIndexAndValues.put(i, value);
940 int itemCount = headerTable.getItemCount();
941 if (actualK >= itemCount) {
942 item = new TableItem(headerTable, SWT.NONE);
944 item = headerTable.getItem(actualK);
946 item.setText(i, value);
951 } catch (IOException e) {
952 setErrorMessage(e.getMessage());
956 protected void validatePageComplete() {
957 if (model.isVertexImport())
958 setPageComplete(model.getXCoordIndex() != -1 && model.getYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);
960 setPageComplete(model.getStartXCoordIndex() != 1 && model.getStartYCoordIndex() != -1 && model.getEndXCoordIndex() != -1 && model.getEndYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);