-package org.simantics.district.imports.ui;\r
-\r
-import java.io.IOException;\r
-import java.nio.file.Files;\r
-import java.nio.file.Path;\r
-import java.nio.file.Paths;\r
-import java.util.Collections;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.layout.TableColumnLayout;\r
-import org.eclipse.jface.layout.TreeColumnLayout;\r
-import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;\r
-import org.eclipse.jface.viewers.ColumnWeightData;\r
-import org.eclipse.jface.viewers.IContentProvider;\r
-import org.eclipse.jface.viewers.TableViewer;\r
-import org.eclipse.jface.viewers.TreeViewer;\r
-import org.eclipse.jface.viewers.Viewer;\r
-import org.eclipse.jface.wizard.WizardPage;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.events.SelectionListener;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Combo;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Layout;\r
-import org.eclipse.swt.widgets.Table;\r
-import org.eclipse.swt.widgets.TableColumn;\r
-import org.eclipse.swt.widgets.TableItem;\r
-import org.simantics.district.imports.DistrictImportUtils.CSVHeader;\r
-import org.simantics.utils.ui.widgets.FileOrDirectorySelectionWidget;\r
-import org.simantics.utils.ui.widgets.FileSelectionListener;\r
-import org.simantics.utils.ui.widgets.FileSelectionWidget;\r
-\r
-public class CSVImportWizardPage extends WizardPage implements FileSelectionListener {\r
-\r
- private CSVImportModel model;\r
- private FileSelectionWidget csvSelection;\r
- private Table headerTable;\r
- private Button firstAsHeader;\r
- private Combo delimiterCombo;\r
- private TableColumnLayout tableColumnLayout;\r
- private TableViewer tableViewer;\r
- private Composite tableComposite;\r
-\r
- protected CSVImportWizardPage(CSVImportModel model) {\r
- super("Import CSV Data");\r
- this.model = model;\r
- setMessage("Select CSV file to import");\r
- }\r
-\r
- @Override\r
- public void createControl(Composite parent) {\r
- Composite composite = new Composite(parent, SWT.NONE);\r
- composite.setLayout(new GridLayout(1,false));\r
- GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);\r
- \r
- csvSelection = new FileSelectionWidget(composite, "CSV file", SWT.OPEN);\r
- csvSelection.addListener(this);\r
- \r
- delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);\r
- delimiterCombo.setItems(model.getDelimiterFormats());\r
- delimiterCombo.addSelectionListener(new SelectionListener() {\r
- \r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex()));\r
- updateHeaders();\r
- }\r
- \r
- @Override\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- \r
- }\r
- });\r
- \r
- firstAsHeader = new Button(composite, SWT.CHECK);\r
- firstAsHeader.setText("Read first row as header");\r
- firstAsHeader.setSelection(model.getReadFirstAsHeader());\r
- firstAsHeader.addSelectionListener(new SelectionListener() {\r
- \r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- model.setReadFirstAsHeader(firstAsHeader.getSelection());\r
- updateHeaders();\r
- }\r
- \r
- @Override\r
- public void widgetDefaultSelected(SelectionEvent e) {\r
- \r
- }\r
- });\r
- \r
- \r
- tableComposite = new Composite(composite, SWT.BORDER);\r
- tableColumnLayout = new TableColumnLayout();\r
- tableComposite.setLayout(tableColumnLayout);\r
-\r
- updateHeaders();\r
- \r
- setControl(composite);\r
- \r
- \r
- \r
- setPageComplete(false);\r
- }\r
-\r
- @Override\r
- public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {\r
- String[] selection = csvSelection.getFilename();\r
- if (selection != null && selection.length > 0) {\r
- Path csvFile = Paths.get(selection[0]);\r
- if (!Files.exists(csvFile)) {\r
- setErrorMessage("File " + csvFile.toAbsolutePath() + " does not exist");\r
- } else {\r
- model.setSource(csvFile);\r
- updateHeaders();\r
- setPageComplete(true);\r
- }\r
- } else {\r
- setPageComplete(false);\r
- }\r
- }\r
-\r
- private void updateHeaders() {\r
- if (headerTable != null)\r
- headerTable.dispose();\r
- headerTable = new Table(tableComposite, SWT.NONE);\r
- headerTable.setHeaderVisible(true);\r
- headerTable.setLinesVisible(true);\r
- GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite);\r
- for (int i = 0; i < headerTable.getColumns().length; i++) {\r
- TableColumn column = headerTable.getColumns()[i];\r
- column.dispose();\r
- }\r
- for (int i = 0; i < headerTable.getItemCount(); i++) {\r
- TableItem item = headerTable.getItem(i);\r
- item.dispose();\r
- }\r
- try {\r
- Map<CSVHeader, List<String>> headerAndValues = model.getHeaderAndRows(5);\r
- \r
- int coo = headerTable.getColumns().length;\r
- int count = headerTable.getColumnCount();\r
- \r
- for (Map.Entry<CSVHeader, List<String>> entr : headerAndValues.entrySet()) {\r
- CSVHeader he = entr.getKey();\r
- int index = he.getIndex();\r
- TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);\r
- headerCol.setText(he.getHeader());\r
- \r
- tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));\r
- headerCol.pack();\r
- \r
- for (String val : entr.getValue()) {\r
- TableItem item = new TableItem(headerTable, SWT.NONE);\r
- item.setText(val);\r
- }\r
- }\r
- } catch (IOException e) {\r
- setErrorMessage(e.getMessage());\r
- }\r
- }\r
-\r
-}\r
+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<CSVRecord> 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<CSVHeader, List<String>> headerAndValues = model.getHeaderAndRows(5);
+//
+// int coo = headerTable.getColumns().length;
+// int count = headerTable.getColumnCount();
+//
+// for (Map.Entry<CSVHeader, List<String>> 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());
+ }
+ }
+
+}