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 @@ -56,7 +56,8 @@ public abstract class AbstractModificationByAssignment extends AbstractModificat
public static final String VALUE_KEY_ARROW_NAME = "arrow";
public static final String VALUE_KEY_ARROW_VALUE = "→";
public static final String REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_ZERO = "network.modification.equipmentModifiedError.zero";
public static final String REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_NULL = "network.modification.equipmentModifiedError.null";
public static final String REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_EMPTY = "network.modification.equipmentModifiedError.empty";
public static final String REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_NAN = "network.modification.equipmentModifiedError.nan";
public static final String REPORT_KEY_BY_FILTER_MODIFICATION_SOME = "network.modification.byFilterModificationSome";
public static final String REPORT_KEY_BY_FILTER_MODIFICATION_FAILED = "network.modification.byFilterModificationFailed";
public static final String REPORT_KEY_BY_FILTER_MODIFICATION_SUCCESS = "network.modification.byFilterModificationSuccess";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,32 +68,32 @@ protected boolean preCheckValue(Identifiable<?> equipment, AbstractAssignmentInf
FormulaInfos formulaInfos = (FormulaInfos) abstractAssignmentInfos;
Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(equipment);
Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(equipment);
if (value1 == null || Double.isNaN(value1) || value2 == null || Double.isNaN(value2)) {
equipmentNotModifiedCount += 1;
notEditableEquipments.add(equipment.getId());
reports.add(ReportNode.newRootReportNode()
.withResourceBundles(NetworkModificationReportResourceBundle.BASE_NAME)
.withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_NULL)
.withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId())
.withSeverity(TypedValue.DETAIL_SEVERITY)
.build());
return false;
if (value1 == null || value2 == null) {
return reportErrorOnEquipment(equipment, notEditableEquipments, REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_EMPTY, reports);
}

if (Double.isNaN(value1) || Double.isNaN(value2)) {
return reportErrorOnEquipment(equipment, notEditableEquipments, REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_NAN, reports);
}

if (value2 == 0 && formulaInfos.getOperator() == Operator.DIVISION) {
equipmentNotModifiedCount += 1;
notEditableEquipments.add(equipment.getId());
reports.add(ReportNode.newRootReportNode()
.withResourceBundles(NetworkModificationReportResourceBundle.BASE_NAME)
.withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_ZERO)
.withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId())
.withSeverity(TypedValue.DETAIL_SEVERITY)
.build());
return false;
return reportErrorOnEquipment(equipment, notEditableEquipments, REPORT_KEY_EQUIPMENT_MODIFIED_ERROR_ZERO, reports);
}
return true;
}

private boolean reportErrorOnEquipment(Identifiable<?> equipment, List<String> notEditableEquipments, String reportKey, List<ReportNode> reports) {
equipmentNotModifiedCount += 1;
notEditableEquipments.add(equipment.getId());
reports.add(ReportNode.newRootReportNode()
.withResourceBundles(NetworkModificationReportResourceBundle.BASE_NAME)
.withMessageTemplate(reportKey)
.withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId())
.withSeverity(TypedValue.DETAIL_SEVERITY)
.build());
return false;
}

@Override
protected String getNewValue(Identifiable<?> equipment, AbstractAssignmentInfos abstractAssignmentInfos) {
FormulaInfos formulaInfos = (FormulaInfos) abstractAssignmentInfos;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,8 @@ network.modification.equipmentDeletion = Equipment deletion ${equipmentId}
network.modification.equipmentDisconnect = Equipment with id=${id} disconnected
network.modification.equipmentDisconnect.side = Equipment with id=${id} disconnected on side ${side}
network.modification.equipmentDisconnected = Equipment with id=${id} disconnected
network.modification.equipmentModifiedError.null = Cannot modify equipment ${equipmentName} : At least one of the value or referenced field is null
network.modification.equipmentModifiedError.empty = Cannot modify equipment ${equipmentName} : At least one of the value or referenced field is empty
network.modification.equipmentModifiedError.nan = Cannot modify equipment ${equipmentName} : At least one of the value or referenced field is not a number
network.modification.equipmentModifiedError.zero = Cannot modify equipment ${equipmentName} : The value or referenced field of the second operand in the division operator is zero
network.modification.equipmentModifiedReport = ${equipmentType} id : ${equipmentName}, ${fieldName} : ${oldValue} ${arrow} ${newValue}
network.modification.equipmentModifiedReportException = Cannot modify equipment ${equipmentName} : ${errorMessage}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package org.gridsuite.modification.modifications.byfilter.formula;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.iidm.network.IdentifiableType;
import com.powsybl.iidm.network.Network;
import org.gridsuite.filter.utils.EquipmentType;
Expand All @@ -19,6 +20,7 @@
import org.gridsuite.modification.dto.byfilter.formula.ReferenceFieldOrValue;
import org.gridsuite.modification.modifications.AbstractModification;
import org.gridsuite.modification.modifications.AbstractNetworkModificationTest;
import org.gridsuite.modification.report.NetworkModificationReportResourceBundle;
import org.gridsuite.modification.utils.NetworkCreation;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -52,6 +54,10 @@ abstract class AbstractByFormulaModificationTest extends AbstractNetworkModifica
protected final FilterInfos filter6 = new FilterInfos(FILTER_ID_6, "filter6");
protected final FilterInfos filter7 = new FilterInfos(FILTER_ID_7, "filter7");
protected final FilterInfos filterWithOneWrongId = new FilterInfos(FILTER_WITH_ONE_WRONG_ID, "filterWithOneWrongId");
protected final ReportNode reportNode = ReportNode.newRootReportNode()
.withResourceBundles(NetworkModificationReportResourceBundle.BASE_NAME)
.withMessageTemplate("test")
.build();

@Mock
protected IFilterService filterService;
Expand All @@ -70,7 +76,7 @@ public void testApply() throws Exception {
when(filterService.getUuidFilterEquipmentsMap(any(), any())).thenReturn(getTestFilters());
AbstractModification modification = modificationInfo.toModification();
modification.initApplicationContext(filterService, null);
modification.apply(getNetwork());
modification.apply(getNetwork(), reportNode);
assertAfterNetworkModificationApplication();
}

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

import com.powsybl.commons.report.ReportNode;
import com.powsybl.iidm.network.IdentifiableType;
import com.powsybl.iidm.network.TopologyKind;
import com.powsybl.iidm.network.VoltageLevel;
Expand Down Expand Up @@ -194,8 +195,15 @@ protected List<FormulaInfos> getFormulaInfos() {
ReferenceFieldOrValue.builder().value(1000.).build(),
ReferenceFieldOrValue.builder().value(3.).build());

// test error divide by 0
FormulaInfos formulaInfos12 = getFormulaInfo(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name(),
List.of(filter7),
Operator.DIVISION,
ReferenceFieldOrValue.builder().value(1000.).build(),
ReferenceFieldOrValue.builder().value(0.).build());

return List.of(formulaInfos1, formulaInfos2, formulaInfos3, formulaInfos4, formulaInfos5,
formulaInfos6, formulaInfos7, formulaInfos8, formulaInfos9, formulaInfos10, formulaInfos11);
formulaInfos6, formulaInfos7, formulaInfos8, formulaInfos9, formulaInfos10, formulaInfos11, formulaInfos12);
}

@Override
Expand Down Expand Up @@ -241,5 +249,11 @@ protected void assertAfterNetworkModificationApplication() {
//Precision tests
assertEquals(110., getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_8).getLowVoltageLimit(), 0.);
assertEquals(333.3333333333, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_8).getHighVoltageLimit(), 0.); //scale is defined in byFormulaModifcation (10)

// check logs
List<String> allLogs = reportNode.getChildren().getFirst().getChildren().stream().flatMap(child -> child.getChildren().stream().map(ReportNode::getMessage)).toList();
assertTrue(allLogs.contains("Cannot modify equipment v7 : At least one of the value or referenced field is not a number"));
assertTrue(allLogs.contains("Cannot modify equipment v8 : The value or referenced field of the second operand in the division operator is zero"));

}
}