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 nominalHeadMSelector;
72 private DynamicComboFieldEditor nominalHeadBSelector;
73 private DynamicComboFieldEditor nominalFlowSelector;
74 private DynamicComboFieldEditor maximumHeadMSelector;
75 private DynamicComboFieldEditor heatLoadDsSelector;
76 private DynamicComboFieldEditor massFlowSelector;
77 private DynamicComboFieldEditor volFlowSelector;
78 private DynamicComboFieldEditor velocitySelector;
79 private DynamicComboFieldEditor flowAreaSelector;
80 private DynamicComboFieldEditor nominalPressureLossSelector;
81 private DynamicComboFieldEditor valvePositionSelector;
82 private DynamicComboFieldEditor addressSelector;
83 private DynamicComboFieldEditor lengthSelector;
86 private DynamicComboFieldEditor startXCoordSelector;
87 private DynamicComboFieldEditor startYCoordSelector;
88 private DynamicComboFieldEditor startZValueSelector;
89 private DynamicComboFieldEditor endXCoordSelector;
90 private DynamicComboFieldEditor endYCoordSelector;
91 private DynamicComboFieldEditor endZValueSelector;
92 private DynamicComboFieldEditor detailedGeometrySelector;
94 private Text edgeConnectionPadding;
96 private DynamicComboFieldEditor outerDiameterSelector;
97 private DynamicComboFieldEditor diameterSelector;
98 private DynamicComboFieldEditor nominalMassFlowSelector;
100 private Group indexMappingGroup;
102 private Composite composite;
104 private Button isVertexImport;
106 private Combo sourceCRSCombo;
108 private DynamicComboFieldEditor edgeFlowAreaSelector;
110 private DynamicComboFieldEditor kReturnSelector;
112 private DynamicComboFieldEditor kSupplySelector;
114 private DynamicComboFieldEditor tGroundSelector;
116 protected CSVImportWizardPage(CSVImportModel model) {
117 super("Import CSV Data");
119 setMessage("Select column index mappings");
123 public void createControl(Composite parent) {
124 composite = new Composite(parent, SWT.NONE);
125 composite.setLayout(new GridLayout(1, false));
126 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);
128 Label label = new Label(composite, SWT.NONE);
129 label.setText("Select delimiter");
131 delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
132 delimiterCombo.setToolTipText("Select the delimiter that is used to separate elements in the CSV file");
133 String[] formats = model.getDelimiterFormats();
134 delimiterCombo.setItems(formats);
135 if (formats.length > 0)
136 delimiterCombo.select(0);
137 delimiterCombo.addSelectionListener(new SelectionListener() {
140 public void widgetSelected(SelectionEvent e) {
141 model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex()));
147 public void widgetDefaultSelected(SelectionEvent e) {
152 // firstAsHeader = new Button(composite, SWT.CHECK);
153 // firstAsHeader.setText("Read first row as header");
154 // firstAsHeader.setSelection(model.getReadFirstAsHeader());
155 // firstAsHeader.addSelectionListener(new SelectionListener() {
158 // public void widgetSelected(SelectionEvent e) {
159 // model.setReadFirstAsHeader(firstAsHeader.getSelection());
165 // public void widgetDefaultSelected(SelectionEvent e) {
166 // widgetSelected(e);
170 tableComposite = new Composite(composite, SWT.BORDER);
171 tableColumnLayout = new TableColumnLayout();
172 tableComposite.setLayout(tableColumnLayout);
174 label = new Label(composite, SWT.NONE);
175 label.setText("Select source Coordinate Reference System");
177 sourceCRSCombo = new Combo(composite, SWT.NONE);
178 sourceCRSCombo.setToolTipText("Select the coordinate reference system that is used in the source material for possible transformation to target coordinate reference system (EPSG:4326)");
179 Set<String> codes = CRS.getSupportedCodes("EPSG");
180 sourceCRSCombo.setItems(codes.toArray(new String[codes.size()]));
181 sourceCRSCombo.addSelectionListener(new SelectionAdapter() {
184 public void widgetSelected(SelectionEvent e) {
185 String current = sourceCRSCombo.getItem(sourceCRSCombo.getSelectionIndex());
186 model.setSourceCRS("EPSG:" + current);
190 sourceCRSCombo.addModifyListener(new ModifyListener() {
193 public void modifyText(ModifyEvent e) {
194 String currentText = sourceCRSCombo.getText();
195 if (codes.contains(currentText)) {
197 String[] items = sourceCRSCombo.getItems();
199 for (i = 0; i < items.length; i++) {
200 String item = items[i];
201 if (currentText.equals(item)) {
206 sourceCRSCombo.select(i);
207 model.setSourceCRS("EPSG:" + currentText);
209 System.err.println("this should not happen");
215 // wktFileSelection = new FileSelectionWidget(composite, "WKT file", SWT.OPEN);
216 // wktFileSelection.addListener(new FileSelectionListener() {
219 // public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {
220 // String[] selection = wktFileSelection.getFilename();
221 // if (selection != null && selection.length > 0) {
222 // Path wktFile = Paths.get(selection[0]);
223 // if (!Files.exists(wktFile)) {
224 // setErrorMessage("File " + wktFile.toAbsolutePath() + " does not exist");
226 // model.setWKTFile(wktFile);
227 // validatePageComplete();
233 isVertexImport = new Button(composite, SWT.CHECK);
234 isVertexImport.setText("File contains vertices");
235 isVertexImport.setToolTipText("Enable this if the file contains vertices, i.e. points");
236 isVertexImport.setSelection(model.isVertexImport());
237 isVertexImport.addSelectionListener(new SelectionListener() {
240 public void widgetSelected(SelectionEvent e) {
241 model.setVertexImport(isVertexImport.getSelection());
242 updateControls(false);
246 public void widgetDefaultSelected(SelectionEvent e) {
251 updateControls(true);
253 setControl(composite);
255 final IWizardContainer container = getContainer();
257 if (container instanceof IPageChangeProvider) {
258 ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() {
261 public void pageChanged(PageChangedEvent event) {
263 CSVImportWizardPage.this.updateControls(false);
268 validatePageComplete();
271 private void updateControls(boolean initial) {
272 createIndexMappingGroup();
275 composite.layout(true, true);
278 private void createIndexMappingGroup() {
279 if (indexMappingGroup != null)
280 indexMappingGroup.dispose();
282 indexMappingGroup = new Group(composite, SWT.NONE);
283 indexMappingGroup.setText("Column index mapping");
284 GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(indexMappingGroup);
286 if (model.isVertexImport())
287 createVertexIndexMappingField(indexMappingGroup);
289 createEdgeIndexMappingField(indexMappingGroup);
291 createCommonIndexMappingField(indexMappingGroup);
293 if (!model.isVertexImport()) {
294 Label label = new Label(indexMappingGroup, SWT.NONE);
295 label.setText("Connection point padding");
296 GridDataFactory.fillDefaults().applyTo(label);
297 edgeConnectionPadding = new Text(indexMappingGroup, SWT.BORDER);
298 GridDataFactory.fillDefaults().applyTo(edgeConnectionPadding);
299 edgeConnectionPadding.setText("0.0001"); // default
300 edgeConnectionPadding.addModifyListener(new ModifyListener() {
303 public void modifyText(ModifyEvent e) {
305 double padding = Double.parseDouble(edgeConnectionPadding.getText());
306 model.setEdgePadding(padding);
307 } catch (NumberFormatException ee) {
315 private void createCommonIndexMappingField(Group parent) {
317 componentMappingSelector = new DynamicComboFieldEditor("componentMapping", "Apros component mapping", parent);
318 componentMappingSelector.addComboListener(new SelectionListener() {
321 public void widgetSelected(SelectionEvent e) {
322 widgetDefaultSelected(e);
326 public void widgetDefaultSelected(SelectionEvent e) {
327 model.setComponentMappingIndex(Integer.parseInt(componentMappingSelector.getValue()));
328 validatePageComplete();
332 idSelector = new DynamicComboFieldEditor("id", "ID", parent);
333 idSelector.addComboListener(new SelectionListener() {
336 public void widgetSelected(SelectionEvent e) {
337 widgetDefaultSelected(e);
341 public void widgetDefaultSelected(SelectionEvent e) {
342 model.setIdIndex(Integer.parseInt(idSelector.getValue()));
343 validatePageComplete();
349 private void createVertexIndexMappingField(Group parent) {
350 xCoordSelector = new DynamicComboFieldEditor("xCoord", "X Coordinate", parent);
351 xCoordSelector.addComboListener(new SelectionListener() {
354 public void widgetSelected(SelectionEvent e) {
355 widgetDefaultSelected(e);
359 public void widgetDefaultSelected(SelectionEvent e) {
360 model.setXCoordIndex(Integer.parseInt(xCoordSelector.getValue()));
361 validatePageComplete();
365 yCoordSelector = new DynamicComboFieldEditor("yCoord", "Y Coordinate", parent);
366 yCoordSelector.addComboListener(new SelectionListener() {
369 public void widgetSelected(SelectionEvent e) {
370 widgetDefaultSelected(e);
374 public void widgetDefaultSelected(SelectionEvent e) {
375 model.setYCoordIndex(Integer.parseInt(yCoordSelector.getValue()));
376 validatePageComplete();
379 zValueSelector = new DynamicComboFieldEditor("zValue", "Z Value", parent);
380 zValueSelector.addComboListener(new SelectionListener() {
383 public void widgetSelected(SelectionEvent e) {
384 widgetDefaultSelected(e);
388 public void widgetDefaultSelected(SelectionEvent e) {
389 model.setZCoordIndex(Integer.parseInt(zValueSelector.getValue()));
390 validatePageComplete();
394 altElevationValueSelector = new DynamicComboFieldEditor("altElevation", "Alternative Elevation", parent);
395 altElevationValueSelector.addComboListener(new SelectionListener() {
398 public void widgetSelected(SelectionEvent e) {
399 widgetDefaultSelected(e);
403 public void widgetDefaultSelected(SelectionEvent e) {
404 model.setAltElevationIndex(Integer.parseInt(altElevationValueSelector.getValue()));
405 validatePageComplete();
409 supplyTempValueSelector = new DynamicComboFieldEditor("tempValue", "Supply Temperature value", parent);
410 supplyTempValueSelector.addComboListener(new SelectionListener() {
413 public void widgetSelected(SelectionEvent e) {
414 widgetDefaultSelected(e);
418 public void widgetDefaultSelected(SelectionEvent e) {
419 model.setSupplyTempIndex(Integer.parseInt(supplyTempValueSelector.getValue()));
420 validatePageComplete();
423 returnTempValueSelector = new DynamicComboFieldEditor("returnTempValue", "Return Temperature value", parent);
424 returnTempValueSelector.addComboListener(new SelectionListener() {
427 public void widgetSelected(SelectionEvent e) {
428 widgetDefaultSelected(e);
432 public void widgetDefaultSelected(SelectionEvent e) {
433 model.setReturnTempIndex(Integer.parseInt(returnTempValueSelector.getValue()));
434 validatePageComplete();
437 supplyPressureValueSelector = new DynamicComboFieldEditor("pressureValue", "Supply Pressure value", parent);
438 supplyPressureValueSelector.addComboListener(new SelectionListener() {
441 public void widgetSelected(SelectionEvent e) {
442 widgetDefaultSelected(e);
446 public void widgetDefaultSelected(SelectionEvent e) {
447 model.setSupplyPressureIndex(Integer.parseInt(supplyPressureValueSelector.getValue()));
448 validatePageComplete();
451 returnPressureValueSelector = new DynamicComboFieldEditor("returnPressureValue", "Return Pressure value", parent);
452 returnPressureValueSelector.addComboListener(new SelectionListener() {
455 public void widgetSelected(SelectionEvent e) {
456 widgetDefaultSelected(e);
460 public void widgetDefaultSelected(SelectionEvent e) {
461 model.setReturnPressureIndex(Integer.parseInt(returnPressureValueSelector.getValue()));
462 validatePageComplete();
465 dpSelector = new DynamicComboFieldEditor("dpValue", "Delta pressure ", parent);
466 dpSelector.addComboListener(new SelectionListener() {
469 public void widgetSelected(SelectionEvent e) {
470 widgetDefaultSelected(e);
474 public void widgetDefaultSelected(SelectionEvent e) {
475 model.setDeltaPressureIndex(Integer.parseInt(dpSelector.getValue()));
476 validatePageComplete();
479 dtSelector = new DynamicComboFieldEditor("dtValue", "Delta temperature ", parent);
480 dtSelector.addComboListener(new SelectionListener() {
483 public void widgetSelected(SelectionEvent e) {
484 widgetDefaultSelected(e);
488 public void widgetDefaultSelected(SelectionEvent e) {
489 model.setDeltaTemperatureIndex(Integer.parseInt(dtSelector.getValue()));
490 validatePageComplete();
493 heatPowerSelector = new DynamicComboFieldEditor("heatPowerValue", "Heat Power", parent);
494 heatPowerSelector.addComboListener(new SelectionListener() {
497 public void widgetSelected(SelectionEvent e) {
498 widgetDefaultSelected(e);
502 public void widgetDefaultSelected(SelectionEvent e) {
503 model.setHeatPowerIndex(Integer.parseInt(heatPowerSelector.getValue()));
504 validatePageComplete();
507 peakPowerSelector = new DynamicComboFieldEditor("peakPowerValue", "Peak Power", parent);
508 peakPowerSelector.addComboListener(new SelectionListener() {
511 public void widgetSelected(SelectionEvent e) {
512 widgetDefaultSelected(e);
516 public void widgetDefaultSelected(SelectionEvent e) {
517 model.setPeakPowerIndex(Integer.parseInt(peakPowerSelector.getValue()));
518 validatePageComplete();
521 nominalHeadMSelector = new DynamicComboFieldEditor("nominalHeadMValue", "nominalHeadM", parent);
522 nominalHeadMSelector.addComboListener(new SelectionListener() {
525 public void widgetSelected(SelectionEvent e) {
526 widgetDefaultSelected(e);
530 public void widgetDefaultSelected(SelectionEvent e) {
531 model.setNominalHeadMIndex(Integer.parseInt(nominalHeadMSelector.getValue()));
532 validatePageComplete();
535 nominalHeadBSelector = new DynamicComboFieldEditor("nominalHeadBValue", "nominalHeadB", parent);
536 nominalHeadBSelector.addComboListener(new SelectionListener() {
539 public void widgetSelected(SelectionEvent e) {
540 widgetDefaultSelected(e);
544 public void widgetDefaultSelected(SelectionEvent e) {
545 model.setNominalHeadBIndex(Integer.parseInt(nominalHeadBSelector.getValue()));
546 validatePageComplete();
549 nominalFlowSelector = new DynamicComboFieldEditor("nominalFlowValue", "nominalFlow", parent);
550 nominalFlowSelector.addComboListener(new SelectionListener() {
553 public void widgetSelected(SelectionEvent e) {
554 widgetDefaultSelected(e);
558 public void widgetDefaultSelected(SelectionEvent e) {
559 model.setNominalFlowIndex(Integer.parseInt(nominalFlowSelector.getValue()));
560 validatePageComplete();
564 maximumHeadMSelector = new DynamicComboFieldEditor("maximumHeadMValue", "maximumHeadM", parent);
565 maximumHeadMSelector.addComboListener(new SelectionListener() {
568 public void widgetSelected(SelectionEvent e) {
569 widgetDefaultSelected(e);
573 public void widgetDefaultSelected(SelectionEvent e) {
574 model.setMaximumHeadMIndex(Integer.parseInt(maximumHeadMSelector.getValue()));
575 validatePageComplete();
578 heatLoadDsSelector = new DynamicComboFieldEditor("heatLoadDsValue", "heatLoadDs", parent);
579 heatLoadDsSelector.addComboListener(new SelectionListener() {
582 public void widgetSelected(SelectionEvent e) {
583 widgetDefaultSelected(e);
587 public void widgetDefaultSelected(SelectionEvent e) {
588 model.setHeatLoadDsIndex(Integer.parseInt(heatLoadDsSelector.getValue()));
589 validatePageComplete();
592 massFlowSelector = new DynamicComboFieldEditor("massFlowValue", "massFlow", parent);
593 massFlowSelector.addComboListener(new SelectionListener() {
596 public void widgetSelected(SelectionEvent e) {
597 widgetDefaultSelected(e);
601 public void widgetDefaultSelected(SelectionEvent e) {
602 model.setMassFlowIndex(Integer.parseInt(massFlowSelector.getValue()));
603 validatePageComplete();
606 volFlowSelector = new DynamicComboFieldEditor("volFlowValue", "volFlow", parent);
607 volFlowSelector.addComboListener(new SelectionListener() {
610 public void widgetSelected(SelectionEvent e) {
611 widgetDefaultSelected(e);
615 public void widgetDefaultSelected(SelectionEvent e) {
616 model.setVolFlowIndex(Integer.parseInt(volFlowSelector.getValue()));
617 validatePageComplete();
620 velocitySelector = new DynamicComboFieldEditor("velocityValue", "velocity", parent);
621 velocitySelector.addComboListener(new SelectionListener() {
624 public void widgetSelected(SelectionEvent e) {
625 widgetDefaultSelected(e);
629 public void widgetDefaultSelected(SelectionEvent e) {
630 model.setVelocityIndex(Integer.parseInt(velocitySelector.getValue()));
631 validatePageComplete();
634 flowAreaSelector = new DynamicComboFieldEditor("flowAreaValue", "flowArea", parent);
635 flowAreaSelector.addComboListener(new SelectionListener() {
638 public void widgetSelected(SelectionEvent e) {
639 widgetDefaultSelected(e);
643 public void widgetDefaultSelected(SelectionEvent e) {
644 model.setFlowAreaIndex(Integer.parseInt(flowAreaSelector.getValue()));
645 validatePageComplete();
648 nominalPressureLossSelector = new DynamicComboFieldEditor("nominalPressureLossValue", "nominalPressureLoss", parent);
649 nominalPressureLossSelector.addComboListener(new SelectionListener() {
652 public void widgetSelected(SelectionEvent e) {
653 widgetDefaultSelected(e);
657 public void widgetDefaultSelected(SelectionEvent e) {
658 model.setNominalPressureLossIndex(Integer.parseInt(nominalPressureLossSelector.getValue()));
659 validatePageComplete();
662 valvePositionSelector = new DynamicComboFieldEditor("valvePositionSelectorValue", "valvePositionSelector", parent);
663 valvePositionSelector.addComboListener(new SelectionListener() {
666 public void widgetSelected(SelectionEvent e) {
667 widgetDefaultSelected(e);
671 public void widgetDefaultSelected(SelectionEvent e) {
672 model.setValvePositionIndex(Integer.parseInt(valvePositionSelector.getValue()));
673 validatePageComplete();
676 addressSelector = new DynamicComboFieldEditor("addressValue", "addressSelector", parent);
677 addressSelector.addComboListener(new SelectionListener() {
680 public void widgetSelected(SelectionEvent e) {
681 widgetDefaultSelected(e);
685 public void widgetDefaultSelected(SelectionEvent e) {
686 model.setAddressIndex(Integer.parseInt(addressSelector.getValue()));
687 validatePageComplete();
694 private void createEdgeIndexMappingField(Group parent) {
696 // Composite paddingComposite = new Composite(parent, SWT.NONE);
697 // GridLayoutFactory.fillDefaults().numColumns(2).applyTo(paddingComposite);
699 startXCoordSelector = new DynamicComboFieldEditor("startxCoord", "Start X Coordinate", parent);
700 startXCoordSelector.addComboListener(new SelectionListener() {
703 public void widgetSelected(SelectionEvent e) {
704 widgetDefaultSelected(e);
708 public void widgetDefaultSelected(SelectionEvent e) {
709 model.setStartXCoordIndex(Integer.parseInt(startXCoordSelector.getValue()));
710 validatePageComplete();
714 startYCoordSelector = new DynamicComboFieldEditor("startyCoord", "Start Y Coordinate", parent);
715 startYCoordSelector.addComboListener(new SelectionListener() {
718 public void widgetSelected(SelectionEvent e) {
719 widgetDefaultSelected(e);
723 public void widgetDefaultSelected(SelectionEvent e) {
724 model.setStartYCoordIndex(Integer.parseInt(startYCoordSelector.getValue()));
725 validatePageComplete();
728 startZValueSelector = new DynamicComboFieldEditor("startzValue", "Start Z Value", parent);
729 startZValueSelector.addComboListener(new SelectionListener() {
732 public void widgetSelected(SelectionEvent e) {
733 widgetDefaultSelected(e);
737 public void widgetDefaultSelected(SelectionEvent e) {
738 model.setStartZCoordIndex(Integer.parseInt(startZValueSelector.getValue()));
739 validatePageComplete();
743 endXCoordSelector = new DynamicComboFieldEditor("endxCoord", "End X Coordinate", parent);
744 endXCoordSelector.addComboListener(new SelectionListener() {
747 public void widgetSelected(SelectionEvent e) {
748 widgetDefaultSelected(e);
752 public void widgetDefaultSelected(SelectionEvent e) {
753 model.setEndXCoordIndex(Integer.parseInt(endXCoordSelector.getValue()));
754 validatePageComplete();
758 endYCoordSelector = new DynamicComboFieldEditor("endyCoord", "End Y Coordinate", parent);
759 endYCoordSelector.addComboListener(new SelectionListener() {
762 public void widgetSelected(SelectionEvent e) {
763 widgetDefaultSelected(e);
767 public void widgetDefaultSelected(SelectionEvent e) {
768 model.setEndYCoordIndex(Integer.parseInt(endYCoordSelector.getValue()));
769 validatePageComplete();
772 endZValueSelector = new DynamicComboFieldEditor("endzValue", "End Z Value", parent);
773 endZValueSelector.addComboListener(new SelectionListener() {
776 public void widgetSelected(SelectionEvent e) {
777 widgetDefaultSelected(e);
781 public void widgetDefaultSelected(SelectionEvent e) {
782 model.setEndZCoordIndex(Integer.parseInt(endZValueSelector.getValue()));
783 validatePageComplete();
786 detailedGeometrySelector = new DynamicComboFieldEditor("detailedGeometryValue", "Geometry", parent);
787 detailedGeometrySelector.addComboListener(new SelectionListener() {
790 public void widgetSelected(SelectionEvent e) {
791 widgetDefaultSelected(e);
795 public void widgetDefaultSelected(SelectionEvent e) {
796 model.detailedGeometryIndex(Integer.parseInt(detailedGeometrySelector.getValue()));
797 validatePageComplete();
800 diameterSelector = new DynamicComboFieldEditor("diameterValue", "Diameter value", parent);
801 diameterSelector.addComboListener(new SelectionListener() {
804 public void widgetSelected(SelectionEvent e) {
805 widgetDefaultSelected(e);
809 public void widgetDefaultSelected(SelectionEvent e) {
810 model.setDiameterIndex(Integer.parseInt(diameterSelector.getValue()));
811 validatePageComplete();
814 outerDiameterSelector = new DynamicComboFieldEditor("outerDiameterValue", "Outer Diameter value", parent);
815 outerDiameterSelector.addComboListener(new SelectionListener() {
818 public void widgetSelected(SelectionEvent e) {
819 widgetDefaultSelected(e);
823 public void widgetDefaultSelected(SelectionEvent e) {
824 model.setOuterDiameterIndex(Integer.parseInt(outerDiameterSelector.getValue()));
825 validatePageComplete();
828 nominalMassFlowSelector = new DynamicComboFieldEditor("nominalMassFlowValue", "Nominal Mass Flow", parent);
829 nominalMassFlowSelector.addComboListener(new SelectionListener() {
832 public void widgetSelected(SelectionEvent e) {
833 widgetDefaultSelected(e);
837 public void widgetDefaultSelected(SelectionEvent e) {
838 model.setNominalMassFlowIndex(Integer.parseInt(nominalMassFlowSelector.getValue()));
839 validatePageComplete();
842 edgeFlowAreaSelector = new DynamicComboFieldEditor("edgeFlowAreaValue", "Flow Area", parent);
843 edgeFlowAreaSelector.addComboListener(new SelectionListener() {
846 public void widgetSelected(SelectionEvent e) {
847 widgetDefaultSelected(e);
851 public void widgetDefaultSelected(SelectionEvent e) {
852 model.setEdgeFlowAreaIndex(Integer.parseInt(edgeFlowAreaSelector.getValue()));
853 validatePageComplete();
856 kReturnSelector = new DynamicComboFieldEditor("kReturnValue", "K Return", parent);
857 kReturnSelector.addComboListener(new SelectionListener() {
860 public void widgetSelected(SelectionEvent e) {
861 widgetDefaultSelected(e);
865 public void widgetDefaultSelected(SelectionEvent e) {
866 model.setKReturnIndex(Integer.parseInt(kReturnSelector.getValue()));
867 validatePageComplete();
870 kSupplySelector = new DynamicComboFieldEditor("kSupplyValue", "K Supply", parent);
871 kSupplySelector.addComboListener(new SelectionListener() {
874 public void widgetSelected(SelectionEvent e) {
875 widgetDefaultSelected(e);
879 public void widgetDefaultSelected(SelectionEvent e) {
880 model.setKSupplyIndex(Integer.parseInt(kSupplySelector.getValue()));
881 validatePageComplete();
884 tGroundSelector = new DynamicComboFieldEditor("tGroundValue", "Temperature Ground", parent);
885 tGroundSelector.addComboListener(new SelectionListener() {
888 public void widgetSelected(SelectionEvent e) {
889 widgetDefaultSelected(e);
893 public void widgetDefaultSelected(SelectionEvent e) {
894 model.setTGroundIndex(Integer.parseInt(tGroundSelector.getValue()));
895 validatePageComplete();
898 lengthSelector = new DynamicComboFieldEditor("lengthValue", "lengthSelector", parent);
899 lengthSelector.addComboListener(new SelectionListener() {
902 public void widgetSelected(SelectionEvent e) {
903 widgetDefaultSelected(e);
907 public void widgetDefaultSelected(SelectionEvent e) {
908 model.setLengthIndex(Integer.parseInt(lengthSelector.getValue()));
909 validatePageComplete();
914 private void updateCombos() {
915 String[][] namesAndValues = new String[headerIndexAndValues.size() + 1][];
917 namesAndValues[0] = new String[] {"", "-1"};
919 for (Entry<Integer, String> entry : headerIndexAndValues.entrySet()) {
920 int key = entry.getKey();
921 String value = entry.getValue();
923 String[] nameAndValue = new String[2];
924 nameAndValue[0] = value;
925 nameAndValue[1] = Integer.toString(key);
926 namesAndValues[i++] = nameAndValue;
929 if (model.isVertexImport())
930 updateVertexCombos(namesAndValues);
932 updateEdgeCombos(namesAndValues);
934 componentMappingSelector.updateCombo(namesAndValues);
935 idSelector.updateCombo(namesAndValues);
938 private void updateEdgeCombos(String[][] namesAndValues) {
939 startXCoordSelector.updateCombo(namesAndValues);
940 endXCoordSelector.updateCombo(namesAndValues);
941 startYCoordSelector.updateCombo(namesAndValues);
942 endYCoordSelector.updateCombo(namesAndValues);
943 startZValueSelector.updateCombo(namesAndValues);
944 endZValueSelector.updateCombo(namesAndValues);
945 detailedGeometrySelector.updateCombo(namesAndValues);
946 diameterSelector.updateCombo(namesAndValues);
947 outerDiameterSelector.updateCombo(namesAndValues);
948 nominalMassFlowSelector.updateCombo(namesAndValues);
949 edgeFlowAreaSelector.updateCombo(namesAndValues);
950 kReturnSelector.updateCombo(namesAndValues);
951 kSupplySelector.updateCombo(namesAndValues);
952 tGroundSelector.updateCombo(namesAndValues);
953 lengthSelector.updateCombo(namesAndValues);
956 private void updateVertexCombos(String[][] namesAndValues) {
957 xCoordSelector.updateCombo(namesAndValues);
958 yCoordSelector.updateCombo(namesAndValues);
959 zValueSelector.updateCombo(namesAndValues);
960 altElevationValueSelector.updateCombo(namesAndValues);
961 supplyTempValueSelector.updateCombo(namesAndValues);
962 returnTempValueSelector.updateCombo(namesAndValues);
963 supplyPressureValueSelector.updateCombo(namesAndValues);
964 returnPressureValueSelector.updateCombo(namesAndValues);
965 dpSelector.updateCombo(namesAndValues);
966 dtSelector.updateCombo(namesAndValues);
967 heatPowerSelector.updateCombo(namesAndValues);
968 valvePositionSelector.updateCombo(namesAndValues);
969 nominalHeadMSelector.updateCombo(namesAndValues);
970 nominalHeadBSelector.updateCombo(namesAndValues);
971 nominalFlowSelector.updateCombo(namesAndValues);
972 maximumHeadMSelector.updateCombo(namesAndValues);
973 heatLoadDsSelector.updateCombo(namesAndValues);
974 massFlowSelector.updateCombo(namesAndValues);
975 volFlowSelector.updateCombo(namesAndValues);
976 velocitySelector.updateCombo(namesAndValues);
977 flowAreaSelector.updateCombo(namesAndValues);
978 nominalPressureLossSelector.updateCombo(namesAndValues);
979 addressSelector.updateCombo(namesAndValues);
984 private void updateHeaders() {
985 if (headerTable != null)
986 headerTable.dispose();
987 headerTable = new Table(tableComposite, SWT.NONE);
988 headerTable.setHeaderVisible(true);
989 headerTable.setLinesVisible(true);
990 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite);
991 for (int i = 0; i < headerTable.getColumns().length; i++) {
992 TableColumn column = headerTable.getColumns()[i];
995 for (int i = 0; i < headerTable.getItemCount(); i++) {
996 TableItem item = headerTable.getItem(i);
1000 headerIndexAndValues.clear();
1003 List<CSVRecord> rows = model.getRows(5, false);
1005 for (int k = 0; k < rows.size(); k++) {
1006 CSVRecord row = rows.get(k);
1008 int columnCount = row.size();
1009 for (int i = 0; i < columnCount; i++) {
1010 String value = row.get(i);
1012 TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);
1013 headerCol.setText(value);
1015 tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));
1018 headerIndexAndValues.put(i, value);
1020 int actualK = k - 1;
1022 int itemCount = headerTable.getItemCount();
1023 if (actualK >= itemCount) {
1024 item = new TableItem(headerTable, SWT.NONE);
1026 item = headerTable.getItem(actualK);
1028 item.setText(i, value);
1033 } catch (IOException e) {
1034 setErrorMessage(e.getMessage());
1038 protected void validatePageComplete() {
1039 if (model.isVertexImport())
1040 setPageComplete(model.getXCoordIndex() != -1 && model.getYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);
1042 setPageComplete(model.getStartXCoordIndex() != -1 && model.getStartYCoordIndex() != -1 && model.getEndXCoordIndex() != -1 && model.getEndYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);