From b113485953da7f41b832f8e478064df6ebf8d110 Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Wed, 7 Oct 2026 14:18:08 +0200 Subject: [PATCH 01/11] Resolve filter name through remote call instead of storage --- .../modification/dto/ByFilterDeletionInfos.java | 6 ++++++ .../dto/ByFormulaModificationInfos.java | 8 ++++++++ .../gridsuite/modification/dto/FilterInfos.java | 9 ++++++++- .../modification/dto/GenerationDispatchInfos.java | 13 +++++++++++++ .../modification/dto/GeneratorsFilterInfos.java | 15 +++++---------- .../dto/ModificationByAssignmentInfos.java | 8 ++++++++ .../modification/dto/ModificationInfos.java | 9 +++++++++ .../gridsuite/modification/dto/ScalingInfos.java | 7 +++++++ .../modifications/AbstractScaling.java | 4 ++-- .../modifications/GenerationDispatch.java | 2 +- .../modification/utils/ModificationUtils.java | 2 +- 11 files changed, 68 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java index f167ce31e..213bd36d1 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Stream; /** * @author Antoine Bouhours @@ -65,4 +66,9 @@ public Map getMapMessageValues() { mapMessageValues.put("equipmentType", getEquipmentType().name()); return mapMessageValues; } + + @Override + public Stream referencedFilters() { + return Stream.ofNullable(filters).flatMap(List::stream); + } } diff --git a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java index 6169ff3a3..dcc5d5680 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java @@ -20,6 +20,7 @@ import org.gridsuite.modification.modifications.data.assignment.FormulaAssignmentData; import java.util.List; +import java.util.stream.Stream; /** * @author Seddik Yengui @@ -61,4 +62,11 @@ public ReportNode createSubReportNode(ReportNode reportNode) { .withUntypedValue("equipmentType", identifiableType.name()) .add(); } + + @Override + public Stream referencedFilters() { + return Stream.ofNullable(formulaInfosList) + .flatMap(List::stream) + .flatMap(formulaInfos -> Stream.ofNullable(formulaInfos.getFilters()).flatMap(List::stream)); + } } diff --git a/src/main/java/org/gridsuite/modification/dto/FilterInfos.java b/src/main/java/org/gridsuite/modification/dto/FilterInfos.java index 5e5a4ac9a..21f567e96 100644 --- a/src/main/java/org/gridsuite/modification/dto/FilterInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/FilterInfos.java @@ -28,7 +28,14 @@ public class FilterInfos { @Schema(description = "id of filter") private UUID id; - @Schema(description = "name of filter") + @Schema(description = "name of filter, not stored: resolved from the directory which owns it, null if the filter no longer exists there") private String name; + /** + * @return what reports show for this filter: its resolved name, or its id when it could not be resolved + */ + public String label() { + return name != null ? name : String.valueOf(id); + } + } diff --git a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java index efc1f2dbc..fa6b45518 100644 --- a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java @@ -18,6 +18,8 @@ import org.gridsuite.modification.modifications.GenerationDispatch; import java.util.List; +import java.util.function.Function; +import java.util.stream.Stream; /** * @author Franck Lecuyer @@ -65,4 +67,15 @@ public ReportNode createSubReportNode(ReportNode reportNode) { .withMessageTemplate("network.modification.generationDispatch") .add(); } + + @Override + public Stream referencedFilters() { + return Stream.of( + Stream.ofNullable(generatorsWithoutOutage).flatMap(List::stream), + Stream.ofNullable(generatorsWithFixedSupply).flatMap(List::stream), + Stream.ofNullable(generatorsFrequencyReserve) + .flatMap(List::stream) + .flatMap(frequencyReserve -> Stream.ofNullable(frequencyReserve.getGeneratorsFilters()).flatMap(List::stream))) + .flatMap(Function.identity()); + } } diff --git a/src/main/java/org/gridsuite/modification/dto/GeneratorsFilterInfos.java b/src/main/java/org/gridsuite/modification/dto/GeneratorsFilterInfos.java index 024954d03..7b890ec72 100644 --- a/src/main/java/org/gridsuite/modification/dto/GeneratorsFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/GeneratorsFilterInfos.java @@ -16,17 +16,12 @@ * @author Franck Lecuyer */ @SuperBuilder -@Getter -@Setter -@EqualsAndHashCode @NoArgsConstructor -@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) @Schema(description = "Generators filter Infos") -public class GeneratorsFilterInfos { +public class GeneratorsFilterInfos extends FilterInfos { - @Schema(description = "id of generators filter") - private UUID id; - - @Schema(description = "name of generators filter") - private String name; + public GeneratorsFilterInfos(UUID id, String name) { + super(id, name); + } } diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java index 987cb869d..79a8a493d 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java @@ -21,6 +21,7 @@ import org.gridsuite.modification.modifications.byfilter.ModificationByAssignment; import java.util.List; +import java.util.stream.Stream; /** * @author Thang PHAM @@ -55,4 +56,11 @@ public ReportNode createSubReportNode(ReportNode reportNode) { .withMessageTemplate("network.modification.modificationByAssignment") .withUntypedValue("equipmentType", equipmentType.name()).add(); } + + @Override + public Stream referencedFilters() { + return Stream.ofNullable(assignmentInfosList) + .flatMap(List::stream) + .flatMap(assignmentInfos -> Stream.ofNullable(assignmentInfos.getFilters()).flatMap(List::stream)); + } } diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java index c23575dd4..af2cfe902 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java @@ -25,6 +25,7 @@ import java.util.Map; import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Stream; /** * @author Slimane Amar @@ -146,6 +147,14 @@ public AbstractModification toModification(ModificationContext context) { return toModification(); } + /** + * @return the filters this modification references, not those of the modifications it holds. Only their ids are + * stored: the directory owns their names, which the caller resolves before exposing or applying the modification. + */ + public Stream referencedFilters() { + return Stream.empty(); + } + public final ModificationType getType() { return type.get() != null ? type.get() : ModificationType.valueOf(this.getClass().getAnnotation(JsonTypeName.class).value()); } diff --git a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java index 85647fcca..3dcdee644 100644 --- a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java @@ -15,6 +15,7 @@ import org.gridsuite.modification.VariationType; import java.util.List; +import java.util.stream.Stream; /** * @author bendaamerahm @@ -32,4 +33,10 @@ public class ScalingInfos extends ModificationInfos { @Schema(description = "variation type") private VariationType variationType; + @Override + public Stream referencedFilters() { + return Stream.ofNullable(variations) + .flatMap(List::stream) + .flatMap(variation -> Stream.ofNullable(variation.getFilters()).flatMap(List::stream)); + } } diff --git a/src/main/java/org/gridsuite/modification/modifications/AbstractScaling.java b/src/main/java/org/gridsuite/modification/modifications/AbstractScaling.java index 5d26ee6ec..95d67e204 100644 --- a/src/main/java/org/gridsuite/modification/modifications/AbstractScaling.java +++ b/src/main/java/org/gridsuite/modification/modifications/AbstractScaling.java @@ -63,7 +63,7 @@ public void apply(Network network, ReportNode subReportNode) { var filters = variations.stream() .flatMap(v -> v.getFilters().stream()) .filter(distinctByKey(FilterInfos::getId)) - .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); + .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::label)); Map exportFilters = ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, getName()); if (exportFilters != null) { @@ -74,7 +74,7 @@ public void apply(Network network, ReportNode subReportNode) { Set identifiableAttributes = ModificationUtils.getIdentifiableAttributes(exportFilters, variation.getFilters(), subReportNode); if (CollectionUtils.isEmpty(identifiableAttributes)) { - String filterNames = variation.getFilters().stream().map(FilterInfos::getName).collect(Collectors.joining(", ")); + String filterNames = variation.getFilters().stream().map(FilterInfos::label).collect(Collectors.joining(", ")); createReport(subReportNode, "network.modification.allFiltersWrong.variation", Map.of("filterNames", filterNames), TypedValue.WARN_SEVERITY); } else { applyVariation(network, subReportNode, identifiableAttributes, variation); diff --git a/src/main/java/org/gridsuite/modification/modifications/GenerationDispatch.java b/src/main/java/org/gridsuite/modification/modifications/GenerationDispatch.java index d0b73d7f4..f48c59fe6 100644 --- a/src/main/java/org/gridsuite/modification/modifications/GenerationDispatch.java +++ b/src/main/java/org/gridsuite/modification/modifications/GenerationDispatch.java @@ -384,7 +384,7 @@ private List exportFilters(List generatorsFilters if (CollectionUtils.isEmpty(generatorsFilters)) { return List.of(); } - var filters = generatorsFilters.stream().collect(Collectors.toMap(GeneratorsFilterInfos::getId, GeneratorsFilterInfos::getName, (id1, id2) -> id1, LinkedHashMap::new)); + var filters = generatorsFilters.stream().collect(Collectors.toMap(GeneratorsFilterInfos::getId, GeneratorsFilterInfos::label, (id1, id2) -> id1, LinkedHashMap::new)); // export filters Map exportedGenerators = filterService diff --git a/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java b/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java index 57f9ff83a..0d2124bbe 100644 --- a/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java +++ b/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java @@ -1735,7 +1735,7 @@ public boolean isValidFilter(ReportNode subReportNode, public static Set getIdentifiableAttributes(Map exportFilters, List filterInfos, ReportNode subReportNode) { filterInfos.stream() .filter(f -> !exportFilters.containsKey(f.getId())) - .forEach(f -> createReport(subReportNode, "network.modification.filterNotFound", Map.of("name", f.getName()), TypedValue.WARN_SEVERITY)); + .forEach(f -> createReport(subReportNode, "network.modification.filterNotFound", Map.of("name", f.label()), TypedValue.WARN_SEVERITY)); return filterInfos .stream() From e7fde4b023e1c4883a34436143af3046aeb28078 Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Wed, 7 Oct 2026 14:50:00 +0200 Subject: [PATCH 02/11] Change naming --- .../org/gridsuite/modification/dto/ByFilterDeletionInfos.java | 2 +- .../gridsuite/modification/dto/ByFormulaModificationInfos.java | 2 +- .../org/gridsuite/modification/dto/GenerationDispatchInfos.java | 2 +- .../modification/dto/ModificationByAssignmentInfos.java | 2 +- .../java/org/gridsuite/modification/dto/ModificationInfos.java | 2 +- src/main/java/org/gridsuite/modification/dto/ScalingInfos.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java index 213bd36d1..6c3d725b7 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java @@ -68,7 +68,7 @@ public Map getMapMessageValues() { } @Override - public Stream referencedFilters() { + public Stream collectFilters() { return Stream.ofNullable(filters).flatMap(List::stream); } } diff --git a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java index dcc5d5680..637ee23df 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java @@ -64,7 +64,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream referencedFilters() { + public Stream collectFilters() { return Stream.ofNullable(formulaInfosList) .flatMap(List::stream) .flatMap(formulaInfos -> Stream.ofNullable(formulaInfos.getFilters()).flatMap(List::stream)); diff --git a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java index fa6b45518..e623e7c2a 100644 --- a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java @@ -69,7 +69,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream referencedFilters() { + public Stream collectFilters() { return Stream.of( Stream.ofNullable(generatorsWithoutOutage).flatMap(List::stream), Stream.ofNullable(generatorsWithFixedSupply).flatMap(List::stream), diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java index 79a8a493d..6c8e6b7f8 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java @@ -58,7 +58,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream referencedFilters() { + public Stream collectFilters() { return Stream.ofNullable(assignmentInfosList) .flatMap(List::stream) .flatMap(assignmentInfos -> Stream.ofNullable(assignmentInfos.getFilters()).flatMap(List::stream)); diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java index af2cfe902..c2a371ae8 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java @@ -151,7 +151,7 @@ public AbstractModification toModification(ModificationContext context) { * @return the filters this modification references, not those of the modifications it holds. Only their ids are * stored: the directory owns their names, which the caller resolves before exposing or applying the modification. */ - public Stream referencedFilters() { + public Stream collectFilters() { return Stream.empty(); } diff --git a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java index 3dcdee644..d684f03b7 100644 --- a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java @@ -34,7 +34,7 @@ public class ScalingInfos extends ModificationInfos { private VariationType variationType; @Override - public Stream referencedFilters() { + public Stream collectFilters() { return Stream.ofNullable(variations) .flatMap(List::stream) .flatMap(variation -> Stream.ofNullable(variation.getFilters()).flatMap(List::stream)); From 1959572d5b10acbd751d6e7effcbba96b7420744 Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Wed, 7 Oct 2026 15:52:28 +0200 Subject: [PATCH 03/11] Move test --- .../dto/ModificationFiltersTest.java | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java diff --git a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java new file mode 100644 index 000000000..2ed9ae49c --- /dev/null +++ b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.modification.dto; + +import org.gridsuite.modification.dto.byfilter.assignment.DoubleAssignmentInfos; +import org.gridsuite.modification.dto.byfilter.formula.FormulaInfos; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * Filters referenced by modifications, whose names are resolved from the directory by the caller. + */ +class ModificationFiltersTest { + + private static FilterInfos filter() { + return FilterInfos.builder().id(UUID.randomUUID()).build(); + } + + private static GeneratorsFilterInfos generatorsFilter() { + return GeneratorsFilterInfos.builder().id(UUID.randomUUID()).build(); + } + + @Test + void testReferencedFilters() { + FilterInfos deletionFilter = filter(); + assertEquals(List.of(deletionFilter), + ByFilterDeletionInfos.builder().filters(List.of(deletionFilter)).build().collectFilters().toList()); + + FilterInfos scalingFilter1 = filter(); + FilterInfos scalingFilter2 = filter(); + assertEquals(List.of(scalingFilter1, scalingFilter2), + GeneratorScalingInfos.builder().variations(List.of( + ScalingVariationInfos.builder().filters(List.of(scalingFilter1)).build(), + ScalingVariationInfos.builder().filters(List.of(scalingFilter2)).build())).build() + .collectFilters().toList()); + + GeneratorsFilterInfos withoutOutage = generatorsFilter(); + GeneratorsFilterInfos withFixedSupply = generatorsFilter(); + GeneratorsFilterInfos frequencyReserve = generatorsFilter(); + assertEquals(List.of(withoutOutage, withFixedSupply, frequencyReserve), + GenerationDispatchInfos.builder() + .generatorsWithoutOutage(List.of(withoutOutage)) + .generatorsWithFixedSupply(List.of(withFixedSupply)) + .generatorsFrequencyReserve(List.of(GeneratorsFrequencyReserveInfos.builder().generatorsFilters(List.of(frequencyReserve)).build())) + .build() + .collectFilters().toList()); + + FilterInfos formulaFilter = filter(); + assertEquals(List.of(formulaFilter), + ByFormulaModificationInfos.builder().formulaInfosList(List.of(FormulaInfos.builder().filters(List.of(formulaFilter)).build())).build() + .collectFilters().toList()); + + FilterInfos assignmentFilter = filter(); + assertEquals(List.of(assignmentFilter), + ModificationByAssignmentInfos.builder().assignmentInfosList(List.of(DoubleAssignmentInfos.builder().filters(List.of(assignmentFilter)).build())).build() + .collectFilters().toList()); + } + + @Test + void testNoReferencedFilters() { + assertEquals(0, new ModificationInfos().collectFilters().count()); + assertEquals(0, new ByFilterDeletionInfos().collectFilters().count()); + assertEquals(0, new GeneratorScalingInfos().collectFilters().count()); + assertEquals(0, GeneratorScalingInfos.builder().variations(List.of(new ScalingVariationInfos())).build().collectFilters().count()); + assertEquals(0, new GenerationDispatchInfos().collectFilters().count()); + assertEquals(0, new ByFormulaModificationInfos().collectFilters().count()); + assertEquals(0, new ModificationByAssignmentInfos().collectFilters().count()); + } + + @Test + void testLabelFallsBackToIdWhenNameIsNotResolved() { + UUID id = UUID.randomUUID(); + assertEquals("filter1", new FilterInfos(id, "filter1").label()); + assertEquals(id.toString(), new FilterInfos(id, null).label()); + } +} From 597b82a52b4b18e2a798220fa283ece1b4f00718 Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Wed, 7 Oct 2026 15:56:58 +0200 Subject: [PATCH 04/11] Remove generic --- .../org/gridsuite/modification/dto/ByFilterDeletionInfos.java | 2 +- .../gridsuite/modification/dto/ByFormulaModificationInfos.java | 2 +- .../org/gridsuite/modification/dto/GenerationDispatchInfos.java | 2 +- .../modification/dto/ModificationByAssignmentInfos.java | 2 +- .../java/org/gridsuite/modification/dto/ModificationInfos.java | 2 +- src/main/java/org/gridsuite/modification/dto/ScalingInfos.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java index 6c3d725b7..c3946a1f7 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java @@ -68,7 +68,7 @@ public Map getMapMessageValues() { } @Override - public Stream collectFilters() { + public Stream collectFilters() { return Stream.ofNullable(filters).flatMap(List::stream); } } diff --git a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java index 637ee23df..3f63b8d97 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java @@ -64,7 +64,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream collectFilters() { + public Stream collectFilters() { return Stream.ofNullable(formulaInfosList) .flatMap(List::stream) .flatMap(formulaInfos -> Stream.ofNullable(formulaInfos.getFilters()).flatMap(List::stream)); diff --git a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java index e623e7c2a..2c3958de6 100644 --- a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java @@ -69,7 +69,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream collectFilters() { + public Stream collectFilters() { return Stream.of( Stream.ofNullable(generatorsWithoutOutage).flatMap(List::stream), Stream.ofNullable(generatorsWithFixedSupply).flatMap(List::stream), diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java index 6c8e6b7f8..aee77c3ea 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java @@ -58,7 +58,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream collectFilters() { + public Stream collectFilters() { return Stream.ofNullable(assignmentInfosList) .flatMap(List::stream) .flatMap(assignmentInfos -> Stream.ofNullable(assignmentInfos.getFilters()).flatMap(List::stream)); diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java index c2a371ae8..6a2704ce5 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java @@ -151,7 +151,7 @@ public AbstractModification toModification(ModificationContext context) { * @return the filters this modification references, not those of the modifications it holds. Only their ids are * stored: the directory owns their names, which the caller resolves before exposing or applying the modification. */ - public Stream collectFilters() { + public Stream collectFilters() { return Stream.empty(); } diff --git a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java index d684f03b7..cddc67c84 100644 --- a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java @@ -34,7 +34,7 @@ public class ScalingInfos extends ModificationInfos { private VariationType variationType; @Override - public Stream collectFilters() { + public Stream collectFilters() { return Stream.ofNullable(variations) .flatMap(List::stream) .flatMap(variation -> Stream.ofNullable(variation.getFilters()).flatMap(List::stream)); From 441ab7371b4f5218f8a143f951d591c9b8217bb1 Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Thu, 8 Oct 2026 11:03:14 +0200 Subject: [PATCH 05/11] Tweak --- .../java/org/gridsuite/modification/dto/FilterInfos.java | 6 ++++-- .../modification/modifications/AbstractScaling.java | 4 ++-- .../modification/modifications/GenerationDispatch.java | 2 +- .../org/gridsuite/modification/utils/ModificationUtils.java | 2 +- .../gridsuite/modification/dto/ModificationFiltersTest.java | 4 ++-- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/dto/FilterInfos.java b/src/main/java/org/gridsuite/modification/dto/FilterInfos.java index 21f567e96..4043b82f7 100644 --- a/src/main/java/org/gridsuite/modification/dto/FilterInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/FilterInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.experimental.SuperBuilder; @@ -28,13 +29,14 @@ public class FilterInfos { @Schema(description = "id of filter") private UUID id; - @Schema(description = "name of filter, not stored: resolved from the directory which owns it, null if the filter no longer exists there") + @Schema(description = "name of filter, null if the filter no longer exists") private String name; /** * @return what reports show for this filter: its resolved name, or its id when it could not be resolved */ - public String label() { + @JsonIgnore + public String getLabel() { return name != null ? name : String.valueOf(id); } diff --git a/src/main/java/org/gridsuite/modification/modifications/AbstractScaling.java b/src/main/java/org/gridsuite/modification/modifications/AbstractScaling.java index 95d67e204..9654431f7 100644 --- a/src/main/java/org/gridsuite/modification/modifications/AbstractScaling.java +++ b/src/main/java/org/gridsuite/modification/modifications/AbstractScaling.java @@ -63,7 +63,7 @@ public void apply(Network network, ReportNode subReportNode) { var filters = variations.stream() .flatMap(v -> v.getFilters().stream()) .filter(distinctByKey(FilterInfos::getId)) - .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::label)); + .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getLabel)); Map exportFilters = ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, getName()); if (exportFilters != null) { @@ -74,7 +74,7 @@ public void apply(Network network, ReportNode subReportNode) { Set identifiableAttributes = ModificationUtils.getIdentifiableAttributes(exportFilters, variation.getFilters(), subReportNode); if (CollectionUtils.isEmpty(identifiableAttributes)) { - String filterNames = variation.getFilters().stream().map(FilterInfos::label).collect(Collectors.joining(", ")); + String filterNames = variation.getFilters().stream().map(FilterInfos::getLabel).collect(Collectors.joining(", ")); createReport(subReportNode, "network.modification.allFiltersWrong.variation", Map.of("filterNames", filterNames), TypedValue.WARN_SEVERITY); } else { applyVariation(network, subReportNode, identifiableAttributes, variation); diff --git a/src/main/java/org/gridsuite/modification/modifications/GenerationDispatch.java b/src/main/java/org/gridsuite/modification/modifications/GenerationDispatch.java index f48c59fe6..1fda9f234 100644 --- a/src/main/java/org/gridsuite/modification/modifications/GenerationDispatch.java +++ b/src/main/java/org/gridsuite/modification/modifications/GenerationDispatch.java @@ -384,7 +384,7 @@ private List exportFilters(List generatorsFilters if (CollectionUtils.isEmpty(generatorsFilters)) { return List.of(); } - var filters = generatorsFilters.stream().collect(Collectors.toMap(GeneratorsFilterInfos::getId, GeneratorsFilterInfos::label, (id1, id2) -> id1, LinkedHashMap::new)); + var filters = generatorsFilters.stream().collect(Collectors.toMap(GeneratorsFilterInfos::getId, GeneratorsFilterInfos::getLabel, (id1, id2) -> id1, LinkedHashMap::new)); // export filters Map exportedGenerators = filterService diff --git a/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java b/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java index 0d2124bbe..2ec0ab4c1 100644 --- a/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java +++ b/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java @@ -1735,7 +1735,7 @@ public boolean isValidFilter(ReportNode subReportNode, public static Set getIdentifiableAttributes(Map exportFilters, List filterInfos, ReportNode subReportNode) { filterInfos.stream() .filter(f -> !exportFilters.containsKey(f.getId())) - .forEach(f -> createReport(subReportNode, "network.modification.filterNotFound", Map.of("name", f.label()), TypedValue.WARN_SEVERITY)); + .forEach(f -> createReport(subReportNode, "network.modification.filterNotFound", Map.of("name", f.getLabel()), TypedValue.WARN_SEVERITY)); return filterInfos .stream() diff --git a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java index 2ed9ae49c..23c71ddea 100644 --- a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java +++ b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java @@ -78,7 +78,7 @@ void testNoReferencedFilters() { @Test void testLabelFallsBackToIdWhenNameIsNotResolved() { UUID id = UUID.randomUUID(); - assertEquals("filter1", new FilterInfos(id, "filter1").label()); - assertEquals(id.toString(), new FilterInfos(id, null).label()); + assertEquals("filter1", new FilterInfos(id, "filter1").getLabel()); + assertEquals(id.toString(), new FilterInfos(id, null).getLabel()); } } From be39ab5d13f4194ee4d798559ec899ab57e5292e Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Thu, 8 Oct 2026 11:30:55 +0200 Subject: [PATCH 06/11] Add author --- .../org/gridsuite/modification/dto/ModificationFiltersTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java index 23c71ddea..9a602a79e 100644 --- a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java +++ b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java @@ -17,6 +17,8 @@ /** * Filters referenced by modifications, whose names are resolved from the directory by the caller. + * + * @author Hugo Marcellin */ class ModificationFiltersTest { From 15f19f54463a9245376d88153ba7797fe0d9622a Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Thu, 15 Oct 2026 17:06:12 +0200 Subject: [PATCH 07/11] checkstyle --- .../gridsuite/modification/dto/GenerationDispatchInfos.java | 4 +++- .../java/org/gridsuite/modification/dto/ScalingInfos.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java index 6cf28661e..d42e39cea 100644 --- a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java @@ -20,8 +20,10 @@ import org.gridsuite.modification.modifications.AbstractModification; import org.gridsuite.modification.modifications.GenerationDispatch; -import java.util.List; import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.UUID; import java.util.function.Function; import java.util.stream.Stream; diff --git a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java index caed5f3ae..efda38b8a 100644 --- a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java @@ -18,9 +18,9 @@ import org.gridsuite.modification.context.dto.FilterWithDistributionKeys; import java.util.List; -import java.util.stream.Stream; import java.util.Map; import java.util.UUID; +import java.util.stream.Stream; import static org.gridsuite.modification.error.NetworkModificationException.createModificationAttributeMissing; From 200b6e15398078d25ab035cf2f07d43dc390386b Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Thu, 15 Oct 2026 17:10:52 +0200 Subject: [PATCH 08/11] fix merge issues --- .../modification/dto/FilterInfos.java | 9 ------- .../dto/GenerationDispatchInfos.java | 13 +-------- .../dto/GeneratorsFilterInfos.java | 27 ------------------- .../dto/ModificationFiltersTest.java | 17 +++--------- 4 files changed, 4 insertions(+), 62 deletions(-) delete mode 100644 src/main/java/org/gridsuite/modification/dto/GeneratorsFilterInfos.java diff --git a/src/main/java/org/gridsuite/modification/dto/FilterInfos.java b/src/main/java/org/gridsuite/modification/dto/FilterInfos.java index 4043b82f7..7cdaaf227 100644 --- a/src/main/java/org/gridsuite/modification/dto/FilterInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/FilterInfos.java @@ -6,7 +6,6 @@ */ package org.gridsuite.modification.dto; -import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.experimental.SuperBuilder; @@ -32,12 +31,4 @@ public class FilterInfos { @Schema(description = "name of filter, null if the filter no longer exists") private String name; - /** - * @return what reports show for this filter: its resolved name, or its id when it could not be resolved - */ - @JsonIgnore - public String getLabel() { - return name != null ? name : String.valueOf(id); - } - } diff --git a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java index d42e39cea..cd70ec6fe 100644 --- a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java @@ -21,9 +21,6 @@ import org.gridsuite.modification.modifications.GenerationDispatch; import java.util.*; -import java.util.List; -import java.util.Map; -import java.util.UUID; import java.util.function.Function; import java.util.stream.Stream; @@ -59,7 +56,7 @@ public class GenerationDispatchInfos extends ModificationInfos { @Override public AbstractModification toModification(ModificationContext modificationContext) { - List referencedFilterIds = streamReferencedFilters().map(FilterInfos::getId).distinct().toList(); + List referencedFilterIds = collectFilters().map(FilterInfos::getId).distinct().toList(); Map filtersById = referencedFilterIds.isEmpty() ? Map.of() : modificationContext.filterLoader().load(referencedFilterIds); @@ -83,14 +80,6 @@ public AbstractModification toModification(ModificationContext modificationConte .build(); } - private Stream streamReferencedFilters() { - return Stream.of( - nullToEmpty(getGeneratorsWithoutOutage()).stream(), - nullToEmpty(getGeneratorsWithFixedSupply()).stream(), - nullToEmpty(getGeneratorsFrequencyReserve()).stream().flatMap(reserve -> nullToEmpty(reserve.getGeneratorsFilters()).stream()) - ).flatMap(Function.identity()); - } - private static List nullToEmpty(List list) { return list == null ? List.of() : list; } diff --git a/src/main/java/org/gridsuite/modification/dto/GeneratorsFilterInfos.java b/src/main/java/org/gridsuite/modification/dto/GeneratorsFilterInfos.java deleted file mode 100644 index 7b890ec72..000000000 --- a/src/main/java/org/gridsuite/modification/dto/GeneratorsFilterInfos.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2023, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -package org.gridsuite.modification.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import lombok.experimental.SuperBuilder; - -import java.util.UUID; - -/** - * @author Franck Lecuyer - */ -@SuperBuilder -@NoArgsConstructor -@EqualsAndHashCode(callSuper = true) -@Schema(description = "Generators filter Infos") -public class GeneratorsFilterInfos extends FilterInfos { - - public GeneratorsFilterInfos(UUID id, String name) { - super(id, name); - } -} diff --git a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java index 9a602a79e..7e4cf287d 100644 --- a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java +++ b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java @@ -26,10 +26,6 @@ private static FilterInfos filter() { return FilterInfos.builder().id(UUID.randomUUID()).build(); } - private static GeneratorsFilterInfos generatorsFilter() { - return GeneratorsFilterInfos.builder().id(UUID.randomUUID()).build(); - } - @Test void testReferencedFilters() { FilterInfos deletionFilter = filter(); @@ -44,9 +40,9 @@ void testReferencedFilters() { ScalingVariationInfos.builder().filters(List.of(scalingFilter2)).build())).build() .collectFilters().toList()); - GeneratorsFilterInfos withoutOutage = generatorsFilter(); - GeneratorsFilterInfos withFixedSupply = generatorsFilter(); - GeneratorsFilterInfos frequencyReserve = generatorsFilter(); + FilterInfos withoutOutage = filter(); + FilterInfos withFixedSupply = filter(); + FilterInfos frequencyReserve = filter(); assertEquals(List.of(withoutOutage, withFixedSupply, frequencyReserve), GenerationDispatchInfos.builder() .generatorsWithoutOutage(List.of(withoutOutage)) @@ -76,11 +72,4 @@ void testNoReferencedFilters() { assertEquals(0, new ByFormulaModificationInfos().collectFilters().count()); assertEquals(0, new ModificationByAssignmentInfos().collectFilters().count()); } - - @Test - void testLabelFallsBackToIdWhenNameIsNotResolved() { - UUID id = UUID.randomUUID(); - assertEquals("filter1", new FilterInfos(id, "filter1").getLabel()); - assertEquals(id.toString(), new FilterInfos(id, null).getLabel()); - } } From efb5e0058acac9785e5d69798ce201bb6bd971c1 Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Wed, 28 Oct 2026 15:06:10 +0100 Subject: [PATCH 09/11] Rename collectFilters to getFiltersStream --- .../dto/ByFilterDeletionInfos.java | 2 +- .../dto/ByFormulaModificationInfos.java | 2 +- .../dto/GenerationDispatchInfos.java | 4 ++-- .../dto/ModificationByAssignmentInfos.java | 2 +- .../modification/dto/ModificationInfos.java | 2 +- .../modification/dto/ScalingInfos.java | 2 +- .../dto/ModificationFiltersTest.java | 24 +++++++++---------- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java index c3946a1f7..885cd4901 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFilterDeletionInfos.java @@ -68,7 +68,7 @@ public Map getMapMessageValues() { } @Override - public Stream collectFilters() { + public Stream getFiltersStream() { return Stream.ofNullable(filters).flatMap(List::stream); } } diff --git a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java index 2a45adb63..86f76625b 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java @@ -66,7 +66,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream collectFilters() { + public Stream getFiltersStream() { return Stream.ofNullable(formulaInfosList) .flatMap(List::stream) .flatMap(formulaInfos -> Stream.ofNullable(formulaInfos.getFilters()).flatMap(List::stream)); diff --git a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java index cd70ec6fe..7dc589423 100644 --- a/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/GenerationDispatchInfos.java @@ -56,7 +56,7 @@ public class GenerationDispatchInfos extends ModificationInfos { @Override public AbstractModification toModification(ModificationContext modificationContext) { - List referencedFilterIds = collectFilters().map(FilterInfos::getId).distinct().toList(); + List referencedFilterIds = getFiltersStream().map(FilterInfos::getId).distinct().toList(); Map filtersById = referencedFilterIds.isEmpty() ? Map.of() : modificationContext.filterLoader().load(referencedFilterIds); @@ -92,7 +92,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream collectFilters() { + public Stream getFiltersStream() { return Stream.of( Stream.ofNullable(generatorsWithoutOutage).flatMap(List::stream), Stream.ofNullable(generatorsWithFixedSupply).flatMap(List::stream), diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java index f189d0d19..a9a528099 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java @@ -60,7 +60,7 @@ public ReportNode createSubReportNode(ReportNode reportNode) { } @Override - public Stream collectFilters() { + public Stream getFiltersStream() { return Stream.ofNullable(assignmentInfosList) .flatMap(List::stream) .flatMap(assignmentInfos -> Stream.ofNullable(assignmentInfos.getFilters()).flatMap(List::stream)); diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java index f57d894ee..4fac25ca6 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java @@ -154,7 +154,7 @@ public AbstractModification toModification(ModificationContext context) { * @return the filters this modification references, not those of the modifications it holds. Only their ids are * stored: the directory owns their names, which the caller resolves before exposing or applying the modification. */ - public Stream collectFilters() { + public Stream getFiltersStream() { return Stream.empty(); } diff --git a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java index efda38b8a..7a6840a1f 100644 --- a/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ScalingInfos.java @@ -72,7 +72,7 @@ public void check() { } @Override - public Stream collectFilters() { + public Stream getFiltersStream() { return Stream.ofNullable(variations) .flatMap(List::stream) .flatMap(variation -> Stream.ofNullable(variation.getFilters()).flatMap(List::stream)); diff --git a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java index 7e4cf287d..e8a6cad37 100644 --- a/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java +++ b/src/test/java/org/gridsuite/modification/dto/ModificationFiltersTest.java @@ -30,7 +30,7 @@ private static FilterInfos filter() { void testReferencedFilters() { FilterInfos deletionFilter = filter(); assertEquals(List.of(deletionFilter), - ByFilterDeletionInfos.builder().filters(List.of(deletionFilter)).build().collectFilters().toList()); + ByFilterDeletionInfos.builder().filters(List.of(deletionFilter)).build().getFiltersStream().toList()); FilterInfos scalingFilter1 = filter(); FilterInfos scalingFilter2 = filter(); @@ -38,7 +38,7 @@ void testReferencedFilters() { GeneratorScalingInfos.builder().variations(List.of( ScalingVariationInfos.builder().filters(List.of(scalingFilter1)).build(), ScalingVariationInfos.builder().filters(List.of(scalingFilter2)).build())).build() - .collectFilters().toList()); + .getFiltersStream().toList()); FilterInfos withoutOutage = filter(); FilterInfos withFixedSupply = filter(); @@ -49,27 +49,27 @@ void testReferencedFilters() { .generatorsWithFixedSupply(List.of(withFixedSupply)) .generatorsFrequencyReserve(List.of(GeneratorsFrequencyReserveInfos.builder().generatorsFilters(List.of(frequencyReserve)).build())) .build() - .collectFilters().toList()); + .getFiltersStream().toList()); FilterInfos formulaFilter = filter(); assertEquals(List.of(formulaFilter), ByFormulaModificationInfos.builder().formulaInfosList(List.of(FormulaInfos.builder().filters(List.of(formulaFilter)).build())).build() - .collectFilters().toList()); + .getFiltersStream().toList()); FilterInfos assignmentFilter = filter(); assertEquals(List.of(assignmentFilter), ModificationByAssignmentInfos.builder().assignmentInfosList(List.of(DoubleAssignmentInfos.builder().filters(List.of(assignmentFilter)).build())).build() - .collectFilters().toList()); + .getFiltersStream().toList()); } @Test void testNoReferencedFilters() { - assertEquals(0, new ModificationInfos().collectFilters().count()); - assertEquals(0, new ByFilterDeletionInfos().collectFilters().count()); - assertEquals(0, new GeneratorScalingInfos().collectFilters().count()); - assertEquals(0, GeneratorScalingInfos.builder().variations(List.of(new ScalingVariationInfos())).build().collectFilters().count()); - assertEquals(0, new GenerationDispatchInfos().collectFilters().count()); - assertEquals(0, new ByFormulaModificationInfos().collectFilters().count()); - assertEquals(0, new ModificationByAssignmentInfos().collectFilters().count()); + assertEquals(0, new ModificationInfos().getFiltersStream().count()); + assertEquals(0, new ByFilterDeletionInfos().getFiltersStream().count()); + assertEquals(0, new GeneratorScalingInfos().getFiltersStream().count()); + assertEquals(0, GeneratorScalingInfos.builder().variations(List.of(new ScalingVariationInfos())).build().getFiltersStream().count()); + assertEquals(0, new GenerationDispatchInfos().getFiltersStream().count()); + assertEquals(0, new ByFormulaModificationInfos().getFiltersStream().count()); + assertEquals(0, new ModificationByAssignmentInfos().getFiltersStream().count()); } } From ca2ea0e1334d9a2b21ec874c34a2240ffeb56421 Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Wed, 28 Oct 2026 15:19:42 +0100 Subject: [PATCH 10/11] checkstyle --- .../gridsuite/modification/dto/ByFormulaModificationInfos.java | 2 +- .../modification/dto/ModificationByAssignmentInfos.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java index 86f76625b..e7ac6412c 100644 --- a/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ByFormulaModificationInfos.java @@ -21,8 +21,8 @@ import java.util.HashMap; import java.util.List; -import java.util.stream.Stream; import java.util.Map; +import java.util.stream.Stream; /** * @author Seddik Yengui diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java index a9a528099..88097e956 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationByAssignmentInfos.java @@ -22,8 +22,8 @@ import java.util.HashMap; import java.util.List; -import java.util.stream.Stream; import java.util.Map; +import java.util.stream.Stream; /** * @author Thang PHAM From 8528b93e1032e5b76cee07bd3e561a7ef98dcdcb Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Wed, 28 Oct 2026 15:24:19 +0100 Subject: [PATCH 11/11] add JsonIgnore to getFiltersStream --- .../java/org/gridsuite/modification/dto/ModificationInfos.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java index 4fac25ca6..a9bb519e3 100644 --- a/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/dto/ModificationInfos.java @@ -154,6 +154,7 @@ public AbstractModification toModification(ModificationContext context) { * @return the filters this modification references, not those of the modifications it holds. Only their ids are * stored: the directory owns their names, which the caller resolves before exposing or applying the modification. */ + @JsonIgnore public Stream getFiltersStream() { return Stream.empty(); }