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.ui.controls.DynamicComboFieldEditor;
38 public class CSVImportWizardPage extends WizardPage {
40 private CSVImportModel model;
42 private Map<Integer, String> headerIndexAndValues = new HashMap<>();
44 private Table headerTable;
45 // private Button firstAsHeader;
47 private Combo delimiterCombo;
48 private TableColumnLayout tableColumnLayout;
49 private Composite tableComposite;
50 // private FileSelectionWidget wktFileSelection;
52 // Common for vertex and edge
53 private DynamicComboFieldEditor componentMappingSelector;
54 private DynamicComboFieldEditor idSelector;
55 private DynamicComboFieldEditor labelSelector;
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;
91 private Text edgeConnectionPadding;
93 private DynamicComboFieldEditor outerDiameterSelector;
94 private DynamicComboFieldEditor diameterSelector;
95 private DynamicComboFieldEditor nominalMassFlowSelector;
97 private Group indexMappingGroup;
99 private Composite composite;
101 private Button isVertexImport;
103 private Combo sourceCRSCombo;
105 private DynamicComboFieldEditor edgeFlowAreaSelector;
107 private DynamicComboFieldEditor kReturnSelector;
109 private DynamicComboFieldEditor kSupplySelector;
111 private DynamicComboFieldEditor tGroundSelector;
113 protected CSVImportWizardPage(CSVImportModel model) {
114 super("Import CSV Data");
116 setMessage("Select column index mappings");
120 public void createControl(Composite parent) {
121 composite = new Composite(parent, SWT.NONE);
122 composite.setLayout(new GridLayout(1, false));
123 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);
125 Label label = new Label(composite, SWT.NONE);
126 label.setText("Select delimiter");
128 delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
129 delimiterCombo.setToolTipText("Select the delimiter that is used to separate elements in the CSV file");
130 String[] formats = model.getDelimiterFormats();
131 delimiterCombo.setItems(formats);
132 if (formats.length > 0)
133 delimiterCombo.select(0);
134 delimiterCombo.addSelectionListener(new SelectionListener() {
137 public void widgetSelected(SelectionEvent e) {
138 model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex()));
144 public void widgetDefaultSelected(SelectionEvent e) {
149 // firstAsHeader = new Button(composite, SWT.CHECK);
150 // firstAsHeader.setText("Read first row as header");
151 // firstAsHeader.setSelection(model.getReadFirstAsHeader());
152 // firstAsHeader.addSelectionListener(new SelectionListener() {
155 // public void widgetSelected(SelectionEvent e) {
156 // model.setReadFirstAsHeader(firstAsHeader.getSelection());
162 // public void widgetDefaultSelected(SelectionEvent e) {
163 // widgetSelected(e);
167 tableComposite = new Composite(composite, SWT.BORDER);
168 tableColumnLayout = new TableColumnLayout();
169 tableComposite.setLayout(tableColumnLayout);
171 label = new Label(composite, SWT.NONE);
172 label.setText("Select source Coordinate Reference System");
174 sourceCRSCombo = new Combo(composite, SWT.NONE);
175 sourceCRSCombo.setToolTipText("Select the coordinate reference system that is used in the source material for possible transformation to target coordinate reference system (EPSG:4326)");
176 Set<String> codes = CRS.getSupportedCodes("EPSG");
177 sourceCRSCombo.setItems(codes.toArray(new String[codes.size()]));
178 sourceCRSCombo.addSelectionListener(new SelectionAdapter() {
181 public void widgetSelected(SelectionEvent e) {
182 String current = sourceCRSCombo.getItem(sourceCRSCombo.getSelectionIndex());
183 model.setSourceCRS("EPSG:" + current);
187 sourceCRSCombo.addModifyListener(new ModifyListener() {
190 public void modifyText(ModifyEvent e) {
191 String currentText = sourceCRSCombo.getText();
192 if (codes.contains(currentText)) {
194 String[] items = sourceCRSCombo.getItems();
196 for (i = 0; i < items.length; i++) {
197 String item = items[i];
198 if (currentText.equals(item)) {
203 sourceCRSCombo.select(i);
204 model.setSourceCRS("EPSG:" + currentText);
206 System.err.println("this should not happen");
212 // wktFileSelection = new FileSelectionWidget(composite, "WKT file", SWT.OPEN);
213 // wktFileSelection.addListener(new FileSelectionListener() {
216 // public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {
217 // String[] selection = wktFileSelection.getFilename();
218 // if (selection != null && selection.length > 0) {
219 // Path wktFile = Paths.get(selection[0]);
220 // if (!Files.exists(wktFile)) {
221 // setErrorMessage("File " + wktFile.toAbsolutePath() + " does not exist");
223 // model.setWKTFile(wktFile);
224 // validatePageComplete();
230 isVertexImport = new Button(composite, SWT.CHECK);
231 isVertexImport.setText("File contains vertices");
232 isVertexImport.setToolTipText("Enable this if the file contains vertices, i.e. points");
233 isVertexImport.setSelection(model.isVertexImport());
234 isVertexImport.addSelectionListener(new SelectionListener() {
237 public void widgetSelected(SelectionEvent e) {
238 model.setVertexImport(isVertexImport.getSelection());
239 updateControls(false);
243 public void widgetDefaultSelected(SelectionEvent e) {
248 updateControls(true);
250 setControl(composite);
252 final IWizardContainer container = getContainer();
254 if (container instanceof IPageChangeProvider) {
255 ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() {
258 public void pageChanged(PageChangedEvent event) {
260 CSVImportWizardPage.this.updateControls(false);
265 validatePageComplete();
268 private void updateControls(boolean initial) {
269 createIndexMappingGroup();
272 composite.layout(true, true);
275 private void createIndexMappingGroup() {
276 if (indexMappingGroup != null)
277 indexMappingGroup.dispose();
279 indexMappingGroup = new Group(composite, SWT.NONE);
280 indexMappingGroup.setText("Column index mapping");
281 GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(indexMappingGroup);
283 if (model.isVertexImport())
284 createVertexIndexMappingField(indexMappingGroup);
286 createEdgeIndexMappingField(indexMappingGroup);
288 createCommonIndexMappingField(indexMappingGroup);
290 if (!model.isVertexImport()) {
291 Label label = new Label(indexMappingGroup, SWT.NONE);
292 label.setText("Connection point padding");
293 GridDataFactory.fillDefaults().applyTo(label);
294 edgeConnectionPadding = new Text(indexMappingGroup, SWT.BORDER);
295 GridDataFactory.fillDefaults().applyTo(edgeConnectionPadding);
296 edgeConnectionPadding.setText("0.0001"); // default
297 edgeConnectionPadding.addModifyListener(new ModifyListener() {
300 public void modifyText(ModifyEvent e) {
302 double padding = Double.parseDouble("");
303 model.setEdgePapping(padding);
304 } catch (NumberFormatException ee) {
312 private void createCommonIndexMappingField(Group parent) {
314 componentMappingSelector = new DynamicComboFieldEditor("componentMapping", "Apros component mapping", parent);
315 componentMappingSelector.addComboListener(new SelectionListener() {
318 public void widgetSelected(SelectionEvent e) {
319 widgetDefaultSelected(e);
323 public void widgetDefaultSelected(SelectionEvent e) {
324 model.setComponentMappingIndex(Integer.parseInt(componentMappingSelector.getValue()));
325 validatePageComplete();
329 idSelector = new DynamicComboFieldEditor("id", "ID", parent);
330 idSelector.addComboListener(new SelectionListener() {
333 public void widgetSelected(SelectionEvent e) {
334 widgetDefaultSelected(e);
338 public void widgetDefaultSelected(SelectionEvent e) {
339 model.setIdIndex(Integer.parseInt(idSelector.getValue()));
340 validatePageComplete();
346 private void createVertexIndexMappingField(Group parent) {
347 xCoordSelector = new DynamicComboFieldEditor("xCoord", "X Coordinate", parent);
348 xCoordSelector.addComboListener(new SelectionListener() {
351 public void widgetSelected(SelectionEvent e) {
352 widgetDefaultSelected(e);
356 public void widgetDefaultSelected(SelectionEvent e) {
357 model.setXCoordIndex(Integer.parseInt(xCoordSelector.getValue()));
358 validatePageComplete();
362 yCoordSelector = new DynamicComboFieldEditor("yCoord", "Y Coordinate", parent);
363 yCoordSelector.addComboListener(new SelectionListener() {
366 public void widgetSelected(SelectionEvent e) {
367 widgetDefaultSelected(e);
371 public void widgetDefaultSelected(SelectionEvent e) {
372 model.setYCoordIndex(Integer.parseInt(yCoordSelector.getValue()));
373 validatePageComplete();
376 zValueSelector = new DynamicComboFieldEditor("zValue", "Z Value", parent);
377 zValueSelector.addComboListener(new SelectionListener() {
380 public void widgetSelected(SelectionEvent e) {
381 widgetDefaultSelected(e);
385 public void widgetDefaultSelected(SelectionEvent e) {
386 model.setZCoordIndex(Integer.parseInt(zValueSelector.getValue()));
387 validatePageComplete();
390 supplyTempValueSelector = new DynamicComboFieldEditor("tempValue", "Supply Temperature value", parent);
391 supplyTempValueSelector.addComboListener(new SelectionListener() {
394 public void widgetSelected(SelectionEvent e) {
395 widgetDefaultSelected(e);
399 public void widgetDefaultSelected(SelectionEvent e) {
400 model.setSupplyTempIndex(Integer.parseInt(supplyTempValueSelector.getValue()));
401 validatePageComplete();
404 returnTempValueSelector = new DynamicComboFieldEditor("returnTempValue", "Return Temperature value", parent);
405 returnTempValueSelector.addComboListener(new SelectionListener() {
408 public void widgetSelected(SelectionEvent e) {
409 widgetDefaultSelected(e);
413 public void widgetDefaultSelected(SelectionEvent e) {
414 model.setReturnTempIndex(Integer.parseInt(returnTempValueSelector.getValue()));
415 validatePageComplete();
418 supplyPressureValueSelector = new DynamicComboFieldEditor("pressureValue", "Supply Pressure value", parent);
419 supplyPressureValueSelector.addComboListener(new SelectionListener() {
422 public void widgetSelected(SelectionEvent e) {
423 widgetDefaultSelected(e);
427 public void widgetDefaultSelected(SelectionEvent e) {
428 model.setSupplyPressureIndex(Integer.parseInt(supplyPressureValueSelector.getValue()));
429 validatePageComplete();
432 returnPressureValueSelector = new DynamicComboFieldEditor("returnPressureValue", "Return Pressure value", parent);
433 returnPressureValueSelector.addComboListener(new SelectionListener() {
436 public void widgetSelected(SelectionEvent e) {
437 widgetDefaultSelected(e);
441 public void widgetDefaultSelected(SelectionEvent e) {
442 model.setReturnPressureIndex(Integer.parseInt(returnPressureValueSelector.getValue()));
443 validatePageComplete();
446 dpSelector = new DynamicComboFieldEditor("dpValue", "Delta pressure ", parent);
447 dpSelector.addComboListener(new SelectionListener() {
450 public void widgetSelected(SelectionEvent e) {
451 widgetDefaultSelected(e);
455 public void widgetDefaultSelected(SelectionEvent e) {
456 model.setDeltaPressureIndex(Integer.parseInt(dpSelector.getValue()));
457 validatePageComplete();
460 dtSelector = new DynamicComboFieldEditor("dtValue", "Delta temperature ", parent);
461 dtSelector.addComboListener(new SelectionListener() {
464 public void widgetSelected(SelectionEvent e) {
465 widgetDefaultSelected(e);
469 public void widgetDefaultSelected(SelectionEvent e) {
470 model.setDeltaTemperatureIndex(Integer.parseInt(dtSelector.getValue()));
471 validatePageComplete();
474 heatPowerSelector = new DynamicComboFieldEditor("heatPowerValue", "Heat Power", parent);
475 heatPowerSelector.addComboListener(new SelectionListener() {
478 public void widgetSelected(SelectionEvent e) {
479 widgetDefaultSelected(e);
483 public void widgetDefaultSelected(SelectionEvent e) {
484 model.setHeatPowerIndex(Integer.parseInt(heatPowerSelector.getValue()));
485 validatePageComplete();
488 nominalHeadMSelector = new DynamicComboFieldEditor("nominalHeadMValue", "nominalHeadM", parent);
489 nominalHeadMSelector.addComboListener(new SelectionListener() {
492 public void widgetSelected(SelectionEvent e) {
493 widgetDefaultSelected(e);
497 public void widgetDefaultSelected(SelectionEvent e) {
498 model.setNominalHeadMIndex(Integer.parseInt(nominalHeadMSelector.getValue()));
499 validatePageComplete();
502 nominalHeadBSelector = new DynamicComboFieldEditor("nominalHeadBValue", "nominalHeadB", parent);
503 nominalHeadBSelector.addComboListener(new SelectionListener() {
506 public void widgetSelected(SelectionEvent e) {
507 widgetDefaultSelected(e);
511 public void widgetDefaultSelected(SelectionEvent e) {
512 model.setNominalHeadBIndex(Integer.parseInt(nominalHeadBSelector.getValue()));
513 validatePageComplete();
516 nominalFlowSelector = new DynamicComboFieldEditor("nominalFlowValue", "nominalFlow", parent);
517 nominalFlowSelector.addComboListener(new SelectionListener() {
520 public void widgetSelected(SelectionEvent e) {
521 widgetDefaultSelected(e);
525 public void widgetDefaultSelected(SelectionEvent e) {
526 model.setNominalFlowIndex(Integer.parseInt(nominalFlowSelector.getValue()));
527 validatePageComplete();
531 maximumHeadMSelector = new DynamicComboFieldEditor("maximumHeadMValue", "maximumHeadM", parent);
532 maximumHeadMSelector.addComboListener(new SelectionListener() {
535 public void widgetSelected(SelectionEvent e) {
536 widgetDefaultSelected(e);
540 public void widgetDefaultSelected(SelectionEvent e) {
541 model.setMaximumHeadMIndex(Integer.parseInt(maximumHeadMSelector.getValue()));
542 validatePageComplete();
545 heatLoadDsSelector = new DynamicComboFieldEditor("heatLoadDsValue", "heatLoadDs", parent);
546 heatLoadDsSelector.addComboListener(new SelectionListener() {
549 public void widgetSelected(SelectionEvent e) {
550 widgetDefaultSelected(e);
554 public void widgetDefaultSelected(SelectionEvent e) {
555 model.setHeatLoadDsIndex(Integer.parseInt(heatLoadDsSelector.getValue()));
556 validatePageComplete();
559 massFlowSelector = new DynamicComboFieldEditor("massFlowValue", "massFlow", parent);
560 massFlowSelector.addComboListener(new SelectionListener() {
563 public void widgetSelected(SelectionEvent e) {
564 widgetDefaultSelected(e);
568 public void widgetDefaultSelected(SelectionEvent e) {
569 model.setMassFlowIndex(Integer.parseInt(massFlowSelector.getValue()));
570 validatePageComplete();
573 volFlowSelector = new DynamicComboFieldEditor("volFlowValue", "volFlow", parent);
574 volFlowSelector.addComboListener(new SelectionListener() {
577 public void widgetSelected(SelectionEvent e) {
578 widgetDefaultSelected(e);
582 public void widgetDefaultSelected(SelectionEvent e) {
583 model.setVolFlowIndex(Integer.parseInt(volFlowSelector.getValue()));
584 validatePageComplete();
587 velocitySelector = new DynamicComboFieldEditor("velocityValue", "velocity", parent);
588 velocitySelector.addComboListener(new SelectionListener() {
591 public void widgetSelected(SelectionEvent e) {
592 widgetDefaultSelected(e);
596 public void widgetDefaultSelected(SelectionEvent e) {
597 model.setVelocityIndex(Integer.parseInt(velocitySelector.getValue()));
598 validatePageComplete();
601 flowAreaSelector = new DynamicComboFieldEditor("flowAreaValue", "flowArea", parent);
602 flowAreaSelector.addComboListener(new SelectionListener() {
605 public void widgetSelected(SelectionEvent e) {
606 widgetDefaultSelected(e);
610 public void widgetDefaultSelected(SelectionEvent e) {
611 model.setFlowAreaIndex(Integer.parseInt(flowAreaSelector.getValue()));
612 validatePageComplete();
615 nominalPressureLossSelector = new DynamicComboFieldEditor("nominalPressureLossValue", "nominalPressureLoss", parent);
616 nominalPressureLossSelector.addComboListener(new SelectionListener() {
619 public void widgetSelected(SelectionEvent e) {
620 widgetDefaultSelected(e);
624 public void widgetDefaultSelected(SelectionEvent e) {
625 model.setNominalPressureLossIndex(Integer.parseInt(nominalPressureLossSelector.getValue()));
626 validatePageComplete();
629 valvePositionSelector = new DynamicComboFieldEditor("valvePositionSelectorValue", "valvePositionSelector", parent);
630 valvePositionSelector.addComboListener(new SelectionListener() {
633 public void widgetSelected(SelectionEvent e) {
634 widgetDefaultSelected(e);
638 public void widgetDefaultSelected(SelectionEvent e) {
639 model.setValvePositionIndex(Integer.parseInt(valvePositionSelector.getValue()));
640 validatePageComplete();
643 addressSelector = new DynamicComboFieldEditor("addressValue", "addressSelector", parent);
644 addressSelector.addComboListener(new SelectionListener() {
647 public void widgetSelected(SelectionEvent e) {
648 widgetDefaultSelected(e);
652 public void widgetDefaultSelected(SelectionEvent e) {
653 model.setAddressIndex(Integer.parseInt(addressSelector.getValue()));
654 validatePageComplete();
661 private void createEdgeIndexMappingField(Group parent) {
663 // Composite paddingComposite = new Composite(parent, SWT.NONE);
664 // GridLayoutFactory.fillDefaults().numColumns(2).applyTo(paddingComposite);
666 startXCoordSelector = new DynamicComboFieldEditor("startxCoord", "Start X Coordinate", parent);
667 startXCoordSelector.addComboListener(new SelectionListener() {
670 public void widgetSelected(SelectionEvent e) {
671 widgetDefaultSelected(e);
675 public void widgetDefaultSelected(SelectionEvent e) {
676 model.setStartXCoordIndex(Integer.parseInt(startXCoordSelector.getValue()));
677 validatePageComplete();
681 startYCoordSelector = new DynamicComboFieldEditor("startyCoord", "Start Y Coordinate", parent);
682 startYCoordSelector.addComboListener(new SelectionListener() {
685 public void widgetSelected(SelectionEvent e) {
686 widgetDefaultSelected(e);
690 public void widgetDefaultSelected(SelectionEvent e) {
691 model.setStartYCoordIndex(Integer.parseInt(startYCoordSelector.getValue()));
692 validatePageComplete();
695 startZValueSelector = new DynamicComboFieldEditor("startzValue", "Start Z Value", parent);
696 startZValueSelector.addComboListener(new SelectionListener() {
699 public void widgetSelected(SelectionEvent e) {
700 widgetDefaultSelected(e);
704 public void widgetDefaultSelected(SelectionEvent e) {
705 model.setStartZCoordIndex(Integer.parseInt(startZValueSelector.getValue()));
706 validatePageComplete();
710 endXCoordSelector = new DynamicComboFieldEditor("endxCoord", "End X Coordinate", parent);
711 endXCoordSelector.addComboListener(new SelectionListener() {
714 public void widgetSelected(SelectionEvent e) {
715 widgetDefaultSelected(e);
719 public void widgetDefaultSelected(SelectionEvent e) {
720 model.setEndXCoordIndex(Integer.parseInt(endXCoordSelector.getValue()));
721 validatePageComplete();
725 endYCoordSelector = new DynamicComboFieldEditor("endyCoord", "End Y Coordinate", parent);
726 endYCoordSelector.addComboListener(new SelectionListener() {
729 public void widgetSelected(SelectionEvent e) {
730 widgetDefaultSelected(e);
734 public void widgetDefaultSelected(SelectionEvent e) {
735 model.setEndYCoordIndex(Integer.parseInt(endYCoordSelector.getValue()));
736 validatePageComplete();
739 endZValueSelector = new DynamicComboFieldEditor("endzValue", "End Z Value", parent);
740 endZValueSelector.addComboListener(new SelectionListener() {
743 public void widgetSelected(SelectionEvent e) {
744 widgetDefaultSelected(e);
748 public void widgetDefaultSelected(SelectionEvent e) {
749 model.setEndZCoordIndex(Integer.parseInt(endZValueSelector.getValue()));
750 validatePageComplete();
753 diameterSelector = new DynamicComboFieldEditor("diameterValue", "Diameter value", parent);
754 diameterSelector.addComboListener(new SelectionListener() {
757 public void widgetSelected(SelectionEvent e) {
758 widgetDefaultSelected(e);
762 public void widgetDefaultSelected(SelectionEvent e) {
763 model.setDiameterIndex(Integer.parseInt(diameterSelector.getValue()));
764 validatePageComplete();
767 outerDiameterSelector = new DynamicComboFieldEditor("outerDiameterValue", "Outer Diameter value", parent);
768 outerDiameterSelector.addComboListener(new SelectionListener() {
771 public void widgetSelected(SelectionEvent e) {
772 widgetDefaultSelected(e);
776 public void widgetDefaultSelected(SelectionEvent e) {
777 model.setOuterDiameterIndex(Integer.parseInt(outerDiameterSelector.getValue()));
778 validatePageComplete();
781 nominalMassFlowSelector = new DynamicComboFieldEditor("nominalMassFlowValue", "Nominal Mass Flow", parent);
782 nominalMassFlowSelector.addComboListener(new SelectionListener() {
785 public void widgetSelected(SelectionEvent e) {
786 widgetDefaultSelected(e);
790 public void widgetDefaultSelected(SelectionEvent e) {
791 model.setNominalMassFlowIndex(Integer.parseInt(nominalMassFlowSelector.getValue()));
792 validatePageComplete();
795 edgeFlowAreaSelector = new DynamicComboFieldEditor("edgeFlowAreaValue", "Flow Area", parent);
796 edgeFlowAreaSelector.addComboListener(new SelectionListener() {
799 public void widgetSelected(SelectionEvent e) {
800 widgetDefaultSelected(e);
804 public void widgetDefaultSelected(SelectionEvent e) {
805 model.setEdgeFlowAreaIndex(Integer.parseInt(edgeFlowAreaSelector.getValue()));
806 validatePageComplete();
809 kReturnSelector = new DynamicComboFieldEditor("kReturnValue", "K Return", parent);
810 kReturnSelector.addComboListener(new SelectionListener() {
813 public void widgetSelected(SelectionEvent e) {
814 widgetDefaultSelected(e);
818 public void widgetDefaultSelected(SelectionEvent e) {
819 model.setKReturnIndex(Integer.parseInt(kReturnSelector.getValue()));
820 validatePageComplete();
823 kSupplySelector = new DynamicComboFieldEditor("kSupplyValue", "K Supply", parent);
824 kSupplySelector.addComboListener(new SelectionListener() {
827 public void widgetSelected(SelectionEvent e) {
828 widgetDefaultSelected(e);
832 public void widgetDefaultSelected(SelectionEvent e) {
833 model.setKSupplyIndex(Integer.parseInt(kSupplySelector.getValue()));
834 validatePageComplete();
837 tGroundSelector = new DynamicComboFieldEditor("tGroundValue", "Temperature Ground", parent);
838 tGroundSelector.addComboListener(new SelectionListener() {
841 public void widgetSelected(SelectionEvent e) {
842 widgetDefaultSelected(e);
846 public void widgetDefaultSelected(SelectionEvent e) {
847 model.setTGroundIndex(Integer.parseInt(tGroundSelector.getValue()));
848 validatePageComplete();
851 lengthSelector = new DynamicComboFieldEditor("lengthValue", "lengthSelector", parent);
852 lengthSelector.addComboListener(new SelectionListener() {
855 public void widgetSelected(SelectionEvent e) {
856 widgetDefaultSelected(e);
860 public void widgetDefaultSelected(SelectionEvent e) {
861 model.setLengthIndex(Integer.parseInt(lengthSelector.getValue()));
862 validatePageComplete();
867 private void updateCombos() {
868 String[][] namesAndValues = new String[headerIndexAndValues.size() + 1][];
870 namesAndValues[0] = new String[] {"", "-1"};
872 for (Entry<Integer, String> entry : headerIndexAndValues.entrySet()) {
873 int key = entry.getKey();
874 String value = entry.getValue();
876 String[] nameAndValue = new String[2];
877 nameAndValue[0] = value;
878 nameAndValue[1] = Integer.toString(key);
879 namesAndValues[i++] = nameAndValue;
882 if (model.isVertexImport())
883 updateVertexCombos(namesAndValues);
885 updateEdgeCombos(namesAndValues);
887 componentMappingSelector.updateCombo(namesAndValues);
888 idSelector.updateCombo(namesAndValues);
891 private void updateEdgeCombos(String[][] namesAndValues) {
892 startXCoordSelector.updateCombo(namesAndValues);
893 endXCoordSelector.updateCombo(namesAndValues);
894 startYCoordSelector.updateCombo(namesAndValues);
895 endYCoordSelector.updateCombo(namesAndValues);
896 startZValueSelector.updateCombo(namesAndValues);
897 endZValueSelector.updateCombo(namesAndValues);
898 diameterSelector.updateCombo(namesAndValues);
899 outerDiameterSelector.updateCombo(namesAndValues);
900 nominalMassFlowSelector.updateCombo(namesAndValues);
901 edgeFlowAreaSelector.updateCombo(namesAndValues);
902 kReturnSelector.updateCombo(namesAndValues);
903 kSupplySelector.updateCombo(namesAndValues);
904 tGroundSelector.updateCombo(namesAndValues);
905 lengthSelector.updateCombo(namesAndValues);
908 private void updateVertexCombos(String[][] namesAndValues) {
909 xCoordSelector.updateCombo(namesAndValues);
910 yCoordSelector.updateCombo(namesAndValues);
911 zValueSelector.updateCombo(namesAndValues);
912 supplyTempValueSelector.updateCombo(namesAndValues);
913 returnTempValueSelector.updateCombo(namesAndValues);
914 supplyPressureValueSelector.updateCombo(namesAndValues);
915 returnPressureValueSelector.updateCombo(namesAndValues);
916 dpSelector.updateCombo(namesAndValues);
917 dtSelector.updateCombo(namesAndValues);
918 heatPowerSelector.updateCombo(namesAndValues);
919 valvePositionSelector.updateCombo(namesAndValues);
920 nominalHeadMSelector.updateCombo(namesAndValues);
921 nominalHeadBSelector.updateCombo(namesAndValues);
922 nominalFlowSelector.updateCombo(namesAndValues);
923 maximumHeadMSelector.updateCombo(namesAndValues);
924 heatLoadDsSelector.updateCombo(namesAndValues);
925 massFlowSelector.updateCombo(namesAndValues);
926 volFlowSelector.updateCombo(namesAndValues);
927 velocitySelector.updateCombo(namesAndValues);
928 flowAreaSelector.updateCombo(namesAndValues);
929 nominalPressureLossSelector.updateCombo(namesAndValues);
930 addressSelector.updateCombo(namesAndValues);
935 private void updateHeaders() {
936 if (headerTable != null)
937 headerTable.dispose();
938 headerTable = new Table(tableComposite, SWT.NONE);
939 headerTable.setHeaderVisible(true);
940 headerTable.setLinesVisible(true);
941 GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite);
942 for (int i = 0; i < headerTable.getColumns().length; i++) {
943 TableColumn column = headerTable.getColumns()[i];
946 for (int i = 0; i < headerTable.getItemCount(); i++) {
947 TableItem item = headerTable.getItem(i);
951 headerIndexAndValues.clear();
954 List<CSVRecord> rows = model.getRows(5);
956 for (int k = 0; k < rows.size(); k++) {
957 CSVRecord row = rows.get(k);
959 int columnCount = row.size();
960 for (int i = 0; i < columnCount; i++) {
961 String value = row.get(i);
963 TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);
964 headerCol.setText(value);
966 tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));
969 headerIndexAndValues.put(i, value);
973 int itemCount = headerTable.getItemCount();
974 if (actualK >= itemCount) {
975 item = new TableItem(headerTable, SWT.NONE);
977 item = headerTable.getItem(actualK);
979 item.setText(i, value);
984 } catch (IOException e) {
985 setErrorMessage(e.getMessage());
989 protected void validatePageComplete() {
990 if (model.isVertexImport())
991 setPageComplete(model.getXCoordIndex() != -1 && model.getYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);
993 setPageComplete(model.getStartXCoordIndex() != 1 && model.getStartYCoordIndex() != -1 && model.getEndXCoordIndex() != -1 && model.getEndYCoordIndex() != -1 && model.getComponentMappingIndex() != -1);