From 5e5675a4fe78c1817ffd5c63ac8b61318f5acb8c Mon Sep 17 00:00:00 2001 From: basseche Date: Tue, 10 Feb 2026 17:50:19 +0100 Subject: [PATCH] Replace usage of BusbarSectionFinderTraverser with the one from Powsybl-core --- .../BusbarSectionFinderTraverser.java | 103 ------------------ .../modification/utils/ModificationUtils.java | 2 +- .../GeneratorModificationTest.java | 1 + ...woWindingsTransformerModificationTest.java | 1 + .../BusbarSectionFinderTraverserTest.java | 2 +- 5 files changed, 4 insertions(+), 105 deletions(-) delete mode 100644 src/main/java/org/gridsuite/modification/modifications/BusbarSectionFinderTraverser.java diff --git a/src/main/java/org/gridsuite/modification/modifications/BusbarSectionFinderTraverser.java b/src/main/java/org/gridsuite/modification/modifications/BusbarSectionFinderTraverser.java deleted file mode 100644 index 9c82bb1d..00000000 --- a/src/main/java/org/gridsuite/modification/modifications/BusbarSectionFinderTraverser.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Copyright (c) 2024, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -package org.gridsuite.modification.modifications; - -import com.powsybl.iidm.network.*; -import com.powsybl.math.graph.TraversalType; -import com.powsybl.math.graph.TraverseResult; - -import java.util.*; - -/** - * @author Ghazwa Rehili - */ -// FIXME : to remove when this class is available in network-store -public final class BusbarSectionFinderTraverser { - - private BusbarSectionFinderTraverser() { - throw new UnsupportedOperationException(); - } - - public record SwitchInfo(String id, boolean isOpen) { } - - public record BusbarSectionResult(String busbarSectionId, int depth, SwitchInfo lastSwitch, boolean allClosedSwitch) { } - - public static String findBusbarSectionId(Terminal terminal) { - BusbarSectionResult result = getBusbarSectionResult(terminal); - return result != null ? result.busbarSectionId() : terminal.getVoltageLevel().getNodeBreakerView().getBusbarSections().iterator().next().getId(); - } - - public static BusbarSectionResult getBusbarSectionResult(Terminal terminal) { - int startNode = terminal.getNodeBreakerView().getNode(); - List allResults = searchAllBusbars(terminal.getVoltageLevel(), startNode); - if (allResults.isEmpty()) { - return null; - } - return selectBestBusbar(allResults); - } - - private static BusbarSectionResult selectBestBusbar(List results) { - List withAllClosedSwitch = results.stream().filter(r -> r.allClosedSwitch).toList(); - if (!withAllClosedSwitch.isEmpty()) { - return withAllClosedSwitch.stream().min(Comparator.comparingInt(BusbarSectionResult::depth) - .thenComparing(BusbarSectionResult::busbarSectionId)).orElse(null); - } - List withClosedSwitch = results.stream().filter(r -> r.lastSwitch() != null && !r.lastSwitch().isOpen()).toList(); - if (!withClosedSwitch.isEmpty()) { - return withClosedSwitch.stream().min(Comparator.comparingInt(BusbarSectionResult::depth) - .thenComparing(BusbarSectionResult::busbarSectionId)).orElse(null); - } - List withOpenSwitch = results.stream().filter(r -> r.lastSwitch() != null && r.lastSwitch().isOpen()).toList(); - if (!withOpenSwitch.isEmpty()) { - return withOpenSwitch.stream().min(Comparator.comparingInt(BusbarSectionResult::depth) - .thenComparing(BusbarSectionResult::busbarSectionId)).orElse(null); - } - return results.getFirst(); - } - - private static List searchAllBusbars(VoltageLevel voltageLevel, int startNode) { - List results = new ArrayList<>(); - record NodeState(int depth, boolean allClosed) { } - Map visitedNodes = new HashMap<>(); - visitedNodes.put(startNode, new NodeState(0, true)); - voltageLevel.getNodeBreakerView().getTerminal(startNode).traverse(new Terminal.TopologyTraverser() { - SwitchInfo lastSwitch = null; - @Override - public TraverseResult traverse(Terminal terminal, boolean connected) { - if (terminal.getVoltageLevel() != voltageLevel) { - return TraverseResult.TERMINATE_PATH; - } - NodeState currentNodeState = visitedNodes.get(terminal.getNodeBreakerView().getNode()); - if (terminal.getConnectable() instanceof BusbarSection busbarSection) { - if (currentNodeState != null) { - results.add(new BusbarSectionResult(busbarSection.getId(), currentNodeState.depth, lastSwitch, currentNodeState.allClosed)); - } - return TraverseResult.TERMINATE_PATH; - } - return TraverseResult.CONTINUE; - } - - @Override - public TraverseResult traverse(Switch aSwitch) { - int node1 = voltageLevel.getNodeBreakerView().getNode1(aSwitch.getId()); - int node2 = voltageLevel.getNodeBreakerView().getNode2(aSwitch.getId()); - int sourceNode = visitedNodes.containsKey(node1) ? node1 : node2; - int targetNode = visitedNodes.containsKey(node1) ? node2 : node1; - NodeState sourceState = visitedNodes.get(sourceNode); - if (sourceState == null) { - return TraverseResult.TERMINATE_PATH; - } - NodeState newState = new NodeState(sourceState.depth + 1, sourceState.allClosed && !aSwitch.isOpen()); - visitedNodes.put(targetNode, newState); - lastSwitch = new SwitchInfo(aSwitch.getId(), aSwitch.isOpen()); - return TraverseResult.CONTINUE; - } - }, TraversalType.BREADTH_FIRST); - return results; - } -} - diff --git a/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java b/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java index 4c39ff2c..b8982861 100644 --- a/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java +++ b/src/main/java/org/gridsuite/modification/utils/ModificationUtils.java @@ -11,12 +11,12 @@ import com.powsybl.iidm.modification.topology.*; import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.*; +import com.powsybl.iidm.network.util.BusbarSectionFinderTraverser; import org.apache.commons.math3.util.Pair; import org.gridsuite.modification.IFilterService; import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.modifications.AbstractBranchModification; -import org.gridsuite.modification.modifications.BusbarSectionFinderTraverser; import org.gridsuite.modification.report.NetworkModificationReportResourceBundle; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; diff --git a/src/test/java/org/gridsuite/modification/modifications/GeneratorModificationTest.java b/src/test/java/org/gridsuite/modification/modifications/GeneratorModificationTest.java index befbfbc0..e50cf339 100644 --- a/src/test/java/org/gridsuite/modification/modifications/GeneratorModificationTest.java +++ b/src/test/java/org/gridsuite/modification/modifications/GeneratorModificationTest.java @@ -12,6 +12,7 @@ import com.powsybl.iidm.network.extensions.ConnectablePosition; import com.powsybl.iidm.network.extensions.GeneratorShortCircuit; import com.powsybl.iidm.network.extensions.GeneratorStartup; +import com.powsybl.iidm.network.util.BusbarSectionFinderTraverser; import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.utils.NetworkCreation; diff --git a/src/test/java/org/gridsuite/modification/modifications/TwoWindingsTransformerModificationTest.java b/src/test/java/org/gridsuite/modification/modifications/TwoWindingsTransformerModificationTest.java index 7781bc4d..3eeb5e80 100644 --- a/src/test/java/org/gridsuite/modification/modifications/TwoWindingsTransformerModificationTest.java +++ b/src/test/java/org/gridsuite/modification/modifications/TwoWindingsTransformerModificationTest.java @@ -13,6 +13,7 @@ import com.powsybl.iidm.network.extensions.Measurement; import com.powsybl.iidm.network.extensions.Measurements; import com.powsybl.iidm.network.extensions.TwoWindingsTransformerToBeEstimated; +import com.powsybl.iidm.network.util.BusbarSectionFinderTraverser; import org.apache.commons.collections4.CollectionUtils; import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; diff --git a/src/test/java/org/gridsuite/modification/utils/BusbarSectionFinderTraverserTest.java b/src/test/java/org/gridsuite/modification/utils/BusbarSectionFinderTraverserTest.java index fb7191a6..52471946 100644 --- a/src/test/java/org/gridsuite/modification/utils/BusbarSectionFinderTraverserTest.java +++ b/src/test/java/org/gridsuite/modification/utils/BusbarSectionFinderTraverserTest.java @@ -2,7 +2,7 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.BusbarSectionPositionAdder; -import org.gridsuite.modification.modifications.BusbarSectionFinderTraverser; +import com.powsybl.iidm.network.util.BusbarSectionFinderTraverser; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.SpringBootConfiguration;