diff --git a/src/main/java/org/gridsuite/modification/dto/BalancesAdjustmentModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/BalancesAdjustmentModificationInfos.java index e8b35118..84af9506 100644 --- a/src/main/java/org/gridsuite/modification/dto/BalancesAdjustmentModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/BalancesAdjustmentModificationInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.dto; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.report.ReportNode; import com.powsybl.iidm.network.Country; @@ -13,12 +14,14 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.experimental.SuperBuilder; +import org.gridsuite.filter.AbstractFilter; import org.gridsuite.modification.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.modifications.AbstractModification; import org.gridsuite.modification.modifications.BalancesAdjustmentModification; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.UUID; /** @@ -60,6 +63,10 @@ public class BalancesAdjustmentModificationInfos extends ModificationInfos { private UUID loadFlowParametersId; + @JsonInclude(JsonInclude.Include.NON_NULL) + @Schema(description = "embedded load flow parameters (populated only on export)") + private LoadFlowParametersInfos loadFlowParameters; + @Builder.Default private boolean withRatioTapChangers = DEFAULT_WITH_RATIO_TAP_CHANGERS; @@ -85,4 +92,16 @@ public AbstractModification toModification() { public ReportNode createSubReportNode(ReportNode reportNode) { return reportNode.newReportNode().withMessageTemplate("network.modification.balancesAdjustment").add(); } + + @Override + public List getReferencedLoadFlowParametersUuids() { + return loadFlowParametersId != null ? List.of(loadFlowParametersId) : List.of(); + } + + @Override + public void embedReferencedData(Map filters, Map lfParams) { + if (loadFlowParametersId != null) { + this.loadFlowParameters = lfParams.get(loadFlowParametersId); + } + } } diff --git a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java index 62829518..9f16ac32 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java @@ -17,11 +17,16 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; +import org.gridsuite.filter.AbstractFilter; import org.gridsuite.modification.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.modifications.byfilter.ByFormulaModification; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Stream; /** * @author Seddik Yengui @@ -55,4 +60,29 @@ public ByFormulaModification toModification() { public ReportNode createSubReportNode(ReportNode reportNode) { return reportNode.newReportNode().withMessageTemplate("network.modification.byFormulaModification").add(); } + + @Override + public List getReferencedFilterUuids() { + return formulaInfosList == null + ? List.of() + : formulaInfosList.stream() + .flatMap(f -> f.getFilters() == null ? Stream.empty() : f.getFilters().stream()) + .map(FilterInfos::getId) + .filter(Objects::nonNull).toList(); + } + + @Override + public void embedReferencedData(Map filters, + Map lfParams) { + if (formulaInfosList == null) { + return; + } + formulaInfosList.stream() + .flatMap(f -> f.getFilters() == null ? Stream.empty() : f.getFilters().stream()) + .forEach(ref -> { + if (ref.getId() != null) { + ref.setFilterContent(filters.get(ref.getId())); + } + }); + } } diff --git a/src/main/java/org/gridsuite/modification/dto/FilterInfos.java b/src/main/java/org/gridsuite/modification/dto/FilterInfos.java index 1864e2c4..e3088430 100644 --- a/src/main/java/org/gridsuite/modification/dto/FilterInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/FilterInfos.java @@ -6,9 +6,11 @@ */ package org.gridsuite.modification.dto; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.experimental.SuperBuilder; +import org.gridsuite.filter.AbstractFilter; import java.util.UUID; @@ -30,4 +32,7 @@ public class FilterInfos { @Schema(description = "name of filter") private String name; + @JsonInclude(JsonInclude.Include.NON_NULL) + @Schema(description = "embedded filter content (populated only on export)") + private AbstractFilter filterContent; } diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java index 57f19cf7..f197bd98 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java @@ -16,11 +16,16 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; +import org.gridsuite.filter.AbstractFilter; import org.gridsuite.modification.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.modifications.byfilter.ModificationByAssignment; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; +import java.util.stream.Stream; /** * @author Thang PHAM @@ -52,4 +57,29 @@ public ModificationByAssignment toModification() { public ReportNode createSubReportNode(ReportNode reportNode) { return reportNode.newReportNode().withMessageTemplate("network.modification.modificationByAssignment").add(); } + + @Override + public List getReferencedFilterUuids() { + return assignmentInfosList == null + ? List.of() + : assignmentInfosList.stream() + .flatMap(a -> a.getFilters() == null ? Stream.empty() : a.getFilters().stream()) + .map(FilterInfos::getId) + .filter(Objects::nonNull) + .toList(); + } + + @Override + public void embedReferencedData(Map filters, Map lfParams) { + if (assignmentInfosList == null) { + return; + } + assignmentInfosList.stream() + .flatMap(a -> a.getFilters() == null ? Stream.empty() : a.getFilters().stream()) + .forEach(ref -> { + if (ref.getId() != null) { + ref.setFilterContent(filters.get(ref.getId())); + } + }); + } } diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java index 5b837219..d2e8899e 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java @@ -14,6 +14,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.experimental.SuperBuilder; +import org.gridsuite.filter.AbstractFilter; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.annotation.ModificationErrorTypeName; @@ -23,6 +24,7 @@ import org.gridsuite.modification.modifications.AbstractModification; import java.time.Instant; +import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; @@ -154,4 +156,19 @@ public Map getMapMessageValues() { public void check() { // To check input DTO before hypothesis creation. Nothing to check here } + + @JsonIgnore + public List getReferencedFilterUuids() { + return List.of(); + } + + @JsonIgnore + public List getReferencedLoadFlowParametersUuids() { + return List.of(); + } + + public void embedReferencedData(Map filters, + Map lfParams) { + // no-op + } } diff --git a/src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java index fdae0858..1fcadfc6 100644 --- a/src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java @@ -49,13 +49,13 @@ abstract class AbstractModificationByAssignmentTest extends AbstractNetworkModif protected static final UUID FILTER_ID_6 = UUID.randomUUID(); protected static final UUID FILTER_WITH_ALL_WRONG_IDS = UUID.randomUUID(); protected static final UUID FILTER_WITH_ONE_WRONG_ID = UUID.randomUUID(); - protected final FilterInfos filter1 = new FilterInfos(FILTER_ID_1, "filter1"); - protected final FilterInfos filter2 = new FilterInfos(FILTER_ID_2, "filter2"); - protected final FilterInfos filter3 = new FilterInfos(FILTER_ID_3, "filter3"); - protected final FilterInfos filter4 = new FilterInfos(FILTER_ID_4, "filter4"); - protected final FilterInfos filter5 = new FilterInfos(FILTER_ID_5, "filter5"); - protected final FilterInfos filter6 = new FilterInfos(FILTER_ID_6, "filter6"); - protected final FilterInfos filterWithOneWrongId = new FilterInfos(FILTER_WITH_ONE_WRONG_ID, "filterWithOneWrongId"); + protected final FilterInfos filter1 = new FilterInfos(FILTER_ID_1, "filter1", null); + protected final FilterInfos filter2 = new FilterInfos(FILTER_ID_2, "filter2", null); + protected final FilterInfos filter3 = new FilterInfos(FILTER_ID_3, "filter3", null); + protected final FilterInfos filter4 = new FilterInfos(FILTER_ID_4, "filter4", null); + protected final FilterInfos filter5 = new FilterInfos(FILTER_ID_5, "filter5", null); + protected final FilterInfos filter6 = new FilterInfos(FILTER_ID_6, "filter6", null); + protected final FilterInfos filterWithOneWrongId = new FilterInfos(FILTER_WITH_ONE_WRONG_ID, "filterWithOneWrongId", null); protected final ReportNode reportNode = ReportNode.newRootReportNode() .withResourceBundles(NetworkModificationReportResourceBundle.BASE_NAME) .withMessageTemplate("test") diff --git a/src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java index c9f16a39..6a04a43c 100644 --- a/src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java @@ -305,7 +305,7 @@ protected List> getAssignmentInfos() { DoubleAssignmentInfos assignmentInfos20 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.Q_PERCENT.name()) .value(120.) - .filters(List.of(new FilterInfos(UUID.randomUUID(), "filterNotFound"))) + .filters(List.of(new FilterInfos(UUID.randomUUID(), "filterNotFound", null))) .build(); List> infosList = super.getAssignmentInfos(); diff --git a/src/test/java/org/gridsuite/modification/modifications/byfilter/formula/AbstractByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/modifications/byfilter/formula/AbstractByFormulaModificationTest.java index 98dd9af1..85cbe0da 100644 --- a/src/test/java/org/gridsuite/modification/modifications/byfilter/formula/AbstractByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/modifications/byfilter/formula/AbstractByFormulaModificationTest.java @@ -44,14 +44,14 @@ abstract class AbstractByFormulaModificationTest extends AbstractNetworkModifica protected static final UUID FILTER_ID_7 = UUID.randomUUID(); protected static final UUID FILTER_WITH_ALL_WRONG_IDS = UUID.randomUUID(); protected static final UUID FILTER_WITH_ONE_WRONG_ID = UUID.randomUUID(); - protected final FilterInfos filter1 = new FilterInfos(FILTER_ID_1, "filter1"); - protected final FilterInfos filter2 = new FilterInfos(FILTER_ID_2, "filter2"); - protected final FilterInfos filter3 = new FilterInfos(FILTER_ID_3, "filter3"); - protected final FilterInfos filter4 = new FilterInfos(FILTER_ID_4, "filter4"); - protected final FilterInfos filter5 = new FilterInfos(FILTER_ID_5, "filter5"); - protected final FilterInfos filter6 = new FilterInfos(FILTER_ID_6, "filter6"); - protected final FilterInfos filter7 = new FilterInfos(FILTER_ID_7, "filter7"); - protected final FilterInfos filterWithOneWrongId = new FilterInfos(FILTER_WITH_ONE_WRONG_ID, "filterWithOneWrongId"); + protected final FilterInfos filter1 = new FilterInfos(FILTER_ID_1, "filter1", null); + protected final FilterInfos filter2 = new FilterInfos(FILTER_ID_2, "filter2", null); + protected final FilterInfos filter3 = new FilterInfos(FILTER_ID_3, "filter3", null); + protected final FilterInfos filter4 = new FilterInfos(FILTER_ID_4, "filter4", null); + protected final FilterInfos filter5 = new FilterInfos(FILTER_ID_5, "filter5", null); + protected final FilterInfos filter6 = new FilterInfos(FILTER_ID_6, "filter6", null); + protected final FilterInfos filter7 = new FilterInfos(FILTER_ID_7, "filter7", null); + protected final FilterInfos filterWithOneWrongId = new FilterInfos(FILTER_WITH_ONE_WRONG_ID, "filterWithOneWrongId", null); protected final ReportNode reportNode = ReportNode.newRootReportNode() .withResourceBundles(NetworkModificationReportResourceBundle.BASE_NAME) .withMessageTemplate("test")