package org.simantics.district.imports;
import java.io.IOException;
+import java.io.Reader;
+import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
public static Map<String, Integer> readCSVHeader(Path source, CSVFormat format, boolean firstAsHeader) throws IOException {
if (firstAsHeader)
format = format.withFirstRecordAsHeader();
- try (CSVParser parser = format.parse(Files.newBufferedReader(source))) {
+ try (CSVParser parser = format.parse(Files.newBufferedReader(source, Charset.defaultCharset()))) {
return parser.getHeaderMap();
}
}
}
public static void consumeCSV(Path source, char delim, boolean firstAsHeader, Function<CSVRecord, Boolean> consumer) throws IOException {
- CSVFormat format = CSVFormat.newFormat(delim);
+ consumeCSV(Files.newBufferedReader(source), delim, firstAsHeader, consumer);
+ }
+
+ public static void consumeCSV(Reader reader, char delim, boolean firstAsHeader,
+ Function<CSVRecord, Boolean> consumer) throws IOException {
+ CSVFormat format = CSVFormat.newFormat(delim).withQuote('"');
if (firstAsHeader) {
format = format.withFirstRecordAsHeader();
}
- try (CSVParser parser = format.parse(Files.newBufferedReader(source))) {
+ try (CSVParser parser = format.parse(reader)) {
Iterator<CSVRecord> records = parser.iterator();
while (records.hasNext()) {
Boolean cont = consumer.apply(records.next());
int detailedGeometryIndex = model.getDetailedGeometryIndex();
int regionIndex = model.getRegionIndex();
int pipeTypeIndex = model.getPipeTypeIndex();
+ int pipeCodeIndex = model.getPipeCodeIndex();
+ int installationYearIndex = model.getInstallationYearIndex();
+ int wallThicknessIndex = model.getWallThicknessIndex();
+ int insulationConductivityIndex = model.getInsulationConductivityIndex();
+ int pipeSizeDNIndex = model.getPipeSizeDNIndex();
+ int roughnessIndex = model.getRoughnessIndex();
+ int structureIndex = model.getStructureIndex();
int mappingColumn = model.getComponentMappingIndex();
int idColumn = model.getIdIndex();
writeStringValue(graph, row, regionIndex, edge, DN.HasRegion);
writeStringValue(graph, row, pipeTypeIndex, edge, DN.Edge_HasType);
writeDoubleArrayFromString(graph, row, detailedGeometryIndex, edge, DN.Edge_HasGeometry, actualTransform);
+ writeStringValue(graph, row, pipeCodeIndex, edge, DN.Edge_HasPipeCode);
+ writeIntegerValue(graph, row, installationYearIndex, edge, DN.Edge_HasInstallationYear);
+ writeValue(graph, row, wallThicknessIndex, edge, DN.Edge_HasWallThickness);
+ writeValue(graph, row, insulationConductivityIndex, edge, DN.Edge_HasInsulationConductivity);
+ writeIntegerValue(graph, row, pipeSizeDNIndex, edge, DN.Edge_HasPipeSizeDN);
+ writeValue(graph, row, roughnessIndex, edge, DN.Edge_HasRoughness);
+ writeStringValue(graph, row, structureIndex, edge, DN.Edge_HasStructure);
}
}
return true;
}
}
+ private static void writeIntegerValue(WriteGraph graph, CSVRecord row, int index, Resource subject, Resource relation) throws DatabaseException {
+ if (index != -1) {
+ String stringValue = row.get(index);
+ if (!stringValue.isEmpty()) {
+ try {
+ if (stringValue.startsWith("\"") && stringValue.endsWith("\"")) {
+ stringValue = stringValue.substring(1, stringValue.length() - 1);
+ }
+ graph.claimLiteral(subject, relation, Integer.parseInt(stringValue), Bindings.INTEGER);
+ } catch (NumberFormatException e) {
+ LOGGER.error("Could not parse {} {} {} {}", row, index, subject, relation, e);
+ //throw new DatabaseException(e);
+ }
+ }
+ }
+ }
+
private static void writeStringValue(WriteGraph graph, CSVRecord row, int index, Resource subject, Resource relation) throws DatabaseException {
if (index != -1) {
String stringValue = row.get(index);