Skip to content

Commit

Permalink
Fix sonar issue and use apply return boolean to warn about potential …
Browse files Browse the repository at this point in the history
…failure of applying an action.

Signed-off-by: Bertrand Rix <[email protected]>
  • Loading branch information
obrix committed Jan 27, 2025
1 parent 33f1a45 commit bc36fa5
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.openloadflow.graph.GraphConnectivity;
import com.powsybl.openloadflow.network.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;

Expand All @@ -24,6 +26,8 @@
*/
public final class LfActionUtils {

private static final Logger LOGGER = LoggerFactory.getLogger(LfActionUtils.class);

private LfActionUtils() {
}

Expand Down Expand Up @@ -63,7 +67,11 @@ public static void applyListOfActions(List<LfAction> actions, LfNetwork network,
// then process remaining changes of actions
actions.stream()
.filter(action -> !(action instanceof AbstractLfBranchAction<?>))
.forEach(action -> action.apply(network, contingency, networkParameters));
.forEach(action -> {
if (!action.apply(network, contingency, networkParameters)) {
LOGGER.warn("Action {} : may not have been applied successfully.", action.getId());
}
});
}

private static void updateConnectivity(List<LfAction> branchActions, LfNetwork network, LfContingency contingency) {
Expand All @@ -76,7 +84,11 @@ private static void updateConnectivity(List<LfAction> branchActions, LfNetwork n
// update connectivity according to post action state
connectivity.startTemporaryChanges();

branchActions.forEach(action -> ((AbstractLfBranchAction<?>) action).applyOnConnectivity(network, connectivity));
branchActions.forEach(action -> {
if (((AbstractLfBranchAction<?>) action).applyOnConnectivity(network, connectivity)) {
LOGGER.warn("Action {} : may not have been applied successfully.", action.getId());
}
});

updateBusesAndBranchStatus(connectivity);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*/
public class LfAreaInterchangeTargetAction extends AbstractLfAction<AreaInterchangeTargetAction> {

private static final Logger LOGGER = LoggerFactory.getLogger(AreaInterchangeTargetAction.class);
private static final Logger LOGGER = LoggerFactory.getLogger(LfAreaInterchangeTargetAction.class);

public LfAreaInterchangeTargetAction(String id, AreaInterchangeTargetAction action) {
super(id, action);
Expand Down
29 changes: 16 additions & 13 deletions src/test/java/com/powsybl/openloadflow/sa/LfActionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,38 +66,39 @@ void test() {
AcLoadFlowParameters acParameters = OpenLoadFlowParameters.createAcParameters(network,
loadFlowParameters, new OpenLoadFlowParameters(), matrixFactory, new NaiveGraphConnectivityFactory<>(LfBus::getNum), true, false);
LfTopoConfig topoConfig = new LfTopoConfig();
LfNetworkParameters networkParameters = acParameters.getNetworkParameters();
topoConfig.getSwitchesToOpen().add(network.getSwitch("C"));
try (LfNetworkList lfNetworks = Networks.load(network, acParameters.getNetworkParameters(), topoConfig, ReportNode.NO_OP)) {
try (LfNetworkList lfNetworks = Networks.load(network, networkParameters, topoConfig, ReportNode.NO_OP)) {
LfNetwork lfNetwork = lfNetworks.getLargest().orElseThrow();
LfAction lfSwitchAction = LfActionUtils.createLfAction(switchAction, network, acParameters.getNetworkParameters().isBreakers(), lfNetwork);
LfAction lfSwitchAction = LfActionUtils.createLfAction(switchAction, network, networkParameters.isBreakers(), lfNetwork);
String loadId = "LOAD";
Contingency contingency = new Contingency(loadId, new LoadContingency("LD"));
PropagatedContingencyCreationParameters creationParameters = new PropagatedContingencyCreationParameters()
.setHvdcAcEmulation(false);
PropagatedContingency propagatedContingency = PropagatedContingency.createList(network,
Collections.singletonList(contingency), new LfTopoConfig(), creationParameters).get(0);
propagatedContingency.toLfContingency(lfNetwork).ifPresent(lfContingency -> {
lfSwitchAction.apply(lfNetwork, lfContingency, acParameters.getNetworkParameters());
lfSwitchAction.apply(lfNetwork, lfContingency, networkParameters);
assertTrue(lfNetwork.getBranchById("C").isDisabled());
assertEquals("C", ((LfSwitchAction) lfSwitchAction).getDisabledBranch().getId());
assertNull(((LfSwitchAction) lfSwitchAction).getEnabledBranch());
});

LfAction lfInvalidSwitchAction = LfActionUtils.createLfAction(new SwitchAction("switchAction", "S", true),
network, acParameters.getNetworkParameters().isBreakers(), lfNetwork);
network, networkParameters.isBreakers(), lfNetwork);
LfAction lfInvalidTerminalsConnectionAction = LfActionUtils.createLfAction(new TerminalsConnectionAction("A line action", "x", true),
network, acParameters.getNetworkParameters().isBreakers(), lfNetwork);
network, networkParameters.isBreakers(), lfNetwork);
LfAction lfInvalidPhaseTapChangerTapPositionAction = LfActionUtils.createLfAction(new PhaseTapChangerTapPositionAction("A phase tap change action", "y", false, 3),
network, acParameters.getNetworkParameters().isBreakers(), lfNetwork);
network, networkParameters.isBreakers(), lfNetwork);

assertFalse(lfInvalidSwitchAction.apply(lfNetwork, null, acParameters.getNetworkParameters()));
assertFalse(lfInvalidTerminalsConnectionAction.apply(lfNetwork, null, acParameters.getNetworkParameters()));
assertFalse(lfInvalidPhaseTapChangerTapPositionAction.apply(lfNetwork, null, acParameters.getNetworkParameters()));
assertFalse(lfInvalidSwitchAction.apply(lfNetwork, null, networkParameters));
assertFalse(lfInvalidTerminalsConnectionAction.apply(lfNetwork, null, networkParameters));
assertFalse(lfInvalidPhaseTapChangerTapPositionAction.apply(lfNetwork, null, networkParameters));

var lineAction = new TerminalsConnectionAction("A line action", "L1", ThreeSides.ONE, false);
LfAction lfTerminalAction = LfActionUtils.createLfAction(lineAction, network, acParameters.getNetworkParameters().isBreakers(), lfNetwork);
LfAction lfTerminalAction = LfActionUtils.createLfAction(lineAction, network, networkParameters.isBreakers(), lfNetwork);
assertEquals("Terminals connection action: only open or close branch at both sides is supported yet.",
assertThrows(UnsupportedOperationException.class, () -> lfTerminalAction.apply(lfNetwork, null, acParameters.getNetworkParameters())).getMessage());
assertThrows(UnsupportedOperationException.class, () -> lfTerminalAction.apply(lfNetwork, null, networkParameters)).getMessage());
}
}

Expand All @@ -113,10 +114,11 @@ void testUnsupportedGeneratorAction() {
var matrixFactory = new DenseMatrixFactory();
AcLoadFlowParameters acParameters = OpenLoadFlowParameters.createAcParameters(network,
new LoadFlowParameters(), new OpenLoadFlowParameters(), matrixFactory, new NaiveGraphConnectivityFactory<>(LfBus::getNum), true, false);
LfNetworkParameters networkParameters = acParameters.getNetworkParameters();
try (LfNetworkList lfNetworks = Networks.load(network, acParameters.getNetworkParameters(), new LfTopoConfig(), ReportNode.NO_OP)) {
LfNetwork lfNetwork = lfNetworks.getLargest().orElseThrow();
LfAction lfGeneratorAction = LfActionUtils.createLfAction(generatorAction, network, acParameters.getNetworkParameters().isBreakers(), lfNetwork);
UnsupportedOperationException e = assertThrows(UnsupportedOperationException.class, () -> lfGeneratorAction.apply(lfNetwork, null, acParameters.getNetworkParameters()));
UnsupportedOperationException e = assertThrows(UnsupportedOperationException.class, () -> lfGeneratorAction.apply(lfNetwork, null, networkParameters));
assertEquals("Generator action on G : configuration not supported yet.", e.getMessage());
}
}
Expand Down Expand Up @@ -167,10 +169,11 @@ void testHvdcAction() {
var matrixFactory = new DenseMatrixFactory();
AcLoadFlowParameters acParameters = OpenLoadFlowParameters.createAcParameters(network,
new LoadFlowParameters(), new OpenLoadFlowParameters(), matrixFactory, new NaiveGraphConnectivityFactory<>(LfBus::getNum), true, false);
LfNetworkParameters networkParameters = acParameters.getNetworkParameters();
try (LfNetworkList lfNetworks = Networks.load(network, acParameters.getNetworkParameters(), new LfTopoConfig(), ReportNode.NO_OP)) {
LfNetwork lfNetwork = lfNetworks.getLargest().orElseThrow();
LfAction lfAction = LfActionUtils.createLfAction(hvdcAction, network, acParameters.getNetworkParameters().isBreakers(), lfNetwork);
UnsupportedOperationException e = assertThrows(UnsupportedOperationException.class, () -> lfAction.apply(lfNetwork, null, acParameters.getNetworkParameters()));
UnsupportedOperationException e = assertThrows(UnsupportedOperationException.class, () -> lfAction.apply(lfNetwork, null, networkParameters));
assertEquals("Hvdc action: line is already in AC emulation, not supported yet.", e.getMessage());
}
}
Expand Down

0 comments on commit bc36fa5

Please sign in to comment.