Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
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,46 @@
package org.gridsuite.filter.globalfilter;

import com.powsybl.iidm.network.Network;
import lombok.NonNull;
import org.apache.commons.lang3.ObjectUtils;
import org.gridsuite.filter.AbstractFilter;
import org.gridsuite.filter.FilterLoader;
import org.gridsuite.filter.utils.EquipmentType;

import javax.annotation.Nullable;
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);

/** @see #getFilteredIds(UUID, String, GlobalFilter, List) */
protected List<String> getFilteredIds(@NonNull final UUID networkUuid, @NonNull final String variantId,
@NonNull final GlobalFilter globalFilter, @NonNull final List<EquipmentType> equipmentTypes) {
return getFilteredIds(networkUuid, variantId, globalFilter, equipmentTypes, null);
}

/**
* 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
* @param genericFilters additional generic filters to apply
* @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,
@Nullable final List<AbstractFilter> genericFilters) {
final Network network = getNetwork(networkUuid, variantId);
return GlobalFilterUtils.applyGlobalFilterOnNetwork(network, globalFilter, ObjectUtils.getIfNull(genericFilters, List::of), equipmentTypes, this)
// Filter equipments by type
.values()
.stream()
.filter(Objects::nonNull)
// Combine all results into one list
.flatMap(List::stream)
.toList();
}
}
47 changes: 47 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,47 @@
/**
* 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
Loading