diff --git a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/AbstractNamingStrategy.java b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/AbstractNamingStrategy.java index 3052e72eab3..b146899fba4 100644 --- a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/AbstractNamingStrategy.java +++ b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/AbstractNamingStrategy.java @@ -8,7 +8,7 @@ package com.powsybl.ucte.converter; import com.powsybl.iidm.network.*; -import com.powsybl.ucte.converter.util.UcteConstants; +import com.powsybl.ucte.converter.util.UcteConverterConstants; import com.powsybl.ucte.network.UcteElementId; import com.powsybl.ucte.network.UcteNodeCode; @@ -24,14 +24,14 @@ public abstract class AbstractNamingStrategy implements NamingStrategy { protected final Map ucteElementIds = new HashMap<>(); @Override - public void initialiseNetwork(Network network) { + public void initializeNetwork(Network network) { //Empty implementation by default } @Override public UcteNodeCode getUcteNodeCode(String id) { return ucteNodeIds.computeIfAbsent(id, k -> UcteNodeCode.parseUcteNodeCode(k) - .orElseThrow(() -> new UcteException(UcteConstants.NO_UCTE_CODE_ERROR + k))); + .orElseThrow(() -> new UcteException(UcteConverterConstants.NO_UCTE_CODE_ERROR + k))); } @Override @@ -50,7 +50,7 @@ public UcteNodeCode getUcteNodeCode(DanglingLine danglingLine) { @Override public UcteElementId getUcteElementId(String id) { return ucteElementIds.computeIfAbsent(id, k -> UcteElementId.parseUcteElementId(k) - .orElseThrow(() -> new UcteException(UcteConstants.NO_UCTE_CODE_ERROR + k))); + .orElseThrow(() -> new UcteException(UcteConverterConstants.NO_UCTE_CODE_ERROR + k))); } @Override diff --git a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/CounterNamingStrategy.java b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/CounterNamingStrategy.java index d157ccf6776..318499e7749 100644 --- a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/CounterNamingStrategy.java +++ b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/CounterNamingStrategy.java @@ -9,12 +9,11 @@ import com.google.auto.service.AutoService; import com.powsybl.iidm.network.*; -import com.powsybl.ucte.converter.util.UcteConstants; -import com.powsybl.ucte.converter.util.UcteConverterHelper; import com.powsybl.ucte.network.UcteCountryCode; import com.powsybl.ucte.network.UcteElementId; import com.powsybl.ucte.network.UcteNodeCode; import com.powsybl.ucte.network.UcteVoltageLevelCode; +import com.powsybl.ucte.network.util.UcteNetworkUtil; import java.util.*; @@ -32,7 +31,7 @@ public String getName() { } @Override - public void initialiseNetwork(Network network) { + public void initializeNetwork(Network network) { voltageLevelCounter = 0; network.getVoltageLevelStream() .forEach(this::processVoltageLevel); @@ -45,7 +44,7 @@ private void processVoltageLevel(VoltageLevel voltageLevel) { Iterator buslist = voltageLevel.getBusBreakerView().getBuses().iterator(); for (int i = 0; buslist.hasNext(); i++) { Bus bus = buslist.next(); - char orderCode = UcteConverterHelper.getOrderCode(i); + char orderCode = UcteNetworkUtil.getOrderCode(i); generateUcteNodeId(bus.getId(), voltageLevel, orderCode); } @@ -88,7 +87,7 @@ private UcteElementId generateUcteElementId(String id, UcteNodeCode node1, UcteN return ucteElementIds.get(id); } - UcteElementId uniqueElementId = UcteConstants.ORDER_CODES.stream() + UcteElementId uniqueElementId = UcteNetworkUtil.ORDER_CODES.stream() .map(orderCode -> new UcteElementId(node1, node2, orderCode)) .filter(elementId -> !ucteElementIds.containsValue(elementId)) .findFirst() @@ -122,7 +121,7 @@ private UcteElementId generateUcteElementId(DanglingLine danglingLine) { code2 = UcteNodeCode.parseUcteNodeCode(danglingLine.getPairingKey()).orElseThrow(); ucteNodeIds.put(danglingLine.getPairingKey(), code2); } else { - code2 = generateUcteNodeId(danglingLine.getId(), danglingLine.getTerminal().getVoltageLevel(), UcteConverterHelper.getOrderCode(0)); + code2 = generateUcteNodeId(danglingLine.getId(), danglingLine.getTerminal().getVoltageLevel(), UcteNetworkUtil.getOrderCode(0)); } return generateUcteElementId(danglingLine.getId(), code1, code2); } diff --git a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/NamingStrategy.java b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/NamingStrategy.java index 3e2adcf5f9d..19fdca2291c 100644 --- a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/NamingStrategy.java +++ b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/NamingStrategy.java @@ -17,7 +17,7 @@ */ public interface NamingStrategy { - void initialiseNetwork(Network network); + void initializeNetwork(Network network); String getName(); diff --git a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/UcteExporter.java b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/UcteExporter.java index 55ca23aeb2b..33dbf02bed6 100644 --- a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/UcteExporter.java +++ b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/UcteExporter.java @@ -32,7 +32,7 @@ import java.util.*; import java.util.function.Supplier; -import static com.powsybl.ucte.converter.util.UcteConstants.*; +import static com.powsybl.ucte.converter.util.UcteConverterConstants.*; import static com.powsybl.ucte.converter.util.UcteConverterHelper.*; /** @@ -87,7 +87,7 @@ public void export(Network network, Properties parameters, DataSource dataSource String namingStrategyName = Parameter.readString(getFormat(), parameters, NAMING_STRATEGY_PARAMETER, defaultValueConfig); NamingStrategy namingStrategy = findNamingStrategy(namingStrategyName, NAMING_STRATEGY_SUPPLIERS.get()); - namingStrategy.initialiseNetwork(network); + namingStrategy.initializeNetwork(network); boolean combinePhaseAngleRegulation = Parameter.readBoolean(getFormat(), parameters, COMBINE_PHASE_ANGLE_REGULATION_PARAMETER, defaultValueConfig); UcteNetwork ucteNetwork = createUcteNetwork(network, namingStrategy, combinePhaseAngleRegulation); diff --git a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/UcteImporter.java b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/UcteImporter.java index d689a73b68d..8e577ab7d3c 100644 --- a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/UcteImporter.java +++ b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/UcteImporter.java @@ -38,7 +38,7 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import static com.powsybl.ucte.converter.util.UcteConstants.*; +import static com.powsybl.ucte.converter.util.UcteConverterConstants.*; /** * @author Geoffroy Jamgotchian {@literal } diff --git a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConstants.java b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConverterConstants.java similarity index 79% rename from ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConstants.java rename to ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConverterConstants.java index fec43a0ef92..a73681a91bc 100644 --- a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConstants.java +++ b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConverterConstants.java @@ -7,14 +7,12 @@ */ package com.powsybl.ucte.converter.util; -import java.util.List; - /** * @author Sebastien Murgey {@literal } */ -public final class UcteConstants { +public final class UcteConverterConstants { - private UcteConstants() { + private UcteConverterConstants() { throw new IllegalStateException("Should not be constructed"); } @@ -29,6 +27,4 @@ private UcteConstants() { public static final String POWER_PLANT_TYPE_PROPERTY_KEY = "powerPlantType"; public static final int DEFAULT_POWER_LIMIT = 9999; public static final String NO_UCTE_CODE_ERROR = "No UCTE code found for id: "; - public static final List ORDER_CODES = List.of('1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', - 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); } diff --git a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConverterHelper.java b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConverterHelper.java index 308d846ce3f..cc1b1f9c9e5 100644 --- a/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConverterHelper.java +++ b/ucte/ucte-converter/src/main/java/com/powsybl/ucte/converter/util/UcteConverterHelper.java @@ -10,7 +10,6 @@ import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.RatioTapChanger; import com.powsybl.iidm.network.TwoWindingsTransformer; -import com.powsybl.ucte.converter.UcteException; import com.powsybl.ucte.network.UcteAngleRegulation; import com.powsybl.ucte.network.UctePhaseRegulation; import org.apache.commons.math3.complex.Complex; @@ -121,14 +120,6 @@ public static Complex calculateAsymmAngleDuAndAngle(TwoWindingsTransformer twoWi } return ComplexUtils.polar2Complex(BigDecimal.valueOf(absDu).setScale(4, RoundingMode.HALF_UP).doubleValue(), - theta); + theta); } - - public static char getOrderCode(int index) { - if (index > UcteConstants.ORDER_CODES.size() || index < 0) { - throw new UcteException("Order code index out of bounds"); - } - return UcteConstants.ORDER_CODES.get(index); - } - } diff --git a/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/CounterNamingStrategyTest.java b/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/CounterNamingStrategyTest.java index 36f75e43ec2..d4b8a1ab4a5 100644 --- a/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/CounterNamingStrategyTest.java +++ b/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/CounterNamingStrategyTest.java @@ -43,7 +43,7 @@ void testInitialNetwork() { assertThrows(UcteException.class, () -> strategy.getUcteNodeCode("NGEN")); assertThrows(UcteException.class, () -> strategy.getUcteElementId("NHV1_NHV2_1")); - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); assertDoesNotThrow(() -> strategy.getUcteNodeCode("NGEN")); assertDoesNotThrow(() -> strategy.getUcteElementId("NHV1_NHV2_1")); @@ -51,7 +51,7 @@ void testInitialNetwork() { @Test void testVoltageLevelCounterNaming() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); UcteNodeCode firstBusCode = strategy.getUcteNodeCode(network.getBusBreakerView().getBus("NGEN")); UcteNodeCode secondBusCode = strategy.getUcteNodeCode(network.getBusBreakerView().getBus("NGEN2")); @@ -69,7 +69,7 @@ void testVoltageLevelCounterNaming() { @Test void testBasicNodeCodeGeneration() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); Bus genBus = network.getBusBreakerView().getBus("NGEN"); Bus genbus2 = network.getBusBreakerView().getBus("NGEN2"); Bus ucteBus = network.getBusBreakerView().getBus("F0000079"); @@ -93,17 +93,17 @@ void testBasicNodeCodeGeneration() { () -> assertNotEquals(genCode2, ucteCode), () -> assertNotEquals(ucteCode, loadCode), - () -> assertEquals("F0000071", genCode.toString()), - () -> assertEquals("F0000072", genCode2.toString()), - () -> assertEquals("F0000074", ucteCode.toString()), - () -> assertEquals("F0000331", loadCode.toString()) + () -> assertEquals("F0000070", genCode.toString()), + () -> assertEquals("F0000071", genCode2.toString()), + () -> assertEquals("F0000073", ucteCode.toString()), + () -> assertEquals("F0000330", loadCode.toString()) ); } @Test void testBranchElementIds() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); Branch transformer1 = network.getBranch("NGEN_NHV1"); Branch transformer2 = network.getBranch("NHV2_NLOAD"); @@ -127,17 +127,17 @@ void testBranchElementIds() { () -> assertEquals(transformerId1, strategy.getUcteElementId(transformer1)), () -> assertEquals(transformerId2, strategy.getUcteElementId(transformer2)), - () -> assertEquals("F0000071 F0000111 1", transformerId1.toString()), - () -> assertEquals("F0000211 F0000331 1", transformerId2.toString()), - () -> assertEquals("F0000111 F0000211 1", lineId1.toString()), - () -> assertEquals("F0000111 F0000211 2", lineId2.toString()) + () -> assertEquals("F0000070 F0000110 0", transformerId1.toString()), + () -> assertEquals("F0000210 F0000330 0", transformerId2.toString()), + () -> assertEquals("F0000110 F0000210 0", lineId1.toString()), + () -> assertEquals("F0000110 F0000210 1", lineId2.toString()) ); } @Test void testSwitchElementIds() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); Switch sw = network.getSwitch("NGEN-NGEN2"); Switch sw2 = network.getSwitch("NGEN-NGEN3"); Switch sw3 = network.getSwitch("NGEN-NGEN3"); @@ -159,16 +159,16 @@ void testSwitchElementIds() { () -> assertNotEquals(swId2, swId4), () -> assertEquals(swId3, swId2), - () -> assertEquals("F0000071 F0000072 1", swId.toString()), - () -> assertEquals("F0000071 F0000073 1", swId2.toString()), - () -> assertEquals("F0000071 F0000073 1", swId3.toString()), - () -> assertEquals("F0000071 F0000073 2", swId4.toString()) + () -> assertEquals("F0000070 F0000071 0", swId.toString()), + () -> assertEquals("F0000070 F0000072 0", swId2.toString()), + () -> assertEquals("F0000070 F0000072 0", swId3.toString()), + () -> assertEquals("F0000070 F0000072 1", swId4.toString()) ); } @Test void testDanglingLineElementIds() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); DanglingLine dl1 = network.getDanglingLine("DL1"); DanglingLine dl2 = network.getDanglingLine("DL2"); DanglingLine dl3 = network.getDanglingLine("DL3"); @@ -183,15 +183,15 @@ void testDanglingLineElementIds() { () -> assertNotEquals(dlId1, dlId3), () -> assertNotEquals(dlId2, dlId3), - () -> assertEquals("F0000072 F0000671 1", dlId1.toString()), - () -> assertEquals("F0000072 X0000011 1", dlId2.toString()), - () -> assertEquals("F0000072 F0000671 2", dlId3.toString()) + () -> assertEquals("F0000071 F0000670 0", dlId1.toString()), + () -> assertEquals("F0000071 X0000011 0", dlId2.toString()), + () -> assertEquals("F0000071 F0000670 1", dlId3.toString()) ); } @Test void testParallelLines() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); Branch line1 = network.getBranch("NHV1_NHV2_1"); Branch line2 = network.getBranch("NHV1_NHV2_2"); @@ -204,14 +204,14 @@ void testParallelLines() { () -> assertTrue(UcteElementId.isUcteElementId(id2.toString())), () -> assertNotEquals(id1, id2), - () -> assertEquals("F0000111 F0000211 1", id1.toString()), - () -> assertEquals("F0000111 F0000211 2", id2.toString()) + () -> assertEquals("F0000110 F0000210 0", id1.toString()), + () -> assertEquals("F0000110 F0000210 1", id2.toString()) ); } @Test void testExistingUcteNodeCodes() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); Bus bus = network.getBusBreakerView().getBus("NGEN"); UcteNodeCode firstCode = strategy.getUcteNodeCode(bus); @@ -229,7 +229,7 @@ void testExistingUcteNodeCodes() { @Test void testNullAndInvalidIds() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); assertAll( () -> assertThrows(PowsyblException.class, () -> strategy.getUcteNodeCode((String) null)), @@ -241,10 +241,10 @@ void testNullAndInvalidIds() { @Test void testCountryCode() { - strategy.initialiseNetwork(network); + strategy.initializeNetwork(network); Bus genBus = network.getBusBreakerView().getBus("NGEN"); UcteNodeCode code = strategy.getUcteNodeCode(genBus); - assertEquals('F', code.toString().charAt(0)); // France + assertEquals('F', code.toString().charAt(0)); } } diff --git a/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/UcteImporterTest.java b/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/UcteImporterTest.java index 079cf5ea9ea..add5d45cb37 100644 --- a/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/UcteImporterTest.java +++ b/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/UcteImporterTest.java @@ -18,7 +18,7 @@ import com.powsybl.entsoe.util.EntsoeGeographicalCode; import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.impl.NetworkFactoryImpl; -import com.powsybl.ucte.converter.util.UcteConstants; +import com.powsybl.ucte.converter.util.UcteConverterConstants; import org.junit.jupiter.api.Test; import java.io.IOException; @@ -271,7 +271,7 @@ void emptyElementName() { Network network = new UcteImporter().importData(dataSource, new NetworkFactoryImpl(), null); Line l = network.getLine("F_SU1_12 F_SU1_11 1"); assertNotNull(l); - assertFalse(l.hasProperty(UcteConstants.ELEMENT_NAME_PROPERTY_KEY)); + assertFalse(l.hasProperty(UcteConverterConstants.ELEMENT_NAME_PROPERTY_KEY)); } @Test diff --git a/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/util/UcteConverterHelperTest.java b/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/util/UcteConverterHelperTest.java index 03925fea03b..85cbc0a3e67 100644 --- a/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/util/UcteConverterHelperTest.java +++ b/ucte/ucte-converter/src/test/java/com/powsybl/ucte/converter/util/UcteConverterHelperTest.java @@ -12,7 +12,6 @@ import com.powsybl.commons.datasource.ResourceSet; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.NetworkFactory; -import com.powsybl.ucte.converter.UcteException; import com.powsybl.ucte.converter.UcteImporter; import org.apache.commons.math3.complex.Complex; import org.junit.jupiter.api.BeforeAll; @@ -91,15 +90,4 @@ void calculatePhaseDuTest2() { assertEquals(90.00, Math.toDegrees(duRef6.getArgument()), 0.00001); // loss of one decimal with sign } - @Test - void getOrderCodeTest() { - assertEquals('1', getOrderCode(0)); - assertEquals('A', getOrderCode(9)); - assertThrows(UcteException.class, () -> { - getOrderCode(-1); - }); - assertThrows(UcteException.class, () -> { - getOrderCode(50); - }); - } } diff --git a/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/UcteCountryCode.java b/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/UcteCountryCode.java index 376eb1f81be..5700cfbe271 100644 --- a/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/UcteCountryCode.java +++ b/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/UcteCountryCode.java @@ -132,7 +132,7 @@ public static UcteCountryCode fromVoltagelevel(VoltageLevel voltageLevel) { try { return UcteCountryCode.valueOf(country.name()); } catch (IllegalArgumentException e) { - throw new UcteException(String.format("No UCTE country found for " + country.name())); + throw new UcteException(String.format("No UCTE country found for %s",country.name())); } } diff --git a/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/UcteElementId.java b/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/UcteElementId.java index a6b4c43d8aa..5cc8d13c480 100644 --- a/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/UcteElementId.java +++ b/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/UcteElementId.java @@ -7,6 +7,8 @@ */ package com.powsybl.ucte.network; +import com.powsybl.ucte.network.util.UcteNetworkUtil; + import java.util.*; /** @@ -15,9 +17,6 @@ */ public class UcteElementId implements Comparable { - private static final List ORDER_CODES = List.of('1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', - 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); - private final UcteNodeCode nodeCode1; private final UcteNodeCode nodeCode2; private char orderCode; @@ -114,8 +113,7 @@ private static boolean isOrderCode(char orderCode) { /* Update to match modification on UCTE format The new update is available on the ENTSO-E website: - https://docstore.entsoe.eu/Documents/Publications/SOC/Continental_Europe/150420_quality_of_datasets_and_calculations_3rd_edition.pdf - */ - return ORDER_CODES.contains(orderCode); + https://eepublicdownloads.entsoe.eu/clean-documents/Publications/SOC/Continental_Europe/150420_quality_of_datasets_and_calculations_3rd_edition.pdf */ + return UcteNetworkUtil.ORDER_CODES.contains(orderCode); } } diff --git a/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/util/UcteNetworkUtil.java b/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/util/UcteNetworkUtil.java new file mode 100644 index 00000000000..85aad09fb35 --- /dev/null +++ b/ucte/ucte-network/src/main/java/com/powsybl/ucte/network/util/UcteNetworkUtil.java @@ -0,0 +1,33 @@ +/** + * 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/. + * SPDX-License-Identifier: MPL-2.0 + */ + +package com.powsybl.ucte.network.util; + +import com.powsybl.ucte.network.UcteException; + +import java.util.List; + +/** + * @author Clément LECLERC {@literal } + */ +public final class UcteNetworkUtil { + + private UcteNetworkUtil() { + throw new IllegalStateException("Should not be constructed"); + } + + public static final List ORDER_CODES = List.of('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', + 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', '-', '.', ' '); + + public static char getOrderCode(int index) { + if (index > ORDER_CODES.size() || index < 0) { + throw new UcteException("Order code index out of bounds"); + } + return ORDER_CODES.get(index); + } +} diff --git a/ucte/ucte-network/src/test/java/com/powsybl/ucte/network/util/UcteNetworkUtilTest.java b/ucte/ucte-network/src/test/java/com/powsybl/ucte/network/util/UcteNetworkUtilTest.java new file mode 100644 index 00000000000..fe2b1aeea7f --- /dev/null +++ b/ucte/ucte-network/src/test/java/com/powsybl/ucte/network/util/UcteNetworkUtilTest.java @@ -0,0 +1,32 @@ +/** + * 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/. + * SPDX-License-Identifier: MPL-2.0 + */ +package com.powsybl.ucte.network.util; + +import com.powsybl.ucte.network.UcteException; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +/** + * @author Clément LECLERC {@literal } + */ +class UcteNetworkUtilTest { + + @Test + void getOrderCodeTest() { + assertEquals('0', UcteNetworkUtil.getOrderCode(0)); + assertEquals('A', UcteNetworkUtil.getOrderCode(10)); + assertThrows(com.powsybl.ucte.network.UcteException.class, () -> { + UcteNetworkUtil.getOrderCode(-1); + }); + assertThrows(UcteException.class, () -> { + UcteNetworkUtil.getOrderCode(50); + }); + } +}