Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
import com.powsybl.iidm.network.Generator;
import com.powsybl.iidm.network.extensions.*;
import com.powsybl.network.store.iidm.impl.extensions.CoordinatedReactiveControlAdderImpl;
import jakarta.validation.constraints.NotNull;
import org.gridsuite.modification.dto.AttributeModification;
import org.gridsuite.modification.dto.OperationType;
import org.gridsuite.modification.utils.ModificationUtils;

import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_GENERATOR_ERROR;
import static org.gridsuite.modification.modifications.GeneratorModification.*;
import static org.gridsuite.modification.utils.ModificationUtils.checkIsNotNegativeValue;
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;

/**
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
Expand Down Expand Up @@ -64,7 +64,7 @@ public static String getReferenceValue(Generator generator, String generatorFiel
};
}

public static void setNewValue(Generator generator, String generatorField, @NotNull String newValue) {
public static void setNewValue(Generator generator, String generatorField, String newValue) {
GeneratorField field = GeneratorField.valueOf(generatorField);
String errorMessage = String.format(ERROR_MESSAGE, generator.getId());
switch (field) {
Expand All @@ -82,7 +82,7 @@ public static void setNewValue(Generator generator, String generatorField, @NotN
generator.setTargetP(Double.parseDouble(newValue));
}
case RATED_NOMINAL_POWER -> {
Double ratedNominalPower = Double.parseDouble(newValue);
Double ratedNominalPower = parseDoubleOrNaNIfNull(newValue);
checkIsNotNegativeValue(errorMessage, ratedNominalPower, MODIFY_GENERATOR_ERROR, "Rated apparent power");
modifyGeneratorActiveLimitsAttributes(
null, null, new AttributeModification<>(ratedNominalPower, OperationType.SET), generator, null);
Expand Down Expand Up @@ -114,10 +114,14 @@ public static void setNewValue(Generator generator, String generatorField, @NotN
MODIFY_GENERATOR_ERROR, errorMessage);
}
case TRANSIENT_REACTANCE -> modifyGeneratorShortCircuitAttributes(
new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET),
new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
null, generator, null);
case STEP_UP_TRANSFORMER_REACTANCE -> modifyGeneratorShortCircuitAttributes(
null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), generator, null);
null,
new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
generator,
null
);
case Q_PERCENT -> generator.newExtension(CoordinatedReactiveControlAdderImpl.class)
.withQPercent(Double.parseDouble(newValue))
.add();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_LINE_ERROR;
import static org.gridsuite.modification.modifications.LineModification.*;
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;

/**
* @author Etienne Lesot <etienne.lesot at rte-france.com>
Expand Down Expand Up @@ -54,7 +55,7 @@ public static void setNewValue(Line line, String lineField, @NotNull String newV
}

private static void setNewDoubleValue(Line line, LineField field, String newValue, String errorMessage) {
Double doubleValue = Double.parseDouble(newValue);
Double doubleValue = parseDoubleOrNaNIfNull(newValue);
final AttributeModification<Double> attributeModification = new AttributeModification<>(doubleValue, OperationType.SET);
switch (field) {
case R -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import static org.gridsuite.modification.modifications.GeneratorModification.ERROR_MESSAGE;
import static org.gridsuite.modification.modifications.TwoWindingsTransformerModification.*;
import static org.gridsuite.modification.utils.ModificationUtils.checkIsNotNegativeValue;
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;

/**
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
Expand Down Expand Up @@ -91,7 +92,7 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin
private static void setNewDoubleValue(TwoWindingsTransformer transformer, TwoWindingsTransformerField field, String newValue, String errorMessage) {
final PhaseTapChanger phaseTapChanger = transformer.getPhaseTapChanger();
final RatioTapChanger ratioTapChanger = transformer.getRatioTapChanger();
final Double doubleValue = Double.valueOf(newValue);
final Double doubleValue = parseDoubleOrNaNIfNull(newValue);
final AttributeModification<Double> attributeModification = new AttributeModification<>(doubleValue, OperationType.SET);
switch (field) {
case R -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@

import com.powsybl.iidm.network.VoltageLevel;
import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit;
import jakarta.validation.constraints.NotNull;
import org.gridsuite.modification.dto.AttributeModification;
import org.gridsuite.modification.dto.OperationType;

import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_VOLTAGE_LEVEL_ERROR;
import static org.gridsuite.modification.modifications.GeneratorModification.ERROR_MESSAGE;
import static org.gridsuite.modification.modifications.VoltageLevelModification.*;
import static org.gridsuite.modification.utils.ModificationUtils.checkIsNotNegativeValue;
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;

/**
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
Expand All @@ -40,7 +40,7 @@ public static String getReferenceValue(VoltageLevel voltageLevel, String voltage
};
}

public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, @NotNull String newValue) {
public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, String newValue) {
VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField);
final String errorMessage = String.format(ERROR_MESSAGE, voltageLevel.getId());
switch (field) {
Expand All @@ -50,19 +50,21 @@ public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelFie
modifyNominalV(voltageLevel, new AttributeModification<>(nominalVoltage, OperationType.SET), null);
}
case LOW_VOLTAGE_LIMIT -> {
Double lowVoltageLimit = Double.valueOf(newValue);
Double lowVoltageLimit = parseDoubleOrNaNIfNull(newValue);
checkIsNotNegativeValue(errorMessage, lowVoltageLimit, MODIFY_VOLTAGE_LEVEL_ERROR, "Low voltage limit");
modifLowVoltageLimit(voltageLevel, new AttributeModification<>(lowVoltageLimit, OperationType.SET), null);
}
case HIGH_VOLTAGE_LIMIT -> {
Double highVoltageLimit = Double.valueOf(newValue);
Double highVoltageLimit = parseDoubleOrNaNIfNull(newValue);
checkIsNotNegativeValue(errorMessage, highVoltageLimit, MODIFY_VOLTAGE_LEVEL_ERROR, "High voltage limit");
modifyHighVoltageLimit(voltageLevel, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null);
modifyHighVoltageLimit(voltageLevel, new AttributeModification<>(highVoltageLimit, OperationType.SET), null);
}
case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> modifyVoltageLevelShortCircuit(
new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, null, voltageLevel);
new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
null, null, voltageLevel);
case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> modifyVoltageLevelShortCircuit(
null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, voltageLevel);
null, new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
null, voltageLevel);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,63 +103,78 @@ private void modifyOperationalLimitsGroups(Branch<?> branch, List<OperationalLim

private void applySelectedOLGs(Branch<?> branch, List<ReportNode> side1LimitsReports, List<ReportNode> side2LimitsReports) {
if (modificationInfos.getSelectedOperationalLimitsGroup1() != null) {
applySelectedOLGOnSide1(branch, side1LimitsReports);
modifySelectedOperationalLimitsGroup(
branch,
modificationInfos.getSelectedOperationalLimitsGroup1(),
TwoSides.ONE,
side1LimitsReports
);
}
if (modificationInfos.getSelectedOperationalLimitsGroup2() != null) {
applySelectedOLGOnSide2(branch, side2LimitsReports);
modifySelectedOperationalLimitsGroup(
branch,
modificationInfos.getSelectedOperationalLimitsGroup2(),
TwoSides.TWO,
side2LimitsReports);
}
}

private void applySelectedOLGOnSide1(Branch<?> branch, List<ReportNode> reportNode) {
if (Objects.requireNonNull(modificationInfos.getSelectedOperationalLimitsGroup1().getOp()) == OperationType.UNSET) {
private static void applySelectedOLGOnSide1(Branch<?> branch, AttributeModification<String> modifOperationalLimitsGroup, List<ReportNode> reportNode, String newSelectedOLG) {
if (!StringUtils.hasText(newSelectedOLG) || modifOperationalLimitsGroup.getOp() == OperationType.UNSET) {
branch.cancelSelectedOperationalLimitsGroup1();
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.noLimitSetSelectedOnSide1")
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
} else if (modificationInfos.getSelectedOperationalLimitsGroup1().getOp() == OperationType.SET) {
String newSelectedOpLG1 = modificationInfos.getSelectedOperationalLimitsGroup1().getValue();
if (StringUtils.hasText(newSelectedOpLG1) && branch.getOperationalLimitsGroup1(newSelectedOpLG1).isEmpty()) {
if (reportNode != null) {
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.noLimitSetSelectedOnSide1")
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
}
} else {
if (StringUtils.hasText(newSelectedOLG) && branch.getOperationalLimitsGroup1(newSelectedOLG).isEmpty() && reportNode != null) {
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.limitSetAbsentOnSide1")
.withUntypedValue("selectedOperationalLimitsGroup", newSelectedOpLG1)
.withUntypedValue("selectedOperationalLimitsGroup", newSelectedOLG)
.withSeverity(TypedValue.WARN_SEVERITY)
.build());

} else {
branch.setSelectedOperationalLimitsGroup1(newSelectedOpLG1);
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.limitSetSelectedOnSide1")
.withUntypedValue("selectedOperationalLimitsGroup1", newSelectedOpLG1)
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
branch.setSelectedOperationalLimitsGroup1(newSelectedOLG);
if (reportNode != null) {
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.limitSetSelectedOnSide1")
.withUntypedValue("selectedOperationalLimitsGroup1", newSelectedOLG)
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
}
}
}
}

private void applySelectedOLGOnSide2(Branch<?> branch, List<ReportNode> reportNode) {
if (Objects.requireNonNull(modificationInfos.getSelectedOperationalLimitsGroup2().getOp()) == OperationType.UNSET) {
branch.setSelectedOperationalLimitsGroup2("");
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.noLimitSetSelectedOnSide2")
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
} else if (modificationInfos.getSelectedOperationalLimitsGroup2().getOp() == OperationType.SET) {
String newSelectedOpLG = modificationInfos.getSelectedOperationalLimitsGroup2().getValue();
if (StringUtils.hasText(newSelectedOpLG) && branch.getOperationalLimitsGroup2(newSelectedOpLG).isEmpty()) {
private static void applySelectedOLGOnSide2(Branch<?> branch, AttributeModification<String> modifOperationalLimitsGroup, List<ReportNode> reportNode, String newSelectedOLG) {
if (!StringUtils.hasText(newSelectedOLG) || modifOperationalLimitsGroup.getOp() == OperationType.UNSET) {
branch.cancelSelectedOperationalLimitsGroup2();
if (reportNode != null) {
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.noLimitSetSelectedOnSide2")
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
}
} else {
if (StringUtils.hasText(newSelectedOLG) && branch.getOperationalLimitsGroup2(newSelectedOLG).isEmpty() && reportNode != null) {
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.limitSetAbsentOnSide2")
.withUntypedValue("selectedOperationalLimitsGroup2", newSelectedOpLG)
.withUntypedValue("selectedOperationalLimitsGroup", newSelectedOLG)
.withSeverity(TypedValue.WARN_SEVERITY)
.build());

} else {
branch.setSelectedOperationalLimitsGroup2(newSelectedOpLG);
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.limitSetSelectedOnSide2")
.withUntypedValue("selectedOperationalLimitsGroup2", newSelectedOpLG)
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
branch.setSelectedOperationalLimitsGroup2(newSelectedOLG);
if (reportNode != null) {
reportNode.add(ReportNode.newRootReportNode()
.withMessageTemplate("network.modification.limitSetSelectedOnSide2")
.withUntypedValue("selectedOperationalLimitsGroup2", newSelectedOLG)
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
}
}
}
}
Expand Down Expand Up @@ -613,30 +628,18 @@ private void modifyBranchVoltageLevelBusOrBusBarSectionAttributesSide2(BranchMod
);
}

public static void modifySelectedOperationalLimitsGroup(Branch<?> branch, AttributeModification<String> modifOperationalLimitsGroup,
TwoSides side, ReportNode reportNode) {
public static void modifySelectedOperationalLimitsGroup(
Branch<?> branch,
AttributeModification<String> modifOperationalLimitsGroup,
TwoSides side,
List<ReportNode> reportNode) {
Objects.requireNonNull(side);
if (modifOperationalLimitsGroup != null) {
String value = modifOperationalLimitsGroup.getValue();
String previousSelectedLimitsGroup = null;
String newSelectedOLG = modifOperationalLimitsGroup.getValue();
if (side == TwoSides.ONE) {
previousSelectedLimitsGroup = branch.getSelectedOperationalLimitsGroupId1().orElse(null);
if (!StringUtils.hasText(value)) {
branch.cancelSelectedOperationalLimitsGroup1();
} else {
branch.setSelectedOperationalLimitsGroup1(value);
}
applySelectedOLGOnSide1(branch, modifOperationalLimitsGroup, reportNode, newSelectedOLG);
} else if (side == TwoSides.TWO) {
previousSelectedLimitsGroup = branch.getSelectedOperationalLimitsGroupId2().orElse(null);
if (!StringUtils.hasText(value)) {
branch.cancelSelectedOperationalLimitsGroup2();
} else {
branch.setSelectedOperationalLimitsGroup2(value);
}
}
if (reportNode != null) {
insertReportNode(reportNode, ModificationUtils.getInstance().buildModificationReport(previousSelectedLimitsGroup,
modifOperationalLimitsGroup.getValue(), "selected operational limits group side " + side.getNum()));
applySelectedOLGOnSide2(branch, modifOperationalLimitsGroup, reportNode, newSelectedOLG);
}
}
}
Expand Down
Loading