diff --git a/src/main/java/org/gridsuite/filter/server/FiltersToGroovyScript.java b/src/main/java/org/gridsuite/filter/server/FiltersToGroovyScript.java index ff009753..831f7991 100644 --- a/src/main/java/org/gridsuite/filter/server/FiltersToGroovyScript.java +++ b/src/main/java/org/gridsuite/filter/server/FiltersToGroovyScript.java @@ -249,8 +249,11 @@ public String generateGroovyScriptFromFilters(AbstractFilter filter) { if (!CollectionUtils.isEmpty(hvdcLineFilter.getCountries2())) { template.add(COUNTRIES + "2", hvdcLineFilter.getCountries2().stream().collect(joining("','", "['", "']"))); } - if (hvdcLineFilter.getNominalVoltage() != null) { - addFilterNominalVoltage(template, hvdcLineFilter.getNominalVoltage(), null); + if (hvdcLineFilter.getNominalVoltage1() != null) { + addFilterNominalVoltage(template, hvdcLineFilter.getNominalVoltage1(), "1"); + } + if (hvdcLineFilter.getNominalVoltage2() != null) { + addFilterNominalVoltage(template, hvdcLineFilter.getNominalVoltage2(), "2"); } if (!StringUtils.isEmpty(hvdcLineFilter.getSubstationName1())) { template.add(SUBSTATION_NAME + "1", hvdcLineFilter.getSubstationName1()); diff --git a/src/main/java/org/gridsuite/filter/server/HvdcLineFilterRepositoryProxy.java b/src/main/java/org/gridsuite/filter/server/HvdcLineFilterRepositoryProxy.java index 93b81203..8d82b028 100644 --- a/src/main/java/org/gridsuite/filter/server/HvdcLineFilterRepositoryProxy.java +++ b/src/main/java/org/gridsuite/filter/server/HvdcLineFilterRepositoryProxy.java @@ -44,7 +44,8 @@ public AbstractFilter toDto(HvdcLineFilterEntity entity) { .countries2(AbstractFilterRepositoryProxy.cloneIfNotEmptyOrNull(entity.getCountries2())) .substationName1(entity.getSubstationName1()) .substationName2(entity.getSubstationName2()) - .nominalVoltage(AbstractFilterRepositoryProxy.convert(entity.getNominalVoltage())), + .nominalVoltage1(AbstractFilterRepositoryProxy.convert(entity.getNominalVoltage1())) + .nominalVoltage2(AbstractFilterRepositoryProxy.convert(entity.getNominalVoltage2())), entity).build(); } @@ -57,7 +58,8 @@ public HvdcLineFilterEntity fromDto(AbstractFilter dto) { .substationName2(hvdcLineFilter.getSubstationName2()) .countries1(AbstractFilterRepositoryProxy.cloneIfNotEmptyOrNull(hvdcLineFilter.getCountries1())) .countries2(AbstractFilterRepositoryProxy.cloneIfNotEmptyOrNull(hvdcLineFilter.getCountries2())) - .nominalVoltage(AbstractFilterRepositoryProxy.convert(hvdcLineFilter.getNominalVoltage())); + .nominalVoltage1(AbstractFilterRepositoryProxy.convert(hvdcLineFilter.getNominalVoltage1())) + .nominalVoltage2(AbstractFilterRepositoryProxy.convert(hvdcLineFilter.getNominalVoltage2())); buildGenericFilter(hvdcLineFilterEntityBuilder, hvdcLineFilter); return hvdcLineFilterEntityBuilder.build(); } diff --git a/src/main/java/org/gridsuite/filter/server/dto/HvdcLineFilter.java b/src/main/java/org/gridsuite/filter/server/dto/HvdcLineFilter.java index 3ea73a54..8b59623c 100644 --- a/src/main/java/org/gridsuite/filter/server/dto/HvdcLineFilter.java +++ b/src/main/java/org/gridsuite/filter/server/dto/HvdcLineFilter.java @@ -40,8 +40,11 @@ public FilterType getType() { @Schema(description = "Countries2") private Set countries2; - @Schema(description = "Nominal voltage") - private NumericalFilter nominalVoltage; + @Schema(description = "Nominal voltage 1") + private NumericalFilter nominalVoltage1; + + @Schema(description = "Nominal voltage 2") + private NumericalFilter nominalVoltage2; @Override public boolean isEmpty() { @@ -50,6 +53,7 @@ public boolean isEmpty() { && substationName2 == null && CollectionUtils.isEmpty(countries1) && CollectionUtils.isEmpty(countries2) - && nominalVoltage == null; + && nominalVoltage1 == null + && nominalVoltage2 == null; } } diff --git a/src/main/java/org/gridsuite/filter/server/entities/HvdcLineFilterEntity.java b/src/main/java/org/gridsuite/filter/server/entities/HvdcLineFilterEntity.java index 8ecba068..b01fe27b 100644 --- a/src/main/java/org/gridsuite/filter/server/entities/HvdcLineFilterEntity.java +++ b/src/main/java/org/gridsuite/filter/server/entities/HvdcLineFilterEntity.java @@ -50,10 +50,18 @@ public class HvdcLineFilterEntity extends AbstractGenericFilterEntity { String substationName2; @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) - @JoinColumn(name = "numericFilterId_id", + @JoinColumn(name = "numericFilterId1_id", referencedColumnName = "id", foreignKey = @ForeignKey( - name = "numericFilterId_id_fk" + name = "numericFilterId_id_fk1" ), nullable = true) - NumericFilterEntity nominalVoltage; + NumericFilterEntity nominalVoltage1; + + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @JoinColumn(name = "numericFilterId2_id", + referencedColumnName = "id", + foreignKey = @ForeignKey( + name = "numericFilterId_id_fk2" + ), nullable = true) + NumericFilterEntity nominalVoltage2; } diff --git a/src/main/resources/filter.sql b/src/main/resources/filter.sql index f009e3c3..3d22e57a 100644 --- a/src/main/resources/filter.sql +++ b/src/main/resources/filter.sql @@ -81,7 +81,8 @@ equipmentName varchar(255), substationName1 varchar(255), substationName2 varchar(255), - numericFilterId_id uuid, + numericFilterId1_id uuid, + numericFilterId2_id uuid, primary key (id) ); @@ -314,8 +315,13 @@ create index twoWindingsTransformerFilterEntity_countries_idx on TwoWindingsTran references generator_filter; alter table if exists hvdc_line_filter - add constraint numericFilterId_id_fk - foreign key (numericFilterId_id) + add constraint numericFilterId_id_fk1 + foreign key (numericFilterId1_id) + references numericFilter; + + alter table if exists hvdc_line_filter + add constraint numericFilterId_id_fk2 + foreign key (numericFilterId2_id) references numericFilter; alter table if exists HvdcLineFilterEntity_countries1 diff --git a/src/main/resources/hvdcLine.st b/src/main/resources/hvdcLine.st index 0724c8d3..d3281a49 100644 --- a/src/main/resources/hvdcLine.st +++ b/src/main/resources/hvdcLine.st @@ -8,13 +8,17 @@ for (equipment in network.) { FiltersUtils.isLocatedIn(, equipment.converterStation1.terminal) && <\\> FiltersUtils.isLocatedIn(, equipment.converterStation2.terminal) - && <\\> - FiltersUtils.isEqualityNominalVoltage(equipment.nominalVoltage, )<\\> - FiltersUtils.isRangeNominalVoltage(equipment.nominalVoltage, , )<\\> - FiltersUtils.isApproxNominalVoltage(equipment.nominalVoltage, , ) - && <\\> + && <\\> + FiltersUtils.isEqualityNominalVoltage(equipment.converterStation1.terminal, )<\\> + FiltersUtils.isRangeNominalVoltage(equipment.converterStation1.terminal, , )<\\> + FiltersUtils.isApproxNominalVoltage(equipment.converterStation1.terminal, , ) + && <\\> + FiltersUtils.isEqualityNominalVoltage(equipment.converterStation2.terminal, )<\\> + FiltersUtils.isRangeNominalVoltage(equipment.converterStation2.terminal, , )<\\> + FiltersUtils.isApproxNominalVoltage(equipment.converterStation2.terminal, , ) + && <\\> equipment.converterStation1.terminal.voltageLevel.substation.name.equals('') - && <\\> + && <\\> equipment.converterStation2.terminal.voltageLevel.substation.name.equals('') ) { filter(equipment.id) { equipments equipment.id } diff --git a/src/test/java/org/gridsuite/filter/server/FilterEntityControllerTest.java b/src/test/java/org/gridsuite/filter/server/FilterEntityControllerTest.java index 5dc5636d..511c1737 100644 --- a/src/test/java/org/gridsuite/filter/server/FilterEntityControllerTest.java +++ b/src/test/java/org/gridsuite/filter/server/FilterEntityControllerTest.java @@ -283,8 +283,18 @@ public void testVscConverterStationFilter() throws Exception { @Test public void testHvdcLineFilter() throws Exception { + List rangeTypes = new ArrayList<>(); + rangeTypes.add(RangeType.EQUALITY); + rangeTypes.add(RangeType.APPROX); + List values1 = new ArrayList<>(); + values1.add(225.); + values1.add(380.); + List values2 = new ArrayList<>(); + values2.add(null); + values2.add(5.); + insertHvdcLineFilter(FilterType.HVDC_LINE, "testHvdcLine", UUID.fromString("77614d91-c168-4f89-8fb9-77a23729e88e"), - "hvdcId1", "hvdcName1", "s1", "s2", "descr hvdc", Set.of("FR"), Set.of("UK"), RangeType.EQUALITY, 380., null); + "hvdcId1", "hvdcName1", "s1", "s2", "descr hvdc", Set.of("FR"), Set.of("UK"), rangeTypes, values1, values2); } @Test @@ -536,7 +546,7 @@ private void insertTransformerFilter(FilterType type, String name, UUID id, Stri private void insertHvdcLineFilter(FilterType type, String name, UUID id, String equipmentID, String equipmentName, String substationName1, String substationName2, String description, Set countries1, - Set countries2, RangeType rangeType, Double value1, Double value2) throws Exception { + Set countries2, List rangeTypes, List values1, List values2) throws Exception { String filter = "{" + joinWithComma( jsonVal("name", name), jsonVal("id", id.toString()), @@ -557,8 +567,10 @@ private void insertHvdcLineFilter(FilterType type, String name, UUID id, String if (description != null) { filter += ", " + jsonVal("description", description); } - if (rangeType != null) { - filter += ", " + numericalRange("nominalVoltage", rangeType, value1, value2); + if (rangeTypes != null) { + for (int i = 0; i < rangeTypes.size(); ++i) { + filter += ", " + numericalRange("nominalVoltage" + (i + 1), rangeTypes.get(i), values1.get(i), values2.get(i)); + } } if (countries1 != null) { filter += ", " + jsonSet("countries1", countries1); diff --git a/src/test/java/org/gridsuite/filter/server/GenerateScriptFromFiltersTest.java b/src/test/java/org/gridsuite/filter/server/GenerateScriptFromFiltersTest.java index 7719fcbb..ffc465a4 100644 --- a/src/test/java/org/gridsuite/filter/server/GenerateScriptFromFiltersTest.java +++ b/src/test/java/org/gridsuite/filter/server/GenerateScriptFromFiltersTest.java @@ -410,7 +410,8 @@ public void generateScriptHvdcLineFilterTest() { " (FiltersUtils.matchID('hvdcId1', equipment) || FiltersUtils.matchName('hvdcName1', equipment))\n" + " && FiltersUtils.isLocatedIn(['FR'], equipment.converterStation1.terminal)\n" + " && FiltersUtils.isLocatedIn(['IT'], equipment.converterStation2.terminal)\n" + - " && FiltersUtils.isRangeNominalVoltage(equipment.nominalVoltage, 200.0, 400.0)\n" + + " && FiltersUtils.isRangeNominalVoltage(equipment.converterStation1.terminal, 200.0, 400.0)\n" + + " && FiltersUtils.isApproxNominalVoltage(equipment.converterStation2.terminal, 380.0, 3.0)\n" + " && equipment.converterStation1.terminal.voltageLevel.substation.name.equals('s1')\n" + " && equipment.converterStation2.terminal.voltageLevel.substation.name.equals('s2')\n" + " ) {\n" + @@ -425,7 +426,8 @@ public void generateScriptHvdcLineFilterTest() { .substationName2("s2") .countries1(countries1) .countries2(countries2) - .nominalVoltage(NumericalFilter.builder().type(RangeType.RANGE).value1(200.).value2(400.).build()) + .nominalVoltage1(NumericalFilter.builder().type(RangeType.RANGE).value1(200.).value2(400.).build()) + .nominalVoltage2(NumericalFilter.builder().type(RangeType.APPROX).value1(380.).value2(3.).build()) .build())); } }