diff --git a/CHANGELOG.md b/CHANGELOG.md index d96d3ef44..c8496e2ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added mising fields to field validation [#1422](https://github.com/ie3-institute/PowerSystemDataModel/issues/1422) - Fixed the issues with rtd for Cylindrical thermal storage [#1273](https://github.com/ie3-institute/PowerSystemDataModel/issues/1273) - Updated Controlling_em for all the loads in readthedocs[#1447](https://github.com/ie3-institute/PowerSystemDataModel/issues/1447) +- Correctly persist EmInput entities in CsvFileSink [#1337](https://github.com/ie3-institute/PowerSystemDataModel/issues/1337) ### Changed - Updated CI-Pipeline to run task `Deploy` and `Staging` only for `Main` [#1403](https://github.com/ie3-institute/PowerSystemDataModel/issues/1403) diff --git a/src/main/java/edu/ie3/datamodel/io/sink/CsvFileSink.java b/src/main/java/edu/ie3/datamodel/io/sink/CsvFileSink.java index 4b08d00f6..996eceab7 100644 --- a/src/main/java/edu/ie3/datamodel/io/sink/CsvFileSink.java +++ b/src/main/java/edu/ie3/datamodel/io/sink/CsvFileSink.java @@ -10,6 +10,7 @@ import edu.ie3.datamodel.io.csv.BufferedCsvWriter; import edu.ie3.datamodel.io.csv.CsvFileDefinition; import edu.ie3.datamodel.io.extractor.Extractor; +import edu.ie3.datamodel.io.extractor.HasEm; import edu.ie3.datamodel.io.extractor.NestedEntity; import edu.ie3.datamodel.io.naming.FileNamingStrategy; import edu.ie3.datamodel.io.processor.ProcessorProvider; @@ -225,14 +226,29 @@ public void persistJointGrid(JointGridContainer jointGridContainer) { .flatMap(Optional::stream) .collect(Collectors.toSet()); + // extract all EmInput entities + Set emInputs = + systemParticipants.allEntitiesAsList().stream() + .filter(Objects::nonNull) + .map(HasEm.class::cast) + .map(HasEm::getControllingEm) + .flatMap(Optional::stream) + .flatMap( + em -> + Stream.iterate( + em, Objects::nonNull, current -> current.getControllingEm().orElse(null))) + .collect(Collectors.toSet()); + // persist all entities Stream.of( rawGridElements.allEntitiesAsList(), systemParticipants.allEntitiesAsList(), graphicElements.allEntitiesAsList(), types, - operators) + operators, + emInputs) .flatMap(Collection::stream) + .collect(Collectors.toSet()) .forEach(this::persistIgnoreNested); } diff --git a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy index 08b563aa4..0ffa7698e 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -15,6 +15,7 @@ import edu.ie3.datamodel.io.processor.input.InputEntityProcessor import edu.ie3.datamodel.io.processor.result.ResultEntityProcessor import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessor import edu.ie3.datamodel.io.processor.timeseries.TimeSeriesProcessorKey +import edu.ie3.datamodel.io.source.csv.CsvJointGridContainerSource import edu.ie3.datamodel.models.OperationTime import edu.ie3.datamodel.models.StandardUnits import edu.ie3.datamodel.models.input.EmInput @@ -357,6 +358,7 @@ class CsvFileSinkTest extends Specification implements TimeSeriesTestData { testBaseFolderPath.resolve("storage_type_input.csv").toFile().exists() testBaseFolderPath.resolve("transformer_2_w_input.csv").toFile().exists() testBaseFolderPath.resolve("transformer_2_w_type_input.csv").toFile().exists() + testBaseFolderPath.resolve("em_input.csv").toFile().exists() cleanup: csvFileSink.shutdown() diff --git a/src/test/resources/edu/ie3/datamodel/io/source/csv/_joint_grid/em_input.csv b/src/test/resources/edu/ie3/datamodel/io/source/csv/_joint_grid/em_input.csv new file mode 100644 index 000000000..4c960d870 --- /dev/null +++ b/src/test/resources/edu/ie3/datamodel/io/source/csv/_joint_grid/em_input.csv @@ -0,0 +1,6 @@ +uuid,id,operator,operates_from,operates_until,controlStrategy,controllingEm +4e2f47a6-40f4-4952-9b2f-7b7d2558a143,em_system_1,,,,"SelfConsumptionOptimized", +a3e8e4a3-7b1b-4b1e-9e7b-8d6e3f5a2b1d,em_system_2,,,,GridSupportive,4e2f47a6-40f4-4952-9b2f-7b7d2558a143 +b8d9c5b2-6c2c-4c2d-8f8c-9e7f4a6b3c2e,em_system_3,,,,PriceReactive,4e2f47a6-40f4-4952-9b2f-7b7d2558a143 +c7f0d6c1-5d3d-4d3e-7a9d-1f8a5b7c4d3f,em__system_4,,,,StoragePriority,4e2f47a6-40f4-4952-9b2f-7b7d2558a143 +d6a1e7d0-4e4e-4e4f-6b0e-2a9b6c8d5e4a,em_system_5,,,,FeedInLimitation,4e2f47a6-40f4-4952-9b2f-7b7d2558a143 \ No newline at end of file