]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/techtype/table/TechTypeTableDataProvider.java
First testing version of TechTypeTable
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / techtype / table / TechTypeTableDataProvider.java
diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/techtype/table/TechTypeTableDataProvider.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/techtype/table/TechTypeTableDataProvider.java
new file mode 100644 (file)
index 0000000..534be1d
--- /dev/null
@@ -0,0 +1,90 @@
+package org.simantics.district.network.ui.techtype.table;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.commons.csv.CSVRecord;
+import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
+import org.simantics.district.imports.DistrictImportUtils;
+
+public class TechTypeTableDataProvider implements IDataProvider {
+
+    private List<CSVRecord> records = new ArrayList<>();
+    private List<CSVRecord> filteredRecords = new ArrayList<>();
+    private String filter = "";
+
+    public TechTypeTableDataProvider() {
+        // load csv
+
+        setPath("C:\\projektit\\apros\\Semantum_VTT_Fortum portaali 2018-17-12\\järvenpää\\qgis\\TechTypeData.csv");
+    }
+
+    public Object getHeaderValue(int columnIndex) {
+        if (records.isEmpty()) {
+            return "<empty>";
+        }
+        return records.get(0).get(columnIndex);
+    }
+
+    @Override
+    public Object getDataValue(int columnIndex, int rowIndex) {
+        return filteredRecords.get(rowIndex + 1).get(columnIndex);
+    }
+
+    @Override
+    public void setDataValue(int columnIndex, int rowIndex, Object newValue) {
+
+    }
+
+    @Override
+    public int getColumnCount() {
+        if (records.isEmpty()) {
+            return 0;
+        }
+        return records.get(0).size();
+    }
+
+    @Override
+    public int getRowCount() {
+        return filteredRecords.size() - 1;
+    }
+
+    public boolean isEditable(int columnIndex, int rowIndex) {
+        return false;
+    }
+
+    public void setFilter(String text) {
+        this.filter = text.toLowerCase();
+
+        filteredRecords = records.stream().filter(record -> {
+            for (int i = 0; i < record.size(); i++) {
+                String columnContent = record.get(i);
+                if (columnContent.toLowerCase().contains(filter)) {
+                    return true;
+                }
+            }
+            return false;
+        }).collect(Collectors.toList());
+    }
+
+    public void setPath(String path) {
+        records.clear();
+        filteredRecords.clear();
+        Path techTypeCsv = Paths.get(path);
+        try {
+            DistrictImportUtils.consumeCSV(techTypeCsv, ';', false, record -> {
+                records.add(record);
+                return true;
+            });
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        setFilter("");
+    }
+
+}