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 records = new ArrayList<>(); private List 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 ""; } 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(""); } }