package org.simantics.district.imports.ui; import java.io.IOException; import java.nio.file.Path; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.csv.CSVRecord; import org.simantics.db.Resource; import org.simantics.district.imports.DistrictImportUtils; import org.simantics.district.imports.DistrictImportUtils.CSVHeader; public class CSVImportModel { // First page fills these private Resource targetDiagram; private Path source; // Second page fills these private char delimiter; private boolean read; private Map delimiters; private Path wktFile; // Vertex import private int xCoordIndex = -1; private int yCoordIndex = -1; private int zCoordIndex = -1; // Edge import private int startXCoordIndex = -1; private int startYCoordIndex = -1; private int startZCoordIndex = -1; private int endXCoordIndex = -1; private int endYCoordIndex = -1; private int endZCoordIndex = -1; // common private int componentMappingIndex = -1; private Map componentMappings = new HashMap<>(); private boolean isVertexImport; // Third page public CSVImportModel() { delimiters = DistrictImportUtils.getSupportedCSVDelimiterFormats(); } public void setSource(Path source) { this.source = source; } public void setDelimiter(char delimiter) { this.delimiter = delimiter; } public void setReadFirstAsHeader(boolean read) { this.read = read; } public Path getSource() { return source; } public List getRows(int amount) throws IOException { if (source != null) return DistrictImportUtils.readRows(source, delimiter, amount); else return Collections.emptyList(); } public Map> getHeaderAndRows(int amount) throws IOException { if (source != null) return DistrictImportUtils.readCSVHeaderAndRows(source, delimiter, read, amount); else return Collections.emptyMap(); } public Map getHeader() throws IOException { Map header = null; if (source != null) header = DistrictImportUtils.readCSVHeader(source, delimiter, read); if (header == null) header = Collections.emptyMap(); return header; } public boolean getReadFirstAsHeader() { return read; } public String[] getDelimiterFormats() { return delimiters.keySet().toArray(new String[delimiters.size()]); } public void setDelimiterByLabel(String item) { setDelimiter(delimiters.get(item)); } public List> readRows(int amount) throws IOException { if (source != null) return DistrictImportUtils.readRows(source, delimiter, read, amount); else return Collections.emptyList(); } public char getDelimiter() { return delimiter; } public Path getWKTFile() { return wktFile; } public int getXCoordIndex() { return xCoordIndex; } public void setXCoordIndex(int xCoordIndex) { this.xCoordIndex = xCoordIndex; } public int getYCoordIndex() { return yCoordIndex; } public void setYCoordIndex(int yCoordIndex) { this.yCoordIndex = yCoordIndex; } public int getZCoordIndex() { return zCoordIndex; } public void setZCoordIndex(int zCoordIndex) { this.zCoordIndex = zCoordIndex; } public int getComponentMappingIndex() { return componentMappingIndex; } public void setComponentMappingIndex(int componentMappingIndex) { this.componentMappingIndex = componentMappingIndex; } public void setParentDiagram(Resource diagram) { this.targetDiagram = diagram; } public Resource getParentDiagram() { return targetDiagram; } public void setWKTFile(Path wktFile) { this.wktFile = wktFile; } public void setComponentMappings(String value, Resource resource) { componentMappings.put(value, resource); } public Map getComponentMappings() { return componentMappings; } public boolean isVertexImport() { return isVertexImport; } public void setVertexImport(boolean isVertexImport) { this.isVertexImport = isVertexImport; } public void setStartXCoordIndex(int parseInt) { this.startXCoordIndex = parseInt; } public int getStartXCoordIndex() { return startXCoordIndex; } public void setStartYCoordIndex(int parseInt) { this.startYCoordIndex = parseInt; } public int getStartYCoordIndex() { return startYCoordIndex; } public void setStartZCoordIndex(int parseInt) { this.startZCoordIndex = parseInt; } public int getStartZCoordIndex() { return startZCoordIndex; } public void setEndXCoordIndex(int parseInt) { this.endXCoordIndex = parseInt; } public int getEndXCoordIndex() { return endXCoordIndex; } public void setEndYCoordIndex(int parseInt) { this.endYCoordIndex = parseInt; } public int getEndYCoordIndex() { return endYCoordIndex; } public void setEndZCoordIndex(int parseInt) { this.endZCoordIndex = parseInt; } public int getEndZCoordIndex() { return endZCoordIndex; } }