From 2cecd77f45080c2e7746d407867c89e9e733a89c Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Wed, 25 Mar 2020 19:14:53 +0100 Subject: [PATCH 1/3] Switching to package org.locationtech.jts.io.geojson as geographic representation (closes #82) --- .../java/edu/ie3/datamodel/io/source/WeatherSource.java | 2 +- .../ie3/datamodel/models/input/graphics/GraphicInput.java | 2 +- .../datamodel/models/input/graphics/LineGraphicInput.java | 2 +- .../datamodel/models/input/graphics/NodeGraphicInput.java | 4 ++-- .../java/edu/ie3/datamodel/models/value/WeatherValue.java | 2 +- .../java/edu/ie3/datamodel/utils/CoordinateUtils.java | 8 ++++---- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java b/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java index 02d8836d7..2973d247b 100644 --- a/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java +++ b/src/main/java/edu/ie3/datamodel/io/source/WeatherSource.java @@ -5,13 +5,13 @@ */ package edu.ie3.datamodel.io.source; -import com.vividsolutions.jts.geom.Point; import edu.ie3.datamodel.models.timeseries.IndividualTimeSeries; import edu.ie3.datamodel.models.value.WeatherValue; import edu.ie3.util.interval.ClosedInterval; import java.time.ZonedDateTime; import java.util.Collection; import java.util.Map; +import org.locationtech.jts.geom.Point; /** Describes a data source for weather data */ public interface WeatherSource extends DataSource { diff --git a/src/main/java/edu/ie3/datamodel/models/input/graphics/GraphicInput.java b/src/main/java/edu/ie3/datamodel/models/input/graphics/GraphicInput.java index 33f82acb8..c9bf69477 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/graphics/GraphicInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/graphics/GraphicInput.java @@ -5,10 +5,10 @@ */ package edu.ie3.datamodel.models.input.graphics; -import com.vividsolutions.jts.geom.LineString; import edu.ie3.datamodel.models.input.InputEntity; import java.util.Objects; import java.util.UUID; +import org.locationtech.jts.geom.LineString; /** Describes the graphic data belonging to grid assets */ public class GraphicInput extends InputEntity { diff --git a/src/main/java/edu/ie3/datamodel/models/input/graphics/LineGraphicInput.java b/src/main/java/edu/ie3/datamodel/models/input/graphics/LineGraphicInput.java index fc9d6761c..b04f78a99 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/graphics/LineGraphicInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/graphics/LineGraphicInput.java @@ -5,10 +5,10 @@ */ package edu.ie3.datamodel.models.input.graphics; -import com.vividsolutions.jts.geom.LineString; import edu.ie3.datamodel.models.input.connector.LineInput; import java.util.Objects; import java.util.UUID; +import org.locationtech.jts.geom.LineString; /** * Describes the graphic data belonging to a {@link diff --git a/src/main/java/edu/ie3/datamodel/models/input/graphics/NodeGraphicInput.java b/src/main/java/edu/ie3/datamodel/models/input/graphics/NodeGraphicInput.java index 78b69bb46..23a28a43c 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/graphics/NodeGraphicInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/graphics/NodeGraphicInput.java @@ -5,11 +5,11 @@ */ package edu.ie3.datamodel.models.input.graphics; -import com.vividsolutions.jts.geom.LineString; -import com.vividsolutions.jts.geom.Point; import edu.ie3.datamodel.models.input.NodeInput; import java.util.Objects; import java.util.UUID; +import org.locationtech.jts.geom.LineString; +import org.locationtech.jts.geom.Point; /** Describes the graphic data belonging to a {@link NodeInput} */ public class NodeGraphicInput extends GraphicInput { diff --git a/src/main/java/edu/ie3/datamodel/models/value/WeatherValue.java b/src/main/java/edu/ie3/datamodel/models/value/WeatherValue.java index 24137c1e2..c912c3bbc 100644 --- a/src/main/java/edu/ie3/datamodel/models/value/WeatherValue.java +++ b/src/main/java/edu/ie3/datamodel/models/value/WeatherValue.java @@ -5,12 +5,12 @@ */ package edu.ie3.datamodel.models.value; -import com.vividsolutions.jts.geom.Point; import edu.ie3.util.quantities.interfaces.Irradiation; import javax.measure.Quantity; import javax.measure.quantity.Angle; import javax.measure.quantity.Speed; import javax.measure.quantity.Temperature; +import org.locationtech.jts.geom.Point; /** Describes weather as a combination of irradiation, temperature and wind values */ public class WeatherValue implements Value { diff --git a/src/main/java/edu/ie3/datamodel/utils/CoordinateUtils.java b/src/main/java/edu/ie3/datamodel/utils/CoordinateUtils.java index 2fb7d22b7..f2e5aa9aa 100644 --- a/src/main/java/edu/ie3/datamodel/utils/CoordinateUtils.java +++ b/src/main/java/edu/ie3/datamodel/utils/CoordinateUtils.java @@ -5,10 +5,10 @@ */ package edu.ie3.datamodel.utils; -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.GeometryFactory; -import com.vividsolutions.jts.geom.Point; -import com.vividsolutions.jts.geom.PrecisionModel; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.Point; +import org.locationtech.jts.geom.PrecisionModel; public class CoordinateUtils { From 5a1ecd6d580633eb8f1f7cd719237bf13d6c0e17 Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Wed, 25 Mar 2020 19:15:53 +0100 Subject: [PATCH 2/3] Extending test data + documenting hierarchy --- .../{ => main}/DataSourceClassDiagramm.puml | 0 docs/uml/{ => main}/InputDataDeployment.puml | 0 .../uml/{ => main}/InputDatamodelConcept.puml | 0 .../uml/{ => main}/ModelContainerConcept.puml | 0 .../{ => main}/OutputDatamodelConcept.puml | 0 docs/uml/test/TestDataHierarchy.puml | 8 +++++ .../input/AssetInputProcessorTest.groovy | 2 +- .../edu/ie3/test/common/GridTestData.groovy | 33 +++++++++++++++---- 8 files changed, 35 insertions(+), 8 deletions(-) rename docs/uml/{ => main}/DataSourceClassDiagramm.puml (100%) rename docs/uml/{ => main}/InputDataDeployment.puml (100%) rename docs/uml/{ => main}/InputDatamodelConcept.puml (100%) rename docs/uml/{ => main}/ModelContainerConcept.puml (100%) rename docs/uml/{ => main}/OutputDatamodelConcept.puml (100%) create mode 100644 docs/uml/test/TestDataHierarchy.puml diff --git a/docs/uml/DataSourceClassDiagramm.puml b/docs/uml/main/DataSourceClassDiagramm.puml similarity index 100% rename from docs/uml/DataSourceClassDiagramm.puml rename to docs/uml/main/DataSourceClassDiagramm.puml diff --git a/docs/uml/InputDataDeployment.puml b/docs/uml/main/InputDataDeployment.puml similarity index 100% rename from docs/uml/InputDataDeployment.puml rename to docs/uml/main/InputDataDeployment.puml diff --git a/docs/uml/InputDatamodelConcept.puml b/docs/uml/main/InputDatamodelConcept.puml similarity index 100% rename from docs/uml/InputDatamodelConcept.puml rename to docs/uml/main/InputDatamodelConcept.puml diff --git a/docs/uml/ModelContainerConcept.puml b/docs/uml/main/ModelContainerConcept.puml similarity index 100% rename from docs/uml/ModelContainerConcept.puml rename to docs/uml/main/ModelContainerConcept.puml diff --git a/docs/uml/OutputDatamodelConcept.puml b/docs/uml/main/OutputDatamodelConcept.puml similarity index 100% rename from docs/uml/OutputDatamodelConcept.puml rename to docs/uml/main/OutputDatamodelConcept.puml diff --git a/docs/uml/test/TestDataHierarchy.puml b/docs/uml/test/TestDataHierarchy.puml new file mode 100644 index 000000000..83831602a --- /dev/null +++ b/docs/uml/test/TestDataHierarchy.puml @@ -0,0 +1,8 @@ +@startuml +Interface GridTestData +Interface ComplexTopology +Interface SystemParticipantTestData + +GridTestData <|-- ComplexTopology +GridTestData <|-- SystemParticipantTestData +@enduml \ No newline at end of file diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/AssetInputProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/AssetInputProcessorTest.groovy index 3d679059a..d39d51df0 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/AssetInputProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/AssetInputProcessorTest.groovy @@ -134,7 +134,7 @@ class AssetInputProcessorTest extends Specification { "length" : "0.003", "noOfParallelDevices": "2", "nodeA" : "bd837a25-58f3-44ac-aa90-c6b6e3cd91b2", - "nodeB" : "bd865a25-58f3-44ac-aa90-c6b6e3cd91b2", + "nodeB" : "6e0980e0-10f2-4e18-862b-eb2b7c90509b", "olmCharacteristic" : "olm", "operatesUntil" : "2020-03-25 15:11:31", "operatesFrom" : "2020-03-24 15:11:31", diff --git a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy index ae65bee59..9036e29fc 100644 --- a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy @@ -10,6 +10,8 @@ import edu.ie3.datamodel.models.input.connector.Transformer3WInput import edu.ie3.datamodel.models.input.connector.type.LineTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.models.input.connector.type.Transformer3WTypeInput +import edu.ie3.datamodel.models.input.graphics.LineGraphicInput +import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput import edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils import edu.ie3.util.TimeTools import edu.ie3.util.quantities.PowerSystemUnits @@ -20,8 +22,6 @@ import tec.uom.se.quantity.Quantities import tec.uom.se.unit.MetricPrefix import tec.uom.se.unit.Units -import java.time.ZonedDateTime - import static edu.ie3.util.quantities.PowerSystemUnits.DEGREE_GEOM import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLT import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE @@ -37,7 +37,7 @@ import static tec.uom.se.unit.Units.SIEMENS */ class GridTestData { - private static final GeoJsonReader geoJsonReader = new GeoJsonReader(); + private static final GeoJsonReader geoJsonReader = new GeoJsonReader() private static final Transformer2WTypeInput transformerTypeBtoD = new Transformer2WTypeInput( UUID.randomUUID(), @@ -139,7 +139,7 @@ class GridTestData { "node_a", Quantities.getQuantity(1d, PU), true, - (Point) geoJsonReader.read("{ \"type\": \"Point\", \"coordinates\": [7.411111, 51.492528] }"), + geoJsonReader.read("{ \"type\": \"Point\", \"coordinates\": [7.411111, 51.492528] }") as Point, GermanVoltageLevelUtils.EHV_380KV, 1) public static final NodeInput nodeB = new NodeInput( @@ -162,8 +162,15 @@ class GridTestData { null, GermanVoltageLevelUtils.MV_20KV, 3) + public static final NodeGraphicInput nodeGraphicC = new NodeGraphicInput( + UUID.fromString("09aec636-791b-45aa-b981-b14edf171c4c"), + "main", + null, + nodeC, + geoJsonReader.read("{ \"type\": \"Point\", \"coordinates\": [0, 10] }") as Point + ) public static final NodeInput nodeD = new NodeInput( - UUID.fromString("bd865a25-58f3-44ac-aa90-c6b6e3cd91b2"), + UUID.fromString("6e0980e0-10f2-4e18-862b-eb2b7c90509b"), OperationTime.notLimited(), OperatorInput.NO_OPERATOR_ASSIGNED, "node_d", @@ -172,6 +179,13 @@ class GridTestData { null, GermanVoltageLevelUtils.MV_20KV, 4) + public static final NodeGraphicInput nodeGraphicD = new NodeGraphicInput( + UUID.fromString("9ecad435-bd16-4797-a732-762c09d4af25"), + "main", + geoJsonReader.read("{ \"type\": \"LineString\", \"coordinates\": [[-1, 0], [1, 0]]}") as LineString, + nodeD, + null + ) public static final NodeInput nodeE = new NodeInput( UUID.randomUUID(), OperationTime.notLimited(), @@ -310,8 +324,13 @@ class GridTestData { 2, lineTypeInputCtoD, Quantities.getQuantity(3, Units.METRE), - (LineString) geoJsonReader.read("{ \"type\": \"LineString\", \"coordinates\": [[7.411111, 51.492528], [7.414116, 51.484136]]}"), + geoJsonReader.read("{ \"type\": \"LineString\", \"coordinates\": [[7.411111, 51.492528], [7.414116, 51.484136]]}") as LineString, Optional.of("olm") ) - + public static final LineGraphicInput lineGraphicCtoD = new LineGraphicInput( + UUID.fromString("ece86139-3238-4a35-9361-457ecb4258b0"), + "main", + geoJsonReader.read("{ \"type\": \"LineString\", \"coordinates\": [[0, 0], [0, 10]]}") as LineString, + lineCtoD + ) } From e807a625e21759ebe6eb443e1708979b74a38e1f Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Wed, 25 Mar 2020 19:16:33 +0100 Subject: [PATCH 3/3] De-serializing graphic input models --- .../io/processor/EntityProcessor.java | 1 + .../io/processor/ProcessorProvider.java | 10 ++- .../input/GraphicInputProcessor.java | 42 ++++++++++ .../io/processor/ProcessorProviderTest.groovy | 76 +++++++++++++++---- .../input/GraphicInputProcessorTest.groovy | 74 ++++++++++++++++++ .../datamodel/utils/ContainerUtilTest.groovy | 8 +- 6 files changed, 193 insertions(+), 18 deletions(-) create mode 100644 src/main/java/edu/ie3/datamodel/io/processor/input/GraphicInputProcessor.java create mode 100644 src/test/groovy/edu/ie3/datamodel/io/processor/input/GraphicInputProcessorTest.groovy diff --git a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java index ca309b425..5e0b0524e 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -231,6 +231,7 @@ private String processMethodResult(Object methodReturnObject, Method method, Str case "Transformer3WTypeInput": case "Transformer2WTypeInput": case "LineTypeInput": + case "LineInput": case "OperatorInput": case "WecTypeInput": case "ThermalBusInput": diff --git a/src/main/java/edu/ie3/datamodel/io/processor/ProcessorProvider.java b/src/main/java/edu/ie3/datamodel/io/processor/ProcessorProvider.java index 34b2374fd..de5d6e3df 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/ProcessorProvider.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/ProcessorProvider.java @@ -7,9 +7,11 @@ import edu.ie3.datamodel.exceptions.ProcessorProviderException; import edu.ie3.datamodel.io.processor.input.AssetInputProcessor; +import edu.ie3.datamodel.io.processor.input.GraphicInputProcessor; import edu.ie3.datamodel.io.processor.result.ResultEntityProcessor; import edu.ie3.datamodel.models.UniqueEntity; import edu.ie3.datamodel.models.input.AssetInput; +import edu.ie3.datamodel.models.input.graphics.GraphicInput; import edu.ie3.datamodel.models.result.ResultEntity; import java.util.*; import java.util.stream.Collectors; @@ -131,14 +133,20 @@ private Collection> allProcessors() { // todo add missing processors here // AssetInput - for(Class cls : AssetInputProcessor.eligibleEntityClasses){ + for (Class cls : AssetInputProcessor.eligibleEntityClasses) { resultingProcessors.add(new AssetInputProcessor(cls)); } + // GraphicInput + for (Class cls : GraphicInputProcessor.eligibleEntityClasses) { + resultingProcessors.add(new GraphicInputProcessor(cls)); + } + // SystemParticipantResults for (Class cls : ResultEntityProcessor.eligibleEntityClasses) { resultingProcessors.add(new ResultEntityProcessor(cls)); } + return resultingProcessors; } diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/GraphicInputProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/GraphicInputProcessor.java new file mode 100644 index 000000000..bdb9cd8b9 --- /dev/null +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/GraphicInputProcessor.java @@ -0,0 +1,42 @@ +/* + * © 2020. TU Dortmund University, + * Institute of Energy Systems, Energy Efficiency and Energy Economics, + * Research group Distribution grid planning and operation +*/ +package edu.ie3.datamodel.io.processor.input; + +import edu.ie3.datamodel.io.processor.EntityProcessor; +import edu.ie3.datamodel.models.input.graphics.GraphicInput; +import edu.ie3.datamodel.models.input.graphics.LineGraphicInput; +import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import javax.measure.Quantity; + +/** + * Processor to deserialize all children of {@link GraphicInput} to a mapping from field name to + * value (as string representation). All necessary processes are already apparent in the {@link + * EntityProcessor}, therefore, no additional implementations have to be made. + */ +public class GraphicInputProcessor extends EntityProcessor { + public static final List> eligibleEntityClasses = + Collections.unmodifiableList(Arrays.asList(NodeGraphicInput.class, LineGraphicInput.class)); + + public GraphicInputProcessor(Class registeredClass) { + super(registeredClass); + } + + @Override + protected Optional handleProcessorSpecificQuantity( + Quantity quantity, String fieldName) { + throw new UnsupportedOperationException( + "No specific quantity handling required for graphic input models."); + } + + @Override + protected List> getAllEligibleClasses() { + return eligibleEntityClasses; + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy index add52048b..52571bf65 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -2,6 +2,27 @@ package edu.ie3.datamodel.io.processor import edu.ie3.datamodel.io.processor.result.ResultEntityProcessor import edu.ie3.datamodel.models.StandardUnits +import edu.ie3.datamodel.models.input.EvcsInput +import edu.ie3.datamodel.models.input.MeasurementUnitInput +import edu.ie3.datamodel.models.input.NodeInput +import edu.ie3.datamodel.models.input.connector.LineInput +import edu.ie3.datamodel.models.input.connector.SwitchInput +import edu.ie3.datamodel.models.input.connector.Transformer2WInput +import edu.ie3.datamodel.models.input.connector.Transformer3WInput +import edu.ie3.datamodel.models.input.graphics.LineGraphicInput +import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput +import edu.ie3.datamodel.models.input.system.BmInput +import edu.ie3.datamodel.models.input.system.ChpInput +import edu.ie3.datamodel.models.input.system.EvInput +import edu.ie3.datamodel.models.input.system.FixedFeedInInput +import edu.ie3.datamodel.models.input.system.HpInput +import edu.ie3.datamodel.models.input.system.LoadInput +import edu.ie3.datamodel.models.input.system.PvInput +import edu.ie3.datamodel.models.input.system.StorageInput +import edu.ie3.datamodel.models.input.system.WecInput +import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput +import edu.ie3.datamodel.models.input.thermal.ThermalBusInput +import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput import edu.ie3.datamodel.models.result.NodeResult import edu.ie3.datamodel.models.result.connector.LineResult import edu.ie3.datamodel.models.result.connector.SwitchResult @@ -32,22 +53,45 @@ class ProcessorProviderTest extends Specification { ProcessorProvider provider = new ProcessorProvider() // currently known processors - List knownProcessors = [LoadResult, - FixedFeedInResult, - BmResult, - PvResult, - ChpResult, - WecResult, - StorageResult, - EvcsResult, - EvResult, - Transformer2WResult, - Transformer3WResult, - LineResult, - SwitchResult, - NodeResult, - ThermalHouseResult, - CylindricalStorageResult] + List knownProcessors = [ + FixedFeedInInput, + PvInput, + WecInput, + ChpInput, + BmInput, + EvInput, + LoadInput, + StorageInput, + HpInput, + LineInput, + SwitchInput, + Transformer2WInput, + Transformer3WInput, + ThermalHouseInput, + CylindricalStorageInput, + ThermalBusInput, + MeasurementUnitInput, + NodeInput, + EvcsInput, + LoadResult, + NodeGraphicInput, + LineGraphicInput, + FixedFeedInResult, + BmResult, + PvResult, + ChpResult, + WecResult, + StorageResult, + EvcsResult, + EvResult, + Transformer2WResult, + Transformer3WResult, + LineResult, + SwitchResult, + NodeResult, + ThermalHouseResult, + CylindricalStorageResult + ] expect: provider.registeredClasses.size() == knownProcessors.size() diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/GraphicInputProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/GraphicInputProcessorTest.groovy new file mode 100644 index 000000000..96f68f42e --- /dev/null +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/GraphicInputProcessorTest.groovy @@ -0,0 +1,74 @@ +package edu.ie3.datamodel.io.processor.input + +import edu.ie3.datamodel.models.input.graphics.LineGraphicInput +import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput +import edu.ie3.test.common.GridTestData +import edu.ie3.util.TimeTools +import spock.lang.Specification + +import java.time.ZoneId + +class GraphicInputProcessorTest extends Specification { + static { + TimeTools.initialize(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd HH:mm:ss") + } + + def "The GraphicInputProcessor should de-serialize a provided NodeGraphicInput with point correctly"(){ + given: + GraphicInputProcessor processor = new GraphicInputProcessor(NodeGraphicInput.class) + NodeGraphicInput validNode = GridTestData.nodeGraphicC + Map expected = [ + "uuid" : "09aec636-791b-45aa-b981-b14edf171c4c", + "graphicLayer" : "main", + "path" : "", + "point" : "{\"type\":\"Point\",\"coordinates\":[0.0,10],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}", + "node" : "bd837a25-58f3-44ac-aa90-c6b6e3cd91b2" + ] + + when: + Optional> actual = processor.handleEntity(validNode) + + then: + actual.isPresent() + actual.get() == expected + } + + def "The GraphicInputProcessor should de-serialize a provided NodeGraphicInput with path correctly"(){ + given: + GraphicInputProcessor processor = new GraphicInputProcessor(NodeGraphicInput.class) + NodeGraphicInput validNode = GridTestData.nodeGraphicD + Map expected = [ + "uuid" : "9ecad435-bd16-4797-a732-762c09d4af25", + "graphicLayer" : "main", + "path" : "{\"type\":\"LineString\",\"coordinates\":[[-1,0.0],[1,0.0]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}", + "point" : "", + "node" : "6e0980e0-10f2-4e18-862b-eb2b7c90509b" + ] + + when: + Optional> actual = processor.handleEntity(validNode) + + then: + actual.isPresent() + actual.get() == expected + } + + def "The GraphicInputProcessor should de-serialize a provided LineGraphicInput correctly"(){ + given: + GraphicInputProcessor processor = new GraphicInputProcessor(LineGraphicInput.class) + LineGraphicInput validNode = GridTestData.lineGraphicCtoD + Map expected = [ + "uuid" : "ece86139-3238-4a35-9361-457ecb4258b0", + "graphicLayer" : "main", + "path" : "{\"type\":\"LineString\",\"coordinates\":[[0.0,0.0],[0.0,10]],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}", + "line" : "91ec3bcf-1777-4d38-af67-0bf7c9fa73c7" + ] + + when: + Optional> actual = processor.handleEntity(validNode) + + then: + actual.isPresent() + actual.get() == expected + } +} diff --git a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilTest.groovy b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilTest.groovy index fdb949412..09ec7e623 100644 --- a/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/utils/ContainerUtilTest.groovy @@ -1,7 +1,6 @@ package edu.ie3.datamodel.utils import edu.ie3.datamodel.exceptions.InvalidGridException -import edu.ie3.datamodel.graph.SubGridGate import edu.ie3.datamodel.graph.SubGridTopologyGraph import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.input.NodeInput @@ -14,8 +13,11 @@ import edu.ie3.datamodel.models.input.container.JointGridContainer import edu.ie3.datamodel.models.input.container.RawGridElements import edu.ie3.datamodel.models.input.container.SubGridContainer import edu.ie3.datamodel.models.input.container.SystemParticipants +import edu.ie3.util.TimeTools import tec.uom.se.quantity.Quantities +import java.time.ZoneId + import static edu.ie3.datamodel.models.voltagelevels.GermanVoltageLevelUtils.* import edu.ie3.datamodel.models.voltagelevels.VoltageLevel import edu.ie3.test.common.ComplexTopology @@ -25,6 +27,10 @@ import spock.lang.Specification import static edu.ie3.util.quantities.PowerSystemUnits.PU class ContainerUtilTest extends Specification { + static { + TimeTools.initialize(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd HH:mm:ss") + } + @Shared GridContainer complexTopology = ComplexTopology.grid