From b9da44e82b31cf9a812065172a0f6389b3a500cd Mon Sep 17 00:00:00 2001 From: Johannes Hiry Date: Thu, 26 Mar 2020 12:29:50 +0100 Subject: [PATCH 01/24] adapted curl for branch name in Jenkinsfile --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index cc9a0c8a9..f909e597b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -656,7 +656,7 @@ def resolveBranchName(String featureBranchPRMinusNo, String orgName, String repo // curl the repo based on the feature branch no to get the branch information /// Note: only works for public repos! Otherwise credentials needs to be passed def curlUrl = "curl https://api.github.com/repos/" + orgName + "/" + repoName + "/pulls/" + prNo - def response = curlUrl.execute().text + def response = sh(script: curlUrl, returnStdout: true) def matcher = response =~ /\"label\":\s\"(.+)\"/ assert matcher.find() From 38ccef1b7f4b5ec1b6a3e7addedb26b09d764990 Mon Sep 17 00:00:00 2001 From: Johannes Hiry Date: Thu, 26 Mar 2020 12:35:14 +0100 Subject: [PATCH 02/24] added NonCPS annotation in Jenkinsfile --- Jenkinsfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index f909e597b..ffabe1dfe 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -636,6 +636,8 @@ def gitCheckout(String relativeTargetDir, String baseUrl, String branch, String ]) } +@NonCPS +// https://stackoverflow.com/questions/47646409/jenkins-groovy-regex-match-string-error-java-io-notserializableexception-jav def resolveBranchNo(String featureBranchPRMinusNo) { // get pull request number def branchNoMatcher = featureBranchPRMinusNo =~ /PR-(.*)/ @@ -645,6 +647,7 @@ def resolveBranchNo(String featureBranchPRMinusNo) { return prNo } +@NonCPS def resolveBranchName(String featureBranchPRMinusNo, String orgName, String repoName) { // get pull request number From 1885cd522c62ecfdb18ef6d0cac543c099490a90 Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Thu, 26 Mar 2020 14:00:11 +0100 Subject: [PATCH 03/24] Joining AssetInputProcessor and GraphicInputProcessor to InputEntityProcessor --- .../io/processor/EntityProcessor.java | 10 +- .../io/processor/ProcessorProvider.java | 15 +-- .../input/GraphicInputProcessor.java | 42 -------- ...ocessor.java => InputEntityProcessor.java} | 17 ++-- .../input/GraphicInputProcessorTest.groovy | 74 -------------- ...groovy => InputEntityProcessorTest.groovy} | 97 ++++++++++++++----- 6 files changed, 96 insertions(+), 159 deletions(-) delete mode 100644 src/main/java/edu/ie3/datamodel/io/processor/input/GraphicInputProcessor.java rename src/main/java/edu/ie3/datamodel/io/processor/input/{AssetInputProcessor.java => InputEntityProcessor.java} (83%) delete mode 100644 src/test/groovy/edu/ie3/datamodel/io/processor/input/GraphicInputProcessorTest.groovy rename src/test/groovy/edu/ie3/datamodel/io/processor/input/{AssetInputProcessorTest.groovy => InputEntityProcessorTest.groovy} (83%) 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 5e0b0524e..c4cd9004a 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -181,6 +181,14 @@ private Optional> processEntity(T entity) { return resultMapOpt; } + /** + * Processes the returned object to String by taking care of different conventions. + * + * @param methodReturnObject Return object to process + * @param method The method, that is invoked + * @param fieldName Name of the foreseen field + * @return A String representation of the result + */ private String processMethodResult(Object methodReturnObject, Method method, String fieldName) { StringBuilder resultStringBuilder = new StringBuilder(); @@ -323,8 +331,6 @@ protected String processVoltageLevel(VoltageLevel voltageLevel, String fieldName + "' in result entity " + getRegisteredClass().getSimpleName() + ".class."))); - ; - return resultStringBuilder.toString(); } 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 de5d6e3df..2301f1c20 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/ProcessorProvider.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/ProcessorProvider.java @@ -6,12 +6,10 @@ package edu.ie3.datamodel.io.processor; 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.input.InputEntityProcessor; 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.input.InputEntity; import edu.ie3.datamodel.models.result.ResultEntity; import java.util.*; import java.util.stream.Collectors; @@ -133,13 +131,8 @@ private Collection> allProcessors() { // todo add missing processors here // AssetInput - for (Class cls : AssetInputProcessor.eligibleEntityClasses) { - resultingProcessors.add(new AssetInputProcessor(cls)); - } - - // GraphicInput - for (Class cls : GraphicInputProcessor.eligibleEntityClasses) { - resultingProcessors.add(new GraphicInputProcessor(cls)); + for (Class cls : InputEntityProcessor.eligibleEntityClasses) { + resultingProcessors.add(new InputEntityProcessor(cls)); } // SystemParticipantResults 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 deleted file mode 100644 index bdb9cd8b9..000000000 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/GraphicInputProcessor.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * © 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/main/java/edu/ie3/datamodel/io/processor/input/AssetInputProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java similarity index 83% rename from src/main/java/edu/ie3/datamodel/io/processor/input/AssetInputProcessor.java rename to src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index c76b46fcd..8d0f1ed0e 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/AssetInputProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -9,11 +9,12 @@ import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.*; import edu.ie3.datamodel.models.input.connector.*; +import edu.ie3.datamodel.models.input.graphics.LineGraphicInput; +import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput; import edu.ie3.datamodel.models.input.system.*; 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.system.*; import java.util.*; import javax.measure.Quantity; import javax.measure.quantity.Dimensionless; @@ -22,15 +23,15 @@ import javax.measure.quantity.Power; /** - * //ToDo: Class Description + * Processes all {@link InputEntity}s and it's child classes * * @version 0.1 * @since 23.03.20 */ -public class AssetInputProcessor extends EntityProcessor { +public class InputEntityProcessor extends EntityProcessor { /** The entities that can be used within this processor */ - public static final List> eligibleEntityClasses = + public static final List> eligibleEntityClasses = Collections.unmodifiableList( Arrays.asList( FixedFeedInInput.class, @@ -51,9 +52,11 @@ public class AssetInputProcessor extends EntityProcessor { ThermalBusInput.class, MeasurementUnitInput.class, NodeInput.class, - EvcsInput.class)); + EvcsInput.class, + NodeGraphicInput.class, + LineGraphicInput.class)); - public AssetInputProcessor(Class registeredClass) { + public InputEntityProcessor(Class registeredClass) { super(registeredClass); } @@ -91,7 +94,7 @@ protected Optional handleProcessorSpecificQuantity( } @Override - protected List> getAllEligibleClasses() { + protected List> getAllEligibleClasses() { return eligibleEntityClasses; } } 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 deleted file mode 100644 index 96f68f42e..000000000 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/GraphicInputProcessorTest.groovy +++ /dev/null @@ -1,74 +0,0 @@ -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/io/processor/input/AssetInputProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy similarity index 83% rename from src/test/groovy/edu/ie3/datamodel/io/processor/input/AssetInputProcessorTest.groovy rename to src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 88d66c130..5afd3fcd9 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/AssetInputProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -6,6 +6,8 @@ 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 @@ -24,17 +26,19 @@ import java.time.ZoneId import java.time.ZonedDateTime /** - * //ToDo: Class Description + * Testing the function of processors * - * @version 0.1* @since 24.03.20 + * @version 0.1 + * @since 24.03.20 */ -class AssetInputProcessorTest extends Specification { - +class InputEntityProcessorTest extends Specification { + static { + TimeTools.initialize(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd HH:mm:ss") + } - def "A AssetInputProcessor should de-serialize a provided NodeInput correctly"() { + def "A InputEntityProcessor should de-serialize a provided NodeInput correctly"() { given: - TimeTools.initialize(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd HH:mm:ss") - def assetInputProcessor = new AssetInputProcessor(NodeInput) + def processor = new InputEntityProcessor(NodeInput) def validResult = GridTestData.nodeA Map expectedResults = [ @@ -52,25 +56,21 @@ class AssetInputProcessorTest extends Specification { ] when: "the entity is passed to the processor" - def processingResult = assetInputProcessor.handleEntity(validResult) - + def processingResult = processor.handleEntity(validResult) then: "make sure that the result is as expected " processingResult.present processingResult.get() == expectedResults - } - def "A AssetInputProcessor should de-serialize a provided ConnectorInput correctly"() { + def "A InputEntityProcessor should de-serialize a provided ConnectorInput correctly"() { given: - TimeTools.initialize(ZoneId.of("UTC"), Locale.GERMANY, "yyyy-MM-dd HH:mm:ss") - def assetInputProcessor = new AssetInputProcessor(modelClass) + def processor = new InputEntityProcessor(modelClass) def validInput = modelInstance when: "the entity is passed to the processor" - def processingResult = assetInputProcessor.handleEntity(validInput) - + def processingResult = processor.handleEntity(validInput) then: "make sure that the result is as expected " processingResult.present @@ -80,7 +80,6 @@ class AssetInputProcessorTest extends Specification { assert (v == expectedResult.get(k)) } - where: modelClass | modelInstance || expectedResult Transformer3WInput | GridTestData.transformerAtoBtoC || [ @@ -137,18 +136,15 @@ class AssetInputProcessorTest extends Specification { "operator" : "8f9682df-0744-4b58-a122-f0dc730f6510", "type" : "3bed3eb3-9790-4874-89b5-a5434d408088" ] - } - def "A AssetInputProcessor should de-serialize a provided SystemParticipantInput correctly"() { - + def "A InputEntityProcessor should de-serialize a provided SystemParticipantInput correctly"() { given: - def assetInputProcessor = new AssetInputProcessor(modelClass) + def processor = new InputEntityProcessor(modelClass) def validInput = modelInstance when: "the entity is passed to the processor" - def processingResult = assetInputProcessor.handleEntity(validInput) - + def processingResult = processor.handleEntity(validInput) then: "make sure that the result is as expected " processingResult.present @@ -158,7 +154,6 @@ class AssetInputProcessorTest extends Specification { assert (v == expectedResult.get(k)) } - where: modelClass | modelInstance || expectedResult FixedFeedInInput | SystemParticipantTestData.fixedFeedInInput || [ @@ -275,8 +270,64 @@ class AssetInputProcessorTest extends Specification { "type" : SystemParticipantTestData.hpInput.type.getUuid().toString() ] + } + + def "The InputEntityProcessor should de-serialize a provided NodeGraphicInput with point correctly"(){ + given: + InputEntityProcessor processor = new InputEntityProcessor(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 InputEntityProcessor should de-serialize a provided NodeGraphicInput with path correctly"(){ + given: + InputEntityProcessor processor = new InputEntityProcessor(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 InputEntityProcessor should de-serialize a provided LineGraphicInput correctly"(){ + given: + InputEntityProcessor processor = new InputEntityProcessor(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 + } } From 29329ff835940e1967f1bd502b45ab67130fc0b9 Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Thu, 26 Mar 2020 14:22:33 +0100 Subject: [PATCH 04/24] Processing OperatorInput --- .../processor/input/InputEntityProcessor.java | 30 +++++++++++-------- .../datamodel/models/input/OperatorInput.java | 18 +++++------ .../input/InputEntityProcessorTest.groovy | 18 +++++++++++ 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 8d0f1ed0e..996f834dd 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -34,25 +34,31 @@ public class InputEntityProcessor extends EntityProcessor { public static final List> eligibleEntityClasses = Collections.unmodifiableList( Arrays.asList( - FixedFeedInInput.class, - PvInput.class, - WecInput.class, + /* InputEntity */ + OperatorInput.class, + /* - AssetInput */ + NodeInput.class, + LineInput.class, + Transformer2WInput.class, + Transformer3WInput.class, + SwitchInput.class, + MeasurementUnitInput.class, + EvcsInput.class, + ThermalBusInput.class, + /* -- SystemParticipantInput */ ChpInput.class, BmInput.class, EvInput.class, + FixedFeedInInput.class, + HpInput.class, LoadInput.class, + PvInput.class, StorageInput.class, - HpInput.class, - LineInput.class, - SwitchInput.class, - Transformer2WInput.class, - Transformer3WInput.class, + WecInput.class, + /* -- ThermalUnitInput */ ThermalHouseInput.class, CylindricalStorageInput.class, - ThermalBusInput.class, - MeasurementUnitInput.class, - NodeInput.class, - EvcsInput.class, + /* - GraphicInput */ NodeGraphicInput.class, LineGraphicInput.class)); diff --git a/src/main/java/edu/ie3/datamodel/models/input/OperatorInput.java b/src/main/java/edu/ie3/datamodel/models/input/OperatorInput.java index 357be2742..dcb3fc19b 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/OperatorInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/OperatorInput.java @@ -15,16 +15,16 @@ public class OperatorInput extends InputEntity { new OperatorInput(UUID.randomUUID(), "NO_OPERATOR_ASSIGNED"); /** The name of this operator */ - private final String name; + private final String id; - /** @param name of this operator */ - public OperatorInput(UUID uuid, String name) { + /** @param id of this operator */ + public OperatorInput(UUID uuid, String id) { super(uuid); - this.name = name; + this.id = id; } - public String getName() { - return name; + public String getId() { + return id; } @Override @@ -33,16 +33,16 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; OperatorInput that = (OperatorInput) o; - return Objects.equals(name, that.name); + return Objects.equals(id, that.id); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), name); + return Objects.hash(super.hashCode(), id); } @Override public String toString() { - return "OperatorInput{" + "name='" + name + '\'' + '}'; + return "OperatorInput{" + "id='" + id + '\'' + '}'; } } diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 5afd3fcd9..d6b7b4e40 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -2,6 +2,7 @@ package edu.ie3.datamodel.io.processor.input import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.NodeInput +import edu.ie3.datamodel.models.input.OperatorInput import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.SwitchInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput @@ -330,4 +331,21 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided OperatorInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(OperatorInput.class) + OperatorInput operator = new OperatorInput(UUID.fromString("420ee39c-dd5a-4d9c-9156-23dbdef13e5e"), "Prof. Brokkoli") + Map expected = [ + "uuid" : "420ee39c-dd5a-4d9c-9156-23dbdef13e5e", + "id" : "Prof. Brokkoli" + ] + + when: + Optional> actual = processor.handleEntity(operator) + + then: + actual.isPresent() + actual.get() == expected + } } From 8e99ccee1be2c51fdadb24f15b262a7c5db51c2b Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Thu, 26 Mar 2020 14:31:10 +0100 Subject: [PATCH 05/24] Processing RandomLoadParameters --- .../processor/input/InputEntityProcessor.java | 1 + .../input/InputEntityProcessorTest.groovy | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 996f834dd..2584ca1ee 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -36,6 +36,7 @@ public class InputEntityProcessor extends EntityProcessor { Arrays.asList( /* InputEntity */ OperatorInput.class, + RandomLoadParameters.class, /* - AssetInput */ NodeInput.class, LineInput.class, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index d6b7b4e40..812ac269d 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -3,6 +3,7 @@ package edu.ie3.datamodel.io.processor.input import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.NodeInput import edu.ie3.datamodel.models.input.OperatorInput +import edu.ie3.datamodel.models.input.RandomLoadParameters import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.SwitchInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput @@ -348,4 +349,42 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided RandomLoadParameters correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(RandomLoadParameters.class) + RandomLoadParameters parameters = new RandomLoadParameters( + UUID.fromString("a5b0f432-27b5-4b3e-b87a-61867b9edd79"), + 4, + 1.2, + 2.3, + 3.4, + 4.5, + 5.6, + 6.7, + 7.8, + 8.9, + 9.10 + ) + Map expected = [ + "uuid": "a5b0f432-27b5-4b3e-b87a-61867b9edd79", + "quarterHour": "4", + "kWd": "1.2", + "kSa": "2.3", + "kSu": "3.4", + "myWd": "4.5", + "mySa": "5.6", + "mySu": "6.7", + "sigmaWd": "7.8", + "sigmaSa": "8.9", + "sigmaSu": "9.1" + ] + + when: + Optional> actual = processor.handleEntity(parameters) + + then: + actual.isPresent() + actual.get() == expected + } } From 6f097a9ef7cdd904df6fe3cf734629feae38f58b Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Thu, 26 Mar 2020 15:37:28 +0100 Subject: [PATCH 06/24] Adapting AssetCharacteristicInput and processing those elements --- docs/uml/main/InputDatamodelConcept.puml | 25 +++++------ .../io/processor/EntityProcessor.java | 1 + .../processor/input/InputEntityProcessor.java | 4 ++ .../AssetCharacteristicInput.java | 33 +++++++++++---- .../characteristic/EvCharacteristicInput.java | 17 ++++++-- .../WecCharacteristicInput.java | 40 ++++++------------ .../io/processor/ProcessorProviderTest.groovy | 40 ++++++++++++------ .../input/InputEntityProcessorTest.groovy | 42 ++++++++++++++----- .../edu/ie3/test/common/TypeTestData.groovy | 33 +++++++++++++++ 9 files changed, 158 insertions(+), 77 deletions(-) create mode 100644 src/test/groovy/edu/ie3/test/common/TypeTestData.groovy diff --git a/docs/uml/main/InputDatamodelConcept.puml b/docs/uml/main/InputDatamodelConcept.puml index 5044f62bd..e32f7fcbb 100644 --- a/docs/uml/main/InputDatamodelConcept.puml +++ b/docs/uml/main/InputDatamodelConcept.puml @@ -36,11 +36,20 @@ abstract Class ConnectorInput { } ConnectorInput --|> AssetInput -abstract Class AssetCharacteristicsInput { -+ type: String +abstract Class AssetCharacteristicsInput { + - type: T + - Characteristic: String } AssetCharacteristicsInput --|> InputEntity +Class WecCharacteristicInput { +} +WecCharacteristicInput --|> AssetCharacteristicsInput: <>T::WecTypeInput + +Class EvCharacteristicInput { +} +EvCharacteristicInput --|> AssetCharacteristicsInput: <>T::EvTypeInput + abstract Class AssetTypeInput { + id: String } @@ -161,18 +170,6 @@ Class Transformer3WTypeInput { } Transformer3WTypeInput --|> AssetTypeInput - -Class WecCharacteristicInput { -+ cpCharacteristic: String -} -WecCharacteristicInput --|> AssetCharacteristicsInput - -Class EvCharacteristicInput { - ??? -} -EvCharacteristicInput --|> AssetCharacteristicsInput - - Class RandomLoadParameter { + quarterHour: Integer + kWd: Double 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 c4cd9004a..33717fb66 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -236,6 +236,7 @@ private String processMethodResult(Object methodReturnObject, Method method, Str resultStringBuilder.append(((StorageStrategy) methodReturnObject).getToken()); break; case "NodeInput": + case "SystemParticipantTypeInput": case "Transformer3WTypeInput": case "Transformer2WTypeInput": case "LineTypeInput": diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 2584ca1ee..1b8081055 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -12,6 +12,8 @@ import edu.ie3.datamodel.models.input.graphics.LineGraphicInput; import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput; import edu.ie3.datamodel.models.input.system.*; +import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput; +import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput; import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput; @@ -37,6 +39,8 @@ public class InputEntityProcessor extends EntityProcessor { /* InputEntity */ OperatorInput.class, RandomLoadParameters.class, + WecCharacteristicInput.class, + EvCharacteristicInput.class, /* - AssetInput */ NodeInput.class, LineInput.class, diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/AssetCharacteristicInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/AssetCharacteristicInput.java index d59c6acec..ad318c671 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/AssetCharacteristicInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/AssetCharacteristicInput.java @@ -6,44 +6,61 @@ package edu.ie3.datamodel.models.input.system.characteristic; import edu.ie3.datamodel.models.input.InputEntity; +import edu.ie3.datamodel.models.input.system.type.SystemParticipantTypeInput; import java.util.Objects; import java.util.UUID; /** Describes characteristics of assets */ -public abstract class AssetCharacteristicInput extends InputEntity { +public abstract class AssetCharacteristicInput + extends InputEntity { /** Type name of this characteristic */ - private final String type; + protected final T type; + + /** Actual characteristic */ + protected final String characteristic; /** * @param uuid of the input entity * @param type The type name of this characteristic + * @param characteristic Actual characteristic */ - public AssetCharacteristicInput(UUID uuid, String type) { + public AssetCharacteristicInput(UUID uuid, T type, String characteristic) { super(uuid); this.type = type; + this.characteristic = characteristic; } - public String getType() { + public T getType() { return type; } + public String getCharacteristic() { + return characteristic; + } + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; - AssetCharacteristicInput that = (AssetCharacteristicInput) o; - return Objects.equals(type, that.type); + AssetCharacteristicInput that = (AssetCharacteristicInput) o; + return type.equals(that.type) && characteristic.equals(that.characteristic); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), type); + return Objects.hash(super.hashCode(), type, characteristic); } @Override public String toString() { - return "AssetCharacteristicInput{" + "type='" + type + '\'' + '}'; + return "AssetCharacteristicInput{" + + "type=" + + type + + ", characteristic='" + + characteristic + + '\'' + + '}'; } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/EvCharacteristicInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/EvCharacteristicInput.java index 47567fd72..bc7c82803 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/EvCharacteristicInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/EvCharacteristicInput.java @@ -5,16 +5,27 @@ */ package edu.ie3.datamodel.models.input.system.characteristic; +import edu.ie3.datamodel.models.input.system.type.EvTypeInput; import java.util.UUID; -public class EvCharacteristicInput extends AssetCharacteristicInput { +public class EvCharacteristicInput extends AssetCharacteristicInput { /** @deprecated only added to remove compile error. Please implement a real constructor */ @Deprecated - public EvCharacteristicInput(UUID uuid, String type) { - super(uuid, type); + public EvCharacteristicInput(UUID uuid, EvTypeInput type, String characteristic) { + super(uuid, type, characteristic); } // TODO please fill the void inside me :'( + @Override + public String toString() { + return "EvCharacteristicInput{" + + "type=" + + type + + ", characteristic='" + + characteristic + + '\'' + + '}'; + } } diff --git a/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/WecCharacteristicInput.java b/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/WecCharacteristicInput.java index 165ba04ba..6b646f5e5 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/WecCharacteristicInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/system/characteristic/WecCharacteristicInput.java @@ -5,44 +5,28 @@ */ package edu.ie3.datamodel.models.input.system.characteristic; -import java.util.Objects; +import edu.ie3.datamodel.models.input.system.type.WecTypeInput; import java.util.UUID; /** Characteristic mapping the wind velocity to its corresponding Betz coefficient */ -public class WecCharacteristicInput extends AssetCharacteristicInput { - /** Curve of the Betz coefficient as semicolon-separated String */ - private final String cpCharacteristic; - +public class WecCharacteristicInput extends AssetCharacteristicInput { /** * @param uuid of the input entity * @param type of this characteristic - * @param cpCharacteristic Power curve as semicolon-separated String + * @param characteristic Curve of the Betz coefficient in the form "{(v1,cp1),(v2,cp2), ...}" */ - public WecCharacteristicInput(UUID uuid, String type, String cpCharacteristic) { - super(uuid, type); - this.cpCharacteristic = cpCharacteristic; - } - - public String getCpCharacteristic() { - return cpCharacteristic; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - if (!super.equals(o)) return false; - WecCharacteristicInput that = (WecCharacteristicInput) o; - return Objects.equals(cpCharacteristic, that.cpCharacteristic); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), cpCharacteristic); + public WecCharacteristicInput(UUID uuid, WecTypeInput type, String characteristic) { + super(uuid, type, characteristic); } @Override public String toString() { - return "WecCharacteristicInput{" + "cpCharacteristic='" + cpCharacteristic + '\'' + '}'; + return "WecCharacteristicInput{" + + "type=" + + type + + ", characteristic='" + + characteristic + + '\'' + + '}'; } } 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 52571bf65..1b7c3666b 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -5,6 +5,8 @@ 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.OperatorInput +import edu.ie3.datamodel.models.input.RandomLoadParameters import edu.ie3.datamodel.models.input.connector.LineInput import edu.ie3.datamodel.models.input.connector.SwitchInput import edu.ie3.datamodel.models.input.connector.Transformer2WInput @@ -20,6 +22,8 @@ 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.system.characteristic.EvCharacteristicInput +import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput @@ -54,28 +58,37 @@ class ProcessorProviderTest extends Specification { // currently known processors List knownProcessors = [ - FixedFeedInInput, - PvInput, - WecInput, + /* InputEntity */ + OperatorInput, + RandomLoadParameters, + WecCharacteristicInput, + EvCharacteristicInput, + /* - AssetInput */ + NodeInput, + LineInput, + Transformer2WInput, + Transformer3WInput, + SwitchInput, + MeasurementUnitInput, + EvcsInput, + ThermalBusInput, + /* -- SystemParticipantInput */ ChpInput, BmInput, EvInput, + FixedFeedInInput, + HpInput, LoadInput, + PvInput, StorageInput, - HpInput, - LineInput, - SwitchInput, - Transformer2WInput, - Transformer3WInput, + WecInput, + /* -- ThermalUnitInput */ ThermalHouseInput, CylindricalStorageInput, - ThermalBusInput, - MeasurementUnitInput, - NodeInput, - EvcsInput, - LoadResult, + /* - GraphicInput */ NodeGraphicInput, LineGraphicInput, + /* ResultEntity */ FixedFeedInResult, BmResult, PvResult, @@ -87,6 +100,7 @@ class ProcessorProviderTest extends Specification { Transformer2WResult, Transformer3WResult, LineResult, + LoadResult, SwitchResult, NodeResult, ThermalHouseResult, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 812ac269d..f86781d8a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -19,8 +19,10 @@ 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.system.characteristic.WecCharacteristicInput import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData +import edu.ie3.test.common.TypeTestData import edu.ie3.util.TimeTools import spock.lang.Specification @@ -367,17 +369,17 @@ class InputEntityProcessorTest extends Specification { 9.10 ) Map expected = [ - "uuid": "a5b0f432-27b5-4b3e-b87a-61867b9edd79", - "quarterHour": "4", - "kWd": "1.2", - "kSa": "2.3", - "kSu": "3.4", - "myWd": "4.5", - "mySa": "5.6", - "mySu": "6.7", - "sigmaWd": "7.8", - "sigmaSa": "8.9", - "sigmaSu": "9.1" + "uuid" : "a5b0f432-27b5-4b3e-b87a-61867b9edd79", + "quarterHour" : "4", + "kWd" : "1.2", + "kSa" : "2.3", + "kSu" : "3.4", + "myWd" : "4.5", + "mySa" : "5.6", + "mySu" : "6.7", + "sigmaWd" : "7.8", + "sigmaSa" : "8.9", + "sigmaSu" : "9.1" ] when: @@ -387,4 +389,22 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided WecCharacteristicInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(WecCharacteristicInput.class) + WecCharacteristicInput characteristic = TypeTestData.wecCharacteristic + Map expected = [ + "uuid" : "ab5ed9e4-62b5-4f40-adf1-286bda97569c", + "type" : "a24fc5b9-a26f-44de-96b8-c9f50b665cb3", + "characteristic" : "{(0.0,0.0), (8.0,0.2), (12.0,0.5), (14.0,1.0), (22.0,0.0)}" + ] + + when: + Optional> actual = processor.handleEntity(characteristic) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy new file mode 100644 index 000000000..57b0d7dde --- /dev/null +++ b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy @@ -0,0 +1,33 @@ +package edu.ie3.test.common + +import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput + +import static edu.ie3.util.quantities.PowerSystemUnits.EURO +import static edu.ie3.util.quantities.PowerSystemUnits.PU +import static edu.ie3.util.quantities.PowerSystemUnits.EURO_PER_MEGAWATTHOUR +import static edu.ie3.util.quantities.PowerSystemUnits.MEGAVOLTAMPERE +import static tec.uom.se.unit.Units.SQUARE_METRE +import static tec.uom.se.unit.Units.METRE + +import edu.ie3.datamodel.models.input.system.type.WecTypeInput +import tec.uom.se.quantity.Quantities + +class TypeTestData extends GridTestData { + public static WecTypeInput wecType = new WecTypeInput( + UUID.fromString("a24fc5b9-a26f-44de-96b8-c9f50b665cb3"), + "Test wec type", + Quantities.getQuantity(100d, EURO), + Quantities.getQuantity(101d, EURO_PER_MEGAWATTHOUR), + 0.95, + Quantities.getQuantity(0.9, PU), + Quantities.getQuantity(2500d, MEGAVOLTAMPERE), + Quantities.getQuantity(2000d, SQUARE_METRE), + Quantities.getQuantity(130d, METRE) + ) + + public static WecCharacteristicInput wecCharacteristic = new WecCharacteristicInput( + UUID.fromString("ab5ed9e4-62b5-4f40-adf1-286bda97569c"), + wecType, + "{(0.0,0.0), (8.0,0.2), (12.0,0.5), (14.0,1.0), (22.0,0.0)}" + ) +} \ No newline at end of file From 285c5ca6bafb3bd965c36bd1d626a35193c8feea Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Thu, 26 Mar 2020 16:15:33 +0100 Subject: [PATCH 07/24] Processing WecTypeInput --- .../io/processor/EntityProcessor.java | 4 +++ .../processor/input/InputEntityProcessor.java | 36 +++++++++++++++---- .../io/processor/ProcessorProviderTest.groovy | 3 ++ .../input/InputEntityProcessorTest.groovy | 25 +++++++++++++ .../edu/ie3/test/common/TypeTestData.groovy | 2 +- 5 files changed, 62 insertions(+), 8 deletions(-) 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 33717fb66..33219db58 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -355,6 +355,10 @@ protected Optional handleQuantity(Quantity quantity, String fieldName case "vrated": case "sRated": case "eConsAnnual": + case "hubHeight": + case "rotorArea": + case "capex": + case "opex": normalizedQuantityValue = handleProcessorSpecificQuantity(quantity, fieldName); break; case "soc": diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 1b8081055..d5cf8e6c2 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -14,15 +14,18 @@ import edu.ie3.datamodel.models.input.system.*; import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput; import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput; +import edu.ie3.datamodel.models.input.system.type.WecTypeInput; 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 java.util.*; +import edu.ie3.util.quantities.interfaces.Currency; +import edu.ie3.util.quantities.interfaces.EnergyPrice; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; import javax.measure.Quantity; -import javax.measure.quantity.Dimensionless; -import javax.measure.quantity.ElectricPotential; -import javax.measure.quantity.Energy; -import javax.measure.quantity.Power; +import javax.measure.quantity.*; /** * Processes all {@link InputEntity}s and it's child classes @@ -65,7 +68,9 @@ public class InputEntityProcessor extends EntityProcessor { CylindricalStorageInput.class, /* - GraphicInput */ NodeGraphicInput.class, - LineGraphicInput.class)); + LineGraphicInput.class, + /* - AssetTypeInput */ + WecTypeInput.class)); public InputEntityProcessor(Class registeredClass) { super(registeredClass); @@ -94,9 +99,26 @@ protected Optional handleProcessorSpecificQuantity( normalizedQuantityValue = quantityValToOptionalString(quantity.asType(Energy.class).to(StandardUnits.ENERGY_IN)); break; + case "capex": + normalizedQuantityValue = + quantityValToOptionalString(quantity.asType(Currency.class).to(StandardUnits.CAPEX)); + break; + case "opex": + normalizedQuantityValue = + quantityValToOptionalString( + quantity.asType(EnergyPrice.class).to(StandardUnits.ENERGY_PRICE)); + break; + case "hubHeight": + normalizedQuantityValue = + quantityValToOptionalString(quantity.asType(Length.class).to(StandardUnits.HUB_HEIGHT)); + break; + case "rotorArea": + normalizedQuantityValue = + quantityValToOptionalString(quantity.asType(Area.class).to(StandardUnits.ROTOR_AREA)); + break; default: log.error( - "Cannot process quantity with value '{}' for field with name {} in result entity processing!", + "Cannot process quantity with value '{}' for field with name {} in input entity processing!", quantity, fieldName); break; 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 1b7c3666b..4280221b7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -24,6 +24,7 @@ import edu.ie3.datamodel.models.input.system.StorageInput import edu.ie3.datamodel.models.input.system.WecInput import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput @@ -88,6 +89,8 @@ class ProcessorProviderTest extends Specification { /* - GraphicInput */ NodeGraphicInput, LineGraphicInput, + /* - AssetTypeInput */ + WecTypeInput, /* ResultEntity */ FixedFeedInResult, BmResult, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index f86781d8a..9f1fabf4c 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -20,6 +20,7 @@ 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.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import edu.ie3.test.common.TypeTestData @@ -407,4 +408,28 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided WecTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(WecTypeInput.class) + WecTypeInput type = TypeTestData.wecType + Map expected = [ + "uuid" : "a24fc5b9-a26f-44de-96b8-c9f50b665cb3", + "id" : "Test wec type", + "capex" : "100.0", + "opex" : "101.0", + "cosphiRated" : "0.95", + "etaConv" : "90.0", + "sRated" : "2500.0", + "rotorArea" : "2000.0", + "hubHeight" : "130.0" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy index 57b0d7dde..3fa3fe213 100644 --- a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy @@ -20,7 +20,7 @@ class TypeTestData extends GridTestData { Quantities.getQuantity(101d, EURO_PER_MEGAWATTHOUR), 0.95, Quantities.getQuantity(0.9, PU), - Quantities.getQuantity(2500d, MEGAVOLTAMPERE), + Quantities.getQuantity(2.5d, MEGAVOLTAMPERE), Quantities.getQuantity(2000d, SQUARE_METRE), Quantities.getQuantity(130d, METRE) ) From 37b8b9c1f53a1deba29186cf1e8fe467a50bcc21 Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 09:41:28 +0100 Subject: [PATCH 08/24] Processing Transformer2WTypeInput --- .../io/processor/EntityProcessor.java | 23 +++++++++++--- .../processor/input/InputEntityProcessor.java | 21 ++----------- .../io/processor/ProcessorProviderTest.groovy | 2 ++ .../input/InputEntityProcessorTest.groovy | 31 +++++++++++++++++++ .../edu/ie3/test/common/GridTestData.groovy | 4 +-- 5 files changed, 56 insertions(+), 25 deletions(-) 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 33219db58..72c7fb00d 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -355,10 +355,6 @@ protected Optional handleQuantity(Quantity quantity, String fieldName case "vrated": case "sRated": case "eConsAnnual": - case "hubHeight": - case "rotorArea": - case "capex": - case "opex": normalizedQuantityValue = handleProcessorSpecificQuantity(quantity, fieldName); break; case "soc": @@ -370,6 +366,25 @@ protected Optional handleQuantity(Quantity quantity, String fieldName case "etaConv": case "azimuth": case "height": + case "hubHeight": + case "rotorArea": + case "capex": + case "opex": + case "bM": + case "gM": + case "dPhi": + case "dV": + case "rSc": + case "rScA": + case "rScB": + case "rScC": + case "xSc": + case "xScA": + case "xScB": + case "xScC": + case "vRatedA": + case "vRatedB": + case "vRatedC": normalizedQuantityValue = quantityValToOptionalString(quantity); break; case "iAMag": diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index d5cf8e6c2..e26fd5c67 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.*; import edu.ie3.datamodel.models.input.connector.*; +import edu.ie3.datamodel.models.input.connector.type.Transformer2WTypeInput; import edu.ie3.datamodel.models.input.graphics.LineGraphicInput; import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput; import edu.ie3.datamodel.models.input.system.*; @@ -18,8 +19,6 @@ 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.util.quantities.interfaces.Currency; -import edu.ie3.util.quantities.interfaces.EnergyPrice; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -70,6 +69,7 @@ public class InputEntityProcessor extends EntityProcessor { NodeGraphicInput.class, LineGraphicInput.class, /* - AssetTypeInput */ + Transformer2WTypeInput.class, WecTypeInput.class)); public InputEntityProcessor(Class registeredClass) { @@ -99,23 +99,6 @@ protected Optional handleProcessorSpecificQuantity( normalizedQuantityValue = quantityValToOptionalString(quantity.asType(Energy.class).to(StandardUnits.ENERGY_IN)); break; - case "capex": - normalizedQuantityValue = - quantityValToOptionalString(quantity.asType(Currency.class).to(StandardUnits.CAPEX)); - break; - case "opex": - normalizedQuantityValue = - quantityValToOptionalString( - quantity.asType(EnergyPrice.class).to(StandardUnits.ENERGY_PRICE)); - break; - case "hubHeight": - normalizedQuantityValue = - quantityValToOptionalString(quantity.asType(Length.class).to(StandardUnits.HUB_HEIGHT)); - break; - case "rotorArea": - normalizedQuantityValue = - quantityValToOptionalString(quantity.asType(Area.class).to(StandardUnits.ROTOR_AREA)); - break; default: log.error( "Cannot process quantity with value '{}' for field with name {} in input entity processing!", 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 4280221b7..fad7419e6 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -11,6 +11,7 @@ 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.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput import edu.ie3.datamodel.models.input.system.BmInput @@ -90,6 +91,7 @@ class ProcessorProviderTest extends Specification { NodeGraphicInput, LineGraphicInput, /* - AssetTypeInput */ + Transformer2WTypeInput, WecTypeInput, /* ResultEntity */ FixedFeedInResult, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 9f1fabf4c..bbdb59e97 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -8,6 +8,7 @@ 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.connector.type.Transformer2WTypeInput import edu.ie3.datamodel.models.input.graphics.LineGraphicInput import edu.ie3.datamodel.models.input.graphics.NodeGraphicInput import edu.ie3.datamodel.models.input.system.BmInput @@ -432,4 +433,34 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided Transformer2WTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(Transformer2WTypeInput.class) + Transformer2WTypeInput type = GridTestData.transformerTypeBtoD + Map expected = [ + "uuid" : "202069a7-bcf8-422c-837c-273575220c8a", + "id" : "HS-MS_1", + "rSc" : "45.375", + "xSc" : "102.759", + "gM" : "0.0", + "bM" : "0.0", + "sRated" : "20000.0", + "vRatedA" : "110.0", + "vRatedB" : "20.0", + "dV" : "1.5", + "dPhi" : "0.0", + "tapSide" : "false", + "tapNeutr" : "0", + "tapMax" : "10", + "tapMin" : "-10" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy index 9036e29fc..4e2e4939e 100644 --- a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy @@ -39,8 +39,8 @@ class GridTestData { private static final GeoJsonReader geoJsonReader = new GeoJsonReader() - private static final Transformer2WTypeInput transformerTypeBtoD = new Transformer2WTypeInput( - UUID.randomUUID(), + public static final Transformer2WTypeInput transformerTypeBtoD = new Transformer2WTypeInput( + UUID.fromString("202069a7-bcf8-422c-837c-273575220c8a"), "HS-MS_1", Quantities.getQuantity(45.375, OHM), Quantities.getQuantity(102.759, OHM), From e59200f934c84d69904be725ec5deb3d0d6e1b4c Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 10:32:17 +0100 Subject: [PATCH 09/24] Refactoring handling of quantities --- .../io/factory/input/NodeInputFactory.java | 10 +- .../io/processor/EntityProcessor.java | 138 ++++++++---------- .../processor/input/InputEntityProcessor.java | 19 +-- .../models/input/connector/LineInput.java | 3 +- .../input/InputEntityProcessorTest.groovy | 4 +- 5 files changed, 75 insertions(+), 99 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java index eabe92493..7e9557c42 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java @@ -17,10 +17,10 @@ public class NodeInputFactory extends AssetInputEntityFactory { private static final String V_TARGET = "vtarget"; - public static final String V_RATED = "vrated"; + public static final String V_RATED = "vRated"; private static final String SLACK = "slack"; private static final String GEO_POSITION = "geoposition"; - public static final String VOLT_LVL = "voltlvl"; + public static final String VOLT_LVL = "voltLvl"; private static final String SUBNET = "subnet"; public NodeInputFactory() { @@ -29,7 +29,9 @@ public NodeInputFactory() { @Override protected String[] getAdditionalFields() { - return new String[] {V_TARGET, V_RATED, SLACK, GEO_POSITION, VOLT_LVL, SUBNET}; + return new String[] { + V_TARGET, V_RATED.toLowerCase(), SLACK, GEO_POSITION, VOLT_LVL.toLowerCase() , SUBNET + }; } @Override @@ -43,7 +45,7 @@ protected NodeInput buildModel( data.getQuantity(V_TARGET, StandardUnits.TARGET_VOLTAGE_MAGNITUDE); final boolean slack = data.getBoolean(SLACK); final Point geoPosition = data.getPoint(GEO_POSITION).orElse(null); - final VoltageLevel voltLvl = data.getVoltageLvl(VOLT_LVL, V_RATED); + final VoltageLevel voltLvl = data.getVoltageLvl(VOLT_LVL.toLowerCase(), V_RATED.toLowerCase() ); final int subnet = data.getInt(SUBNET); return new NodeInput( uuid, operationTime, operatorInput, id, vTarget, slack, geoPosition, voltLvl, subnet); 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 72c7fb00d..236629eea 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -15,7 +15,6 @@ import edu.ie3.datamodel.models.input.system.StorageStrategy; import edu.ie3.datamodel.models.voltagelevels.VoltageLevel; import edu.ie3.util.TimeTools; -import edu.ie3.util.quantities.interfaces.EnergyPrice; import java.beans.Introspector; import java.lang.reflect.Method; import java.time.ZoneId; @@ -53,6 +52,53 @@ public abstract class EntityProcessor { private static final String VOLT_LVL = NodeInputFactory.VOLT_LVL; private static final String V_RATED = NodeInputFactory.V_RATED; + /* Quantities associated to those fields can be treated equally for all processors / models (e.g. input and result) */ + private static final Set commonQuantityFieldNames = + Collections.unmodifiableSet( + new HashSet<>( + Arrays.asList( + "azimuth", + "bM", + "capex", + "dPhi", + "dV", + "etaConv", + "feedInTariff", + "fillLevel", + "gM", + "height", + "hubHeight", + "iAAng", + "iAMag", + "iBAng", + "iBMag", + "iCAng", + "iCMag", + "length", + "opex", + "qDot", + "rotorArea", + "rSc", + "rScA", + "rScB", + "rScC", + "soc", + "sRated", + "vAng", + "vMag", + "vRated", + "vRatedA", + "vRatedB", + "vRatedC", + "vTarget", + "xSc", + "xScA", + "xScB", + "xScC"))); + /* Quantities associated to those fields must be treated differently (e.g. input and result) */ + private static final Set specificQuantityFieldNames = + Collections.unmodifiableSet(new HashSet<>(Arrays.asList("eConsAnnual", "energy", "q", "p"))); + private static final GeoJsonWriter geoJsonWriter = new GeoJsonWriter(); /** Field name of {@link UniqueEntity} uuid */ @@ -344,87 +390,17 @@ protected String processVoltageLevel(VoltageLevel voltageLevel, String fieldName * or empty if an error occurred during processing */ protected Optional handleQuantity(Quantity quantity, String fieldName) { - - Optional normalizedQuantityValue = Optional.empty(); - - switch (fieldName) { - case "p": - case "q": - case "energy": - case "vTarget": - case "vrated": - case "sRated": - case "eConsAnnual": - normalizedQuantityValue = handleProcessorSpecificQuantity(quantity, fieldName); - break; - case "soc": - case "vAng": - case "vMag": - case "iAAng": - case "iBAng": - case "iCAng": - case "etaConv": - case "azimuth": - case "height": - case "hubHeight": - case "rotorArea": - case "capex": - case "opex": - case "bM": - case "gM": - case "dPhi": - case "dV": - case "rSc": - case "rScA": - case "rScB": - case "rScC": - case "xSc": - case "xScA": - case "xScB": - case "xScC": - case "vRatedA": - case "vRatedB": - case "vRatedC": - normalizedQuantityValue = quantityValToOptionalString(quantity); - break; - case "iAMag": - case "iBMag": - case "iCMag": - normalizedQuantityValue = - quantityValToOptionalString( - quantity - .asType(ElectricCurrent.class) - .to(StandardUnits.ELECTRIC_CURRENT_MAGNITUDE)); - break; - case "qDot": - normalizedQuantityValue = - quantityValToOptionalString( - quantity.asType(Power.class).to(StandardUnits.Q_DOT_RESULT)); - break; - case "fillLevel": - normalizedQuantityValue = - quantityValToOptionalString( - quantity.asType(Dimensionless.class).to(StandardUnits.FILL_LEVEL)); - break; - case "length": - normalizedQuantityValue = - quantityValToOptionalString( - quantity.asType(Length.class).to(StandardUnits.LINE_LENGTH)); - break; - - case "feedInTariff": - normalizedQuantityValue = - quantityValToOptionalString( - quantity.asType(EnergyPrice.class).to(StandardUnits.ENERGY_PRICE)); - break; - default: - log.error( - "Cannot process quantity with value '{}' for field with name {} in model processing!", - quantity, - fieldName); - break; + if (commonQuantityFieldNames.contains(fieldName)) { + return quantityValToOptionalString(quantity); + } else if (specificQuantityFieldNames.contains(fieldName)) { + return handleProcessorSpecificQuantity(quantity, fieldName); + } else { + log.error( + "Cannot process quantity with value '{}' for field with name {} in model processing!", + quantity, + fieldName); + return Optional.empty(); } - return normalizedQuantityValue; } /** diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index e26fd5c67..25631d05c 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -81,23 +81,20 @@ protected Optional handleProcessorSpecificQuantity( Quantity quantity, String fieldName) { Optional normalizedQuantityValue = Optional.empty(); switch (fieldName) { - case "vTarget": + case "energy": + case "eConsAnnual": normalizedQuantityValue = - quantityValToOptionalString( - quantity.asType(Dimensionless.class).to(StandardUnits.TARGET_VOLTAGE_MAGNITUDE)); + quantityValToOptionalString(quantity.asType(Energy.class).to(StandardUnits.ENERGY_IN)); break; - case "vrated": + case "q": normalizedQuantityValue = quantityValToOptionalString( - quantity.asType(ElectricPotential.class).to(StandardUnits.RATED_VOLTAGE_MAGNITUDE)); - break; - case "sRated": - normalizedQuantityValue = - quantityValToOptionalString(quantity.asType(Power.class).to(StandardUnits.S_RATED)); + quantity.asType(Power.class).to(StandardUnits.REACTIVE_POWER_IN)); break; - case "eConsAnnual": + case "p": normalizedQuantityValue = - quantityValToOptionalString(quantity.asType(Energy.class).to(StandardUnits.ENERGY_IN)); + quantityValToOptionalString( + quantity.asType(Power.class).to(StandardUnits.ACTIVE_POWER_IN)); break; default: log.error( diff --git a/src/main/java/edu/ie3/datamodel/models/input/connector/LineInput.java b/src/main/java/edu/ie3/datamodel/models/input/connector/LineInput.java index b3c5608b9..1b6715150 100644 --- a/src/main/java/edu/ie3/datamodel/models/input/connector/LineInput.java +++ b/src/main/java/edu/ie3/datamodel/models/input/connector/LineInput.java @@ -6,6 +6,7 @@ package edu.ie3.datamodel.models.input.connector; import edu.ie3.datamodel.models.OperationTime; +import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.NodeInput; import edu.ie3.datamodel.models.input.OperatorInput; import edu.ie3.datamodel.models.input.connector.type.LineTypeInput; @@ -60,7 +61,7 @@ public LineInput( Optional olmCharacteristic) { super(uuid, operationTime, operator, id, nodeA, nodeB, parallelDevices); this.type = type; - this.length = length; + this.length = length.to(StandardUnits.LINE_LENGTH); this.geoPosition = geoPosition; this.olmCharacteristic = olmCharacteristic; } diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index bbdb59e97..32f48f6fc 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -57,8 +57,8 @@ class InputEntityProcessorTest extends Specification { "slack" : "true", "subnet" : "1", "vTarget" : "1.0", - "voltlvl" : "Höchstspannung (380 kV)", - "vrated" : "380.0" + "voltLvl" : "Höchstspannung (380 kV)", + "vRated" : "380.0" ] when: "the entity is passed to the processor" From 76e3550955a2393e92323317d014805c7fb2bb5f Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 10:54:08 +0100 Subject: [PATCH 10/24] Processing Transformer3WTypeInput --- .../io/factory/input/NodeInputFactory.java | 4 +- .../io/processor/EntityProcessor.java | 3 ++ .../processor/input/InputEntityProcessor.java | 2 + .../io/processor/ProcessorProviderTest.groovy | 2 + .../input/InputEntityProcessorTest.groovy | 37 +++++++++++++++++++ .../edu/ie3/test/common/GridTestData.groovy | 2 +- 6 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java index 7e9557c42..6bdedd494 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/input/NodeInputFactory.java @@ -30,7 +30,7 @@ public NodeInputFactory() { @Override protected String[] getAdditionalFields() { return new String[] { - V_TARGET, V_RATED.toLowerCase(), SLACK, GEO_POSITION, VOLT_LVL.toLowerCase() , SUBNET + V_TARGET, V_RATED.toLowerCase(), SLACK, GEO_POSITION, VOLT_LVL.toLowerCase(), SUBNET }; } @@ -45,7 +45,7 @@ protected NodeInput buildModel( data.getQuantity(V_TARGET, StandardUnits.TARGET_VOLTAGE_MAGNITUDE); final boolean slack = data.getBoolean(SLACK); final Point geoPosition = data.getPoint(GEO_POSITION).orElse(null); - final VoltageLevel voltLvl = data.getVoltageLvl(VOLT_LVL.toLowerCase(), V_RATED.toLowerCase() ); + final VoltageLevel voltLvl = data.getVoltageLvl(VOLT_LVL.toLowerCase(), V_RATED.toLowerCase()); final int subnet = data.getInt(SUBNET); return new NodeInput( uuid, operationTime, operatorInput, id, vTarget, slack, geoPosition, voltLvl, subnet); 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 236629eea..e8f38a9bf 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -84,6 +84,9 @@ public abstract class EntityProcessor { "rScC", "soc", "sRated", + "sRatedA", + "sRatedB", + "sRatedC", "vAng", "vMag", "vRated", diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 25631d05c..b6725b06e 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -10,6 +10,7 @@ import edu.ie3.datamodel.models.input.*; import edu.ie3.datamodel.models.input.connector.*; 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.input.system.*; @@ -70,6 +71,7 @@ public class InputEntityProcessor extends EntityProcessor { LineGraphicInput.class, /* - AssetTypeInput */ Transformer2WTypeInput.class, + Transformer3WTypeInput.class, WecTypeInput.class)); public InputEntityProcessor(Class registeredClass) { 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 fad7419e6..0bafaf4c9 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -12,6 +12,7 @@ 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.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.input.system.BmInput @@ -92,6 +93,7 @@ class ProcessorProviderTest extends Specification { LineGraphicInput, /* - AssetTypeInput */ Transformer2WTypeInput, + Transformer3WTypeInput, WecTypeInput, /* ResultEntity */ FixedFeedInResult, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 32f48f6fc..645d3d7eb 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -9,6 +9,7 @@ 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.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.input.system.BmInput @@ -463,4 +464,40 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided Transformer3WTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(Transformer3WTypeInput.class) + Transformer3WTypeInput type = GridTestData.transformerTypeAtoBtoC + Map expected = [ + "uuid" : "5b0ee546-21fb-4a7f-a801-5dbd3d7bb356", + "id" : "HöS-HS-MS_1", + "sRatedA" : "120000.0", + "sRatedB" : "60000.0", + "sRatedC" : "40000.0", + "vRatedA" : "380.0", + "vRatedB" : "110.0", + "vRatedC" : "20.0", + "rScA" : "0.3", + "rScB" : "0.025", + "rScC" : "8.0E-4", + "xScA" : "1.0", + "xScB" : "0.08", + "xScC" : "0.003", + "gM" : "40000.0", + "bM" : "1000.0", + "dV" : "1.5", + "dPhi" : "0.0", + "tapNeutr" : "0", + "tapMin" : "-10", + "tapMax" : "10" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy index 4e2e4939e..8f571de3b 100644 --- a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy @@ -108,7 +108,7 @@ class GridTestData { 10 ) - private static final Transformer3WTypeInput transformerTypeAtoBtoC = new Transformer3WTypeInput( + public static final Transformer3WTypeInput transformerTypeAtoBtoC = new Transformer3WTypeInput( UUID.fromString("5b0ee546-21fb-4a7f-a801-5dbd3d7bb356"), "HöS-HS-MS_1", Quantities.getQuantity(120000d, KILOVOLTAMPERE), From 5ff98f57bb737651974da98c180954dc4f844fad Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 11:12:45 +0100 Subject: [PATCH 11/24] Processing LineTypeInput --- .../io/processor/EntityProcessor.java | 5 ++++ .../processor/input/InputEntityProcessor.java | 2 ++ .../io/processor/ProcessorProviderTest.groovy | 2 ++ .../input/InputEntityProcessorTest.groovy | 28 +++++++++++++++++++ .../edu/ie3/test/common/GridTestData.groovy | 2 +- 5 files changed, 38 insertions(+), 1 deletion(-) 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 e8f38a9bf..694ee4491 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -58,6 +58,7 @@ public abstract class EntityProcessor { new HashSet<>( Arrays.asList( "azimuth", + "b", "bM", "capex", "dPhi", @@ -65,6 +66,7 @@ public abstract class EntityProcessor { "etaConv", "feedInTariff", "fillLevel", + "g", "gM", "height", "hubHeight", @@ -74,10 +76,12 @@ public abstract class EntityProcessor { "iBMag", "iCAng", "iCMag", + "iMax", "length", "opex", "qDot", "rotorArea", + "r", "rSc", "rScA", "rScB", @@ -94,6 +98,7 @@ public abstract class EntityProcessor { "vRatedB", "vRatedC", "vTarget", + "x", "xSc", "xScA", "xScB", diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index b6725b06e..0031e19e6 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -9,6 +9,7 @@ import edu.ie3.datamodel.models.StandardUnits; import edu.ie3.datamodel.models.input.*; import edu.ie3.datamodel.models.input.connector.*; +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; @@ -70,6 +71,7 @@ public class InputEntityProcessor extends EntityProcessor { NodeGraphicInput.class, LineGraphicInput.class, /* - AssetTypeInput */ + LineTypeInput.class, Transformer2WTypeInput.class, Transformer3WTypeInput.class, WecTypeInput.class)); 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 0bafaf4c9..2dfa849d5 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -11,6 +11,7 @@ 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.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 @@ -92,6 +93,7 @@ class ProcessorProviderTest extends Specification { NodeGraphicInput, LineGraphicInput, /* - AssetTypeInput */ + LineTypeInput, Transformer2WTypeInput, Transformer3WTypeInput, WecTypeInput, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 645d3d7eb..d2a9924db 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -8,6 +8,7 @@ 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.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 @@ -27,8 +28,12 @@ import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import edu.ie3.test.common.TypeTestData import edu.ie3.util.TimeTools +import edu.ie3.util.quantities.interfaces.SpecificConductance +import edu.ie3.util.quantities.interfaces.SpecificResistance import spock.lang.Specification +import javax.measure.quantity.ElectricCurrent +import javax.measure.quantity.ElectricPotential import java.time.ZoneId import java.time.ZonedDateTime @@ -500,4 +505,27 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided LineTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(LineTypeInput.class) + LineTypeInput type = GridTestData.lineTypeInputCtoD + Map expected = [ + "uuid" : "3bed3eb3-9790-4874-89b5-a5434d408088", + "id" : "lineType_AtoB", + "b" : "0.00322", + "g" : "0.0", + "r" : "0.437", + "x" : "0.356", + "iMax" : "300.0", + "vRated": "20.0" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy index 8f571de3b..3cf89d896 100644 --- a/src/test/groovy/edu/ie3/test/common/GridTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/GridTestData.groovy @@ -303,7 +303,7 @@ class GridTestData { true ) - private static final LineTypeInput lineTypeInputCtoD = new LineTypeInput( + public static final LineTypeInput lineTypeInputCtoD = new LineTypeInput( UUID.fromString("3bed3eb3-9790-4874-89b5-a5434d408088"), "lineType_AtoB", Quantities.getQuantity(0.00000000322, PowerSystemUnits.SIEMENS_PER_KILOMETRE), From 6aa5e6919815b5e69caf589a3f22bbce9c0504f0 Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 11:59:31 +0100 Subject: [PATCH 12/24] Processing EvTypeInput --- .../io/processor/EntityProcessor.java | 4 ++- .../processor/input/InputEntityProcessor.java | 3 ++ .../result/ResultEntityProcessor.java | 10 ++++--- .../io/processor/ProcessorProviderTest.groovy | 2 ++ .../input/InputEntityProcessorTest.groovy | 29 +++++++++++++++++++ .../edu/ie3/test/common/TypeTestData.groovy | 15 ++++++++++ 6 files changed, 58 insertions(+), 5 deletions(-) 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 694ee4491..46d1e2f3a 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -63,6 +63,7 @@ public abstract class EntityProcessor { "capex", "dPhi", "dV", + "eCons", "etaConv", "feedInTariff", "fillLevel", @@ -105,7 +106,8 @@ public abstract class EntityProcessor { "xScC"))); /* Quantities associated to those fields must be treated differently (e.g. input and result) */ private static final Set specificQuantityFieldNames = - Collections.unmodifiableSet(new HashSet<>(Arrays.asList("eConsAnnual", "energy", "q", "p"))); + Collections.unmodifiableSet( + new HashSet<>(Arrays.asList("eConsAnnual", "energy", "eStorage", "q", "p"))); private static final GeoJsonWriter geoJsonWriter = new GeoJsonWriter(); diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 0031e19e6..dca0abae8 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -17,6 +17,7 @@ import edu.ie3.datamodel.models.input.system.*; import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput; import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput; +import edu.ie3.datamodel.models.input.system.type.EvTypeInput; import edu.ie3.datamodel.models.input.system.type.WecTypeInput; import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; @@ -71,6 +72,7 @@ public class InputEntityProcessor extends EntityProcessor { NodeGraphicInput.class, LineGraphicInput.class, /* - AssetTypeInput */ + EvTypeInput.class, LineTypeInput.class, Transformer2WTypeInput.class, Transformer3WTypeInput.class, @@ -87,6 +89,7 @@ protected Optional handleProcessorSpecificQuantity( switch (fieldName) { case "energy": case "eConsAnnual": + case "eStorage": normalizedQuantityValue = quantityValToOptionalString(quantity.asType(Energy.class).to(StandardUnits.ENERGY_IN)); break; diff --git a/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java index 691a34976..a39cb07a3 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java @@ -63,20 +63,22 @@ protected Optional handleProcessorSpecificQuantity( Quantity quantity, String fieldName) { Optional normalizedQuantityValue = Optional.empty(); switch (fieldName) { - case "p": + case "energy": + case "eConsAnnual": + case "eStorage": normalizedQuantityValue = quantityValToOptionalString( - quantity.asType(Power.class).to(StandardUnits.ACTIVE_POWER_RESULT)); + quantity.asType(Energy.class).to(StandardUnits.ENERGY_RESULT)); break; case "q": normalizedQuantityValue = quantityValToOptionalString( quantity.asType(Power.class).to(StandardUnits.REACTIVE_POWER_RESULT)); break; - case "energy": + case "p": normalizedQuantityValue = quantityValToOptionalString( - quantity.asType(Energy.class).to(StandardUnits.ENERGY_RESULT)); + quantity.asType(Power.class).to(StandardUnits.ACTIVE_POWER_RESULT)); break; default: log.error( 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 2dfa849d5..7a99f6522 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -27,6 +27,7 @@ import edu.ie3.datamodel.models.input.system.StorageInput import edu.ie3.datamodel.models.input.system.WecInput import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput @@ -93,6 +94,7 @@ class ProcessorProviderTest extends Specification { NodeGraphicInput, LineGraphicInput, /* - AssetTypeInput */ + EvTypeInput, LineTypeInput, Transformer2WTypeInput, Transformer3WTypeInput, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index d2a9924db..6fe7423b3 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -23,17 +23,23 @@ 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.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import edu.ie3.test.common.TypeTestData import edu.ie3.util.TimeTools +import edu.ie3.util.quantities.interfaces.Currency +import edu.ie3.util.quantities.interfaces.EnergyPrice import edu.ie3.util.quantities.interfaces.SpecificConductance +import edu.ie3.util.quantities.interfaces.SpecificEnergy import edu.ie3.util.quantities.interfaces.SpecificResistance import spock.lang.Specification import javax.measure.quantity.ElectricCurrent import javax.measure.quantity.ElectricPotential +import javax.measure.quantity.Energy +import javax.measure.quantity.Power import java.time.ZoneId import java.time.ZonedDateTime @@ -528,4 +534,27 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided EvTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(EvTypeInput.class) + EvTypeInput type = TypeTestData.evType + Map expected = [ + "uuid" : "66b0db5d-b2fb-41d0-a9bc-990d6b6a36db", + "id" : "ev type", + "capex" : "100.0", + "opex" : "101.0", + "eStorage" : "100.0", + "eCons" : "23.0", + "sRated" : "22.0", + "cosphiRated" : "0.9" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy index 3fa3fe213..d9e09405b 100644 --- a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy @@ -1,8 +1,12 @@ package edu.ie3.test.common import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.EvTypeInput import static edu.ie3.util.quantities.PowerSystemUnits.EURO +import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATT +import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR +import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR_PER_KILOMETRE import static edu.ie3.util.quantities.PowerSystemUnits.PU import static edu.ie3.util.quantities.PowerSystemUnits.EURO_PER_MEGAWATTHOUR import static edu.ie3.util.quantities.PowerSystemUnits.MEGAVOLTAMPERE @@ -13,6 +17,17 @@ import edu.ie3.datamodel.models.input.system.type.WecTypeInput import tec.uom.se.quantity.Quantities class TypeTestData extends GridTestData { + public static EvTypeInput evType = new EvTypeInput( + UUID.fromString("66b0db5d-b2fb-41d0-a9bc-990d6b6a36db"), + "ev type", + Quantities.getQuantity(100d, EURO), + Quantities.getQuantity(101d, EURO_PER_MEGAWATTHOUR), + Quantities.getQuantity(100d, KILOWATTHOUR), + Quantities.getQuantity(23d, KILOWATTHOUR_PER_KILOMETRE), + Quantities.getQuantity(22d, KILOWATT), + 0.9 + ) + public static WecTypeInput wecType = new WecTypeInput( UUID.fromString("a24fc5b9-a26f-44de-96b8-c9f50b665cb3"), "Test wec type", From 763caf296dddb0da178fcc1b8b1e53d3cf2e982f Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 12:23:29 +0100 Subject: [PATCH 13/24] Processing ChpTypeInput --- .../io/processor/EntityProcessor.java | 5 +++- .../processor/input/InputEntityProcessor.java | 4 +++ .../result/ResultEntityProcessor.java | 2 ++ .../io/processor/ProcessorProviderTest.groovy | 2 ++ .../input/InputEntityProcessorTest.groovy | 27 +++++++++++++++++++ .../edu/ie3/test/common/TypeTestData.groovy | 15 +++++++++++ 6 files changed, 54 insertions(+), 1 deletion(-) 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 46d1e2f3a..8d01568eb 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -65,6 +65,8 @@ public abstract class EntityProcessor { "dV", "eCons", "etaConv", + "etaEl", + "etaThermal", "feedInTariff", "fillLevel", "g", @@ -107,7 +109,8 @@ public abstract class EntityProcessor { /* Quantities associated to those fields must be treated differently (e.g. input and result) */ private static final Set specificQuantityFieldNames = Collections.unmodifiableSet( - new HashSet<>(Arrays.asList("eConsAnnual", "energy", "eStorage", "q", "p"))); + new HashSet<>( + Arrays.asList("eConsAnnual", "energy", "eStorage", "q", "p", "pThermal", "pOwn"))); private static final GeoJsonWriter geoJsonWriter = new GeoJsonWriter(); diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index dca0abae8..5eba5410f 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -17,6 +17,7 @@ import edu.ie3.datamodel.models.input.system.*; import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput; import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput; +import edu.ie3.datamodel.models.input.system.type.ChpTypeInput; import edu.ie3.datamodel.models.input.system.type.EvTypeInput; import edu.ie3.datamodel.models.input.system.type.WecTypeInput; import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput; @@ -73,6 +74,7 @@ public class InputEntityProcessor extends EntityProcessor { LineGraphicInput.class, /* - AssetTypeInput */ EvTypeInput.class, + ChpTypeInput.class, LineTypeInput.class, Transformer2WTypeInput.class, Transformer3WTypeInput.class, @@ -99,6 +101,8 @@ protected Optional handleProcessorSpecificQuantity( quantity.asType(Power.class).to(StandardUnits.REACTIVE_POWER_IN)); break; case "p": + case "pThermal": + case "pOwn": normalizedQuantityValue = quantityValToOptionalString( quantity.asType(Power.class).to(StandardUnits.ACTIVE_POWER_IN)); diff --git a/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java index a39cb07a3..17558e10c 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java @@ -76,6 +76,8 @@ protected Optional handleProcessorSpecificQuantity( quantity.asType(Power.class).to(StandardUnits.REACTIVE_POWER_RESULT)); break; case "p": + case "pThermal": + case "pOwn": normalizedQuantityValue = quantityValToOptionalString( quantity.asType(Power.class).to(StandardUnits.ACTIVE_POWER_RESULT)); 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 7a99f6522..80f0dd3b7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -27,6 +27,7 @@ import edu.ie3.datamodel.models.input.system.StorageInput import edu.ie3.datamodel.models.input.system.WecInput import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput @@ -95,6 +96,7 @@ class ProcessorProviderTest extends Specification { LineGraphicInput, /* - AssetTypeInput */ EvTypeInput, + ChpTypeInput, LineTypeInput, Transformer2WTypeInput, Transformer3WTypeInput, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 6fe7423b3..ad6e2da39 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -23,6 +23,7 @@ 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.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.test.common.GridTestData @@ -36,6 +37,7 @@ import edu.ie3.util.quantities.interfaces.SpecificEnergy import edu.ie3.util.quantities.interfaces.SpecificResistance import spock.lang.Specification +import javax.measure.quantity.Dimensionless import javax.measure.quantity.ElectricCurrent import javax.measure.quantity.ElectricPotential import javax.measure.quantity.Energy @@ -557,4 +559,29 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided ChpTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(ChpTypeInput.class) + ChpTypeInput type = TypeTestData.chpType + Map expected = [ + "uuid" : "1c027d3e-5409-4e52-a0e2-f8a23d5d0af0", + "id" : "chp type", + "capex" : "100.0", + "opex" : "101.0", + "etaEl" : "95.0", + "etaThermal" : "90.0", + "sRated" : "58.0", + "cosphiRated" : "0.98", + "pThermal" : "49.59", + "pOwn" : "5.0" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy index d9e09405b..a14fbd15e 100644 --- a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy @@ -1,9 +1,11 @@ package edu.ie3.test.common import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import static edu.ie3.util.quantities.PowerSystemUnits.EURO +import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATT import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR_PER_KILOMETRE @@ -28,6 +30,19 @@ class TypeTestData extends GridTestData { 0.9 ) + public static ChpTypeInput chpType = new ChpTypeInput( + UUID.fromString("1c027d3e-5409-4e52-a0e2-f8a23d5d0af0"), + "chp type", + Quantities.getQuantity(100d, EURO), + Quantities.getQuantity(101d, EURO_PER_MEGAWATTHOUR), + Quantities.getQuantity(0.95, PU), + Quantities.getQuantity(0.9, PU), + Quantities.getQuantity(58d, KILOVOLTAMPERE), + 0.98, + Quantities.getQuantity(49.59, KILOWATT), + Quantities.getQuantity(5d, KILOWATT) + ) + public static WecTypeInput wecType = new WecTypeInput( UUID.fromString("a24fc5b9-a26f-44de-96b8-c9f50b665cb3"), "Test wec type", From 352149721d863f5aef0501e6f4b41390d6b39205 Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 12:32:44 +0100 Subject: [PATCH 14/24] Processing HpTypeInput --- .../processor/input/InputEntityProcessor.java | 2 ++ .../io/processor/ProcessorProviderTest.groovy | 2 ++ .../input/InputEntityProcessorTest.groovy | 36 ++++++++++++------- .../edu/ie3/test/common/TypeTestData.groovy | 11 ++++++ 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 5eba5410f..22dbb0a72 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -19,6 +19,7 @@ import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput; import edu.ie3.datamodel.models.input.system.type.ChpTypeInput; import edu.ie3.datamodel.models.input.system.type.EvTypeInput; +import edu.ie3.datamodel.models.input.system.type.HpTypeInput; import edu.ie3.datamodel.models.input.system.type.WecTypeInput; import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; @@ -75,6 +76,7 @@ public class InputEntityProcessor extends EntityProcessor { /* - AssetTypeInput */ EvTypeInput.class, ChpTypeInput.class, + HpTypeInput.class, LineTypeInput.class, Transformer2WTypeInput.class, Transformer3WTypeInput.class, 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 80f0dd3b7..ef7953f13 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -29,6 +29,7 @@ import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInpu import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput +import edu.ie3.datamodel.models.input.system.type.HpTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput @@ -97,6 +98,7 @@ class ProcessorProviderTest extends Specification { /* - AssetTypeInput */ EvTypeInput, ChpTypeInput, + HpTypeInput, LineTypeInput, Transformer2WTypeInput, Transformer3WTypeInput, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index ad6e2da39..936065373 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -25,29 +25,19 @@ import edu.ie3.datamodel.models.input.system.WecInput import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput +import edu.ie3.datamodel.models.input.system.type.HpTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import edu.ie3.test.common.TypeTestData import edu.ie3.util.TimeTools -import edu.ie3.util.quantities.interfaces.Currency -import edu.ie3.util.quantities.interfaces.EnergyPrice -import edu.ie3.util.quantities.interfaces.SpecificConductance -import edu.ie3.util.quantities.interfaces.SpecificEnergy -import edu.ie3.util.quantities.interfaces.SpecificResistance import spock.lang.Specification -import javax.measure.quantity.Dimensionless -import javax.measure.quantity.ElectricCurrent -import javax.measure.quantity.ElectricPotential -import javax.measure.quantity.Energy -import javax.measure.quantity.Power import java.time.ZoneId import java.time.ZonedDateTime /** - * Testing the function of processors - * + * "processors": "", * * @version 0.1 * @since 24.03.20 */ @@ -584,4 +574,26 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided HpTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(HpTypeInput.class) + HpTypeInput type = TypeTestData.hpType + Map expected = [ + "uuid" : "1059ef51-9e17-4c13-928c-7c1c716d4ee6", + "id" : "hp type", + "capex" : "100.0", + "opex" : "101.0", + "sRated" : "45.0", + "cosphiRated" : "0.975", + "pThermal" : "26.3" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy index a14fbd15e..5743c7cea 100644 --- a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy @@ -3,6 +3,7 @@ package edu.ie3.test.common import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput +import edu.ie3.datamodel.models.input.system.type.HpTypeInput import static edu.ie3.util.quantities.PowerSystemUnits.EURO import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE @@ -43,6 +44,16 @@ class TypeTestData extends GridTestData { Quantities.getQuantity(5d, KILOWATT) ) + public static HpTypeInput hpType = new HpTypeInput( + UUID.fromString("1059ef51-9e17-4c13-928c-7c1c716d4ee6"), + "hp type", + Quantities.getQuantity(100d, EURO), + Quantities.getQuantity(101d, EURO_PER_MEGAWATTHOUR), + Quantities.getQuantity(45d, KILOWATT), + 0.975, + Quantities.getQuantity(26.3, KILOWATT) + ) + public static WecTypeInput wecType = new WecTypeInput( UUID.fromString("a24fc5b9-a26f-44de-96b8-c9f50b665cb3"), "Test wec type", From b4996a31f7f606856848a57e7abf641d53f63b9c Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 12:41:39 +0100 Subject: [PATCH 15/24] Processing BmTypeInput --- .../io/processor/EntityProcessor.java | 1 + .../processor/input/InputEntityProcessor.java | 8 ++--- .../io/processor/ProcessorProviderTest.groovy | 6 ++-- .../input/InputEntityProcessorTest.groovy | 29 +++++++++++++++++++ .../edu/ie3/test/common/TypeTestData.groovy | 27 ++++++++++++----- 5 files changed, 57 insertions(+), 14 deletions(-) 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 8d01568eb..67336f206 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -81,6 +81,7 @@ public abstract class EntityProcessor { "iCMag", "iMax", "length", + "loadGradient", "opex", "qDot", "rotorArea", diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 22dbb0a72..8284c988f 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -17,10 +17,7 @@ import edu.ie3.datamodel.models.input.system.*; import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput; import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput; -import edu.ie3.datamodel.models.input.system.type.ChpTypeInput; -import edu.ie3.datamodel.models.input.system.type.EvTypeInput; -import edu.ie3.datamodel.models.input.system.type.HpTypeInput; -import edu.ie3.datamodel.models.input.system.type.WecTypeInput; +import edu.ie3.datamodel.models.input.system.type.*; import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput; import edu.ie3.datamodel.models.input.thermal.ThermalBusInput; import edu.ie3.datamodel.models.input.thermal.ThermalHouseInput; @@ -74,8 +71,9 @@ public class InputEntityProcessor extends EntityProcessor { NodeGraphicInput.class, LineGraphicInput.class, /* - AssetTypeInput */ - EvTypeInput.class, + BmTypeInput.class, ChpTypeInput.class, + EvTypeInput.class, HpTypeInput.class, LineTypeInput.class, Transformer2WTypeInput.class, 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 ef7953f13..aff30eefb 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -27,6 +27,7 @@ import edu.ie3.datamodel.models.input.system.StorageInput import edu.ie3.datamodel.models.input.system.WecInput import edu.ie3.datamodel.models.input.system.characteristic.EvCharacteristicInput import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.BmTypeInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.HpTypeInput @@ -63,7 +64,6 @@ class ProcessorProviderTest extends Specification { given: ProcessorProvider provider = new ProcessorProvider() - // currently known processors List knownProcessors = [ /* InputEntity */ OperatorInput, @@ -96,8 +96,9 @@ class ProcessorProviderTest extends Specification { NodeGraphicInput, LineGraphicInput, /* - AssetTypeInput */ - EvTypeInput, + BmTypeInput, ChpTypeInput, + EvTypeInput, HpTypeInput, LineTypeInput, Transformer2WTypeInput, @@ -121,6 +122,7 @@ class ProcessorProviderTest extends Specification { ThermalHouseResult, CylindricalStorageResult ] + // currently known processors expect: provider.registeredClasses.size() == knownProcessors.size() diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index 936065373..f1b4c92f7 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -23,6 +23,7 @@ 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.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.BmTypeInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.HpTypeInput @@ -31,8 +32,13 @@ import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData import edu.ie3.test.common.TypeTestData import edu.ie3.util.TimeTools +import edu.ie3.util.quantities.interfaces.Currency +import edu.ie3.util.quantities.interfaces.DimensionlessRate +import edu.ie3.util.quantities.interfaces.EnergyPrice import spock.lang.Specification +import javax.measure.quantity.Dimensionless +import javax.measure.quantity.Power import java.time.ZoneId import java.time.ZonedDateTime @@ -596,4 +602,27 @@ class InputEntityProcessorTest extends Specification { actual.isPresent() actual.get() == expected } + + def "The InputEntityProcessor should de-serialize a provided BmTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(BmTypeInput.class) + BmTypeInput type = TypeTestData.bmType + Map expected = [ + "uuid": "c3bd30f5-1a62-4a37-86e3-074040d965a4", + "id": "bm type", + "capex": "100.0", + "opex": "101.0", + "loadGradient": "5.0", + "sRated": "800.0", + "cosphiRated": "0.965", + "etaConv": "89.0" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } } diff --git a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy index 5743c7cea..6acead5bd 100644 --- a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy @@ -1,6 +1,7 @@ package edu.ie3.test.common import edu.ie3.datamodel.models.input.system.characteristic.WecCharacteristicInput +import edu.ie3.datamodel.models.input.system.type.BmTypeInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.HpTypeInput @@ -13,6 +14,7 @@ import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR_PER_KILOMETR import static edu.ie3.util.quantities.PowerSystemUnits.PU import static edu.ie3.util.quantities.PowerSystemUnits.EURO_PER_MEGAWATTHOUR import static edu.ie3.util.quantities.PowerSystemUnits.MEGAVOLTAMPERE +import static edu.ie3.util.quantities.PowerSystemUnits.PU_PER_HOUR import static tec.uom.se.unit.Units.SQUARE_METRE import static tec.uom.se.unit.Units.METRE @@ -20,15 +22,15 @@ import edu.ie3.datamodel.models.input.system.type.WecTypeInput import tec.uom.se.quantity.Quantities class TypeTestData extends GridTestData { - public static EvTypeInput evType = new EvTypeInput( - UUID.fromString("66b0db5d-b2fb-41d0-a9bc-990d6b6a36db"), - "ev type", + public static BmTypeInput bmType = new BmTypeInput( + UUID.fromString("c3bd30f5-1a62-4a37-86e3-074040d965a4"), + "bm type", Quantities.getQuantity(100d, EURO), Quantities.getQuantity(101d, EURO_PER_MEGAWATTHOUR), - Quantities.getQuantity(100d, KILOWATTHOUR), - Quantities.getQuantity(23d, KILOWATTHOUR_PER_KILOMETRE), - Quantities.getQuantity(22d, KILOWATT), - 0.9 + Quantities.getQuantity(0.05, PU_PER_HOUR), + Quantities.getQuantity(800d, KILOVOLTAMPERE), + 0.965, + Quantities.getQuantity(0.89, PU) ) public static ChpTypeInput chpType = new ChpTypeInput( @@ -44,6 +46,17 @@ class TypeTestData extends GridTestData { Quantities.getQuantity(5d, KILOWATT) ) + public static EvTypeInput evType = new EvTypeInput( + UUID.fromString("66b0db5d-b2fb-41d0-a9bc-990d6b6a36db"), + "ev type", + Quantities.getQuantity(100d, EURO), + Quantities.getQuantity(101d, EURO_PER_MEGAWATTHOUR), + Quantities.getQuantity(100d, KILOWATTHOUR), + Quantities.getQuantity(23d, KILOWATTHOUR_PER_KILOMETRE), + Quantities.getQuantity(22d, KILOWATT), + 0.9 + ) + public static HpTypeInput hpType = new HpTypeInput( UUID.fromString("1059ef51-9e17-4c13-928c-7c1c716d4ee6"), "hp type", From a4d009432dfe5dfdc3dd6dbcfdcbea23f1ffff1b Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 13:12:47 +0100 Subject: [PATCH 16/24] Processing StorageTypeInput --- .../io/processor/EntityProcessor.java | 7 ++- .../processor/input/InputEntityProcessor.java | 4 +- .../result/ResultEntityProcessor.java | 3 +- .../io/processor/ProcessorProviderTest.groovy | 2 + .../input/InputEntityProcessorTest.groovy | 47 +++++++++++++++---- .../edu/ie3/test/common/TypeTestData.groovy | 19 ++++++++ 6 files changed, 71 insertions(+), 11 deletions(-) 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 67336f206..cb424a44a 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/EntityProcessor.java @@ -61,9 +61,12 @@ public abstract class EntityProcessor { "b", "bM", "capex", + "cpRate", + "dod", "dPhi", "dV", "eCons", + "eta", "etaConv", "etaEl", "etaThermal", @@ -81,6 +84,7 @@ public abstract class EntityProcessor { "iCMag", "iMax", "length", + "lifeTime", "loadGradient", "opex", "qDot", @@ -111,7 +115,8 @@ public abstract class EntityProcessor { private static final Set specificQuantityFieldNames = Collections.unmodifiableSet( new HashSet<>( - Arrays.asList("eConsAnnual", "energy", "eStorage", "q", "p", "pThermal", "pOwn"))); + Arrays.asList( + "eConsAnnual", "energy", "eStorage", "q", "p", "pMax", "pOwn", "pThermal"))); private static final GeoJsonWriter geoJsonWriter = new GeoJsonWriter(); diff --git a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java index 8284c988f..f7bd96ce5 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/input/InputEntityProcessor.java @@ -78,6 +78,7 @@ public class InputEntityProcessor extends EntityProcessor { LineTypeInput.class, Transformer2WTypeInput.class, Transformer3WTypeInput.class, + StorageTypeInput.class, WecTypeInput.class)); public InputEntityProcessor(Class registeredClass) { @@ -101,8 +102,9 @@ protected Optional handleProcessorSpecificQuantity( quantity.asType(Power.class).to(StandardUnits.REACTIVE_POWER_IN)); break; case "p": - case "pThermal": + case "pMax": case "pOwn": + case "pThermal": normalizedQuantityValue = quantityValToOptionalString( quantity.asType(Power.class).to(StandardUnits.ACTIVE_POWER_IN)); diff --git a/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java b/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java index 17558e10c..15bf00696 100644 --- a/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java +++ b/src/main/java/edu/ie3/datamodel/io/processor/result/ResultEntityProcessor.java @@ -76,8 +76,9 @@ protected Optional handleProcessorSpecificQuantity( quantity.asType(Power.class).to(StandardUnits.REACTIVE_POWER_RESULT)); break; case "p": - case "pThermal": + case "pMax": case "pOwn": + case "pThermal": normalizedQuantityValue = quantityValToOptionalString( quantity.asType(Power.class).to(StandardUnits.ACTIVE_POWER_RESULT)); 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 aff30eefb..e92c0f5be 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/ProcessorProviderTest.groovy @@ -31,6 +31,7 @@ import edu.ie3.datamodel.models.input.system.type.BmTypeInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.HpTypeInput +import edu.ie3.datamodel.models.input.system.type.StorageTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.datamodel.models.input.thermal.CylindricalStorageInput import edu.ie3.datamodel.models.input.thermal.ThermalBusInput @@ -103,6 +104,7 @@ class ProcessorProviderTest extends Specification { LineTypeInput, Transformer2WTypeInput, Transformer3WTypeInput, + StorageTypeInput, WecTypeInput, /* ResultEntity */ FixedFeedInResult, diff --git a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy index f1b4c92f7..7d635df18 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/processor/input/InputEntityProcessorTest.groovy @@ -27,6 +27,7 @@ import edu.ie3.datamodel.models.input.system.type.BmTypeInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.HpTypeInput +import edu.ie3.datamodel.models.input.system.type.StorageTypeInput import edu.ie3.datamodel.models.input.system.type.WecTypeInput import edu.ie3.test.common.GridTestData import edu.ie3.test.common.SystemParticipantTestData @@ -38,7 +39,9 @@ import edu.ie3.util.quantities.interfaces.EnergyPrice import spock.lang.Specification import javax.measure.quantity.Dimensionless +import javax.measure.quantity.Energy import javax.measure.quantity.Power +import javax.measure.quantity.Time import java.time.ZoneId import java.time.ZonedDateTime @@ -608,14 +611,42 @@ class InputEntityProcessorTest extends Specification { InputEntityProcessor processor = new InputEntityProcessor(BmTypeInput.class) BmTypeInput type = TypeTestData.bmType Map expected = [ - "uuid": "c3bd30f5-1a62-4a37-86e3-074040d965a4", - "id": "bm type", - "capex": "100.0", - "opex": "101.0", - "loadGradient": "5.0", - "sRated": "800.0", - "cosphiRated": "0.965", - "etaConv": "89.0" + "uuid" : "c3bd30f5-1a62-4a37-86e3-074040d965a4", + "id" : "bm type", + "capex" : "100.0", + "opex" : "101.0", + "loadGradient" : "5.0", + "sRated" : "800.0", + "cosphiRated" : "0.965", + "etaConv" : "89.0" + ] + + when: + Optional> actual = processor.handleEntity(type) + + then: + actual.isPresent() + actual.get() == expected + } + + def "The InputEntityProcessor should de-serialize a provided StorageTypeInput correctly"() { + given: + InputEntityProcessor processor = new InputEntityProcessor(StorageTypeInput.class) + StorageTypeInput type = TypeTestData.storageType + Map expected = [ + "uuid" : "fbee4995-24dd-45e4-9c85-7d986fe99ff3", + "id" : "storage type", + "capex" : "100.0", + "opex" : "101.0", + "eStorage" : "200.0", + "sRated" : "13.0", + "cosphiRated": "0.997", + "pMax" : "12.961", + "cpRate" : "0.03", + "eta" : "92.0", + "dod" : "20.0", + "lifeTime" : "100.0", + "lifeCycle" : "100000" ] when: diff --git a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy index 6acead5bd..0eb2d5650 100644 --- a/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy +++ b/src/test/groovy/edu/ie3/test/common/TypeTestData.groovy @@ -5,16 +5,19 @@ import edu.ie3.datamodel.models.input.system.type.BmTypeInput import edu.ie3.datamodel.models.input.system.type.ChpTypeInput import edu.ie3.datamodel.models.input.system.type.EvTypeInput import edu.ie3.datamodel.models.input.system.type.HpTypeInput +import edu.ie3.datamodel.models.input.system.type.StorageTypeInput import static edu.ie3.util.quantities.PowerSystemUnits.EURO import static edu.ie3.util.quantities.PowerSystemUnits.KILOVOLTAMPERE import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATT import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR import static edu.ie3.util.quantities.PowerSystemUnits.KILOWATTHOUR_PER_KILOMETRE +import static edu.ie3.util.quantities.PowerSystemUnits.MILLISECOND import static edu.ie3.util.quantities.PowerSystemUnits.PU import static edu.ie3.util.quantities.PowerSystemUnits.EURO_PER_MEGAWATTHOUR import static edu.ie3.util.quantities.PowerSystemUnits.MEGAVOLTAMPERE import static edu.ie3.util.quantities.PowerSystemUnits.PU_PER_HOUR +import static tec.uom.se.unit.Units.PERCENT import static tec.uom.se.unit.Units.SQUARE_METRE import static tec.uom.se.unit.Units.METRE @@ -67,6 +70,22 @@ class TypeTestData extends GridTestData { Quantities.getQuantity(26.3, KILOWATT) ) + public static StorageTypeInput storageType = new StorageTypeInput( + UUID.fromString("fbee4995-24dd-45e4-9c85-7d986fe99ff3"), + "storage type", + Quantities.getQuantity(100d, EURO), + Quantities.getQuantity(101d, EURO_PER_MEGAWATTHOUR), + Quantities.getQuantity(200d, KILOWATTHOUR), + Quantities.getQuantity(13d, KILOVOLTAMPERE), + 0.997, + Quantities.getQuantity(12.961, KILOWATT), + Quantities.getQuantity(0.03, PU_PER_HOUR), + Quantities.getQuantity(0.92, PU), + Quantities.getQuantity(20d, PERCENT), + Quantities.getQuantity(100d, MILLISECOND), + 100000 + ) + public static WecTypeInput wecType = new WecTypeInput( UUID.fromString("a24fc5b9-a26f-44de-96b8-c9f50b665cb3"), "Test wec type", From 48e878ce1db13d04f086d89852b151ba29ab762f Mon Sep 17 00:00:00 2001 From: "Kittl, Chris" Date: Fri, 27 Mar 2020 13:43:27 +0100 Subject: [PATCH 17/24] Harmonising field names --- .../SystemParticipantTypeInputFactory.java | 19 ++++--- .../io/processor/EntityProcessor.java | 3 +- .../ie3/datamodel/models/StandardUnits.java | 8 ++- .../models/input/system/type/BmTypeInput.java | 18 +++---- .../input/system/type/StorageTypeInput.java | 23 ++++---- ...stemParticipantTypeInputFactoryTest.groovy | 37 +++++++------ .../input/InputEntityProcessorTest.groovy | 52 ++++++++----------- .../edu/ie3/test/common/TypeTestData.groovy | 5 +- 8 files changed, 83 insertions(+), 82 deletions(-) diff --git a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java index 148837c65..1a8c5a4c3 100644 --- a/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java +++ b/src/main/java/edu/ie3/datamodel/io/factory/typeinput/SystemParticipantTypeInputFactory.java @@ -37,7 +37,7 @@ public class SystemParticipantTypeInputFactory private static final String E_CONS = "econs"; // BmTypeInput - private static final String LOAD_GRADIENT = "loadgradient"; + private static final String ACTIVE_POWER_GRADIENT = "activepowergradient"; // WecTypeInput private static final String ROTOR_AREA = "rotorarea"; @@ -50,7 +50,6 @@ public class SystemParticipantTypeInputFactory // StorageTypeInput private static final String P_MAX = "pmax"; - private static final String CP_RATE = "cprate"; private static final String ETA = "eta"; private static final String DOD = "dod"; private static final String LIFETIME = "lifetime"; @@ -77,7 +76,7 @@ protected List> getFields(SimpleEntityData data) { } else if (data.getEntityClass().equals(HpTypeInput.class)) { constructorParameters = expandSet(standardConstructorParams, P_THERMAL); } else if (data.getEntityClass().equals(BmTypeInput.class)) { - constructorParameters = expandSet(standardConstructorParams, LOAD_GRADIENT, ETA_CONV); + constructorParameters = expandSet(standardConstructorParams, ACTIVE_POWER_GRADIENT, ETA_CONV); } else if (data.getEntityClass().equals(WecTypeInput.class)) { constructorParameters = expandSet(standardConstructorParams, ETA_CONV, ROTOR_AREA, HUB_HEIGHT); @@ -87,7 +86,14 @@ protected List> getFields(SimpleEntityData data) { } else if (data.getEntityClass().equals(StorageTypeInput.class)) { constructorParameters = expandSet( - standardConstructorParams, E_STORAGE, P_MAX, CP_RATE, ETA, DOD, LIFETIME, LIFECYCLE); + standardConstructorParams, + E_STORAGE, + P_MAX, + ACTIVE_POWER_GRADIENT, + ETA, + DOD, + LIFETIME, + LIFECYCLE); } return Collections.singletonList(constructorParameters); @@ -156,7 +162,7 @@ private SystemParticipantTypeInput buildBmTypeInput( Quantity sRated, double cosPhi) { Quantity loadGradient = - data.getQuantity(LOAD_GRADIENT, StandardUnits.LOAD_GRADIENT); + data.getQuantity(ACTIVE_POWER_GRADIENT, StandardUnits.ACTIVE_POWER_GRADIENT); Quantity etaConv = data.getQuantity(ETA_CONV, StandardUnits.EFFICIENCY); return new BmTypeInput(uuid, id, capEx, opEx, loadGradient, sRated, cosPhi, etaConv); @@ -204,7 +210,8 @@ private SystemParticipantTypeInput buildStorageTypeInput( double cosPhi) { Quantity eStorage = data.getQuantity(E_STORAGE, StandardUnits.ENERGY_IN); Quantity pMax = data.getQuantity(P_MAX, StandardUnits.ACTIVE_POWER_IN); - Quantity cprate = data.getQuantity(CP_RATE, StandardUnits.CP_RATE); + Quantity cprate = + data.getQuantity(ACTIVE_POWER_GRADIENT, StandardUnits.ACTIVE_POWER_GRADIENT); Quantity eta = data.getQuantity(ETA, StandardUnits.EFFICIENCY); Quantity dod = data.getQuantity(DOD, StandardUnits.DOD); Quantity