X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.imports.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fimports%2Fui%2FCSVImportWizardPage.java;h=e4a0612a2358e8b4a6a609d6146cb45ea084f504;hb=1bc60c2213f9b3fc7b4d935ba9afda2b767290e5;hp=71017b321b90d9486974021f75d01ca4a764b517;hpb=b10b919b6756df3b423dd416df6b1b06abc15f22;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.imports.ui/src/org/simantics/district/imports/ui/CSVImportWizardPage.java b/org.simantics.district.imports.ui/src/org/simantics/district/imports/ui/CSVImportWizardPage.java index 71017b32..e4a0612a 100644 --- a/org.simantics.district.imports.ui/src/org/simantics/district/imports/ui/CSVImportWizardPage.java +++ b/org.simantics.district.imports.ui/src/org/simantics/district/imports/ui/CSVImportWizardPage.java @@ -1,168 +1,230 @@ -package org.simantics.district.imports.ui; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.eclipse.jface.layout.GridDataFactory; -import org.eclipse.jface.layout.TableColumnLayout; -import org.eclipse.jface.layout.TreeColumnLayout; -import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; -import org.eclipse.jface.viewers.ColumnWeightData; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -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.Layout; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.TableItem; -import org.simantics.district.imports.DistrictImportUtils.CSVHeader; -import org.simantics.utils.ui.widgets.FileOrDirectorySelectionWidget; -import org.simantics.utils.ui.widgets.FileSelectionListener; -import org.simantics.utils.ui.widgets.FileSelectionWidget; - -public class CSVImportWizardPage extends WizardPage implements FileSelectionListener { - - private CSVImportModel model; - private FileSelectionWidget csvSelection; - private Table headerTable; - private Button firstAsHeader; - private Combo delimiterCombo; - private TableColumnLayout tableColumnLayout; - private TableViewer tableViewer; - private Composite tableComposite; - - protected CSVImportWizardPage(CSVImportModel model) { - super("Import CSV Data"); - this.model = model; - setMessage("Select CSV file to import"); - } - - @Override - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NONE); - composite.setLayout(new GridLayout(1,false)); - GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite); - - csvSelection = new FileSelectionWidget(composite, "CSV file", SWT.OPEN); - csvSelection.addListener(this); - - delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY); - delimiterCombo.setItems(model.getDelimiterFormats()); - delimiterCombo.addSelectionListener(new SelectionListener() { - - @Override - public void widgetSelected(SelectionEvent e) { - model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex())); - updateHeaders(); - } - - @Override - public void widgetDefaultSelected(SelectionEvent 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(); - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - - } - }); - - - tableComposite = new Composite(composite, SWT.BORDER); - tableColumnLayout = new TableColumnLayout(); - tableComposite.setLayout(tableColumnLayout); - - updateHeaders(); - - setControl(composite); - - - - setPageComplete(false); - } - - @Override - public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) { - String[] selection = csvSelection.getFilename(); - if (selection != null && selection.length > 0) { - Path csvFile = Paths.get(selection[0]); - if (!Files.exists(csvFile)) { - setErrorMessage("File " + csvFile.toAbsolutePath() + " does not exist"); - } else { - model.setSource(csvFile); - updateHeaders(); - setPageComplete(true); - } - } else { - setPageComplete(false); - } - } - - 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(); - } - try { - Map> headerAndValues = model.getHeaderAndRows(5); - - int coo = headerTable.getColumns().length; - int count = headerTable.getColumnCount(); - - for (Map.Entry> entr : headerAndValues.entrySet()) { - CSVHeader he = entr.getKey(); - int index = he.getIndex(); - TableColumn headerCol = new TableColumn(headerTable, SWT.NONE); - headerCol.setText(he.getHeader()); - - tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10)); - headerCol.pack(); - - for (String val : entr.getValue()) { - TableItem item = new TableItem(headerTable, SWT.NONE); - item.setText(val); - } - } - } catch (IOException e) { - setErrorMessage(e.getMessage()); - } - } - -} +package org.simantics.district.imports.ui; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; + +import org.apache.commons.csv.CSVRecord; +import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.TableColumnLayout; +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +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.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.TableItem; +import org.simantics.district.network.ui.function.Functions; +import org.simantics.utils.ui.widgets.FileOrDirectorySelectionWidget; +import org.simantics.utils.ui.widgets.FileSelectionListener; +import org.simantics.utils.ui.widgets.FileSelectionWidget; + + +public class CSVImportWizardPage extends WizardPage implements FileSelectionListener { + + private CSVImportModel model; + private FileSelectionWidget csvSelection; + private Table headerTable; + private Button firstAsHeader; + + private Combo diagramCombo; + + + private Combo delimiterCombo; + private Combo delimiterdCombo; + private TableColumnLayout tableColumnLayout; + private TableViewer tableViewer; + private Composite tableComposite; + private FileSelectionWidget wktFileSelection; + + private Path wktFile; + + protected CSVImportWizardPage(CSVImportModel model) { + super("Import CSV Data"); + this.model = model; + setMessage("Select CSV file to import"); + } + + @Override + public void createControl(Composite parent) { + Composite composite = new Composite(parent, SWT.NONE); + composite.setLayout(new GridLayout(1,false)); + GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite); + + diagramCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY); + diagramCombo.setItems(getDistrictDiagrams()); + + + csvSelection = new FileSelectionWidget(composite, "CSV file", SWT.OPEN); + csvSelection.addListener(this); + + delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY); + delimiterCombo.setItems(model.getDelimiterFormats()); + delimiterCombo.addSelectionListener(new SelectionListener() { + + @Override + public void widgetSelected(SelectionEvent e) { + model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex())); + updateHeaders(); + } + + @Override + public void widgetDefaultSelected(SelectionEvent 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(); + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + + } + }); + + + tableComposite = new Composite(composite, SWT.BORDER); + tableColumnLayout = new TableColumnLayout(); + tableComposite.setLayout(tableColumnLayout); + + + + 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 wktFilee = Paths.get(selection[0]); + if (!Files.exists(wktFilee)) { + setErrorMessage("File " + wktFilee.toAbsolutePath() + " does not exist"); + } else { + wktFile = wktFilee; + setPageComplete(true); + } + } else { + setPageComplete(false); + } + } + }); + + updateHeaders(); + + + + setControl(composite); + + + + setPageComplete(false); + } + + private String[] getDistrictDiagrams() { + Functions.getDistrictDiagrams(null); + return null; + } + + @Override + public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) { + String[] selection = csvSelection.getFilename(); + if (selection != null && selection.length > 0) { + Path csvFile = Paths.get(selection[0]); + if (!Files.exists(csvFile)) { + setErrorMessage("File " + csvFile.toAbsolutePath() + " does not exist"); + } else { + model.setSource(csvFile); + updateHeaders(); + setPageComplete(true); + } + } else { + setPageComplete(false); + } + } + + 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(); + } + try { + List rows = model.getRows(5); + + 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(); + } 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); + } + } + } + +// Map> headerAndValues = model.getHeaderAndRows(5); +// +// int coo = headerTable.getColumns().length; +// int count = headerTable.getColumnCount(); +// +// for (Map.Entry> entr : headerAndValues.entrySet()) { +// CSVHeader he = entr.getKey(); +// int index = he.getIndex(); +// TableColumn headerCol = new TableColumn(headerTable, SWT.NONE); +// headerCol.setText(he.getHeader()); +// +// tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10)); +// headerCol.pack(); +// +// for (String val : entr.getValue()) { +// TableItem item = new TableItem(headerTable, SWT.NONE); +// item.setText(val); +// } +// } + } catch (IOException e) { + setErrorMessage(e.getMessage()); + } + } + +}