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;
62 private DynamicComboFieldEditor supplyTempValueSelector;
63 private DynamicComboFieldEditor returnTempValueSelector;
64 private DynamicComboFieldEditor supplyPressureValueSelector;
65 private DynamicComboFieldEditor returnPressureValueSelector;
66 private DynamicComboFieldEditor dpSelector;
67 private DynamicComboFieldEditor dtSelector;
68 private DynamicComboFieldEditor heatPowerSelector;
69 private DynamicComboFieldEditor nominalHeadMSelector;
70 private DynamicComboFieldEditor nominalHeadBSelector;
71 private DynamicComboFieldEditor nominalFlowSelector;
72 private DynamicComboFieldEditor maximumHeadMSelector;
73 private DynamicComboFieldEditor heatLoadDsSelector;
74 private DynamicComboFieldEditor massFlowSelector;
75 private DynamicComboFieldEditor volFlowSelector;
76 private DynamicComboFieldEditor velocitySelector;
77 private DynamicComboFieldEditor flowAreaSelector;
78 private DynamicComboFieldEditor nominalPressureLossSelector;
79 private DynamicComboFieldEditor valvePositionSelector;
80 private DynamicComboFieldEditor addressSelector;
81 private DynamicComboFieldEditor lengthSelector;
84 private DynamicComboFieldEditor startXCoordSelector;
85 private DynamicComboFieldEditor startYCoordSelector;
86 private DynamicComboFieldEditor startZValueSelector;
87 private DynamicComboFieldEditor endXCoordSelector;
88 private DynamicComboFieldEditor endYCoordSelector;
89 private DynamicComboFieldEditor endZValueSelector;
90 private DynamicComboFieldEditor detailedGeometrySelector;
92 private Text edgeConnectionPadding;
94 private DynamicComboFieldEditor outerDiameterSelector;
95 private DynamicComboFieldEditor diameterSelector;
96 private DynamicComboFieldEditor nominalMassFlowSelector;
98 private Group indexMappingGroup;
100 private Composite composite;
102 private Button isVertexImport;
104 private Combo sourceCRSCombo;
106 private DynamicComboFieldEditor edgeFlowAreaSelector;
108 private DynamicComboFieldEditor kReturnSelector;
110 private DynamicComboFieldEditor kSupplySelector;
112 private DynamicComboFieldEditor tGroundSelector;
114 protected CSVImportWizardPage(CSVImportModel model) {
115 super("Import CSV Data");
117 setMessage("Select column index mappings");
121 public void createControl(Composite parent) {
122 composite = new Composite(parent, SWT.NONE);
123 composite.setLayout(new GridLayout(1, false));
124 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);
126 Label label = new Label(composite, SWT.NONE);
127 label.setText("Select delimiter");
129 delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
130 delimiterCombo.setToolTipText("Select the delimiter that is used to separate elements in the CSV file");
131 String[] formats = model.getDelimiterFormats();
132 delimiterCombo.setItems(formats);
133 if (formats.length > 0)
134 delimiterCombo.select(0);
135 delimiterCombo.addSelectionListener(new SelectionListener() {
138 public void widgetSelected(SelectionEvent e) {
139 model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex()));
145 public void widgetDefaultSelected(SelectionEvent e) {
150 // firstAsHeader = new Button(composite, SWT.CHECK);
151 // firstAsHeader.setText("Read first row as header");
152 // firstAsHeader.setSelection(model.getReadFirstAsHeader());
153 // firstAsHeader.addSelectionListener(new SelectionListener() {
156 // public void widgetSelected(SelectionEvent e) {
157 // model.setReadFirstAsHeader(firstAsHeader.getSelection());
163 // public void widgetDefaultSelected(SelectionEvent e) {
164 // widgetSelected(e);
168 tableComposite = new Composite(composite, SWT.BORDER);
169 tableColumnLayout = new TableColumnLayout();
170 tableComposite.setLayout(tableColumnLayout);
172 label = new Label(composite, SWT.NONE);
173 label.setText("Select source Coordinate Reference System");
175 sourceCRSCombo = new Combo(composite, SWT.NONE);
176 sourceCRSCombo.setToolTipText("Select the coordinate reference system that is used in the source material for possible transformation to target coordinate reference system (EPSG:4326)");
177 Set<String> codes = CRS.getSupportedCodes("EPSG");
178 sourceCRSCombo.setItems(codes.toArray(new String[codes.size()]));
179 sourceCRSCombo.addSelectionListener(new SelectionAdapter() {
182 public void widgetSelected(SelectionEvent e) {
183 String current = sourceCRSCombo.getItem(sourceCRSCombo.getSelectionIndex());
184 model.setSourceCRS("EPSG:" + current);
188 sourceCRSCombo.addModifyListener(new ModifyListener() {
191 public void modifyText(ModifyEvent e) {
192 String currentText = sourceCRSCombo.getText();
193 if (codes.contains(currentText)) {
195 String[] items = sourceCRSCombo.getItems();
197 for (i = 0; i < items.length; i++) {
198 String item = items[i];
199 if (currentText.equals(item)) {
204 sourceCRSCombo.select(i);
205 model.setSourceCRS("EPSG:" + currentText);
207 System.err.println("this should not happen");
213 // wktFileSelection = new FileSelectionWidget(composite, "WKT file", SWT.OPEN);
214 // wktFileSelection.addListener(new FileSelectionListener() {
217 // public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {
218 // String[] selection = wktFileSelection.getFilename();
219 // if (selection != null && selection.length > 0) {
220 // Path wktFile = Paths.get(selection[0]);
221 // if (!Files.exists(wktFile)) {
222 // setErrorMessage("File " + wktFile.toAbsolutePath() + " does not exist");
224 // model.setWKTFile(wktFile);
225 // validatePageComplete();
231 isVertexImport = new Button(composite, SWT.CHECK);
232 isVertexImport.setText("File contains vertices");
233 isVertexImport.setToolTipText("Enable this if the file contains vertices, i.e. points");
234 isVertexImport.setSelection(model.isVertexImport());
235 isVertexImport.addSelectionListener(new SelectionListener() {
238 public void widgetSelected(SelectionEvent e) {
239 model.setVertexImport(isVertexImport.getSelection());
240 updateControls(false);
244 public void widgetDefaultSelected(SelectionEvent e) {
249 updateControls(true);
251 setControl(composite);
253 final IWizardContainer container = getContainer();
255 if (container instanceof IPageChangeProvider) {
256 ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() {
259 public void pageChanged(PageChangedEvent event) {
261 CSVImportWizardPage.this.updateControls(false);
266 validatePageComplete();
269 private void updateControls(boolean initial) {
270 createIndexMappingGroup();
273 composite.layout(true, true);
276 private void createIndexMappingGroup() {
277 if (indexMappingGroup != null)
278 indexMappingGroup.dispose();
280 indexMappingGroup = new Group(composite, SWT.NONE);
281 indexMappingGroup.setText("Column index mapping");
282 GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(indexMappingGroup);
284 if (model.isVertexImport())
285 createVertexIndexMappingField(indexMappingGroup);
287 createEdgeIndexMappingField(indexMappingGroup);
289 createCommonIndexMappingField(indexMappingGroup);
291 if (!model.isVertexImport()) {
292 Label label = new Label(indexMappingGroup, SWT.NONE);
293 label.setText("Connection point padding");
294 GridDataFactory.fillDefaults().applyTo(label);
295 edgeConnectionPadding = new Text(indexMappingGroup, SWT.BORDER);
296 GridDataFactory.fillDefaults().applyTo(edgeConnectionPadding);
297 edgeConnectionPadding.setText("0.0001"); // default
298 edgeConnectionPadding.addModifyListener(new ModifyListener() {
301 public void modifyText(ModifyEvent e) {
303 double padding = Double.parseDouble(edgeConnectionPadding.getText());
304 model.setEdgePadding(padding);
305 } catch (NumberFormatException ee) {
313 private void createCommonIndexMappingField(Group parent) {
315 componentMappingSelector = new DynamicComboFieldEditor("componentMapping", "Apros component mapping", parent);
316 componentMappingSelector.addComboListener(new SelectionListener() {
319 public void widgetSelected(SelectionEvent e) {
320 widgetDefaultSelected(e);
324 public void widgetDefaultSelected(SelectionEvent e) {
325 model.setComponentMappingIndex(Integer.parseInt(componentMappingSelector.getValue()));
326 validatePageComplete();
330 idSelector = new DynamicComboFieldEditor("id", "ID", parent);
331 idSelector.addComboListener(new SelectionListener() {
334 public void widgetSelected(SelectionEvent e) {
335 widgetDefaultSelected(e);
339 public void widgetDefaultSelected(SelectionEvent e) {
340 model.setIdIndex(Integer.parseInt(idSelector.getValue()));
341 validatePageComplete();
347 private void createVertexIndexMappingField(Group parent) {
348 xCoordSelector = new DynamicComboFieldEditor("xCoord", "X Coordinate", parent);
349 xCoordSelector.addComboListener(new SelectionListener() {
352 public void widgetSelected(SelectionEvent e) {
353 widgetDefaultSelected(e);
357 public void widgetDefaultSelected(SelectionEvent e) {
358 model.setXCoordIndex(Integer.parseInt(xCoordSelector.getValue()));
359 validatePageComplete();
363 yCoordSelector = new DynamicComboFieldEditor("yCoord", "Y Coordinate", parent);
364 yCoordSelector.addComboListener(new SelectionListener() {
367 public void widgetSelected(SelectionEvent e) {
368 widgetDefaultSelected(e);
372 public void widgetDefaultSelected(SelectionEvent e) {
373 model.setYCoordIndex(Integer.parseInt(yCoordSelector.getValue()));
374 validatePageComplete();
377 zValueSelector = new DynamicComboFieldEditor("zValue", "Z Value", parent);
378 zValueSelector.addComboListener(new SelectionListener() {
381 public void widgetSelected(SelectionEvent e) {
382 widgetDefaultSelected(e);
386 public void widgetDefaultSelected(SelectionEvent e) {
387 model.setZCoordIndex(Integer.parseInt(zValueSelector.getValue()));
388 validatePageComplete();
391 supplyTempValueSelector = new DynamicComboFieldEditor("tempValue", "Supply Temperature value", parent);
392 supplyTempValueSelector.addComboListener(new SelectionListener() {
395 public void widgetSelected(SelectionEvent e) {
396 widgetDefaultSelected(e);
400 public void widgetDefaultSelected(SelectionEvent e) {
401 model.setSupplyTempIndex(Integer.parseInt(supplyTempValueSelector.getValue()));
402 validatePageComplete();
405 returnTempValueSelector = new DynamicComboFieldEditor("returnTempValue", "Return Temperature value", parent);
406 returnTempValueSelector.addComboListener(new SelectionListener() {
409 public void widgetSelected(SelectionEvent e) {
410 widgetDefaultSelected(e);
414 public void widgetDefaultSelected(SelectionEvent e) {
415 model.setReturnTempIndex(Integer.parseInt(returnTempValueSelector.getValue()));
416 validatePageComplete();
419 supplyPressureValueSelector = new DynamicComboFieldEditor("pressureValue", "Supply Pressure value", parent);
420 supplyPressureValueSelector.addComboListener(new SelectionListener() {
423 public void widgetSelected(SelectionEvent e) {
424 widgetDefaultSelected(e);
428 public void widgetDefaultSelected(SelectionEvent e) {
429 model.setSupplyPressureIndex(Integer.parseInt(supplyPressureValueSelector.getValue()));
430 validatePageComplete();
433 returnPressureValueSelector = new DynamicComboFieldEditor("returnPressureValue", "Return Pressure value", parent);
434 returnPressureValueSelector.addComboListener(new SelectionListener() {
437 public void widgetSelected(SelectionEvent e) {
438 widgetDefaultSelected(e);
442 public void widgetDefaultSelected(SelectionEvent e) {
443 model.setReturnPressureIndex(Integer.parseInt(returnPressureValueSelector.getValue()));
444 validatePageComplete();
447 dpSelector = new DynamicComboFieldEditor("dpValue", "Delta pressure ", parent);
448 dpSelector.addComboListener(new SelectionListener() {
451 public void widgetSelected(SelectionEvent e) {
452 widgetDefaultSelected(e);
456 public void widgetDefaultSelected(SelectionEvent e) {
457 model.setDeltaPressureIndex(Integer.parseInt(dpSelector.getValue()));
458 validatePageComplete();
461 dtSelector = new DynamicComboFieldEditor("dtValue", "Delta temperature ", parent);
462 dtSelector.addComboListener(new SelectionListener() {
465 public void widgetSelected(SelectionEvent e) {
466 widgetDefaultSelected(e);
470 public void widgetDefaultSelected(SelectionEvent e) {
471 model.setDeltaTemperatureIndex(Integer.parseInt(dtSelector.getValue()));
472 validatePageComplete();
475 heatPowerSelector = new DynamicComboFieldEditor("heatPowerValue", "Heat Power", parent);
476 heatPowerSelector.addComboListener(new SelectionListener() {
479 public void widgetSelected(SelectionEvent e) {
480 widgetDefaultSelected(e);
484 public void widgetDefaultSelected(SelectionEvent e) {
485 model.setHeatPowerIndex(Integer.parseInt(heatPowerSelector.getValue()));
486 validatePageComplete();
489 nominalHeadMSelector = new DynamicComboFieldEditor("nominalHeadMValue", "nominalHeadM", parent);
490 nominalHeadMSelector.addComboListener(new SelectionListener() {
493 public void widgetSelected(SelectionEvent e) {
494 widgetDefaultSelected(e);
498 public void widgetDefaultSelected(SelectionEvent e) {
499 model.setNominalHeadMIndex(Integer.parseInt(nominalHeadMSelector.getValue()));
500 validatePageComplete();
503 nominalHeadBSelector = new DynamicComboFieldEditor("nominalHeadBValue", "nominalHeadB", parent);
504 nominalHeadBSelector.addComboListener(new SelectionListener() {
507 public void widgetSelected(SelectionEvent e) {
508 widgetDefaultSelected(e);
512 public void widgetDefaultSelected(SelectionEvent e) {
513 model.setNominalHeadBIndex(Integer.parseInt(nominalHeadBSelector.getValue()));
514 validatePageComplete();
517 nominalFlowSelector = new DynamicComboFieldEditor("nominalFlowValue", "nominalFlow", parent);
518 nominalFlowSelector.addComboListener(new SelectionListener() {
521 public void widgetSelected(SelectionEvent e) {
522 widgetDefaultSelected(e);
526 public void widgetDefaultSelected(SelectionEvent e) {
527 model.setNominalFlowIndex(Integer.parseInt(nominalFlowSelector.getValue()));
528 validatePageComplete();
532 maximumHeadMSelector = new DynamicComboFieldEditor("maximumHeadMValue", "maximumHeadM", parent);
533 maximumHeadMSelector.addComboListener(new SelectionListener() {
536 public void widgetSelected(SelectionEvent e) {
537 widgetDefaultSelected(e);
541 public void widgetDefaultSelected(SelectionEvent e) {
542 model.setMaximumHeadMIndex(Integer.parseInt(maximumHeadMSelector.getValue()));
543 validatePageComplete();
546 heatLoadDsSelector = new DynamicComboFieldEditor("heatLoadDsValue", "heatLoadDs", parent);
547 heatLoadDsSelector.addComboListener(new SelectionListener() {
550 public void widgetSelected(SelectionEvent e) {
551 widgetDefaultSelected(e);
555 public void widgetDefaultSelected(SelectionEvent e) {
556 model.setHeatLoadDsIndex(Integer.parseInt(heatLoadDsSelector.getValue()));
557 validatePageComplete();
560 massFlowSelector = new DynamicComboFieldEditor("massFlowValue", "massFlow", parent);
561 massFlowSelector.addComboListener(new SelectionListener() {
564 public void widgetSelected(SelectionEvent e) {
565 widgetDefaultSelected(e);
569 public void widgetDefaultSelected(SelectionEvent e) {
570 model.setMassFlowIndex(Integer.parseInt(massFlowSelector.getValue()));
571 validatePageComplete();
574 volFlowSelector = new DynamicComboFieldEditor("volFlowValue", "volFlow", parent);
575 volFlowSelector.addComboListener(new SelectionListener() {
578 public void widgetSelected(SelectionEvent e) {
579 widgetDefaultSelected(e);
583 public void widgetDefaultSelected(SelectionEvent e) {
584 model.setVolFlowIndex(Integer.parseInt(volFlowSelector.getValue()));
585 validatePageComplete();
588 velocitySelector = new DynamicComboFieldEditor("velocityValue", "velocity", parent);
589 velocitySelector.addComboListener(new SelectionListener() {
592 public void widgetSelected(SelectionEvent e) {
593 widgetDefaultSelected(e);
597 public void widgetDefaultSelected(SelectionEvent e) {
598 model.setVelocityIndex(Integer.parseInt(velocitySelector.getValue()));
599 validatePageComplete();
602 flowAreaSelector = new DynamicComboFieldEditor("flowAreaValue", "flowArea", parent);
603 flowAreaSelector.addComboListener(new SelectionListener() {
606 public void widgetSelected(SelectionEvent e) {
607 widgetDefaultSelected(e);
611 public void widgetDefaultSelected(SelectionEvent e) {
612 model.setFlowAreaIndex(Integer.parseInt(flowAreaSelector.getValue()));
613 validatePageComplete();
616 nominalPressureLossSelector = new DynamicComboFieldEditor("nominalPressureLossValue", "nominalPressureLoss", parent);
617 nominalPressureLossSelector.addComboListener(new SelectionListener() {
620 public void widgetSelected(SelectionEvent e) {
621 widgetDefaultSelected(e);
625 public void widgetDefaultSelected(SelectionEvent e) {
626 model.setNominalPressureLossIndex(Integer.parseInt(nominalPressureLossSelector.getValue()));
627 validatePageComplete();
630 valvePositionSelector = new DynamicComboFieldEditor("valvePositionSelectorValue", "valvePositionSelector", parent);
631 valvePositionSelector.addComboListener(new SelectionListener() {
634 public void widgetSelected(SelectionEvent e) {
635 widgetDefaultSelected(e);
639 public void widgetDefaultSelected(SelectionEvent e) {
640 model.setValvePositionIndex(Integer.parseInt(valvePositionSelector.getValue()));
641 validatePageComplete();
644 addressSelector = new DynamicComboFieldEditor("addressValue", "addressSelector", parent);
645 addressSelector.addComboListener(new SelectionListener() {
648 public void widgetSelected(SelectionEvent e) {
649 widgetDefaultSelected(e);
653 public void widgetDefaultSelected(SelectionEvent e) {
654 model.setAddressIndex(Integer.parseInt(addressSelector.getValue()));
655 validatePageComplete();
662 private void createEdgeIndexMappingField(Group parent) {
664 // Composite paddingComposite = new Composite(parent, SWT.NONE);
665 // GridLayoutFactory.fillDefaults().numColumns(2).applyTo(paddingComposite);
667 startXCoordSelector = new DynamicComboFieldEditor("startxCoord", "Start X Coordinate", parent);
668 startXCoordSelector.addComboListener(new SelectionListener() {
671 public void widgetSelected(SelectionEvent e) {
672 widgetDefaultSelected(e);
676 public void widgetDefaultSelected(SelectionEvent e) {
677 model.setStartXCoordIndex(Integer.parseInt(startXCoordSelector.getValue()));
678 validatePageComplete();
682 startYCoordSelector = new DynamicComboFieldEditor("startyCoord", "Start Y Coordinate", parent);
683 startYCoordSelector.addComboListener(new SelectionListener() {
686 public void widgetSelected(SelectionEvent e) {
687 widgetDefaultSelected(e);
691 public void widgetDefaultSelected(SelectionEvent e) {
692 model.setStartYCoordIndex(Integer.parseInt(startYCoordSelector.getValue()));
693 validatePageComplete();
696 startZValueSelector = new DynamicComboFieldEditor("startzValue", "Start Z Value", parent);
697 startZValueSelector.addComboListener(new SelectionListener() {
700 public void widgetSelected(SelectionEvent e) {
701 widgetDefaultSelected(e);
705 public void widgetDefaultSelected(SelectionEvent e) {
706 model.setStartZCoordIndex(Integer.parseInt(startZValueSelector.getValue()));
707 validatePageComplete();
711 endXCoordSelector = new DynamicComboFieldEditor("endxCoord", "End X Coordinate", parent);
712 endXCoordSelector.addComboListener(new SelectionListener() {
715 public void widgetSelected(SelectionEvent e) {
716 widgetDefaultSelected(e);
720 public void widgetDefaultSelected(SelectionEvent e) {
721 model.setEndXCoordIndex(Integer.parseInt(endXCoordSelector.getValue()));
722 validatePageComplete();
726 endYCoordSelector = new DynamicComboFieldEditor("endyCoord", "End Y Coordinate", parent);
727 endYCoordSelector.addComboListener(new SelectionListener() {
730 public void widgetSelected(SelectionEvent e) {
731 widgetDefaultSelected(e);
735 public void widgetDefaultSelected(SelectionEvent e) {
736 model.setEndYCoordIndex(Integer.parseInt(endYCoordSelector.getValue()));
737 validatePageComplete();
740 endZValueSelector = new DynamicComboFieldEditor("endzValue", "End Z Value", parent);
741 endZValueSelector.addComboListener(new SelectionListener() {
744 public void widgetSelected(SelectionEvent e) {
745 widgetDefaultSelected(e);
749 public void widgetDefaultSelected(SelectionEvent e) {
750 model.setEndZCoordIndex(Integer.parseInt(endZValueSelector.getValue()));
751 validatePageComplete();
754 detailedGeometrySelector = new DynamicComboFieldEditor("detailedGeometryValue", "Geometry", parent);
755 detailedGeometrySelector.addComboListener(new SelectionListener() {
758 public void widgetSelected(SelectionEvent e) {
759 widgetDefaultSelected(e);
763 public void widgetDefaultSelected(SelectionEvent e) {
764 model.detailedGeometryIndex(Integer.parseInt(detailedGeometrySelector.getValue()));
765 validatePageComplete();
768 diameterSelector = new DynamicComboFieldEditor("diameterValue", "Diameter value", parent);
769 diameterSelector.addComboListener(new SelectionListener() {
772 public void widgetSelected(SelectionEvent e) {
773 widgetDefaultSelected(e);
777 public void widgetDefaultSelected(SelectionEvent e) {
778 model.setDiameterIndex(Integer.parseInt(diameterSelector.getValue()));
779 validatePageComplete();
782 outerDiameterSelector = new DynamicComboFieldEditor("outerDiameterValue", "Outer Diameter value", parent);
783 outerDiameterSelector.addComboListener(new SelectionListener() {
786 public void widgetSelected(SelectionEvent e) {
787 widgetDefaultSelected(e);
791 public void widgetDefaultSelected(SelectionEvent e) {
792 model.setOuterDiameterIndex(Integer.parseInt(outerDiameterSelector.getValue()));
793 validatePageComplete();
796 nominalMassFlowSelector = new DynamicComboFieldEditor("nominalMassFlowValue", "Nominal Mass Flow", parent);
797 nominalMassFlowSelector.addComboListener(new SelectionListener() {
800 public void widgetSelected(SelectionEvent e) {
801 widgetDefaultSelected(e);
805 public void widgetDefaultSelected(SelectionEvent e) {
806 model.setNominalMassFlowIndex(Integer.parseInt(nominalMassFlowSelector.getValue()));
807 validatePageComplete();
810 edgeFlowAreaSelector = new DynamicComboFieldEditor("edgeFlowAreaValue", "Flow Area", parent);
811 edgeFlowAreaSelector.addComboListener(new SelectionListener() {
814 public void widgetSelected(SelectionEvent e) {
815 widgetDefaultSelected(e);
819 public void widgetDefaultSelected(SelectionEvent e) {
820 model.setEdgeFlowAreaIndex(Integer.parseInt(edgeFlowAreaSelector.getValue()));
821 validatePageComplete();
824 kReturnSelector = new DynamicComboFieldEditor("kReturnValue", "K Return", parent);
825 kReturnSelector.addComboListener(new SelectionListener() {
828 public void widgetSelected(SelectionEvent e) {
829 widgetDefaultSelected(e);
833 public void widgetDefaultSelected(SelectionEvent e) {
834 model.setKReturnIndex(Integer.parseInt(kReturnSelector.getValue()));
835 validatePageComplete();
838 kSupplySelector = new DynamicComboFieldEditor("kSupplyValue", "K Supply", parent);
839 kSupplySelector.addComboListener(new SelectionListener() {
842 public void widgetSelected(SelectionEvent e) {
843 widgetDefaultSelected(e);
847 public void widgetDefaultSelected(SelectionEvent e) {
848 model.setKSupplyIndex(Integer.parseInt(kSupplySelector.getValue()));
849 validatePageComplete();
852 tGroundSelector = new DynamicComboFieldEditor("tGroundValue", "Temperature Ground", parent);
853 tGroundSelector.addComboListener(new SelectionListener() {
856 public void widgetSelected(SelectionEvent e) {
857 widgetDefaultSelected(e);
861 public void widgetDefaultSelected(SelectionEvent e) {
862 model.setTGroundIndex(Integer.parseInt(tGroundSelector.getValue()));
863 validatePageComplete();
866 lengthSelector = new DynamicComboFieldEditor("lengthValue", "lengthSelector", parent);
867 lengthSelector.addComboListener(new SelectionListener() {
870 public void widgetSelected(SelectionEvent e) {
871 widgetDefaultSelected(e);
875 public void widgetDefaultSelected(SelectionEvent e) {
876 model.setLengthIndex(Integer.parseInt(lengthSelector.getValue()));
877 validatePageComplete();
882 private void updateCombos() {
883 String[][] namesAndValues = new String[headerIndexAndValues.size() + 1][];
885 namesAndValues[0] = new String[] {"", "-1"};
887 for (Entry<Integer, String> entry : headerIndexAndValues.entrySet()) {
888 int key = entry.getKey();
889 String value = entry.getValue();
891 String[] nameAndValue = new String[2];
892 nameAndValue[0] = value;
893 nameAndValue[1] = Integer.toString(key);
894 namesAndValues[i++] = nameAndValue;
897 if (model.isVertexImport())
898 updateVertexCombos(namesAndValues);
900 updateEdgeCombos(namesAndValues);
902 componentMappingSelector.updateCombo(namesAndValues);
903 idSelector.updateCombo(namesAndValues);
906 private void updateEdgeCombos(String[][] namesAndValues) {
907 startXCoordSelector.updateCombo(namesAndValues);
908 endXCoordSelector.updateCombo(namesAndValues);
909 startYCoordSelector.updateCombo(namesAndValues);
910 endYCoordSelector.updateCombo(namesAndValues);
911 startZValueSelector.updateCombo(namesAndValues);
912 endZValueSelector.updateCombo(namesAndValues);
913 detailedGeometrySelector.updateCombo(namesAndValues);
914 diameterSelector.updateCombo(namesAndValues);
915 outerDiameterSelector.updateCombo(namesAndValues);
916 nominalMassFlowSelector.updateCombo(namesAndValues);
917 edgeFlowAreaSelector.updateCombo(namesAndValues);
918 kReturnSelector.updateCombo(namesAndValues);
919 kSupplySelector.updateCombo(namesAndValues);
920 tGroundSelector.updateCombo(namesAndValues);
921 lengthSelector.updateCombo(namesAndValues);
924 private void updateVertexCombos(String[][] namesAndValues) {
925 xCoordSelector.updateCombo(namesAndValues);
926 yCoordSelector.updateCombo(namesAndValues);
927 zValueSelector.updateCombo(namesAndValues);
928 supplyTempValueSelector.updateCombo(namesAndValues);
929 returnTempValueSelector.updateCombo(namesAndValues);
930 supplyPressureValueSelector.updateCombo(namesAndValues);
931 returnPressureValueSelector.updateCombo(namesAndValues);
932 dpSelector.updateCombo(namesAndValues);
933 dtSelector.updateCombo(namesAndValues);
934 heatPowerSelector.updateCombo(namesAndValues);
935 valvePositionSelector.updateCombo(namesAndValues);
936 nominalHeadMSelector.updateCombo(namesAndValues);
937 nominalHeadBSelector.updateCombo(namesAndValues);
938 nominalFlowSelector.updateCombo(namesAndValues);
939 maximumHeadMSelector.updateCombo(namesAndValues);
940 heatLoadDsSelector.updateCombo(namesAndValues);
941 massFlowSelector.updateCombo(namesAndValues);
942 volFlowSelector.updateCombo(namesAndValues);
943 velocitySelector.updateCombo(namesAndValues);
944 flowAreaSelector.updateCombo(namesAndValues);
945 nominalPressureLossSelector.updateCombo(namesAndValues);
946 addressSelector.updateCombo(namesAndValues);
951 private void updateHeaders() {
952 if (headerTable != null)
953 headerTable.dispose();
954 headerTable = new Table(tableComposite, SWT.NONE);
955 headerTable.setHeaderVisible(true);
956 headerTable.setLinesVisible(true);
957 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite);
958 for (int i = 0; i < headerTable.getColumns().length; i++) {
959 TableColumn column = headerTable.getColumns()[i];
962 for (int i = 0; i < headerTable.getItemCount(); i++) {
963 TableItem item = headerTable.getItem(i);
967 headerIndexAndValues.clear();
970 List<CSVRecord> rows = model.getRows(5, false);
972 for (int k = 0; k < rows.size(); k++) {
973 CSVRecord row = rows.get(k);
975 int columnCount = row.size();
976 for (int i = 0; i < columnCount; i++) {
977 String value = row.get(i);
979 TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);
980 headerCol.setText(value);
982 tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));
985 headerIndexAndValues.put(i, value);
989 int itemCount = headerTable.getItemCount();
990 if (actualK >= itemCount) {
991 item = new TableItem(headerTable, SWT.NONE);
993 item = headerTable.getItem(actualK);
995 item.setText(i, value);
1000 } catch (IOException e) {
1001 setErrorMessage(e.getMessage());
1005 protected void validatePageComplete() {
1006 if (model.isVertexImport())
1007 setPageComplete(model.getXCoordIndex() != -1 && model.getYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);
1009 setPageComplete(model.getStartXCoordIndex() != 1 && model.getStartYCoordIndex() != -1 && model.getEndXCoordIndex() != -1 && model.getEndYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);