Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9b859d6
Move utility functions from computation library
Tristan-WorkGH Sep 25, 2025
3a9bddd
prepare class test
Tristan-WorkGH Sep 17, 2025
34de3c6
Set API nullable
Tristan-WorkGH Sep 17, 2025
68d1edf
note
Tristan-WorkGH Sep 17, 2025
94733e6
enhance
Tristan-WorkGH Sep 25, 2025
138e318
Move tests from computation
Tristan-WorkGH Oct 7, 2025
4a0c856
fix error
Tristan-WorkGH Oct 7, 2025
097b55d
Add missing fields for some equipment types
Tristan-WorkGH Oct 7, 2025
697bba8
comment
Tristan-WorkGH Oct 3, 2025
55fd0df
fix test warn
Tristan-WorkGH Oct 7, 2025
b44f3ad
Add support for other equipment types
Tristan-WorkGH Oct 7, 2025
4111a1f
Remoce unused import
FranckLecuyer Oct 8, 2025
2404ec1
Fix bad field type and fix bad values field when building expert filt…
FranckLecuyer Oct 8, 2025
d134449
Fix other bad field type and fix other pbs when building expert filte…
FranckLecuyer Oct 8, 2025
0b88ccf
Handle minimal list of fields for hvdc converter stations, in order t…
FranckLecuyer Oct 8, 2025
861e479
Fix failing tests
FranckLecuyer Oct 8, 2025
81098b9
Improve code coverage
FranckLecuyer Oct 8, 2025
9143381
Improve code coverage
FranckLecuyer Oct 8, 2025
0e648a3
Merge branch 'main' into global-filters/add-missing-parts
FranckLecuyer Oct 9, 2025
c390433
Improve code coverage
FranckLecuyer Oct 9, 2025
7e29e10
Fix some sonar issues
FranckLecuyer Oct 9, 2025
e282de5
Fix other sonar issues
FranckLecuyer Oct 9, 2025
2373b20
simplify cause genericFilters always null
dbraquart Oct 15, 2025
e6d6430
sonar issue
dbraquart Oct 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,11 @@
<artifactId>hamcrest</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.powsybl</groupId>
<artifactId>powsybl-iidm-test</artifactId>
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/org/gridsuite/filter/AbstractFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.expertfilter.ExpertFilter;
import org.gridsuite.filter.identifierlistfilter.FilterEquipments;
Expand Down Expand Up @@ -43,7 +45,7 @@ public abstract class AbstractFilter implements IFilterAttributes {

private UUID id;

private Date modificationDate;
private Date modificationDate; // TODO use Instant like in servers (client not on same timezone than server)

private EquipmentType equipmentType;

Expand Down
7 changes: 5 additions & 2 deletions src/main/java/org/gridsuite/filter/IFilterAttributes.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,16 @@
import org.gridsuite.filter.utils.EquipmentType;
import org.gridsuite.filter.utils.FilterType;

import java.util.Date;
import java.util.UUID;

/**
* @author Jacques Borsenberger <jacques.borsenberger at rte-france.com>
*/
public interface IFilterAttributes {
java.util.UUID getId();
UUID getId();

java.util.Date getModificationDate();
Date getModificationDate(); // TODO use Instant like in servers (client not on same timezone than server)

FilterType getType();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.gridsuite.filter.exception;

import lombok.experimental.StandardException;

@StandardException
public class InvalidEquipmentType extends RuntimeException {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.gridsuite.filter.exception;

import lombok.experimental.StandardException;

@StandardException
public class UnknownFilterType extends RuntimeException {
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@

import com.fasterxml.jackson.annotation.JsonProperty;
import com.powsybl.iidm.network.TopologyKind;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.AbstractFilter;
import org.gridsuite.filter.expertfilter.expertrule.AbstractExpertRule;
Expand All @@ -24,11 +21,11 @@
/**
* @author Antoine Bouhours <antoine.bouhours at rte-france.com>
*/
@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ExpertFilter extends AbstractFilter {

private AbstractExpertRule rules;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.powsybl.iidm.network.Identifiable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.identifierlistfilter.FilterEquipments;
Expand Down Expand Up @@ -46,8 +45,7 @@
@JsonInclude(JsonInclude.Include.NON_NULL)
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Data
@SuperBuilder
public abstract class AbstractExpertRule {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Identifiable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.identifierlistfilter.FilterEquipments;
Expand All @@ -30,8 +27,9 @@
*/
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@SuperBuilder
public class BooleanExpertRule extends AbstractExpertRule {
private Boolean value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Identifiable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.identifierlistfilter.FilterEquipments;
Expand All @@ -23,6 +26,9 @@
* @author Antoine Bouhours <antoine.bouhours at rte-france.com>
*/
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@SuperBuilder
public class CombinatorExpertRule extends AbstractExpertRule {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Identifiable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.identifierlistfilter.FilterEquipments;
Expand All @@ -24,6 +27,9 @@
* @author Antoine Bouhours <antoine.bouhours at rte-france.com>
*/
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@SuperBuilder
public class EnumExpertRule extends StringExpertRule {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,15 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Identifiable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.identifierlistfilter.FilterEquipments;
import org.gridsuite.filter.utils.expertfilter.DataType;
import org.gridsuite.filter.utils.expertfilter.ExpertFilterUtils;
import org.gridsuite.filter.FilterLoader;

import java.util.Map;
import java.util.UUID;
Expand All @@ -25,6 +28,9 @@
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
*/
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@SuperBuilder
public class FilterUuidExpertRule extends StringExpertRule {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Identifiable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.identifierlistfilter.FilterEquipments;
Expand All @@ -31,8 +28,9 @@
*/
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@SuperBuilder
public class NumberExpertRule extends AbstractExpertRule {
private Double value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Identifiable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.identifierlistfilter.FilterEquipments;
Expand All @@ -30,8 +27,9 @@
*/
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@SuperBuilder
public class PropertiesExpertRule extends AbstractExpertRule {
private String propertyName;
Expand Down Expand Up @@ -64,12 +62,4 @@ public DataType getDataType() {
public String getStringValue() {
return this.getPropertyName();
}

public String getPropertyName() {
return this.propertyName;
}

public List<String> getPropertyValues() {
return this.propertyValues;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Identifiable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.apache.commons.lang3.StringUtils;
import org.gridsuite.filter.FilterLoader;
Expand All @@ -34,8 +31,9 @@
*/
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@SuperBuilder
public class StringExpertRule extends AbstractExpertRule {
private String value;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package org.gridsuite.filter.globalfilter;

import com.powsybl.iidm.network.Network;
import lombok.NonNull;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.utils.EquipmentType;

import java.util.List;
import java.util.Objects;
import java.util.UUID;

public abstract class AbstractGlobalFilterService implements FilterLoader {
protected abstract Network getNetwork(@NonNull UUID networkUuid, @NonNull String variantId);

/**
* Get filtered equipment IDs.
* @param networkUuid the network to load
* @param variantId the network variant to work on
* @param globalFilter the filter(s) to apply
* @param equipmentTypes the {@link EquipmentType equipment types} to filter
* @return the {@link List list} of {@link UUID IDs} of filtered {@link EquipmentType equipments}.
*/
protected List<String> getFilteredIds(@NonNull final UUID networkUuid, @NonNull final String variantId,
@NonNull final GlobalFilter globalFilter, @NonNull final List<EquipmentType> equipmentTypes) {
final Network network = getNetwork(networkUuid, variantId);
return GlobalFilterUtils.applyGlobalFilterOnNetwork(network, globalFilter, List.of(), equipmentTypes, this)
.values()
.stream()
.filter(Objects::nonNull)
// Combine all results into one list
.flatMap(List::stream)
.toList();
}
}
46 changes: 46 additions & 0 deletions src/main/java/org/gridsuite/filter/globalfilter/GlobalFilter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* Copyright (c) 2024, 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.filter.globalfilter;

import com.powsybl.iidm.network.Country;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;

import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
* @author maissa Souissi <maissa.souissi at rte-france.com>
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@FieldNameConstants
// TODO convert to record when loadflow-server and computation lib stop to extends it
public class GlobalFilter {
private List<String> nominalV;
private List<Country> countryCode;
private List<UUID> genericFilter;
private Map<String, List<String>> substationProperty;

/**
* @return {@code true} if all filter parameters are empty, else {@code false}.
*/
public boolean isEmpty() {
return CollectionUtils.isEmpty(this.nominalV)
&& CollectionUtils.isEmpty(this.countryCode)
&& CollectionUtils.isEmpty(this.genericFilter)
&& (MapUtils.isEmpty(this.substationProperty) || this.substationProperty.values().stream().allMatch(CollectionUtils::isEmpty));
}
}
Loading