]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.district.imports.ui/src/org/simantics/district/imports/ui/CSVImportWizardPage.java
e4a0612a2358e8b4a6a609d6146cb45ea084f504
[simantics/district.git] / org.simantics.district.imports.ui / src / org / simantics / district / imports / ui / CSVImportWizardPage.java
1 package org.simantics.district.imports.ui;
2
3 import java.io.IOException;
4 import java.nio.file.Files;
5 import java.nio.file.Path;
6 import java.nio.file.Paths;
7 import java.util.List;
8
9 import org.apache.commons.csv.CSVRecord;
10 import org.eclipse.jface.layout.GridDataFactory;
11 import org.eclipse.jface.layout.TableColumnLayout;
12 import org.eclipse.jface.viewers.ColumnWeightData;
13 import org.eclipse.jface.viewers.TableViewer;
14 import org.eclipse.jface.wizard.WizardPage;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.events.SelectionEvent;
17 import org.eclipse.swt.events.SelectionListener;
18 import org.eclipse.swt.layout.GridLayout;
19 import org.eclipse.swt.widgets.Button;
20 import org.eclipse.swt.widgets.Combo;
21 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.swt.widgets.Table;
23 import org.eclipse.swt.widgets.TableColumn;
24 import org.eclipse.swt.widgets.TableItem;
25 import org.simantics.district.network.ui.function.Functions;
26 import org.simantics.utils.ui.widgets.FileOrDirectorySelectionWidget;
27 import org.simantics.utils.ui.widgets.FileSelectionListener;
28 import org.simantics.utils.ui.widgets.FileSelectionWidget;
29
30
31 public class CSVImportWizardPage extends WizardPage implements FileSelectionListener {
32
33     private CSVImportModel model;
34     private FileSelectionWidget csvSelection;
35     private Table headerTable;
36     private Button firstAsHeader;
37     
38     private Combo diagramCombo;
39     
40     
41     private Combo delimiterCombo;
42     private Combo delimiterdCombo;
43     private TableColumnLayout tableColumnLayout;
44     private TableViewer tableViewer;
45     private Composite tableComposite;
46     private FileSelectionWidget wktFileSelection;
47     
48     private Path wktFile;
49
50     protected CSVImportWizardPage(CSVImportModel model) {
51         super("Import CSV Data");
52         this.model = model;
53         setMessage("Select CSV file to import");
54     }
55
56     @Override
57     public void createControl(Composite parent) {
58         Composite composite = new Composite(parent, SWT.NONE);
59         composite.setLayout(new GridLayout(1,false));
60         GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(composite);
61         
62         diagramCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
63         diagramCombo.setItems(getDistrictDiagrams());
64         
65         
66         csvSelection = new FileSelectionWidget(composite, "CSV file", SWT.OPEN);
67         csvSelection.addListener(this);
68         
69         delimiterCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
70         delimiterCombo.setItems(model.getDelimiterFormats());
71         delimiterCombo.addSelectionListener(new SelectionListener() {
72             
73             @Override
74             public void widgetSelected(SelectionEvent e) {
75                 model.setDelimiterByLabel(delimiterCombo.getItem(delimiterCombo.getSelectionIndex()));
76                 updateHeaders();
77             }
78             
79             @Override
80             public void widgetDefaultSelected(SelectionEvent e) {
81                 
82             }
83         });
84         
85         firstAsHeader = new Button(composite, SWT.CHECK);
86         firstAsHeader.setText("Read first row as header");
87         firstAsHeader.setSelection(model.getReadFirstAsHeader());
88         firstAsHeader.addSelectionListener(new SelectionListener() {
89             
90             @Override
91             public void widgetSelected(SelectionEvent e) {
92                 model.setReadFirstAsHeader(firstAsHeader.getSelection());
93                 updateHeaders();
94             }
95             
96             @Override
97             public void widgetDefaultSelected(SelectionEvent e) {
98                 
99             }
100         });
101         
102         
103         tableComposite = new Composite(composite, SWT.BORDER);
104         tableColumnLayout = new TableColumnLayout();
105         tableComposite.setLayout(tableColumnLayout);
106
107         
108         
109         wktFileSelection = new FileSelectionWidget(composite, "WKT file", SWT.OPEN);
110         wktFileSelection.addListener(new FileSelectionListener() {
111             
112             @Override
113             public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {
114                 String[] selection = wktFileSelection.getFilename();
115                 if (selection != null && selection.length > 0) {
116                     Path wktFilee = Paths.get(selection[0]);
117                     if (!Files.exists(wktFilee)) {
118                         setErrorMessage("File " + wktFilee.toAbsolutePath() + " does not exist");
119                     } else {
120                         wktFile = wktFilee;
121                         setPageComplete(true);
122                     }
123                 } else {
124                     setPageComplete(false);
125                 } 
126             }
127         });
128         
129         updateHeaders();
130         
131         
132         
133         setControl(composite);
134         
135         
136         
137         setPageComplete(false);
138     }
139
140     private String[] getDistrictDiagrams() {
141         Functions.getDistrictDiagrams(null);
142         return null;
143     }
144
145     @Override
146     public void fileSelected(FileOrDirectorySelectionWidget source, String[] filename) {
147         String[] selection = csvSelection.getFilename();
148         if (selection != null && selection.length > 0) {
149             Path csvFile = Paths.get(selection[0]);
150             if (!Files.exists(csvFile)) {
151                 setErrorMessage("File " + csvFile.toAbsolutePath() + " does not exist");
152             } else {
153                 model.setSource(csvFile);
154                 updateHeaders();
155                 setPageComplete(true);
156             }
157         } else {
158             setPageComplete(false);
159         }
160     }
161
162     private void updateHeaders() {
163         if (headerTable != null)
164             headerTable.dispose();
165         headerTable = new Table(tableComposite, SWT.NONE);
166         headerTable.setHeaderVisible(true);
167         headerTable.setLinesVisible(true);
168         GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableComposite);
169         for (int i = 0; i < headerTable.getColumns().length; i++) {
170             TableColumn column = headerTable.getColumns()[i];
171             column.dispose();
172         }
173         for (int i = 0; i < headerTable.getItemCount(); i++) {
174             TableItem item = headerTable.getItem(i);
175             item.dispose();
176         }
177         try {
178             List<CSVRecord> rows = model.getRows(5);
179             
180             for (int k = 0; k < rows.size(); k++) {
181                 CSVRecord row = rows.get(k);
182                 
183                 int columnCount = row.size();
184                 for (int i = 0; i < columnCount; i++) {
185                     String value = row.get(i);
186                     if (k == 0) {
187                         TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);
188                         headerCol.setText(value);
189                         
190                         tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));
191                         headerCol.pack();
192                     } else {
193                         int actualK = k - 1;
194                         TableItem item;
195                         int itemCount = headerTable.getItemCount();
196                         if (actualK >= itemCount) {
197                             item = new TableItem(headerTable, SWT.NONE);
198                         } else {
199                             item = headerTable.getItem(actualK);
200                         }
201                         item.setText(i, value);
202                     }
203                 }
204             }
205             
206 //            Map<CSVHeader, List<String>> headerAndValues = model.getHeaderAndRows(5);
207 //            
208 //            int coo = headerTable.getColumns().length;
209 //            int count = headerTable.getColumnCount();
210 //            
211 //            for (Map.Entry<CSVHeader, List<String>> entr : headerAndValues.entrySet()) {
212 //                CSVHeader he = entr.getKey();
213 //                int index = he.getIndex();
214 //                TableColumn headerCol = new TableColumn(headerTable, SWT.NONE);
215 //                headerCol.setText(he.getHeader());
216 //                
217 //                tableColumnLayout.setColumnData(headerCol, new ColumnWeightData(10));
218 //                headerCol.pack();
219 //                
220 //                for (String val : entr.getValue()) {
221 //                    TableItem item = new TableItem(headerTable, SWT.NONE);
222 //                    item.setText(val);
223 //                }
224 //            }
225         } catch (IOException e) {
226             setErrorMessage(e.getMessage());
227         }
228     }
229
230 }