From 2f8f7769056c6806a6fa8326ca6256644e9fdfd4 Mon Sep 17 00:00:00 2001 From: Matthieu SAUR Date: Mon, 28 Sep 2026 09:16:23 +0200 Subject: [PATCH 1/4] Add previous `notifyUpdate` calls for `setTargetQ` and `setTargetV` methods in GeneratorImpl and BatteryImpl Signed-off-by: Matthieu SAUR --- .../iidm/network/impl/BatteryImpl.java | 7 +++++- .../iidm/network/impl/GeneratorImpl.java | 25 ++++++++++--------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java index 247decbb8f7..f285091a1c0 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java @@ -95,6 +95,11 @@ public double getTargetQ() { @Override public Battery setTargetQ(double targetQ) { + NetworkImpl network = getNetwork(); + int variantIndex = network.getVariantIndex(); + double oldValue = this.localTargetQ.set(variantIndex, targetQ); + String variantId = network.getVariantManager().getVariantId(variantIndex); + notifyUpdate("targetQ", variantId, oldValue, targetQ); return this.setLocalTargetQ(targetQ); } @@ -123,7 +128,7 @@ public Battery setLocalTargetQ(double targetQ) { double oldValue = this.localTargetQ.set(variantIndex, targetQ); String variantId = network.getVariantManager().getVariantId(variantIndex); network.invalidateValidationLevel(); - notifyUpdate("targetQ", variantId, oldValue, targetQ); + notifyUpdate("localTargetQ", variantId, oldValue, targetQ); return this; } diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java index ab6767ff616..c28bec65b73 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java @@ -211,7 +211,12 @@ public GeneratorImpl setLocalTargetQ(double localTargetQ) { @Override public GeneratorImpl setTargetQ(double targetQ) { - return this.setLocalTargetQ(targetQ); + setLocalTargetQ(targetQ); + int variantIndex = network.get().getVariantIndex(); + double oldValue = getTargetQ(); + String variantId = network.get().getVariantManager().getVariantId(variantIndex); + notifyUpdate("targetQ", variantId, oldValue, targetQ); + return this; } @Override @@ -245,16 +250,16 @@ public double getLocalTargetV() { @Override public GeneratorImpl setTargetV(double targetV) { ValidationUtil.checkDoublePositive(this, targetV, TARGET_V); + int variantIndex = network.get().getVariantIndex(); + String variantId = network.get().getVariantManager().getVariantId(variantIndex); + double oldValueTargetV = getTargetV(); if (voltageRegulation != null && hasRegulatingTerminal() && isWithMode(RegulationMode.VOLTAGE)) { - int variantIndex = network.get().getVariantIndex(); - String variantId = network.get().getVariantManager().getVariantId(variantIndex); - double oldValueTargetV = getTargetV(); getVoltageRegulation().setTargetValue(targetV); - notifyUpdate(TARGET_V, variantId, oldValueTargetV, targetV); getNetwork().invalidateValidationLevel(); } else { setLocalTargetV(targetV); } + notifyUpdate(TARGET_V, variantId, oldValueTargetV, targetV); return this; } @@ -262,17 +267,14 @@ public GeneratorImpl setTargetV(double targetV) { public GeneratorImpl setTargetV(double targetV, double equivalentLocalTargetV) { int variantIndex = network.get().getVariantIndex(); String variantId = network.get().getVariantManager().getVariantId(variantIndex); - double oldLocalTargetV = getLocalTargetV(); + double oldTargetV = getTargetV(); if (voltageRegulation != null) { if (hasRegulatingTerminal() && isWithMode(RegulationMode.VOLTAGE)) { - double oldTargetV = getVoltageRegulation().getTargetValue(); + oldTargetV = getVoltageRegulation().getTargetValue(); setLocalTargetV(equivalentLocalTargetV); getVoltageRegulation().setTargetValue(targetV); - notifyUpdate(LOCAL_TARGET_V, variantId, oldTargetV, equivalentLocalTargetV); - notifyUpdate(TARGET_V, variantId, oldLocalTargetV, targetV); } else { setLocalTargetV(targetV); - notifyUpdate(LOCAL_TARGET_V, variantId, oldLocalTargetV, equivalentLocalTargetV); } } else { newVoltageRegulation() @@ -281,9 +283,8 @@ public GeneratorImpl setTargetV(double targetV, double equivalentLocalTargetV) { .withRegulating(false) .build(); setLocalTargetV(equivalentLocalTargetV); - notifyUpdate(LOCAL_TARGET_V, variantId, oldLocalTargetV, equivalentLocalTargetV); - notifyUpdate(TARGET_V, variantId, oldLocalTargetV, targetV); } + notifyUpdate(TARGET_V, variantId, oldTargetV, targetV); getNetwork().invalidateValidationLevel(); return this; } From e68eb435e48350787eb886e5af0b60400eff5b3c Mon Sep 17 00:00:00 2001 From: Matthieu SAUR Date: Mon, 28 Sep 2026 10:59:12 +0200 Subject: [PATCH 2/4] Fix `notifyUpdate` calls and tests for `setTargetQ/V` in GeneratorImpl and BatteryImpl Signed-off-by: Matthieu SAUR --- .../iidm/network/impl/BatteryImpl.java | 3 +- .../iidm/network/impl/GeneratorImpl.java | 2 +- ...ionBackwardCompatibilityOnBatteryTest.java | 30 ++++++ ...nBackwardCompatibilityOnGeneratorTest.java | 92 +++++++++++++++++++ 4 files changed, 125 insertions(+), 2 deletions(-) diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java index f285091a1c0..cca0b6334fd 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java @@ -97,7 +97,8 @@ public double getTargetQ() { public Battery setTargetQ(double targetQ) { NetworkImpl network = getNetwork(); int variantIndex = network.getVariantIndex(); - double oldValue = this.localTargetQ.set(variantIndex, targetQ); + double oldValue = getTargetQ(); + setLocalTargetQ(targetQ); String variantId = network.getVariantManager().getVariantId(variantIndex); notifyUpdate("targetQ", variantId, oldValue, targetQ); return this.setLocalTargetQ(targetQ); diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java index c28bec65b73..7e7963fed9e 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java @@ -211,9 +211,9 @@ public GeneratorImpl setLocalTargetQ(double localTargetQ) { @Override public GeneratorImpl setTargetQ(double targetQ) { - setLocalTargetQ(targetQ); int variantIndex = network.get().getVariantIndex(); double oldValue = getTargetQ(); + setLocalTargetQ(targetQ); String variantId = network.get().getVariantManager().getVariantId(variantIndex); notifyUpdate("targetQ", variantId, oldValue, targetQ); return this; diff --git a/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnBatteryTest.java b/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnBatteryTest.java index fdd519f3ca2..93557b7a494 100644 --- a/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnBatteryTest.java +++ b/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnBatteryTest.java @@ -9,6 +9,9 @@ import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.BatteryAdder; +import com.powsybl.iidm.network.NetworkEventRecorder; +import com.powsybl.iidm.network.events.NetworkEvent; +import com.powsybl.iidm.network.events.UpdateNetworkEvent; import com.powsybl.iidm.network.regulation.RegulationMode; import org.junit.jupiter.api.Test; @@ -108,4 +111,31 @@ public void testBatteryFullDeprecatedMethodAndNewMethods() { assertFalse(battery.isRegulating()); } + @Test + void testNotifyUpdateOnSetTargetQ() { + // GIVEN + Battery battery = network.getBatteryStream().toList().getFirst(); + String id = battery.getId(); + double newTargetQ = 123.0; + double oldTargetQ = battery.getTargetQ(); + NetworkEventRecorder listener = new NetworkEventRecorder(); + network.addListener(listener); + // WHEN + battery.setTargetQ(newTargetQ); + // THEN + assertEquals(2, listener.getEvents().size()); + NetworkEvent firstEvent = listener.getEvents().getFirst(); + assertEquals(NetworkEvent.Type.UPDATE, firstEvent.getType()); + assertEquals("localTargetQ", ((UpdateNetworkEvent) firstEvent).attribute()); + assertEquals(newTargetQ, ((UpdateNetworkEvent) firstEvent).newValue()); + assertEquals(oldTargetQ, ((UpdateNetworkEvent) firstEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) firstEvent).id()); + NetworkEvent secondEvent = listener.getEvents().get(1); + assertEquals(NetworkEvent.Type.UPDATE, secondEvent.getType()); + assertEquals("targetQ", ((UpdateNetworkEvent) secondEvent).attribute()); + assertEquals(newTargetQ, ((UpdateNetworkEvent) secondEvent).newValue()); + assertEquals(oldTargetQ, ((UpdateNetworkEvent) secondEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) secondEvent).id()); + } + } diff --git a/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnGeneratorTest.java b/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnGeneratorTest.java index 82853724178..ca5d719e01c 100644 --- a/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnGeneratorTest.java +++ b/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnGeneratorTest.java @@ -9,6 +9,9 @@ import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.GeneratorAdder; +import com.powsybl.iidm.network.NetworkEventRecorder; +import com.powsybl.iidm.network.events.NetworkEvent; +import com.powsybl.iidm.network.events.UpdateNetworkEvent; import com.powsybl.iidm.network.regulation.RegulationMode; import org.junit.jupiter.api.Test; @@ -291,4 +294,93 @@ public void testGeneratorLocalVoltageRegulationOnWithPartialDeprecatedMethodsWit assertTrue(generator.isVoltageRegulatorOn()); } + @Test + void testNotifyUpdateOnSetTargetQ() { + // GIVEN + Generator generator = voltageLevel.getGeneratorStream().toList().getFirst(); + String id = generator.getId(); + double newTargetQ = 123.0; + double oldTargetQ = generator.getTargetQ(); + NetworkEventRecorder listener = new NetworkEventRecorder(); + network.addListener(listener); + // WHEN + generator.setTargetQ(newTargetQ); + // THEN + assertEquals(2, listener.getEvents().size()); + NetworkEvent firstEvent = listener.getEvents().getFirst(); + assertEquals(NetworkEvent.Type.UPDATE, firstEvent.getType()); + assertEquals("localTargetQ", ((UpdateNetworkEvent) firstEvent).attribute()); + assertEquals(newTargetQ, ((UpdateNetworkEvent) firstEvent).newValue()); + assertEquals(oldTargetQ, ((UpdateNetworkEvent) firstEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) firstEvent).id()); + NetworkEvent secondEvent = listener.getEvents().get(1); + assertEquals(NetworkEvent.Type.UPDATE, secondEvent.getType()); + assertEquals("targetQ", ((UpdateNetworkEvent) secondEvent).attribute()); + assertEquals(newTargetQ, ((UpdateNetworkEvent) secondEvent).newValue()); + assertEquals(oldTargetQ, ((UpdateNetworkEvent) secondEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) secondEvent).id()); + } + + @Test + void testNotifyUpdateOnSetTargetV() { + // GIVEN + Generator generator = voltageLevel.getGeneratorStream().toList().getFirst(); + String id = generator.getId(); + double newTargetV = 123.0; + double oldTargetV = generator.getTargetV(); + NetworkEventRecorder listener = new NetworkEventRecorder(); + network.addListener(listener); + // WHEN + generator.setTargetV(newTargetV); + // THEN + assertEquals(2, listener.getEvents().size()); + NetworkEvent firstEvent = listener.getEvents().getFirst(); + assertEquals(NetworkEvent.Type.UPDATE, firstEvent.getType()); + assertEquals("localTargetV", ((UpdateNetworkEvent) firstEvent).attribute()); + assertEquals(newTargetV, ((UpdateNetworkEvent) firstEvent).newValue()); + assertEquals(oldTargetV, ((UpdateNetworkEvent) firstEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) firstEvent).id()); + NetworkEvent secondEvent = listener.getEvents().get(1); + assertEquals(NetworkEvent.Type.UPDATE, secondEvent.getType()); + assertEquals("targetV", ((UpdateNetworkEvent) secondEvent).attribute()); + assertEquals(newTargetV, ((UpdateNetworkEvent) secondEvent).newValue()); + assertEquals(oldTargetV, ((UpdateNetworkEvent) secondEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) secondEvent).id()); + } + + @Test + void testNotifyUpdateOnSetTargetVAndEquivalentTargetV() { + // GIVEN + Generator generator = voltageLevel.getGeneratorStream().toList().getFirst(); + String id = generator.getId(); + double newTargetV = 123.0; + double newEquivalentTargetV = 12.0; + double oldTargetV = generator.getTargetV(); + generator.setRegulatingTerminal(remoteTerminal); + NetworkEventRecorder listener = new NetworkEventRecorder(); + network.addListener(listener); + // WHEN + generator.setTargetV(newTargetV, newEquivalentTargetV); + // THEN + assertEquals(3, listener.getEvents().size()); + NetworkEvent firstEvent = listener.getEvents().getFirst(); + assertEquals(NetworkEvent.Type.UPDATE, firstEvent.getType()); + assertEquals("localTargetV", ((UpdateNetworkEvent) firstEvent).attribute()); + assertEquals(newEquivalentTargetV, ((UpdateNetworkEvent) firstEvent).newValue()); + assertEquals(oldTargetV, ((UpdateNetworkEvent) firstEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) firstEvent).id()); + NetworkEvent secondEvent = listener.getEvents().get(1); + assertEquals(NetworkEvent.Type.UPDATE, secondEvent.getType()); + assertEquals("VoltageRegulation.TargetValue", ((UpdateNetworkEvent) secondEvent).attribute()); + assertEquals(newTargetV, ((UpdateNetworkEvent) secondEvent).newValue()); + assertEquals(oldTargetV, ((UpdateNetworkEvent) secondEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) secondEvent).id()); + NetworkEvent thirdEvent = listener.getEvents().get(2); + assertEquals(NetworkEvent.Type.UPDATE, thirdEvent.getType()); + assertEquals("targetV", ((UpdateNetworkEvent) thirdEvent).attribute()); + assertEquals(newTargetV, ((UpdateNetworkEvent) thirdEvent).newValue()); + assertEquals(oldTargetV, ((UpdateNetworkEvent) thirdEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) thirdEvent).id()); + } + } From 981efde837ca94699338bb957daaa64d777b7e7e Mon Sep 17 00:00:00 2001 From: Matthieu SAUR Date: Wed, 30 Sep 2026 15:25:11 +0200 Subject: [PATCH 3/4] Fix code reviews Signed-off-by: Matthieu SAUR --- .../powsybl/iidm/network/impl/BatteryImpl.java | 2 +- .../powsybl/iidm/network/impl/GeneratorImpl.java | 4 ++++ ...tionBackwardCompatibilityOnGeneratorTest.java | 16 ++++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java index cca0b6334fd..916ad25cf67 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/BatteryImpl.java @@ -101,7 +101,7 @@ public Battery setTargetQ(double targetQ) { setLocalTargetQ(targetQ); String variantId = network.getVariantManager().getVariantId(variantIndex); notifyUpdate("targetQ", variantId, oldValue, targetQ); - return this.setLocalTargetQ(targetQ); + return this; } /** diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java index 7e7963fed9e..24dde7c59db 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/GeneratorImpl.java @@ -253,6 +253,7 @@ public GeneratorImpl setTargetV(double targetV) { int variantIndex = network.get().getVariantIndex(); String variantId = network.get().getVariantManager().getVariantId(variantIndex); double oldValueTargetV = getTargetV(); + double oldEquivalentLocalTargetV = getEquivalentLocalTargetV(); if (voltageRegulation != null && hasRegulatingTerminal() && isWithMode(RegulationMode.VOLTAGE)) { getVoltageRegulation().setTargetValue(targetV); getNetwork().invalidateValidationLevel(); @@ -260,6 +261,7 @@ public GeneratorImpl setTargetV(double targetV) { setLocalTargetV(targetV); } notifyUpdate(TARGET_V, variantId, oldValueTargetV, targetV); + notifyUpdate("equivalentLocalTargetV", variantId, oldEquivalentLocalTargetV, getEquivalentLocalTargetV()); return this; } @@ -268,6 +270,7 @@ public GeneratorImpl setTargetV(double targetV, double equivalentLocalTargetV) { int variantIndex = network.get().getVariantIndex(); String variantId = network.get().getVariantManager().getVariantId(variantIndex); double oldTargetV = getTargetV(); + double oldEquivalentLocalTargetV = getEquivalentLocalTargetV(); if (voltageRegulation != null) { if (hasRegulatingTerminal() && isWithMode(RegulationMode.VOLTAGE)) { oldTargetV = getVoltageRegulation().getTargetValue(); @@ -285,6 +288,7 @@ public GeneratorImpl setTargetV(double targetV, double equivalentLocalTargetV) { setLocalTargetV(equivalentLocalTargetV); } notifyUpdate(TARGET_V, variantId, oldTargetV, targetV); + notifyUpdate("equivalentLocalTargetV", variantId, oldEquivalentLocalTargetV, getEquivalentLocalTargetV()); getNetwork().invalidateValidationLevel(); return this; } diff --git a/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnGeneratorTest.java b/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnGeneratorTest.java index ca5d719e01c..5deffd55495 100644 --- a/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnGeneratorTest.java +++ b/iidm/iidm-tck/src/test/java/com/powsybl/iidm/network/tck/voltage/regulation/backward/compatibility/AbstractVoltageRegulationBackwardCompatibilityOnGeneratorTest.java @@ -333,7 +333,7 @@ void testNotifyUpdateOnSetTargetV() { // WHEN generator.setTargetV(newTargetV); // THEN - assertEquals(2, listener.getEvents().size()); + assertEquals(3, listener.getEvents().size()); NetworkEvent firstEvent = listener.getEvents().getFirst(); assertEquals(NetworkEvent.Type.UPDATE, firstEvent.getType()); assertEquals("localTargetV", ((UpdateNetworkEvent) firstEvent).attribute()); @@ -346,6 +346,12 @@ void testNotifyUpdateOnSetTargetV() { assertEquals(newTargetV, ((UpdateNetworkEvent) secondEvent).newValue()); assertEquals(oldTargetV, ((UpdateNetworkEvent) secondEvent).oldValue()); assertEquals(id, ((UpdateNetworkEvent) secondEvent).id()); + NetworkEvent thirdEvent = listener.getEvents().get(2); + assertEquals(NetworkEvent.Type.UPDATE, thirdEvent.getType()); + assertEquals("equivalentLocalTargetV", ((UpdateNetworkEvent) thirdEvent).attribute()); + assertEquals(newTargetV, ((UpdateNetworkEvent) thirdEvent).newValue()); + assertEquals(oldTargetV, ((UpdateNetworkEvent) thirdEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) thirdEvent).id()); } @Test @@ -362,7 +368,7 @@ void testNotifyUpdateOnSetTargetVAndEquivalentTargetV() { // WHEN generator.setTargetV(newTargetV, newEquivalentTargetV); // THEN - assertEquals(3, listener.getEvents().size()); + assertEquals(4, listener.getEvents().size()); NetworkEvent firstEvent = listener.getEvents().getFirst(); assertEquals(NetworkEvent.Type.UPDATE, firstEvent.getType()); assertEquals("localTargetV", ((UpdateNetworkEvent) firstEvent).attribute()); @@ -381,6 +387,12 @@ void testNotifyUpdateOnSetTargetVAndEquivalentTargetV() { assertEquals(newTargetV, ((UpdateNetworkEvent) thirdEvent).newValue()); assertEquals(oldTargetV, ((UpdateNetworkEvent) thirdEvent).oldValue()); assertEquals(id, ((UpdateNetworkEvent) thirdEvent).id()); + NetworkEvent fourthEvent = listener.getEvents().get(3); + assertEquals(NetworkEvent.Type.UPDATE, fourthEvent.getType()); + assertEquals("equivalentLocalTargetV", ((UpdateNetworkEvent) fourthEvent).attribute()); + assertEquals(newEquivalentTargetV, ((UpdateNetworkEvent) fourthEvent).newValue()); + assertEquals(oldTargetV, ((UpdateNetworkEvent) fourthEvent).oldValue()); + assertEquals(id, ((UpdateNetworkEvent) fourthEvent).id()); } } From 313303772e7df9ad7e746f502a23812200f77dc2 Mon Sep 17 00:00:00 2001 From: Matthieu SAUR Date: Wed, 30 Sep 2026 17:59:47 +0200 Subject: [PATCH 4/4] Add `notifyUpdate` call in `setLocalTargetV` method of ShuntCompensatorImpl Signed-off-by: Matthieu SAUR --- .../powsybl/iidm/network/impl/ShuntCompensatorImpl.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/ShuntCompensatorImpl.java b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/ShuntCompensatorImpl.java index 5abc14d1a21..81df1a844fa 100644 --- a/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/ShuntCompensatorImpl.java +++ b/iidm/iidm-impl/src/main/java/com/powsybl/iidm/network/impl/ShuntCompensatorImpl.java @@ -63,16 +63,18 @@ public TerminalExt getTerminal() { } @Override - public ShuntCompensator setLocalTargetV(double targetV) { + public ShuntCompensator setLocalTargetV(double newLocalTargetV) { + double oldTargetV = getLocalTargetV(); ValidationUtil.checkLocalTargetQandV(this, ShuntCompensator.class, - targetV, + newLocalTargetV, Double.NaN, getVoltageRegulation(), getNetwork().getMinValidationLevel(), getNetwork().getReportNodeContext().getReportNode()); - this.localTargetV.set(getCurrentIndex(), targetV); + this.localTargetV.set(getCurrentIndex(), newLocalTargetV); getNetwork().invalidateValidationLevel(); + notifyUpdate("localTargetV", oldTargetV, newLocalTargetV); return this; }