Skip to content

Commit

Permalink
Merge branch 'main' into limit_test_sql_logs
Browse files Browse the repository at this point in the history
  • Loading branch information
flomillot authored Jan 2, 2024
2 parents 5aa1c3e + cae06b6 commit c1f044e
Show file tree
Hide file tree
Showing 26 changed files with 765 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@
import com.powsybl.commons.reporter.Reporter;
import com.powsybl.commons.reporter.ReporterModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.equipment.modification.TwoWindingsTransformerModificationEntity;
Expand Down Expand Up @@ -49,10 +46,12 @@ public class TwoWindingsTransformerModificationInfos extends BranchModificationI
private AttributeModification<Double> ratedS;

@Schema(description = "Ratio tap changer")
private RatioTapChangerModificationInfos ratioTapChanger;
@Builder.Default
private RatioTapChangerModificationInfos ratioTapChanger = new RatioTapChangerModificationInfos();

@Schema(description = "Phase tap changer")
private PhaseTapChangerModificationInfos phaseTapChanger;
@Builder.Default
private PhaseTapChangerModificationInfos phaseTapChanger = new PhaseTapChangerModificationInfos();

@Override
public TwoWindingsTransformerModificationEntity toEntity() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,7 @@
import java.util.stream.Collectors;

import org.gridsuite.modification.server.dto.*;
import org.gridsuite.modification.server.entities.equipment.modification.BatteryModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.GeneratorModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.LoadModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.VoltageLevelModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.*;

/**
* @author Etienne Homer <etienne.homer at rte-france.com>
Expand Down Expand Up @@ -48,12 +45,21 @@ public TabularModificationEntity(TabularModificationInfos tabularModificationInf
case "LOAD_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(loadModificationInfos -> new LoadModificationEntity((LoadModificationInfos) loadModificationInfos)).collect(Collectors.toList());
break;
case "TWO_WINDINGS_TRANSFORMER_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(twtModificationInfos -> new TwoWindingsTransformerModificationEntity((TwoWindingsTransformerModificationInfos) twtModificationInfos)).collect(Collectors.toList());
break;
case "BATTERY_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(batteryModificationInfos -> new BatteryModificationEntity((BatteryModificationInfos) batteryModificationInfos)).collect(Collectors.toList());
break;
case "VOLTAGE_LEVEL_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(voltageLevelModificationInfos -> new VoltageLevelModificationEntity((VoltageLevelModificationInfos) voltageLevelModificationInfos)).collect(Collectors.toList());
break;
case "LINE_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(lineModificationInfos -> new LineModificationEntity((LineModificationInfos) lineModificationInfos)).collect(Collectors.toList());
break;
case "SUBSTATION_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(subStationModificationInfos -> new SubstationModificationEntity((SubstationModificationInfos) subStationModificationInfos)).collect(Collectors.toList());
break;
default:
break;
}
Expand Down Expand Up @@ -87,9 +93,18 @@ public void update(@NonNull ModificationInfos modificationInfos) {
case "LOAD_MODIFICATION":
modifications.addAll(tabularModificationInfos.getModifications().stream().map(loadModificationInfos -> new LoadModificationEntity((LoadModificationInfos) loadModificationInfos)).collect(Collectors.toList()));
break;
case "TWO_WINDINGS_TRANSFORMER_MODIFICATION":
modifications.addAll(tabularModificationInfos.getModifications().stream().map(twtModificationInfos -> new TwoWindingsTransformerModificationEntity((TwoWindingsTransformerModificationInfos) twtModificationInfos)).collect(Collectors.toList()));
break;
case "VOLTAGE_LEVEL_MODIFICATION":
modifications.addAll(tabularModificationInfos.getModifications().stream().map(voltageLevelModificationInfos -> new VoltageLevelModificationEntity((VoltageLevelModificationInfos) voltageLevelModificationInfos)).collect(Collectors.toList()));
break;
case "LINE_MODIFICATION":
modifications.addAll(tabularModificationInfos.getModifications().stream().map(lineModificationInfos -> new LineModificationEntity((LineModificationInfos) lineModificationInfos)).collect(Collectors.toList()));
break;
case "SUBSTATION_MODIFICATION":
modifications.addAll(tabularModificationInfos.getModifications().stream().map(subStationModificationInfos -> new SubstationModificationEntity((SubstationModificationInfos) subStationModificationInfos)).toList());
break;
default:
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import java.util.Collection;
import java.util.List;

import static org.gridsuite.modification.server.NetworkModificationException.Type.BATTERY_NOT_FOUND;
import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFY_BATTERY_ERROR;
/**
* @author Ghazwa Rehili <ghazwa.rehili at rte-france.com>
Expand All @@ -41,10 +40,10 @@ public BatteryModification(BatteryModificationInfos modificationInfos) {

@Override
public void check(Network network) throws NetworkModificationException {
if (network.getBattery(modificationInfos.getEquipmentId()) == null) {
throw new NetworkModificationException(BATTERY_NOT_FOUND, modificationInfos.getEquipmentId());
if (modificationInfos == null) {
throw new NetworkModificationException(MODIFY_BATTERY_ERROR, "Missing required attributes to modify the equipment");
}
Battery battery = network.getBattery(modificationInfos.getEquipmentId());
Battery battery = ModificationUtils.getInstance().getBattery(network, modificationInfos.getEquipmentId());
String errorMessage = "Battery '" + modificationInfos.getEquipmentId() + "' : ";
if (battery.getReactiveLimits().getKind() == ReactiveLimitsKind.MIN_MAX && (modificationInfos.getMinimumReactivePower() != null || modificationInfos.getMaximumReactivePower() != null)) {
MinMaxReactiveLimits minMaxReactiveLimits = battery.getReactiveLimits(MinMaxReactiveLimits.class);
Expand Down Expand Up @@ -74,9 +73,6 @@ private void checkActivePowerZeroOrBetweenMinAndMaxActivePowerBattery(BatteryMod

@Override
public void apply(Network network, Reporter subReporter) {
if (modificationInfos == null) {
throw new NetworkModificationException(MODIFY_BATTERY_ERROR, "Missing required attributes to modify the equipment");
}
Battery battery = ModificationUtils.getInstance().getBattery(network, modificationInfos.getEquipmentId());
// modify the battery in the network
modifyBattery(battery, modificationInfos, subReporter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.gridsuite.modification.server.NetworkModificationException.Type.BRANCH_NOT_FOUND;
import static org.gridsuite.modification.server.NetworkModificationException.Type.BRANCH_ACTION_ERROR;
import static org.gridsuite.modification.server.NetworkModificationException.Type.BRANCH_NOT_FOUND;
import static org.gridsuite.modification.server.modifications.ModificationUtils.distinctByKey;

/**
Expand All @@ -40,12 +40,18 @@ public BranchStatusModification(BranchStatusModificationInfos modificationInfos)
}

@Override
public void apply(Network network, Reporter subReporter) {
public void check(Network network) throws NetworkModificationException {
String branchId = modificationInfos.getEquipmentId();
Branch<?> branch = network.getBranch(branchId);
if (branch == null) {
throw new NetworkModificationException(BRANCH_NOT_FOUND, branchId);
}
}

@Override
public void apply(Network network, Reporter subReporter) {
String branchId = modificationInfos.getEquipmentId();
Branch<?> branch = network.getBranch(branchId);

String branchTypeName = branch.getType() == IdentifiableType.LINE ? "Line" : "2 windings transformer";
switch (modificationInfos.getAction()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,19 @@ public EquipmentAttributeModification(EquipmentAttributeModificationInfos modifi
}

@Override
public void apply(Network network, Reporter subReporter) {
public void check(Network network) throws NetworkModificationException {
Identifiable<?> identifiable = network.getIdentifiable(modificationInfos.getEquipmentId());
if (identifiable == null) {
throw new NetworkModificationException(EQUIPMENT_NOT_FOUND, modificationInfos.getEquipmentId());
}
if (identifiable.getType() != modificationInfos.getEquipmentType()) {
throw new NetworkModificationException(WRONG_EQUIPMENT_TYPE, String.format("Type of '%s' is not %s but %s", modificationInfos.getEquipmentId(), modificationInfos.getEquipmentType(), identifiable.getType()));
}
}

@Override
public void apply(Network network, Reporter subReporter) {
Identifiable<?> identifiable = network.getIdentifiable(modificationInfos.getEquipmentId());
if (identifiable instanceof Switch) {
changeSwitchAttribute((Switch) identifiable, modificationInfos.getEquipmentAttributeName(), modificationInfos.getEquipmentAttributeValue(), subReporter);
} else if (identifiable instanceof Injection) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,16 @@ public EquipmentDeletion(EquipmentDeletionInfos modificationInfos) {
}

@Override
public void apply(Network network, Reporter subReporter) {
public void check(Network network) throws NetworkModificationException {
Identifiable<?> identifiable = ModificationUtils.getInstance().getEquipmentByIdentifiableType(network, modificationInfos.getEquipmentType(), modificationInfos.getEquipmentId());
if (identifiable == null) {
throw new NetworkModificationException(EQUIPMENT_NOT_FOUND, "Equipment with id=" + modificationInfos.getEquipmentId() + " not found or of bad type");
}
}

@Override
public void apply(Network network, Reporter subReporter) {
Identifiable<?> identifiable = ModificationUtils.getInstance().getEquipmentByIdentifiableType(network, modificationInfos.getEquipmentType(), modificationInfos.getEquipmentId());
if (identifiable instanceof Connectable) {
new RemoveFeederBay(modificationInfos.getEquipmentId()).apply(network, true, subReporter);
} else if (identifiable instanceof HvdcLine) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import java.util.Collection;
import java.util.List;

import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFY_GENERATOR_ERROR;
import static org.gridsuite.modification.server.NetworkModificationException.Type.*;

/**
* @author Ayoub Labidi <ayoub.labidi at rte-france.com>
Expand All @@ -43,32 +43,33 @@ public GeneratorModification(GeneratorModificationInfos modificationInfos) {

@Override
public void check(Network network) throws NetworkModificationException {
if (network.getGenerator(modificationInfos.getEquipmentId()) != null) {
Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId());
// check min max reactive limits
String errorMessage = "Generator '" + modificationInfos.getEquipmentId() + "' : ";
if (generator.getReactiveLimits().getKind() == ReactiveLimitsKind.MIN_MAX && (modificationInfos.getMinimumReactivePower() != null || modificationInfos.getMaximumReactivePower() != null)) {
MinMaxReactiveLimits minMaxReactiveLimits = generator.getReactiveLimits(MinMaxReactiveLimits.class);
ModificationUtils.getInstance().checkMaxReactivePowerGreaterThanMinReactivePower(minMaxReactiveLimits, modificationInfos.getMinimumReactivePower(), modificationInfos.getMaximumReactivePower(), MODIFY_GENERATOR_ERROR, errorMessage);
}
// check reactive capability curve limits
Collection<ReactiveCapabilityCurve.Point> points = generator.getReactiveLimits().getKind() == ReactiveLimitsKind.CURVE ? generator.getReactiveLimits(ReactiveCapabilityCurve.class).getPoints() : List.of();
List<ReactiveCapabilityCurve.Point> generatorPoints = new ArrayList<>(points);
List<ReactiveCapabilityCurveModificationInfos> modificationPoints = modificationInfos.getReactiveCapabilityCurvePoints();
if (!CollectionUtils.isEmpty(points) && modificationPoints != null) {
ModificationUtils.getInstance().checkMaxQGreaterThanMinQ(generatorPoints, modificationPoints, MODIFY_GENERATOR_ERROR, errorMessage);
}
// check regulated terminal
if (modificationInfos.getRegulatingTerminalId() != null && modificationInfos.getRegulatingTerminalType() != null &&
modificationInfos.getRegulatingTerminalVlId() != null) {
VoltageLevel voltageLevel = ModificationUtils.getInstance().getVoltageLevel(network, modificationInfos.getRegulatingTerminalVlId().getValue());
ModificationUtils.getInstance().getTerminalFromIdentifiable(voltageLevel.getNetwork(),
modificationInfos.getRegulatingTerminalId().getValue(),
modificationInfos.getRegulatingTerminalType().getValue(),
modificationInfos.getRegulatingTerminalVlId().getValue());
}
checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(modificationInfos, generator, MODIFY_GENERATOR_ERROR, errorMessage);
if (modificationInfos == null) {
throw new NetworkModificationException(MODIFY_GENERATOR_ERROR, "Missing required attributes to modify the equipment");
}
Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId());
// check min max reactive limits
String errorMessage = "Generator '" + modificationInfos.getEquipmentId() + "' : ";
if (generator.getReactiveLimits().getKind() == ReactiveLimitsKind.MIN_MAX && (modificationInfos.getMinimumReactivePower() != null || modificationInfos.getMaximumReactivePower() != null)) {
MinMaxReactiveLimits minMaxReactiveLimits = generator.getReactiveLimits(MinMaxReactiveLimits.class);
ModificationUtils.getInstance().checkMaxReactivePowerGreaterThanMinReactivePower(minMaxReactiveLimits, modificationInfos.getMinimumReactivePower(), modificationInfos.getMaximumReactivePower(), MODIFY_GENERATOR_ERROR, errorMessage);
}
// check reactive capability curve limits
Collection<ReactiveCapabilityCurve.Point> points = generator.getReactiveLimits().getKind() == ReactiveLimitsKind.CURVE ? generator.getReactiveLimits(ReactiveCapabilityCurve.class).getPoints() : List.of();
List<ReactiveCapabilityCurve.Point> generatorPoints = new ArrayList<>(points);
List<ReactiveCapabilityCurveModificationInfos> modificationPoints = modificationInfos.getReactiveCapabilityCurvePoints();
if (!CollectionUtils.isEmpty(points) && modificationPoints != null) {
ModificationUtils.getInstance().checkMaxQGreaterThanMinQ(generatorPoints, modificationPoints, MODIFY_GENERATOR_ERROR, errorMessage);
}
// check regulated terminal
if (modificationInfos.getRegulatingTerminalId() != null && modificationInfos.getRegulatingTerminalType() != null &&
modificationInfos.getRegulatingTerminalVlId() != null) {
VoltageLevel voltageLevel = ModificationUtils.getInstance().getVoltageLevel(network, modificationInfos.getRegulatingTerminalVlId().getValue());
ModificationUtils.getInstance().getTerminalFromIdentifiable(voltageLevel.getNetwork(),
modificationInfos.getRegulatingTerminalId().getValue(),
modificationInfos.getRegulatingTerminalType().getValue(),
modificationInfos.getRegulatingTerminalVlId().getValue());
}
checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(modificationInfos, generator, MODIFY_GENERATOR_ERROR, errorMessage);
}

private void checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(GeneratorModificationInfos modificationInfos, Generator generator, NetworkModificationException.Type exceptionType, String errorMessage) {
Expand All @@ -86,9 +87,6 @@ private void checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(Generato

@Override
public void apply(Network network, Reporter subReporter) {
if (modificationInfos == null) {
throw new NetworkModificationException(MODIFY_GENERATOR_ERROR, "Missing required attributes to modify the equipment");
}
Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId());
// modify the generator in the network
modifyGenerator(generator, modificationInfos, subReporter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,14 @@ public GroovyScript(GroovyScriptInfos modificationInfos) {
}

@Override
public void apply(Network network, Reporter subReporter) {
public void check(Network network) throws NetworkModificationException {
if (StringUtils.isBlank(modificationInfos.getScript())) {
throw new NetworkModificationException(GROOVY_SCRIPT_EMPTY);
}
}

@Override
public void apply(Network network, Reporter subReporter) {
var conf = new CompilerConfiguration();
var binding = new Binding();
binding.setProperty("network", network);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,17 @@ public LineModification(LineModificationInfos modificationInfos) {
}

@Override
public void apply(Network network, Reporter subReporter) {
public void check(Network network) throws NetworkModificationException {
Line line = network.getLine(modificationInfos.getEquipmentId());
if (line == null) {
throw new NetworkModificationException(LINE_NOT_FOUND,
"Line " + modificationInfos.getEquipmentId() + " does not exist in network");
}
}

@Override
public void apply(Network network, Reporter subReporter) {
Line line = network.getLine(modificationInfos.getEquipmentId());
// modify the line in the network
modifyLine(line, modificationInfos, subReporter);
}
Expand Down
Loading

0 comments on commit c1f044e

Please sign in to comment.