From 83cf8d7ee3b7fa60b1e6afd36ea83a0c698e3bdd Mon Sep 17 00:00:00 2001 From: pierrepetersmeier <155652256+pierrepetersmeier@users.noreply.github.com> Date: Mon, 1 Sep 2025 14:45:27 +0200 Subject: [PATCH] Correctly persist EmInput entities in CsvFileSink --- CHANGELOG.md | 1 + .../edu/ie3/datamodel/io/sink/CsvFileSink.java | 18 +++++++++++++++++- .../datamodel/io/sink/CsvFileSinkTest.groovy | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5416aa3b7..6a729d9cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed small issues in tests [#1400](https://github.com/ie3-institute/PowerSystemDataModel/issues/1400) - Fix transformer susceptance in readTheDocs to negative values [#1078](https://github.com/ie3-institute/PowerSystemDataModel/issues/1078) - Added mising fields to field validation [#1422](https://github.com/ie3-institute/PowerSystemDataModel/issues/1422) +- 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..d84fd302a 100644 --- a/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy +++ b/src/test/groovy/edu/ie3/datamodel/io/sink/CsvFileSinkTest.groovy @@ -357,6 +357,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()