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.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.CSVImportModel;
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;
58 private DynamicComboFieldEditor xCoordSelector;
59 private DynamicComboFieldEditor yCoordSelector;
60 private DynamicComboFieldEditor zValueSelector;
61 private DynamicComboFieldEditor altElevationValueSelector;
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 peakPowerSelector;
71 private DynamicComboFieldEditor regionSelector;
72 private DynamicComboFieldEditor nominalHeadMSelector;
73 private DynamicComboFieldEditor nominalHeadBSelector;
74 private DynamicComboFieldEditor nominalFlowSelector;
75 private DynamicComboFieldEditor maximumHeadMSelector;
76 private DynamicComboFieldEditor heatLoadDsSelector;
77 private DynamicComboFieldEditor massFlowSelector;
78 private DynamicComboFieldEditor volFlowSelector;
79 private DynamicComboFieldEditor velocitySelector;
80 private DynamicComboFieldEditor flowAreaSelector;
81 private DynamicComboFieldEditor nominalPressureLossSelector;
82 private DynamicComboFieldEditor valvePositionSelector;
83 private DynamicComboFieldEditor addressSelector;
84 private DynamicComboFieldEditor lengthSelector;
87 private DynamicComboFieldEditor startXCoordSelector;
88 private DynamicComboFieldEditor startYCoordSelector;
89 private DynamicComboFieldEditor startZValueSelector;
90 private DynamicComboFieldEditor endXCoordSelector;
91 private DynamicComboFieldEditor endYCoordSelector;
92 private DynamicComboFieldEditor endZValueSelector;
93 private DynamicComboFieldEditor detailedGeometrySelector;
95 private Text edgeConnectionPadding;
97 private DynamicComboFieldEditor outerDiameterSelector;
98 private DynamicComboFieldEditor diameterSelector;
99 private DynamicComboFieldEditor nominalMassFlowSelector;
101 private Group indexMappingGroup;
103 private Composite composite;
105 private Button isVertexImport;
107 private Combo sourceCRSCombo;
109 private DynamicComboFieldEditor edgeFlowAreaSelector;
111 private DynamicComboFieldEditor kReturnSelector;
113 private DynamicComboFieldEditor kSupplySelector;
115 private DynamicComboFieldEditor tGroundSelector;
117 protected CSVImportWizardPage(CSVImportModel model) {
118 super("Import CSV Data");
120 setMessage("Select column index mappings");
124 public void createControl(Composite parent) {
125 composite = new Composite(parent, SWT.NONE);
126 composite.setLayout(new GridLayout(1, false));
127 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);
129 Label label = new Label(composite, SWT.NONE);
130 label.setText("Select delimiter");
132 delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
133 delimiterCombo.setToolTipText("Select the delimiter that is used to separate elements in the CSV file");
134 String[] formats = model.getDelimiterFormats();
135 delimiterCombo.setItems(formats);
136 if (formats.length > 0)
137 delimiterCombo.select(0);
138 delimiterCombo.addSelectionListener(new SelectionListener() {
141 public void widgetSelected(SelectionEvent e) {
142 model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex()));
148 public void widgetDefaultSelected(SelectionEvent e) {
153 // firstAsHeader = new Button(composite, SWT.CHECK);
154 // firstAsHeader.setText("Read first row as header");
155 // firstAsHeader.setSelection(model.getReadFirstAsHeader());
156 // firstAsHeader.addSelectionListener(new SelectionListener() {
159 // public void widgetSelected(SelectionEvent e) {
160 // model.setReadFirstAsHeader(firstAsHeader.getSelection());
166 // public void widgetDefaultSelected(SelectionEvent e) {
167 // widgetSelected(e);
171 tableComposite = new Composite(composite, SWT.BORDER);
172 tableColumnLayout = new TableColumnLayout();
173 tableComposite.setLayout(tableColumnLayout);
175 label = new Label(composite, SWT.NONE);
176 label.setText("Select source Coordinate Reference System");
178 sourceCRSCombo = new Combo(composite, SWT.NONE);
179 sourceCRSCombo.setToolTipText("Select the coordinate reference system that is used in the source material for possible transformation to target coordinate reference system (EPSG:4326)");
180 Set<String> codes = CRS.getSupportedCodes("EPSG");
181 sourceCRSCombo.setItems(codes.toArray(new String[codes.size()]));
182 sourceCRSCombo.addSelectionListener(new SelectionAdapter() {
185 public void widgetSelected(SelectionEvent e) {
186 String current = sourceCRSCombo.getItem(sourceCRSCombo.getSelectionIndex());
187 model.setSourceCRS("EPSG:" + current);
191 sourceCRSCombo.addModifyListener(new ModifyListener() {
194 public void modifyText(ModifyEvent e) {
195 String currentText = sourceCRSCombo.getText();
196 if (codes.contains(currentText)) {
198 String[] items = sourceCRSCombo.getItems();
200 for (i = 0; i < items.length; i++) {
201 String item = items[i];
202 if (currentText.equals(item)) {
207 sourceCRSCombo.select(i);
208 model.setSourceCRS("EPSG:" + currentText);
210 System.err.println("this should not happen");
216 // wktFileSelection = new FileSelectionWidget(composite, "WKT file", SWT.OPEN);
217 // wktFileSelection.addListener(new FileSelectionListener() {
220 // public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {
221 // String[] selection = wktFileSelection.getFilename();
222 // if (selection != null && selection.length > 0) {
223 // Path wktFile = Paths.get(selection[0]);
224 // if (!Files.exists(wktFile)) {
225 // setErrorMessage("File " + wktFile.toAbsolutePath() + " does not exist");
227 // model.setWKTFile(wktFile);
228 // validatePageComplete();
234 isVertexImport = new Button(composite, SWT.CHECK);
235 isVertexImport.setText("File contains vertices");
236 isVertexImport.setToolTipText("Enable this if the file contains vertices, i.e. points");
237 isVertexImport.setSelection(model.isVertexImport());
238 isVertexImport.addSelectionListener(new SelectionListener() {
241 public void widgetSelected(SelectionEvent e) {
242 model.setVertexImport(isVertexImport.getSelection());
243 updateControls(false);
247 public void widgetDefaultSelected(SelectionEvent e) {
252 updateControls(true);
254 setControl(composite);
256 final IWizardContainer container = getContainer();
258 if (container instanceof IPageChangeProvider) {
259 ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() {
262 public void pageChanged(PageChangedEvent event) {
264 CSVImportWizardPage.this.updateControls(false);
269 validatePageComplete();
272 private void updateControls(boolean initial) {
273 createIndexMappingGroup();
276 composite.layout(true, true);
279 private void createIndexMappingGroup() {
280 if (indexMappingGroup != null)
281 indexMappingGroup.dispose();
283 indexMappingGroup = new Group(composite, SWT.NONE);
284 indexMappingGroup.setText("Column index mapping");
285 GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(indexMappingGroup);
287 if (model.isVertexImport())
288 createVertexIndexMappingField(indexMappingGroup);
290 createEdgeIndexMappingField(indexMappingGroup);
292 createCommonIndexMappingField(indexMappingGroup);
294 if (!model.isVertexImport()) {
295 Label label = new Label(indexMappingGroup, SWT.NONE);
296 label.setText("Connection point padding");
297 GridDataFactory.fillDefaults().applyTo(label);
298 edgeConnectionPadding = new Text(indexMappingGroup, SWT.BORDER);
299 GridDataFactory.fillDefaults().applyTo(edgeConnectionPadding);
300 edgeConnectionPadding.setText("0.0001"); // default
301 edgeConnectionPadding.addModifyListener(new ModifyListener() {
304 public void modifyText(ModifyEvent e) {
306 double padding = Double.parseDouble(edgeConnectionPadding.getText());
307 model.setEdgePadding(padding);
308 } catch (NumberFormatException ee) {
316 private void createCommonIndexMappingField(Group parent) {
318 componentMappingSelector = new DynamicComboFieldEditor("componentMapping", "Apros component mapping", parent);
319 componentMappingSelector.addComboListener(new SelectionListener() {
322 public void widgetSelected(SelectionEvent e) {
323 widgetDefaultSelected(e);
327 public void widgetDefaultSelected(SelectionEvent e) {
328 model.setComponentMappingIndex(Integer.parseInt(componentMappingSelector.getValue()));
329 validatePageComplete();
333 idSelector = new DynamicComboFieldEditor("id", "ID", parent);
334 idSelector.addComboListener(new SelectionListener() {
337 public void widgetSelected(SelectionEvent e) {
338 widgetDefaultSelected(e);
342 public void widgetDefaultSelected(SelectionEvent e) {
343 model.setIdIndex(Integer.parseInt(idSelector.getValue()));
344 validatePageComplete();
347 regionSelector = new DynamicComboFieldEditor("regionValue", "Region", parent);
348 regionSelector.addComboListener(new SelectionListener() {
351 public void widgetSelected(SelectionEvent e) {
352 widgetDefaultSelected(e);
356 public void widgetDefaultSelected(SelectionEvent e) {
357 model.setRegionIndex(Integer.parseInt(regionSelector.getValue()));
358 validatePageComplete();
363 private void createVertexIndexMappingField(Group parent) {
364 xCoordSelector = new DynamicComboFieldEditor("xCoord", "X Coordinate", parent);
365 xCoordSelector.addComboListener(new SelectionListener() {
368 public void widgetSelected(SelectionEvent e) {
369 widgetDefaultSelected(e);
373 public void widgetDefaultSelected(SelectionEvent e) {
374 model.setXCoordIndex(Integer.parseInt(xCoordSelector.getValue()));
375 validatePageComplete();
379 yCoordSelector = new DynamicComboFieldEditor("yCoord", "Y Coordinate", parent);
380 yCoordSelector.addComboListener(new SelectionListener() {
383 public void widgetSelected(SelectionEvent e) {
384 widgetDefaultSelected(e);
388 public void widgetDefaultSelected(SelectionEvent e) {
389 model.setYCoordIndex(Integer.parseInt(yCoordSelector.getValue()));
390 validatePageComplete();
393 zValueSelector = new DynamicComboFieldEditor("zValue", "Z Value", parent);
394 zValueSelector.addComboListener(new SelectionListener() {
397 public void widgetSelected(SelectionEvent e) {
398 widgetDefaultSelected(e);
402 public void widgetDefaultSelected(SelectionEvent e) {
403 model.setZCoordIndex(Integer.parseInt(zValueSelector.getValue()));
404 validatePageComplete();
408 altElevationValueSelector = new DynamicComboFieldEditor("altElevation", "Alternative Elevation", parent);
409 altElevationValueSelector.addComboListener(new SelectionListener() {
412 public void widgetSelected(SelectionEvent e) {
413 widgetDefaultSelected(e);
417 public void widgetDefaultSelected(SelectionEvent e) {
418 model.setAltElevationIndex(Integer.parseInt(altElevationValueSelector.getValue()));
419 validatePageComplete();
423 supplyTempValueSelector = new DynamicComboFieldEditor("tempValue", "Supply Temperature value", parent);
424 supplyTempValueSelector.addComboListener(new SelectionListener() {
427 public void widgetSelected(SelectionEvent e) {
428 widgetDefaultSelected(e);
432 public void widgetDefaultSelected(SelectionEvent e) {
433 model.setSupplyTempIndex(Integer.parseInt(supplyTempValueSelector.getValue()));
434 validatePageComplete();
437 returnTempValueSelector = new DynamicComboFieldEditor("returnTempValue", "Return Temperature value", parent);
438 returnTempValueSelector.addComboListener(new SelectionListener() {
441 public void widgetSelected(SelectionEvent e) {
442 widgetDefaultSelected(e);
446 public void widgetDefaultSelected(SelectionEvent e) {
447 model.setReturnTempIndex(Integer.parseInt(returnTempValueSelector.getValue()));
448 validatePageComplete();
451 supplyPressureValueSelector = new DynamicComboFieldEditor("pressureValue", "Supply Pressure value", parent);
452 supplyPressureValueSelector.addComboListener(new SelectionListener() {
455 public void widgetSelected(SelectionEvent e) {
456 widgetDefaultSelected(e);
460 public void widgetDefaultSelected(SelectionEvent e) {
461 model.setSupplyPressureIndex(Integer.parseInt(supplyPressureValueSelector.getValue()));
462 validatePageComplete();
465 returnPressureValueSelector = new DynamicComboFieldEditor("returnPressureValue", "Return Pressure value", parent);
466 returnPressureValueSelector.addComboListener(new SelectionListener() {
469 public void widgetSelected(SelectionEvent e) {
470 widgetDefaultSelected(e);
474 public void widgetDefaultSelected(SelectionEvent e) {
475 model.setReturnPressureIndex(Integer.parseInt(returnPressureValueSelector.getValue()));
476 validatePageComplete();
479 dpSelector = new DynamicComboFieldEditor("dpValue", "Delta pressure ", parent);
480 dpSelector.addComboListener(new SelectionListener() {
483 public void widgetSelected(SelectionEvent e) {
484 widgetDefaultSelected(e);
488 public void widgetDefaultSelected(SelectionEvent e) {
489 model.setDeltaPressureIndex(Integer.parseInt(dpSelector.getValue()));
490 validatePageComplete();
493 dtSelector = new DynamicComboFieldEditor("dtValue", "Delta temperature ", parent);
494 dtSelector.addComboListener(new SelectionListener() {
497 public void widgetSelected(SelectionEvent e) {
498 widgetDefaultSelected(e);
502 public void widgetDefaultSelected(SelectionEvent e) {
503 model.setDeltaTemperatureIndex(Integer.parseInt(dtSelector.getValue()));
504 validatePageComplete();
507 heatPowerSelector = new DynamicComboFieldEditor("heatPowerValue", "Heat Power", parent);
508 heatPowerSelector.addComboListener(new SelectionListener() {
511 public void widgetSelected(SelectionEvent e) {
512 widgetDefaultSelected(e);
516 public void widgetDefaultSelected(SelectionEvent e) {
517 model.setHeatPowerIndex(Integer.parseInt(heatPowerSelector.getValue()));
518 validatePageComplete();
521 peakPowerSelector = new DynamicComboFieldEditor("peakPowerValue", "Peak Power", parent);
522 peakPowerSelector.addComboListener(new SelectionListener() {
525 public void widgetSelected(SelectionEvent e) {
526 widgetDefaultSelected(e);
530 public void widgetDefaultSelected(SelectionEvent e) {
531 model.setPeakPowerIndex(Integer.parseInt(peakPowerSelector.getValue()));
532 validatePageComplete();
536 nominalHeadMSelector = new DynamicComboFieldEditor("nominalHeadMValue", "nominalHeadM", parent);
537 nominalHeadMSelector.addComboListener(new SelectionListener() {
540 public void widgetSelected(SelectionEvent e) {
541 widgetDefaultSelected(e);
545 public void widgetDefaultSelected(SelectionEvent e) {
546 model.setNominalHeadMIndex(Integer.parseInt(nominalHeadMSelector.getValue()));
547 validatePageComplete();
550 nominalHeadBSelector = new DynamicComboFieldEditor("nominalHeadBValue", "nominalHeadB", parent);
551 nominalHeadBSelector.addComboListener(new SelectionListener() {
554 public void widgetSelected(SelectionEvent e) {
555 widgetDefaultSelected(e);
559 public void widgetDefaultSelected(SelectionEvent e) {
560 model.setNominalHeadBIndex(Integer.parseInt(nominalHeadBSelector.getValue()));
561 validatePageComplete();
564 nominalFlowSelector = new DynamicComboFieldEditor("nominalFlowValue", "nominalFlow", parent);
565 nominalFlowSelector.addComboListener(new SelectionListener() {
568 public void widgetSelected(SelectionEvent e) {
569 widgetDefaultSelected(e);
573 public void widgetDefaultSelected(SelectionEvent e) {
574 model.setNominalFlowIndex(Integer.parseInt(nominalFlowSelector.getValue()));
575 validatePageComplete();
579 maximumHeadMSelector = new DynamicComboFieldEditor("maximumHeadMValue", "maximumHeadM", parent);
580 maximumHeadMSelector.addComboListener(new SelectionListener() {
583 public void widgetSelected(SelectionEvent e) {
584 widgetDefaultSelected(e);
588 public void widgetDefaultSelected(SelectionEvent e) {
589 model.setMaximumHeadMIndex(Integer.parseInt(maximumHeadMSelector.getValue()));
590 validatePageComplete();
593 heatLoadDsSelector = new DynamicComboFieldEditor("heatLoadDsValue", "heatLoadDs", parent);
594 heatLoadDsSelector.addComboListener(new SelectionListener() {
597 public void widgetSelected(SelectionEvent e) {
598 widgetDefaultSelected(e);
602 public void widgetDefaultSelected(SelectionEvent e) {
603 model.setHeatLoadDsIndex(Integer.parseInt(heatLoadDsSelector.getValue()));
604 validatePageComplete();
607 massFlowSelector = new DynamicComboFieldEditor("massFlowValue", "massFlow", parent);
608 massFlowSelector.addComboListener(new SelectionListener() {
611 public void widgetSelected(SelectionEvent e) {
612 widgetDefaultSelected(e);
616 public void widgetDefaultSelected(SelectionEvent e) {
617 model.setMassFlowIndex(Integer.parseInt(massFlowSelector.getValue()));
618 validatePageComplete();
621 volFlowSelector = new DynamicComboFieldEditor("volFlowValue", "volFlow", parent);
622 volFlowSelector.addComboListener(new SelectionListener() {
625 public void widgetSelected(SelectionEvent e) {
626 widgetDefaultSelected(e);
630 public void widgetDefaultSelected(SelectionEvent e) {
631 model.setVolFlowIndex(Integer.parseInt(volFlowSelector.getValue()));
632 validatePageComplete();
635 velocitySelector = new DynamicComboFieldEditor("velocityValue", "velocity", parent);
636 velocitySelector.addComboListener(new SelectionListener() {
639 public void widgetSelected(SelectionEvent e) {
640 widgetDefaultSelected(e);
644 public void widgetDefaultSelected(SelectionEvent e) {
645 model.setVelocityIndex(Integer.parseInt(velocitySelector.getValue()));
646 validatePageComplete();
649 flowAreaSelector = new DynamicComboFieldEditor("flowAreaValue", "flowArea", parent);
650 flowAreaSelector.addComboListener(new SelectionListener() {
653 public void widgetSelected(SelectionEvent e) {
654 widgetDefaultSelected(e);
658 public void widgetDefaultSelected(SelectionEvent e) {
659 model.setFlowAreaIndex(Integer.parseInt(flowAreaSelector.getValue()));
660 validatePageComplete();
663 nominalPressureLossSelector = new DynamicComboFieldEditor("nominalPressureLossValue", "nominalPressureLoss", parent);
664 nominalPressureLossSelector.addComboListener(new SelectionListener() {
667 public void widgetSelected(SelectionEvent e) {
668 widgetDefaultSelected(e);
672 public void widgetDefaultSelected(SelectionEvent e) {
673 model.setNominalPressureLossIndex(Integer.parseInt(nominalPressureLossSelector.getValue()));
674 validatePageComplete();
677 valvePositionSelector = new DynamicComboFieldEditor("valvePositionSelectorValue", "valvePositionSelector", parent);
678 valvePositionSelector.addComboListener(new SelectionListener() {
681 public void widgetSelected(SelectionEvent e) {
682 widgetDefaultSelected(e);
686 public void widgetDefaultSelected(SelectionEvent e) {
687 model.setValvePositionIndex(Integer.parseInt(valvePositionSelector.getValue()));
688 validatePageComplete();
691 addressSelector = new DynamicComboFieldEditor("addressValue", "addressSelector", parent);
692 addressSelector.addComboListener(new SelectionListener() {
695 public void widgetSelected(SelectionEvent e) {
696 widgetDefaultSelected(e);
700 public void widgetDefaultSelected(SelectionEvent e) {
701 model.setAddressIndex(Integer.parseInt(addressSelector.getValue()));
702 validatePageComplete();
709 private void createEdgeIndexMappingField(Group parent) {
711 // Composite paddingComposite = new Composite(parent, SWT.NONE);
712 // GridLayoutFactory.fillDefaults().numColumns(2).applyTo(paddingComposite);
714 startXCoordSelector = new DynamicComboFieldEditor("startxCoord", "Start X Coordinate", parent);
715 startXCoordSelector.addComboListener(new SelectionListener() {
718 public void widgetSelected(SelectionEvent e) {
719 widgetDefaultSelected(e);
723 public void widgetDefaultSelected(SelectionEvent e) {
724 model.setStartXCoordIndex(Integer.parseInt(startXCoordSelector.getValue()));
725 validatePageComplete();
729 startYCoordSelector = new DynamicComboFieldEditor("startyCoord", "Start Y Coordinate", parent);
730 startYCoordSelector.addComboListener(new SelectionListener() {
733 public void widgetSelected(SelectionEvent e) {
734 widgetDefaultSelected(e);
738 public void widgetDefaultSelected(SelectionEvent e) {
739 model.setStartYCoordIndex(Integer.parseInt(startYCoordSelector.getValue()));
740 validatePageComplete();
743 startZValueSelector = new DynamicComboFieldEditor("startzValue", "Start Z Value", parent);
744 startZValueSelector.addComboListener(new SelectionListener() {
747 public void widgetSelected(SelectionEvent e) {
748 widgetDefaultSelected(e);
752 public void widgetDefaultSelected(SelectionEvent e) {
753 model.setStartZCoordIndex(Integer.parseInt(startZValueSelector.getValue()));
754 validatePageComplete();
758 endXCoordSelector = new DynamicComboFieldEditor("endxCoord", "End X Coordinate", parent);
759 endXCoordSelector.addComboListener(new SelectionListener() {
762 public void widgetSelected(SelectionEvent e) {
763 widgetDefaultSelected(e);
767 public void widgetDefaultSelected(SelectionEvent e) {
768 model.setEndXCoordIndex(Integer.parseInt(endXCoordSelector.getValue()));
769 validatePageComplete();
773 endYCoordSelector = new DynamicComboFieldEditor("endyCoord", "End Y Coordinate", parent);
774 endYCoordSelector.addComboListener(new SelectionListener() {
777 public void widgetSelected(SelectionEvent e) {
778 widgetDefaultSelected(e);
782 public void widgetDefaultSelected(SelectionEvent e) {
783 model.setEndYCoordIndex(Integer.parseInt(endYCoordSelector.getValue()));
784 validatePageComplete();
787 endZValueSelector = new DynamicComboFieldEditor("endzValue", "End Z Value", parent);
788 endZValueSelector.addComboListener(new SelectionListener() {
791 public void widgetSelected(SelectionEvent e) {
792 widgetDefaultSelected(e);
796 public void widgetDefaultSelected(SelectionEvent e) {
797 model.setEndZCoordIndex(Integer.parseInt(endZValueSelector.getValue()));
798 validatePageComplete();
801 detailedGeometrySelector = new DynamicComboFieldEditor("detailedGeometryValue", "Geometry", parent);
802 detailedGeometrySelector.addComboListener(new SelectionListener() {
805 public void widgetSelected(SelectionEvent e) {
806 widgetDefaultSelected(e);
810 public void widgetDefaultSelected(SelectionEvent e) {
811 model.detailedGeometryIndex(Integer.parseInt(detailedGeometrySelector.getValue()));
812 validatePageComplete();
815 diameterSelector = new DynamicComboFieldEditor("diameterValue", "Diameter value", parent);
816 diameterSelector.addComboListener(new SelectionListener() {
819 public void widgetSelected(SelectionEvent e) {
820 widgetDefaultSelected(e);
824 public void widgetDefaultSelected(SelectionEvent e) {
825 model.setDiameterIndex(Integer.parseInt(diameterSelector.getValue()));
826 validatePageComplete();
829 outerDiameterSelector = new DynamicComboFieldEditor("outerDiameterValue", "Outer Diameter value", parent);
830 outerDiameterSelector.addComboListener(new SelectionListener() {
833 public void widgetSelected(SelectionEvent e) {
834 widgetDefaultSelected(e);
838 public void widgetDefaultSelected(SelectionEvent e) {
839 model.setOuterDiameterIndex(Integer.parseInt(outerDiameterSelector.getValue()));
840 validatePageComplete();
843 nominalMassFlowSelector = new DynamicComboFieldEditor("nominalMassFlowValue", "Nominal Mass Flow", parent);
844 nominalMassFlowSelector.addComboListener(new SelectionListener() {
847 public void widgetSelected(SelectionEvent e) {
848 widgetDefaultSelected(e);
852 public void widgetDefaultSelected(SelectionEvent e) {
853 model.setNominalMassFlowIndex(Integer.parseInt(nominalMassFlowSelector.getValue()));
854 validatePageComplete();
857 edgeFlowAreaSelector = new DynamicComboFieldEditor("edgeFlowAreaValue", "Flow Area", parent);
858 edgeFlowAreaSelector.addComboListener(new SelectionListener() {
861 public void widgetSelected(SelectionEvent e) {
862 widgetDefaultSelected(e);
866 public void widgetDefaultSelected(SelectionEvent e) {
867 model.setEdgeFlowAreaIndex(Integer.parseInt(edgeFlowAreaSelector.getValue()));
868 validatePageComplete();
871 kReturnSelector = new DynamicComboFieldEditor("kReturnValue", "K Return", parent);
872 kReturnSelector.addComboListener(new SelectionListener() {
875 public void widgetSelected(SelectionEvent e) {
876 widgetDefaultSelected(e);
880 public void widgetDefaultSelected(SelectionEvent e) {
881 model.setKReturnIndex(Integer.parseInt(kReturnSelector.getValue()));
882 validatePageComplete();
885 kSupplySelector = new DynamicComboFieldEditor("kSupplyValue", "K Supply", parent);
886 kSupplySelector.addComboListener(new SelectionListener() {
889 public void widgetSelected(SelectionEvent e) {
890 widgetDefaultSelected(e);
894 public void widgetDefaultSelected(SelectionEvent e) {
895 model.setKSupplyIndex(Integer.parseInt(kSupplySelector.getValue()));
896 validatePageComplete();
899 tGroundSelector = new DynamicComboFieldEditor("tGroundValue", "Temperature Ground", parent);
900 tGroundSelector.addComboListener(new SelectionListener() {
903 public void widgetSelected(SelectionEvent e) {
904 widgetDefaultSelected(e);
908 public void widgetDefaultSelected(SelectionEvent e) {
909 model.setTGroundIndex(Integer.parseInt(tGroundSelector.getValue()));
910 validatePageComplete();
913 lengthSelector = new DynamicComboFieldEditor("lengthValue", "lengthSelector", parent);
914 lengthSelector.addComboListener(new SelectionListener() {
917 public void widgetSelected(SelectionEvent e) {
918 widgetDefaultSelected(e);
922 public void widgetDefaultSelected(SelectionEvent e) {
923 model.setLengthIndex(Integer.parseInt(lengthSelector.getValue()));
924 validatePageComplete();
929 private void updateCombos() {
930 String[][] namesAndValues = new String[headerIndexAndValues.size() + 1][];
932 namesAndValues[0] = new String[] {"", "-1"};
934 for (Entry<Integer, String> entry : headerIndexAndValues.entrySet()) {
935 int key = entry.getKey();
936 String value = entry.getValue();
938 String[] nameAndValue = new String[2];
939 nameAndValue[0] = value;
940 nameAndValue[1] = Integer.toString(key);
941 namesAndValues[i++] = nameAndValue;
944 if (model.isVertexImport())
945 updateVertexCombos(namesAndValues);
947 updateEdgeCombos(namesAndValues);
949 componentMappingSelector.updateCombo(namesAndValues);
950 idSelector.updateCombo(namesAndValues);
953 private void updateEdgeCombos(String[][] namesAndValues) {
954 startXCoordSelector.updateCombo(namesAndValues);
955 endXCoordSelector.updateCombo(namesAndValues);
956 startYCoordSelector.updateCombo(namesAndValues);
957 endYCoordSelector.updateCombo(namesAndValues);
958 startZValueSelector.updateCombo(namesAndValues);
959 endZValueSelector.updateCombo(namesAndValues);
960 detailedGeometrySelector.updateCombo(namesAndValues);
961 diameterSelector.updateCombo(namesAndValues);
962 outerDiameterSelector.updateCombo(namesAndValues);
963 nominalMassFlowSelector.updateCombo(namesAndValues);
964 edgeFlowAreaSelector.updateCombo(namesAndValues);
965 kReturnSelector.updateCombo(namesAndValues);
966 kSupplySelector.updateCombo(namesAndValues);
967 tGroundSelector.updateCombo(namesAndValues);
968 lengthSelector.updateCombo(namesAndValues);
971 private void updateVertexCombos(String[][] namesAndValues) {
972 xCoordSelector.updateCombo(namesAndValues);
973 yCoordSelector.updateCombo(namesAndValues);
974 zValueSelector.updateCombo(namesAndValues);
975 altElevationValueSelector.updateCombo(namesAndValues);
976 supplyTempValueSelector.updateCombo(namesAndValues);
977 returnTempValueSelector.updateCombo(namesAndValues);
978 supplyPressureValueSelector.updateCombo(namesAndValues);
979 returnPressureValueSelector.updateCombo(namesAndValues);
980 dpSelector.updateCombo(namesAndValues);
981 dtSelector.updateCombo(namesAndValues);
982 heatPowerSelector.updateCombo(namesAndValues);
983 valvePositionSelector.updateCombo(namesAndValues);
984 nominalHeadMSelector.updateCombo(namesAndValues);
985 nominalHeadBSelector.updateCombo(namesAndValues);
986 nominalFlowSelector.updateCombo(namesAndValues);
987 maximumHeadMSelector.updateCombo(namesAndValues);
988 heatLoadDsSelector.updateCombo(namesAndValues);
989 massFlowSelector.updateCombo(namesAndValues);
990 volFlowSelector.updateCombo(namesAndValues);
991 velocitySelector.updateCombo(namesAndValues);
992 flowAreaSelector.updateCombo(namesAndValues);
993 nominalPressureLossSelector.updateCombo(namesAndValues);
994 addressSelector.updateCombo(namesAndValues);
999 private void updateHeaders() {
1000 if (headerTable != null)
1001 headerTable.dispose();
1002 headerTable = new Table(tableComposite, SWT.NONE);
1003 headerTable.setHeaderVisible(true);
1004 headerTable.setLinesVisible(true);
1005 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite);
1006 for (int i = 0; i < headerTable.getColumns().length; i++) {
1007 TableColumn column = headerTable.getColumns()[i];
1010 for (int i = 0; i < headerTable.getItemCount(); i++) {
1011 TableItem item = headerTable.getItem(i);
1015 headerIndexAndValues.clear();
1018 List<CSVRecord> rows = model.getRows(5, false);
1020 for (int k = 0; k < rows.size(); k++) {
1021 CSVRecord row = rows.get(k);
1023 int columnCount = row.size();
1024 for (int i = 0; i < columnCount; i++) {
1025 String value = row.get(i);
1027 TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);
1028 headerCol.setText(value);
1030 tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));
1033 headerIndexAndValues.put(i, value);
1035 int actualK = k - 1;
1037 int itemCount = headerTable.getItemCount();
1038 if (actualK >= itemCount) {
1039 item = new TableItem(headerTable, SWT.NONE);
1041 item = headerTable.getItem(actualK);
1043 item.setText(i, value);
1048 } catch (IOException e) {
1049 setErrorMessage(e.getMessage());
1053 protected void validatePageComplete() {
1054 if (model.isVertexImport())
1055 setPageComplete(model.getXCoordIndex() != -1 && model.getYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);
1057 setPageComplete(model.getStartXCoordIndex() != -1 && model.getStartYCoordIndex() != -1 && model.getEndXCoordIndex() != -1 && model.getEndYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);