package org.simantics.district.imports.ui; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.commons.csv.CSVRecord; import org.eclipse.jface.dialogs.IPageChangeProvider; import org.eclipse.jface.dialogs.IPageChangedListener; import org.eclipse.jface.dialogs.PageChangedEvent; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.wizard.IWizardContainer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.geotools.referencing.CRS; import org.simantics.district.imports.CSVImportModel; import org.simantics.district.imports.ui.controls.DynamicComboFieldEditor; public class CSVImportWizardPage extends WizardPage { private CSVImportModel model; private Map headerIndexAndValues = new HashMap<>(); private Table headerTable; // private Button firstAsHeader; private Combo delimiterCombo; private TableColumnLayout tableColumnLayout; private Composite tableComposite; // private FileSelectionWidget wktFileSelection; // Common for vertex and edge private DynamicComboFieldEditor componentMappingSelector; private DynamicComboFieldEditor idSelector; // For vertex import private DynamicComboFieldEditor xCoordSelector; private DynamicComboFieldEditor yCoordSelector; private DynamicComboFieldEditor zValueSelector; private DynamicComboFieldEditor altElevationValueSelector; private DynamicComboFieldEditor supplyTempValueSelector; private DynamicComboFieldEditor returnTempValueSelector; private DynamicComboFieldEditor supplyPressureValueSelector; private DynamicComboFieldEditor returnPressureValueSelector; private DynamicComboFieldEditor dpSelector; private DynamicComboFieldEditor dtSelector; private DynamicComboFieldEditor heatPowerSelector; private DynamicComboFieldEditor peakPowerSelector; private DynamicComboFieldEditor regionSelector; private DynamicComboFieldEditor nominalHeadMSelector; private DynamicComboFieldEditor nominalHeadBSelector; private DynamicComboFieldEditor nominalFlowSelector; private DynamicComboFieldEditor maximumHeadMSelector; private DynamicComboFieldEditor heatLoadDsSelector; private DynamicComboFieldEditor massFlowSelector; private DynamicComboFieldEditor volFlowSelector; private DynamicComboFieldEditor velocitySelector; private DynamicComboFieldEditor flowAreaSelector; private DynamicComboFieldEditor nominalPressureLossSelector; private DynamicComboFieldEditor valvePositionSelector; private DynamicComboFieldEditor addressSelector; private DynamicComboFieldEditor lengthSelector; // For edge import private DynamicComboFieldEditor startXCoordSelector; private DynamicComboFieldEditor startYCoordSelector; private DynamicComboFieldEditor startZValueSelector; private DynamicComboFieldEditor endXCoordSelector; private DynamicComboFieldEditor endYCoordSelector; private DynamicComboFieldEditor endZValueSelector; private DynamicComboFieldEditor detailedGeometrySelector; private Text edgeConnectionPadding; private DynamicComboFieldEditor outerDiameterSelector; private DynamicComboFieldEditor diameterSelector; private DynamicComboFieldEditor nominalMassFlowSelector; private Group indexMappingGroup; private Composite composite; private Button isVertexImport; private Combo sourceCRSCombo; private DynamicComboFieldEditor edgeFlowAreaSelector; private DynamicComboFieldEditor kReturnSelector; private DynamicComboFieldEditor kSupplySelector; private DynamicComboFieldEditor tGroundSelector; protected CSVImportWizardPage(CSVImportModel model) { super("Import CSV Data"); this.model = model; setMessage("Select column index mappings"); } @Override public void createControl(Composite parent) { composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(1, false)); GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite); Label label = new Label(composite, SWT.NONE); label.setText("Select delimiter"); delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY); delimiterCombo.setToolTipText("Select the delimiter that is used to separate elements in the CSV file"); String[] formats = model.getDelimiterFormats(); delimiterCombo.setItems(formats); if (formats.length > 0) delimiterCombo.select(0); delimiterCombo.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex())); updateHeaders(); updateCombos(); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); // firstAsHeader = new Button(composite, SWT.CHECK); // firstAsHeader.setText("Read first row as header"); // firstAsHeader.setSelection(model.getReadFirstAsHeader()); // firstAsHeader.addSelectionListener(new SelectionListener() { // // @Override // public void widgetSelected(SelectionEvent e) { // model.setReadFirstAsHeader(firstAsHeader.getSelection()); // updateHeaders(); // updateCombos(); // } // // @Override // public void widgetDefaultSelected(SelectionEvent e) { // widgetSelected(e); // } // }); tableComposite = new Composite(composite, SWT.BORDER); tableColumnLayout = new TableColumnLayout(); tableComposite.setLayout(tableColumnLayout); label = new Label(composite, SWT.NONE); label.setText("Select source Coordinate Reference System"); sourceCRSCombo = new Combo(composite, SWT.NONE); sourceCRSCombo.setToolTipText("Select the coordinate reference system that is used in the source material for possible transformation to target coordinate reference system (EPSG:4326)"); Set codes = CRS.getSupportedCodes("EPSG"); sourceCRSCombo.setItems(codes.toArray(new String[codes.size()])); sourceCRSCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { String current = sourceCRSCombo.getItem(sourceCRSCombo.getSelectionIndex()); model.setSourceCRS("EPSG:" + current); } }); sourceCRSCombo.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { String currentText = sourceCRSCombo.getText(); if (codes.contains(currentText)) { // Select this String[] items = sourceCRSCombo.getItems(); int i; for (i = 0; i < items.length; i++) { String item = items[i]; if (currentText.equals(item)) { break; } } if (i != 0) { sourceCRSCombo.select(i); model.setSourceCRS("EPSG:" + currentText); } else { System.err.println("this should not happen"); } } } }); // wktFileSelection = new FileSelectionWidget(composite, "WKT file", SWT.OPEN); // wktFileSelection.addListener(new FileSelectionListener() { // // @Override // public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) { // String[] selection = wktFileSelection.getFilename(); // if (selection != null && selection.length > 0) { // Path wktFile = Paths.get(selection[0]); // if (!Files.exists(wktFile)) { // setErrorMessage("File " + wktFile.toAbsolutePath() + " does not exist"); // } else { // model.setWKTFile(wktFile); // validatePageComplete(); // } // } // } // }); isVertexImport = new Button(composite, SWT.CHECK); isVertexImport.setText("File contains vertices"); isVertexImport.setToolTipText("Enable this if the file contains vertices, i.e. points"); isVertexImport.setSelection(model.isVertexImport()); isVertexImport.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { model.setVertexImport(isVertexImport.getSelection()); updateControls(false); } @Override public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } }); updateControls(true); updateHeaders(); setControl(composite); final IWizardContainer container = getContainer(); if (container instanceof IPageChangeProvider) { ((IPageChangeProvider) container).addPageChangedListener(new IPageChangedListener() { @Override public void pageChanged(PageChangedEvent event) { if (isCurrentPage()) CSVImportWizardPage.this.updateControls(false); } }); } validatePageComplete(); } private void updateControls(boolean initial) { createIndexMappingGroup(); updateCombos(); if (!initial) composite.layout(true, true); } private void createIndexMappingGroup() { if (indexMappingGroup != null) indexMappingGroup.dispose(); indexMappingGroup = new Group(composite, SWT.NONE); indexMappingGroup.setText("Column index mapping"); GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(indexMappingGroup); if (model.isVertexImport()) createVertexIndexMappingField(indexMappingGroup); else createEdgeIndexMappingField(indexMappingGroup); createCommonIndexMappingField(indexMappingGroup); if (!model.isVertexImport()) { Label label = new Label(indexMappingGroup, SWT.NONE); label.setText("Connection point padding"); GridDataFactory.fillDefaults().applyTo(label); edgeConnectionPadding = new Text(indexMappingGroup, SWT.BORDER); GridDataFactory.fillDefaults().applyTo(edgeConnectionPadding); edgeConnectionPadding.setText("0.0001"); // default edgeConnectionPadding.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { try { double padding = Double.parseDouble(edgeConnectionPadding.getText()); model.setEdgePadding(padding); } catch (NumberFormatException ee) { // ignore } } }); } } private void createCommonIndexMappingField(Group parent) { componentMappingSelector = new DynamicComboFieldEditor("componentMapping", "Apros component mapping", parent); componentMappingSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setComponentMappingIndex(Integer.parseInt(componentMappingSelector.getValue())); validatePageComplete(); } }); idSelector = new DynamicComboFieldEditor("id", "ID", parent); idSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setIdIndex(Integer.parseInt(idSelector.getValue())); validatePageComplete(); } }); regionSelector = new DynamicComboFieldEditor("regionValue", "Region", parent); regionSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setRegionIndex(Integer.parseInt(regionSelector.getValue())); validatePageComplete(); } }); } private void createVertexIndexMappingField(Group parent) { xCoordSelector = new DynamicComboFieldEditor("xCoord", "X Coordinate", parent); xCoordSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setXCoordIndex(Integer.parseInt(xCoordSelector.getValue())); validatePageComplete(); } }); yCoordSelector = new DynamicComboFieldEditor("yCoord", "Y Coordinate", parent); yCoordSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setYCoordIndex(Integer.parseInt(yCoordSelector.getValue())); validatePageComplete(); } }); zValueSelector = new DynamicComboFieldEditor("zValue", "Z Value", parent); zValueSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setZCoordIndex(Integer.parseInt(zValueSelector.getValue())); validatePageComplete(); } }); altElevationValueSelector = new DynamicComboFieldEditor("altElevation", "Alternative Elevation", parent); altElevationValueSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setAltElevationIndex(Integer.parseInt(altElevationValueSelector.getValue())); validatePageComplete(); } }); supplyTempValueSelector = new DynamicComboFieldEditor("tempValue", "Supply Temperature value", parent); supplyTempValueSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setSupplyTempIndex(Integer.parseInt(supplyTempValueSelector.getValue())); validatePageComplete(); } }); returnTempValueSelector = new DynamicComboFieldEditor("returnTempValue", "Return Temperature value", parent); returnTempValueSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setReturnTempIndex(Integer.parseInt(returnTempValueSelector.getValue())); validatePageComplete(); } }); supplyPressureValueSelector = new DynamicComboFieldEditor("pressureValue", "Supply Pressure value", parent); supplyPressureValueSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setSupplyPressureIndex(Integer.parseInt(supplyPressureValueSelector.getValue())); validatePageComplete(); } }); returnPressureValueSelector = new DynamicComboFieldEditor("returnPressureValue", "Return Pressure value", parent); returnPressureValueSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setReturnPressureIndex(Integer.parseInt(returnPressureValueSelector.getValue())); validatePageComplete(); } }); dpSelector = new DynamicComboFieldEditor("dpValue", "Delta pressure ", parent); dpSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setDeltaPressureIndex(Integer.parseInt(dpSelector.getValue())); validatePageComplete(); } }); dtSelector = new DynamicComboFieldEditor("dtValue", "Delta temperature ", parent); dtSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setDeltaTemperatureIndex(Integer.parseInt(dtSelector.getValue())); validatePageComplete(); } }); heatPowerSelector = new DynamicComboFieldEditor("heatPowerValue", "Heat Power", parent); heatPowerSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setHeatPowerIndex(Integer.parseInt(heatPowerSelector.getValue())); validatePageComplete(); } }); peakPowerSelector = new DynamicComboFieldEditor("peakPowerValue", "Peak Power", parent); peakPowerSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setPeakPowerIndex(Integer.parseInt(peakPowerSelector.getValue())); validatePageComplete(); } }); nominalHeadMSelector = new DynamicComboFieldEditor("nominalHeadMValue", "nominalHeadM", parent); nominalHeadMSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setNominalHeadMIndex(Integer.parseInt(nominalHeadMSelector.getValue())); validatePageComplete(); } }); nominalHeadBSelector = new DynamicComboFieldEditor("nominalHeadBValue", "nominalHeadB", parent); nominalHeadBSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setNominalHeadBIndex(Integer.parseInt(nominalHeadBSelector.getValue())); validatePageComplete(); } }); nominalFlowSelector = new DynamicComboFieldEditor("nominalFlowValue", "nominalFlow", parent); nominalFlowSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setNominalFlowIndex(Integer.parseInt(nominalFlowSelector.getValue())); validatePageComplete(); } }); maximumHeadMSelector = new DynamicComboFieldEditor("maximumHeadMValue", "maximumHeadM", parent); maximumHeadMSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setMaximumHeadMIndex(Integer.parseInt(maximumHeadMSelector.getValue())); validatePageComplete(); } }); heatLoadDsSelector = new DynamicComboFieldEditor("heatLoadDsValue", "heatLoadDs", parent); heatLoadDsSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setHeatLoadDsIndex(Integer.parseInt(heatLoadDsSelector.getValue())); validatePageComplete(); } }); massFlowSelector = new DynamicComboFieldEditor("massFlowValue", "massFlow", parent); massFlowSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setMassFlowIndex(Integer.parseInt(massFlowSelector.getValue())); validatePageComplete(); } }); volFlowSelector = new DynamicComboFieldEditor("volFlowValue", "volFlow", parent); volFlowSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setVolFlowIndex(Integer.parseInt(volFlowSelector.getValue())); validatePageComplete(); } }); velocitySelector = new DynamicComboFieldEditor("velocityValue", "velocity", parent); velocitySelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setVelocityIndex(Integer.parseInt(velocitySelector.getValue())); validatePageComplete(); } }); flowAreaSelector = new DynamicComboFieldEditor("flowAreaValue", "flowArea", parent); flowAreaSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setFlowAreaIndex(Integer.parseInt(flowAreaSelector.getValue())); validatePageComplete(); } }); nominalPressureLossSelector = new DynamicComboFieldEditor("nominalPressureLossValue", "nominalPressureLoss", parent); nominalPressureLossSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setNominalPressureLossIndex(Integer.parseInt(nominalPressureLossSelector.getValue())); validatePageComplete(); } }); valvePositionSelector = new DynamicComboFieldEditor("valvePositionSelectorValue", "valvePositionSelector", parent); valvePositionSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setValvePositionIndex(Integer.parseInt(valvePositionSelector.getValue())); validatePageComplete(); } }); addressSelector = new DynamicComboFieldEditor("addressValue", "addressSelector", parent); addressSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setAddressIndex(Integer.parseInt(addressSelector.getValue())); validatePageComplete(); } }); } private void createEdgeIndexMappingField(Group parent) { // Composite paddingComposite = new Composite(parent, SWT.NONE); // GridLayoutFactory.fillDefaults().numColumns(2).applyTo(paddingComposite); startXCoordSelector = new DynamicComboFieldEditor("startxCoord", "Start X Coordinate", parent); startXCoordSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setStartXCoordIndex(Integer.parseInt(startXCoordSelector.getValue())); validatePageComplete(); } }); startYCoordSelector = new DynamicComboFieldEditor("startyCoord", "Start Y Coordinate", parent); startYCoordSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setStartYCoordIndex(Integer.parseInt(startYCoordSelector.getValue())); validatePageComplete(); } }); startZValueSelector = new DynamicComboFieldEditor("startzValue", "Start Z Value", parent); startZValueSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setStartZCoordIndex(Integer.parseInt(startZValueSelector.getValue())); validatePageComplete(); } }); endXCoordSelector = new DynamicComboFieldEditor("endxCoord", "End X Coordinate", parent); endXCoordSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setEndXCoordIndex(Integer.parseInt(endXCoordSelector.getValue())); validatePageComplete(); } }); endYCoordSelector = new DynamicComboFieldEditor("endyCoord", "End Y Coordinate", parent); endYCoordSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setEndYCoordIndex(Integer.parseInt(endYCoordSelector.getValue())); validatePageComplete(); } }); endZValueSelector = new DynamicComboFieldEditor("endzValue", "End Z Value", parent); endZValueSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setEndZCoordIndex(Integer.parseInt(endZValueSelector.getValue())); validatePageComplete(); } }); detailedGeometrySelector = new DynamicComboFieldEditor("detailedGeometryValue", "Geometry", parent); detailedGeometrySelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.detailedGeometryIndex(Integer.parseInt(detailedGeometrySelector.getValue())); validatePageComplete(); } }); diameterSelector = new DynamicComboFieldEditor("diameterValue", "Diameter value", parent); diameterSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setDiameterIndex(Integer.parseInt(diameterSelector.getValue())); validatePageComplete(); } }); outerDiameterSelector = new DynamicComboFieldEditor("outerDiameterValue", "Outer Diameter value", parent); outerDiameterSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setOuterDiameterIndex(Integer.parseInt(outerDiameterSelector.getValue())); validatePageComplete(); } }); nominalMassFlowSelector = new DynamicComboFieldEditor("nominalMassFlowValue", "Nominal Mass Flow", parent); nominalMassFlowSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setNominalMassFlowIndex(Integer.parseInt(nominalMassFlowSelector.getValue())); validatePageComplete(); } }); edgeFlowAreaSelector = new DynamicComboFieldEditor("edgeFlowAreaValue", "Flow Area", parent); edgeFlowAreaSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setEdgeFlowAreaIndex(Integer.parseInt(edgeFlowAreaSelector.getValue())); validatePageComplete(); } }); kReturnSelector = new DynamicComboFieldEditor("kReturnValue", "K Return", parent); kReturnSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setKReturnIndex(Integer.parseInt(kReturnSelector.getValue())); validatePageComplete(); } }); kSupplySelector = new DynamicComboFieldEditor("kSupplyValue", "K Supply", parent); kSupplySelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setKSupplyIndex(Integer.parseInt(kSupplySelector.getValue())); validatePageComplete(); } }); tGroundSelector = new DynamicComboFieldEditor("tGroundValue", "Temperature Ground", parent); tGroundSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setTGroundIndex(Integer.parseInt(tGroundSelector.getValue())); validatePageComplete(); } }); lengthSelector = new DynamicComboFieldEditor("lengthValue", "lengthSelector", parent); lengthSelector.addComboListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { widgetDefaultSelected(e); } @Override public void widgetDefaultSelected(SelectionEvent e) { model.setLengthIndex(Integer.parseInt(lengthSelector.getValue())); validatePageComplete(); } }); } private void updateCombos() { String[][] namesAndValues = new String[headerIndexAndValues.size() + 1][]; namesAndValues[0] = new String[] {"", "-1"}; int i = 1; for (Entry entry : headerIndexAndValues.entrySet()) { int key = entry.getKey(); String value = entry.getValue(); String[] nameAndValue = new String[2]; nameAndValue[0] = value; nameAndValue[1] = Integer.toString(key); namesAndValues[i++] = nameAndValue; } if (model.isVertexImport()) updateVertexCombos(namesAndValues); else updateEdgeCombos(namesAndValues); componentMappingSelector.updateCombo(namesAndValues); idSelector.updateCombo(namesAndValues); } private void updateEdgeCombos(String[][] namesAndValues) { startXCoordSelector.updateCombo(namesAndValues); endXCoordSelector.updateCombo(namesAndValues); startYCoordSelector.updateCombo(namesAndValues); endYCoordSelector.updateCombo(namesAndValues); startZValueSelector.updateCombo(namesAndValues); endZValueSelector.updateCombo(namesAndValues); detailedGeometrySelector.updateCombo(namesAndValues); diameterSelector.updateCombo(namesAndValues); outerDiameterSelector.updateCombo(namesAndValues); nominalMassFlowSelector.updateCombo(namesAndValues); edgeFlowAreaSelector.updateCombo(namesAndValues); kReturnSelector.updateCombo(namesAndValues); kSupplySelector.updateCombo(namesAndValues); tGroundSelector.updateCombo(namesAndValues); lengthSelector.updateCombo(namesAndValues); } private void updateVertexCombos(String[][] namesAndValues) { xCoordSelector.updateCombo(namesAndValues); yCoordSelector.updateCombo(namesAndValues); zValueSelector.updateCombo(namesAndValues); altElevationValueSelector.updateCombo(namesAndValues); supplyTempValueSelector.updateCombo(namesAndValues); returnTempValueSelector.updateCombo(namesAndValues); supplyPressureValueSelector.updateCombo(namesAndValues); returnPressureValueSelector.updateCombo(namesAndValues); dpSelector.updateCombo(namesAndValues); dtSelector.updateCombo(namesAndValues); heatPowerSelector.updateCombo(namesAndValues); valvePositionSelector.updateCombo(namesAndValues); nominalHeadMSelector.updateCombo(namesAndValues); nominalHeadBSelector.updateCombo(namesAndValues); nominalFlowSelector.updateCombo(namesAndValues); maximumHeadMSelector.updateCombo(namesAndValues); heatLoadDsSelector.updateCombo(namesAndValues); massFlowSelector.updateCombo(namesAndValues); volFlowSelector.updateCombo(namesAndValues); velocitySelector.updateCombo(namesAndValues); flowAreaSelector.updateCombo(namesAndValues); nominalPressureLossSelector.updateCombo(namesAndValues); addressSelector.updateCombo(namesAndValues); } private void updateHeaders() { if (headerTable != null) headerTable.dispose(); headerTable = new Table(tableComposite, SWT.NONE); headerTable.setHeaderVisible(true); headerTable.setLinesVisible(true); GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite); for (int i = 0; i < headerTable.getColumns().length; i++) { TableColumn column = headerTable.getColumns()[i]; column.dispose(); } for (int i = 0; i < headerTable.getItemCount(); i++) { TableItem item = headerTable.getItem(i); item.dispose(); } headerIndexAndValues.clear(); try { List rows = model.getRows(5, false); for (int k = 0; k < rows.size(); k++) { CSVRecord row = rows.get(k); int columnCount = row.size(); for (int i = 0; i < columnCount; i++) { String value = row.get(i); if (k == 0) { TableColumn headerCol = new TableColumn(headerTable, SWT.NONE); headerCol.setText(value); tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10)); headerCol.pack(); headerIndexAndValues.put(i, value); } else { int actualK = k - 1; TableItem item; int itemCount = headerTable.getItemCount(); if (actualK >= itemCount) { item = new TableItem(headerTable, SWT.NONE); } else { item = headerTable.getItem(actualK); } item.setText(i, value); } } } } catch (IOException e) { setErrorMessage(e.getMessage()); } } protected void validatePageComplete() { if (model.isVertexImport()) setPageComplete(model.getXCoordIndex() != -1 && model.getYCoordIndex() != -1 && model.getComponentMappingIndex() != -1); else setPageComplete(model.getStartXCoordIndex() != -1 && model.getStartYCoordIndex() != -1 && model.getEndXCoordIndex() != -1 && model.getEndYCoordIndex() != -1 && model.getComponentMappingIndex() != -1); } }