X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.district.imports%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fimports%2FDistrictImportUtils.java;h=836ebd02dd758e609ec4e12341acc348722ee720;hb=190aac50ce7ebdc0114140bd9d5928d228bd498c;hp=b3b997b3ef3303104382247a6842880782290355;hpb=5d4c6addf52d43381eb80db33fec122366a73abd;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.imports/src/org/simantics/district/imports/DistrictImportUtils.java b/org.simantics.district.imports/src/org/simantics/district/imports/DistrictImportUtils.java index b3b997b3..836ebd02 100644 --- a/org.simantics.district.imports/src/org/simantics/district/imports/DistrictImportUtils.java +++ b/org.simantics.district.imports/src/org/simantics/district/imports/DistrictImportUtils.java @@ -29,24 +29,17 @@ import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.TransformException; import org.simantics.Simantics; import org.simantics.databoard.Bindings; -import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; -import org.simantics.db.common.request.ObjectsWithType; -import org.simantics.db.common.request.UniqueRead; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.util.Layer0Utils; -import org.simantics.diagram.stubs.DiagramResource; import org.simantics.district.network.DNEdgeBuilder; import org.simantics.district.network.DistrictNetworkUtil; import org.simantics.district.network.ontology.DistrictNetworkResource; -import org.simantics.layer0.Layer0; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.simantics.district.network.DistrictNetworkUtil.ResourceVertex; -import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.index.quadtree.Quadtree; public class DistrictImportUtils { @@ -235,6 +228,7 @@ public class DistrictImportUtils { int xCoordColumnIndex = model.getXCoordIndex(); int yCoordColumnIndex = model.getYCoordIndex(); int zCoordColumnIndex = model.getZCoordIndex(); + int altElevationIndex = model.getAlternativeElevationIndex(); int supplyTempColumnIndex = model.getSupplyTempIndex(); int returnTempColumnIndex = model.getReturnTempIndex(); int supplyPressureColumnIndex = model.getSupplyPressureIndex(); @@ -242,6 +236,7 @@ public class DistrictImportUtils { int dpIndex = model.getDeltaPressureIndex(); int dtIndex = model.getDeltaTemperatureIndex(); int heatPowerIndex = model.getHeatPowerIndex(); + int peakPowerIndex = model.getPeakPowerIndex(); int valvePositionIndex = model.getValvePositionIndx(); int nominalHeadMIndex = model.getNominalHeadMIndex(); int nominalHeadBIndex = model.getNominalHeadBIndex(); @@ -254,6 +249,7 @@ public class DistrictImportUtils { int flowAreaIndex = model.getFlowAreaIndex(); int nominalPressureLossIndex = model.getNominalPressureLossIndex(); int addressIndex = model.getAddressIndex(); + int regionIndex = model.getRegionIndex(); int mappingColumn = model.getComponentMappingIndex(); int idColumn = model.getIdIndex(); @@ -303,7 +299,7 @@ public class DistrictImportUtils { } } } - + double[] coords; if (actualDoTransform) { DirectPosition2D targetPos = new DirectPosition2D(); @@ -321,6 +317,8 @@ public class DistrictImportUtils { writeStringValue(graph, row, idColumn, vertex, DN.HasId); + writeValue(graph, row, altElevationIndex, vertex, DN.Vertex_HasAltElevation); + writeValue(graph, row, supplyTempColumnIndex, vertex, DN.Vertex_HasSupplyTemperature); writeValue(graph, row, returnTempColumnIndex, vertex, DN.Vertex_HasReturnTemperature); writeValue(graph, row, supplyPressureColumnIndex, vertex, DN.Vertex_HasSupplyPressure); @@ -328,6 +326,7 @@ public class DistrictImportUtils { writeValue(graph, row, dpIndex, vertex, DN.Vertex_HasDeltaPressure); writeValue(graph, row, dtIndex, vertex, DN.Vertex_HasDeltaTemperature); writeValue(graph, row, heatPowerIndex, vertex, DN.Vertex_HasHeatPower); + writeValue(graph, row, peakPowerIndex, vertex, DN.Vertex_HasPeakPower); writeValue(graph, row, valvePositionIndex, vertex, DN.Vertex_HasValvePosition); writeValue(graph, row, nominalHeadMIndex, vertex, DN.Vertex_HasNominalHeadM); writeValue(graph, row, nominalHeadBIndex, vertex, DN.Vertex_HasNominalHeadB); @@ -340,6 +339,7 @@ public class DistrictImportUtils { writeValue(graph, row, flowAreaIndex, vertex, DN.Vertex_HasFlowArea); writeValue(graph, row, nominalPressureLossIndex, vertex, DN.Vertex_HasNominalPressureLoss); writeStringValue(graph, row, addressIndex, vertex, DN.Vertex_HasAddress); + writeStringValue(graph, row, regionIndex, vertex, DN.HasRegion); } catch (DatabaseException | MismatchedDimensionException | TransformException e) { throw new RuntimeException(e); } @@ -361,6 +361,7 @@ public class DistrictImportUtils { Path csvFile = model.getSource(); char delim = model.getDelimiter(); + Set writtenIds = new HashSet<>(); int startXCoordColumnIndex = model.getStartXCoordIndex(); int startYCoordColumnIndex = model.getStartYCoordIndex(); @@ -377,6 +378,8 @@ public class DistrictImportUtils { int kSupplyIndex = model.getkSupplyIndex(); int lengthIndex = model.getLengthIndex(); int detailedGeometryIndex = model.getDetailedGeometryIndex(); + int regionIndex = model.getRegionIndex(); + int pipeTypeIndex = model.getPipeTypeIndex(); int mappingColumn = model.getComponentMappingIndex(); int idColumn = model.getIdIndex(); @@ -399,24 +402,7 @@ public class DistrictImportUtils { double halfPadding = padding / 2; - Quadtree vv = Simantics.getSession().syncRequest(new UniqueRead() { - - @Override - public Quadtree perform(ReadGraph graph) throws DatabaseException { - Collection vertices = graph.syncRequest(new ObjectsWithType(model.getParentDiagram(), Layer0.getInstance(graph).ConsistsOf, DistrictNetworkResource.getInstance(graph).Vertex)); - Quadtree vv = new Quadtree(); - for (Resource vertex : vertices) { - double[] coords = graph.getRelatedValue2(vertex, DiagramResource.getInstance(graph).HasLocation, Bindings.DOUBLE_ARRAY); - double x1 = coords[0] - halfPadding; - double y1= coords[1] - halfPadding; - double x2 = coords[0] + halfPadding; - double y2= coords[1] + halfPadding; - Envelope e = new Envelope(x1, x2, y1, y2); - vv.insert(e, new ResourceVertex(vertex, coords, true)); - } - return vv; - } - }); + Quadtree existingVertices = DistrictNetworkUtil.existingVertices(model.getParentDiagram(), halfPadding); Simantics.getSession().syncRequest(new WriteRequest() { @@ -430,60 +416,67 @@ public class DistrictImportUtils { DistrictImportUtils.consumeCSV(csvFile, delim, true, row -> { try { - String mappingValue = row.get(mappingColumn); - - String startXCoords = row.get(startXCoordColumnIndex); - String startYCoords = row.get(startYCoordColumnIndex); - String startZCoords = row.get(startZValueColumnIndex); - String endXCoords = row.get(endXCoordColumnIndex); - String endYCoords = row.get(endYCoordColumnIndex); - String endZCoords = row.get(endZValueColumnIndex); - - double startXCoord = Double.parseDouble(startXCoords); // make negative - double startYCoord = Double.parseDouble(startYCoords); - double startZCoord = Double.parseDouble(startZCoords); - double endXCoord = Double.parseDouble(endXCoords); // make negative - double endYCoord = Double.parseDouble(endYCoords); - double endZCoord = Double.parseDouble(endZCoords); - - double[] startCoords; - double[] endCoords; - if (actualDoTransform) { - DirectPosition2D startTargetPos = new DirectPosition2D(); - DirectPosition2D startSourcePos = new DirectPosition2D(startXCoord, startYCoord); - DirectPosition startRes = actualTransform.transform(startSourcePos, startTargetPos); - startCoords = startRes.getCoordinate(); + String idValue = row.get(idColumn); + if (!writtenIds.contains(idValue)) { + writtenIds.add(idValue); + String mappingValue = row.get(mappingColumn); - DirectPosition2D endTargetPos = new DirectPosition2D(); - DirectPosition2D endSourcePos = new DirectPosition2D(endXCoord, endYCoord); - DirectPosition endRes = actualTransform.transform(endSourcePos, endTargetPos); - endCoords = endRes.getCoordinate(); - } else { - startCoords = new double[] { startXCoord , startYCoord }; - endCoords = new double[] { endXCoord , endYCoord }; - } - - // Switch to (longitude, latitude) - flipAxes(startCoords); - flipAxes(endCoords); - - Optional oedge = DNEdgeBuilder.create(graph, vv, model.getParentDiagram(), model.getComponentMappings().get(mappingValue), startCoords, startZCoord, endCoords, endZCoord, new double[0], padding, true); - if (oedge.isPresent()) { - Resource edge = oedge.get(); - writeStringValue(graph, row, idColumn, edge, DN.HasId); + String startXCoords = row.get(startXCoordColumnIndex); + String startYCoords = row.get(startYCoordColumnIndex); + String startZCoords = row.get(startZValueColumnIndex); + String endXCoords = row.get(endXCoordColumnIndex); + String endYCoords = row.get(endYCoordColumnIndex); + String endZCoords = row.get(endZValueColumnIndex); + + double startXCoord = Double.parseDouble(startXCoords); // make negative + double startYCoord = Double.parseDouble(startYCoords); + double startZCoord = Double.parseDouble(startZCoords); + + double endXCoord = Double.parseDouble(endXCoords); // make negative + double endYCoord = Double.parseDouble(endYCoords); + double endZCoord = Double.parseDouble(endZCoords); - writeValue(graph, row, diameterColumnIndex, edge, DN.Edge_HasDiameter); - writeValue(graph, row, outerDiameterColumnIndex, edge, DN.Edge_HasOuterDiameter); - writeValue(graph, row, nominalMassFlowIndex, edge, DN.Edge_HasNominalMassFlow); - writeValue(graph, row, tGroundIndex, edge, DN.Edge_HasTGround); - writeValue(graph, row, kReturnIndex, edge, DN.Edge_HasKReturn); - writeValue(graph, row, kSupplyIndex, edge, DN.Edge_HasKSupply); - writeValue(graph, row, edgeFlowAreaIndex, edge, DN.Edge_HasFlowArea); - writeValue(graph, row, lengthIndex, edge, DN.Edge_HasLength); - writeDoubleArrayFromString(graph, row, detailedGeometryIndex, edge, DN.Edge_HasGeometry, actualTransform); + double[] startCoords; + double[] endCoords; + if (actualDoTransform) { + DirectPosition2D startTargetPos = new DirectPosition2D(); + DirectPosition2D startSourcePos = new DirectPosition2D(startXCoord, startYCoord); + DirectPosition startRes = actualTransform.transform(startSourcePos, startTargetPos); + startCoords = startRes.getCoordinate(); + + DirectPosition2D endTargetPos = new DirectPosition2D(); + DirectPosition2D endSourcePos = new DirectPosition2D(endXCoord, endYCoord); + DirectPosition endRes = actualTransform.transform(endSourcePos, endTargetPos); + endCoords = endRes.getCoordinate(); + } else { + startCoords = new double[] { startXCoord , startYCoord }; + endCoords = new double[] { endXCoord , endYCoord }; + } + + // Switch to (longitude, latitude) + flipAxes(startCoords); + flipAxes(endCoords); + + Optional oedge = DNEdgeBuilder.create(graph, existingVertices, model.getParentDiagram(), model.getComponentMappings().get(mappingValue), startCoords, startZCoord, endCoords, endZCoord, new double[0], padding, true); + if (oedge.isPresent()) { + Resource edge = oedge.get(); + + writeStringValue(graph, row, idColumn, edge, DN.HasId); + + writeValue(graph, row, diameterColumnIndex, edge, DN.Edge_HasDiameter); + writeValue(graph, row, outerDiameterColumnIndex, edge, DN.Edge_HasOuterDiameter); + writeValue(graph, row, nominalMassFlowIndex, edge, DN.Edge_HasNominalMassFlow); + writeValue(graph, row, tGroundIndex, edge, DN.Edge_HasTGround); + writeValue(graph, row, kReturnIndex, edge, DN.Edge_HasKReturn); + writeValue(graph, row, kSupplyIndex, edge, DN.Edge_HasKSupply); + writeValue(graph, row, edgeFlowAreaIndex, edge, DN.Edge_HasFlowArea); + writeValue(graph, row, lengthIndex, edge, DN.Edge_HasLength); + writeStringValue(graph, row, regionIndex, edge, DN.HasRegion); + writeStringValue(graph, row, pipeTypeIndex, edge, DN.Edge_HasType); + writeDoubleArrayFromString(graph, row, detailedGeometryIndex, edge, DN.Edge_HasGeometry, actualTransform); + } } - return true; } catch (DatabaseException | MismatchedDimensionException | TransformException e) { throw new RuntimeException(e); @@ -514,7 +507,8 @@ public class DistrictImportUtils { } graph.claimLiteral(subject, relation, Double.parseDouble(stringValue), Bindings.DOUBLE); } catch (NumberFormatException e) { - throw new DatabaseException(e); + LOGGER.error("Could not parse {} {} {} {}", row, index, subject, relation, e); + //throw new DatabaseException(e); } } }