]> gerrit.simantics Code Review - simantics/district.git/blob
534be1dafe5a57d2dfef57884de4b6e676203017
[simantics/district.git] /
1 package org.simantics.district.network.ui.techtype.table;
2
3 import java.io.IOException;
4 import java.nio.file.Path;
5 import java.nio.file.Paths;
6 import java.util.ArrayList;
7 import java.util.List;
8 import java.util.stream.Collectors;
9
10 import org.apache.commons.csv.CSVRecord;
11 import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
12 import org.simantics.district.imports.DistrictImportUtils;
13
14 public class TechTypeTableDataProvider implements IDataProvider {
15
16     private List<CSVRecord> records = new ArrayList<>();
17     private List<CSVRecord> filteredRecords = new ArrayList<>();
18     private String filter = "";
19
20     public TechTypeTableDataProvider() {
21         // load csv
22
23         setPath("C:\\projektit\\apros\\Semantum_VTT_Fortum portaali 2018-17-12\\järvenpää\\qgis\\TechTypeData.csv");
24     }
25
26     public Object getHeaderValue(int columnIndex) {
27         if (records.isEmpty()) {
28             return "<empty>";
29         }
30         return records.get(0).get(columnIndex);
31     }
32
33     @Override
34     public Object getDataValue(int columnIndex, int rowIndex) {
35         return filteredRecords.get(rowIndex + 1).get(columnIndex);
36     }
37
38     @Override
39     public void setDataValue(int columnIndex, int rowIndex, Object newValue) {
40
41     }
42
43     @Override
44     public int getColumnCount() {
45         if (records.isEmpty()) {
46             return 0;
47         }
48         return records.get(0).size();
49     }
50
51     @Override
52     public int getRowCount() {
53         return filteredRecords.size() - 1;
54     }
55
56     public boolean isEditable(int columnIndex, int rowIndex) {
57         return false;
58     }
59
60     public void setFilter(String text) {
61         this.filter = text.toLowerCase();
62
63         filteredRecords = records.stream().filter(record -> {
64             for (int i = 0; i < record.size(); i++) {
65                 String columnContent = record.get(i);
66                 if (columnContent.toLowerCase().contains(filter)) {
67                     return true;
68                 }
69             }
70             return false;
71         }).collect(Collectors.toList());
72     }
73
74     public void setPath(String path) {
75         records.clear();
76         filteredRecords.clear();
77         Path techTypeCsv = Paths.get(path);
78         try {
79             DistrictImportUtils.consumeCSV(techTypeCsv, ';', false, record -> {
80                 records.add(record);
81                 return true;
82             });
83         } catch (IOException e) {
84             e.printStackTrace();
85         }
86
87         setFilter("");
88     }
89
90 }