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
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<maven.jacoco.version>0.8.15</maven.jacoco.version>
<checkstyle.version>13.8.0</checkstyle.version>
<powsybl-ws-dependencies.version>2.34.0</powsybl-ws-dependencies.version>
<gridsuite-filter.version>1.29.0</gridsuite-filter.version>
<gridsuite-filter.version>1.31.0</gridsuite-filter.version>
<swagger-annotations.version>2.2.36</swagger-annotations.version>
<sonar.organization>gridsuite</sonar.organization>
<sonar.projectKey>org.gridsuite:network-modification</sonar.projectKey>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
*/
@Builder
public record ModificationContext(FilterLoader filterLoader,
LoadFlowParametersLoader loadFlowParametersLoader) {
LoadFlowParametersLoader loadFlowParametersLoader,
String rootNetworkTag) {

private static final FilterLoader NO_FILTER_LOADER = filterUuids -> {
throw missingLoader("filter loader");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.context.ModificationContext;
import org.gridsuite.modification.modifications.AbstractModification;
import org.gridsuite.modification.modifications.CompositeModification;

Expand Down Expand Up @@ -46,8 +47,15 @@ public class CompositeModificationInfos extends ModificationInfos {
private Integer maxDepth;

@Override
public AbstractModification toModification() {
return new CompositeModification(this);
public AbstractModification toModification(ModificationContext context) {
return CompositeModification.builder()
.name(name)
.maxDepth(maxDepth)
.modificationsInfos(modificationsInfos.stream()
.filter(modificationInfos -> modificationInfos.isActivatedOn(context.rootNetworkTag()))
.map(modificationInfos -> modificationInfos.toModification(context))
.toList())
.build();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.context.ModificationContext;
import org.gridsuite.modification.modifications.AbstractModification;
import org.gridsuite.modification.modifications.ModificationReference;

Expand Down Expand Up @@ -51,11 +52,10 @@ public enum Type {
private ModificationInfos referenceInfos;

@Override
public AbstractModification toModification() {
public AbstractModification toModification(ModificationContext context) {
return ModificationReference.builder()
.referenceId(getReferenceId())
.referenceType(getReferenceType())
.referenceInfos(getReferenceInfos())
.referenceModification(getReferenceInfos().toModification(context))
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,4 @@ public class TabularBaseInfos extends ModificationInfos {
@Schema(description = "modifications")
@JsonInclude(JsonInclude.Include.NON_NULL)
private List<ModificationInfos> modifications;

public String formatEquipmentTypeName() {
return switch (getModificationType()) {
case GENERATOR_CREATION, GENERATOR_MODIFICATION -> getModifications().size() > 1 ? "generators" : "generator";
case LOAD_CREATION, LOAD_MODIFICATION -> getModifications().size() > 1 ? "loads" : "load";
case SHUNT_COMPENSATOR_CREATION, SHUNT_COMPENSATOR_MODIFICATION -> getModifications().size() > 1 ? "shunt compensators" : "shunt compensator";
case BATTERY_CREATION, BATTERY_MODIFICATION -> getModifications().size() > 1 ? "batteries" : "battery";
case TWO_WINDINGS_TRANSFORMER_MODIFICATION -> getModifications().size() > 1 ? "two windings transformers" : "two windings transformer";
case VOLTAGE_LEVEL_MODIFICATION -> getModifications().size() > 1 ? "voltage levels" : "voltage level";
case LINE_MODIFICATION -> getModifications().size() > 1 ? "lines" : "line";
case SUBSTATION_MODIFICATION -> getModifications().size() > 1 ? "substations" : "substation";
default -> "equipments of unknown type";
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.context.ModificationContext;
import org.gridsuite.modification.modifications.AbstractEquipmentBase;
import org.gridsuite.modification.modifications.AbstractModification;
import org.gridsuite.modification.modifications.tabular.TabularCreation;

Expand All @@ -30,8 +32,14 @@
public class TabularCreationInfos extends TabularBaseInfos {

@Override
public AbstractModification toModification() {
return new TabularCreation(this);
public AbstractModification toModification(ModificationContext context) {
return TabularCreation.builder()
.modificationType(getModificationType())
.modifications(getModifications().stream()
.map(modificationInfos -> modificationInfos.toModification(context))
.map(m -> (AbstractEquipmentBase) m)
.toList())
.build();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.context.ModificationContext;
import org.gridsuite.modification.modifications.AbstractEquipmentBase;
import org.gridsuite.modification.modifications.AbstractModification;
import org.gridsuite.modification.modifications.tabular.TabularModification;
import java.util.HashMap;
Expand All @@ -26,8 +28,14 @@
@Schema(description = "Tabular modification")
public class TabularModificationInfos extends TabularBaseInfos {
@Override
public AbstractModification toModification() {
return new TabularModification(this);
public AbstractModification toModification(ModificationContext context) {
return TabularModification.builder()
.modificationType(getModificationType())
.modifications(getModifications().stream()
.map(modificationInfos -> modificationInfos.toModification(context))
.map(m -> (AbstractEquipmentBase) m)
.toList())
.build();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
*/
package org.gridsuite.modification.modifications;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
Expand All @@ -17,7 +16,6 @@
import com.powsybl.iidm.network.Network;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.gridsuite.modification.IFilterService;
import org.gridsuite.modification.ILoadFlowService;
Expand All @@ -35,7 +33,7 @@
* the {@code @JsonSubTypes} registry of this class.
*
* <p>The injected application context ({@code filterService}, {@code loadFlowService}) is not serialized.
* After deserialization, {@link #initApplicationContext(IFilterService, ILoadFlowService, String)} must be called
* After deserialization, {@link #initApplicationContext(IFilterService, ILoadFlowService)} must be called
* again with valid services before the modification can be applied.
*
* @author Slimane Amar <slimane.amar at rte-france.com>
Expand Down Expand Up @@ -98,11 +96,6 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public abstract class AbstractModification extends AbstractNetworkModification {

@JsonIgnore
@EqualsAndHashCode.Exclude
@Getter
private String rootNetworkTag;

@Override
public void apply(Network network, NamingStrategy namingStrategy, boolean throwException, ComputationManager computationManager, ReportNode reportNode) {
apply(network, reportNode);
Expand All @@ -119,12 +112,7 @@ public void check(Network network) throws NetworkModificationException {
* <p>None of it is serialized with the modification: after deserialization, this method must be called again
* before the modification can be applied.
*/
public final void initApplicationContext(IFilterService filterService, ILoadFlowService loadFlowService, String rootNetworkTag) {
this.rootNetworkTag = rootNetworkTag;
initServices(filterService, loadFlowService);
}

protected void initServices(IFilterService filterService, ILoadFlowService loadFlowService) {
public void initApplicationContext(IFilterService filterService, ILoadFlowService loadFlowService) {
// To add some specific information
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ protected AbstractScaling(List<ScalingVariationInfos> variations, VariationType
}

@Override
protected void initServices(IFilterService filterService, ILoadFlowService loadFlowService) {
public void initApplicationContext(IFilterService filterService, ILoadFlowService loadFlowService) {
this.filterService = filterService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public BalancesAdjustmentModification(List<BalancesAdjustmentAreaInfos> areas,
}

@Override
protected void initServices(IFilterService filterService, ILoadFlowService loadFlowService) {
public void initApplicationContext(IFilterService filterService, ILoadFlowService loadFlowService) {
this.loadFlowService = loadFlowService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public ByFilterDeletion(IdentifiableType equipmentType, List<FilterInfos> filter
}

@Override
protected void initServices(IFilterService filterService, ILoadFlowService loadFlowService) {
public void initApplicationContext(IFilterService filterService, ILoadFlowService loadFlowService) {
this.filterService = filterService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,51 +6,46 @@
*/
package org.gridsuite.modification.modifications;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.commons.report.TypedValue;
import com.powsybl.iidm.modification.topology.DefaultNamingStrategy;
import com.powsybl.iidm.modification.topology.NamingStrategy;
import com.powsybl.iidm.network.Network;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.*;
import org.gridsuite.modification.IFilterService;
import org.gridsuite.modification.ILoadFlowService;
import org.gridsuite.modification.ModificationType;
import org.gridsuite.modification.dto.CompositeModificationInfos;
import org.gridsuite.modification.report.NetworkModificationReportResourceBundle;

import java.util.List;

import static org.gridsuite.modification.modifications.byfilter.AbstractModificationByAssignment.VALUE_KEY_ERROR_MESSAGE;

/**
* @author Ghazwa Rehili <ghazwa.rehili at rte-france.com>
*/

@Getter
@Setter
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class CompositeModification extends AbstractModification {

private CompositeModificationInfos compositeModificationInfos;

@JsonIgnore
@EqualsAndHashCode.Exclude
protected IFilterService filterService;

@JsonIgnore
@EqualsAndHashCode.Exclude
protected ILoadFlowService loadFlowService;
private String compositeName;
private Integer maxDepth;
private List<AbstractModification> modificationsInfos;

public CompositeModification(CompositeModificationInfos compositeModificationInfos) {
this.compositeModificationInfos = compositeModificationInfos;
@Builder
public CompositeModification(String name, Integer maxDepth, List<AbstractModification> modificationsInfos) {
this.compositeName = name;
this.maxDepth = maxDepth;
this.modificationsInfos = modificationsInfos;
}

@Override
protected void initServices(IFilterService filterService, ILoadFlowService loadFlowService) {
this.filterService = filterService;
this.loadFlowService = loadFlowService;
public void initApplicationContext(IFilterService filterService, ILoadFlowService loadFlowService) {
modificationsInfos.forEach(modif ->
modif.initApplicationContext(filterService, loadFlowService));
}

@Override
Expand All @@ -60,23 +55,20 @@ public void apply(Network network, ReportNode subReportNode) {

@Override
public void apply(Network network, NamingStrategy namingStrategy, ReportNode subReportNode) {
compositeModificationInfos.getModificationsInfos().stream()
.filter(modificationInfos -> modificationInfos.isActivatedOn(getRootNetworkTag()))
modificationsInfos
.forEach(
modif -> {
AbstractModification modification = modif.toModification();
ReportNode modifNode = modification.createSubReportNode(subReportNode);
ReportNode modifNode = modif.createSubReportNode(subReportNode);
try {
modification.check(network);
modification.initApplicationContext(filterService, loadFlowService, getRootNetworkTag());
modification.apply(network, namingStrategy, modifNode);
modif.check(network);
modif.apply(network, namingStrategy, modifNode);
} catch (Exception e) {
// in case of error in a network modification, the composite modification doesn't interrupt its execution :
// the following modifications will be carried out
modifNode.newReportNode()
.withResourceBundles(NetworkModificationReportResourceBundle.BASE_NAME)
.withMessageTemplate("network.modification.composite.exception.report")
.withUntypedValue("modificationName", modification.getName())
.withUntypedValue("modificationName", modif.getName())
.withUntypedValue(VALUE_KEY_ERROR_MESSAGE, e.getMessage())
.withSeverity(TypedValue.ERROR_SEVERITY)
.add();
Expand All @@ -89,7 +81,7 @@ public void apply(Network network, NamingStrategy namingStrategy, ReportNode sub
public ReportNode createSubReportNode(ReportNode reportNode) {
return reportNode.newReportNode()
.withMessageTemplate("network.modification.composite.apply")
.withUntypedValue("modificationName", compositeModificationInfos.getName())
.withUntypedValue("modificationName", compositeName)
.add();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ private static final class GeneratorsFrequencyReserve {
}

@Override
protected void initServices(IFilterService filterService, ILoadFlowService loadFlowService) {
public void initApplicationContext(IFilterService filterService, ILoadFlowService loadFlowService) {
this.filterService = filterService;
}

Expand Down
Loading
Loading