diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java index 049f1e48a..567d73f75 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java @@ -7,6 +7,7 @@ import jakarta.xml.bind.JAXBElement; import lombok.NonNull; import lombok.experimental.UtilityClass; +import org.apache.commons.lang3.StringUtils; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.dto.PrivateLinkedToStds; import org.lfenergy.compas.sct.commons.exception.ScdException; @@ -269,7 +270,7 @@ public static String stdCheckFormatExceptionMessage(TPrivate key) throws ScdExce public static Stream streamIcdHeaders(SCL scd) { return scd .getSubstation() - .get(0) + .getFirst() .getVoltageLevel() .stream() .map(TVoltageLevel::getBay).flatMap(Collection::stream) @@ -320,4 +321,13 @@ public static void copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate(TPrivate st } + public static Optional extractStringPrivate(TBaseElement tBaseElement, String privateType) { + return tBaseElement.getPrivate().stream() + .filter(tPrivate -> privateType.equals(tPrivate.getType())) + .flatMap(tPrivate -> tPrivate.getContent().stream()) + .filter(String.class::isInstance) + .map(String.class::cast) + .filter(StringUtils::isNotBlank) + .findFirst(); } +} diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java index 5a9b20954..a29b84f0e 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java @@ -198,7 +198,7 @@ void createPrivate_should_return_private_new_private(Object compasElement) throw assertThat(resultPrivate).isNotNull() .hasFieldOrPropertyWithValue("type", privateEnum.getPrivateType()); assertThat(resultPrivate.getContent()).hasSize(1).first().satisfies(content -> assertThat(content).isInstanceOf(JAXBElement.class)); - JAXBElement content = (JAXBElement) resultPrivate.getContent().get(0); + JAXBElement content = (JAXBElement) resultPrivate.getContent().getFirst(); assertThat(content.isNil()).isFalse(); assertThat(content.getValue()).isNotNull().isInstanceOf(compasElement.getClass()) .isEqualTo(compasElement); @@ -258,10 +258,10 @@ void removePrivates_should_remove_privates_of_given_type() { PrivateUtils.removePrivates(baseElement, PrivateEnum.COMPAS_ICDHEADER); // Then assertThat(baseElement.getPrivate()).hasSize(1); - TPrivate tPrivate = baseElement.getPrivate().get(0); + TPrivate tPrivate = baseElement.getPrivate().getFirst(); assertThat(tPrivate.getType()).isEqualTo(privateSCD.getType()); assertThat(tPrivate.getContent()).hasSize(1).first().isInstanceOf(JAXBElement.class); - JAXBElement jaxbElement = (JAXBElement) tPrivate.getContent().get(0); + JAXBElement jaxbElement = (JAXBElement) tPrivate.getContent().getFirst(); assertThat(jaxbElement.isNil()).isFalse(); assertThat(jaxbElement.getValue()).isEqualTo(TCompasSclFileType.SCD); } @@ -561,7 +561,7 @@ void copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate() { PrivateUtils.copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate(stdTPrivate, lNodeCompasICDHeader); // Then - TCompasICDHeader result = PrivateUtils.extractCompasICDHeader(stdTPrivate).get(); + TCompasICDHeader result = PrivateUtils.extractCompasICDHeader(stdTPrivate).orElseThrow(); assertThat(result).extracting(TCompasICDHeader::getICDSystemVersionUUID, TCompasICDHeader::getIEDName, TCompasICDHeader::getIEDSubstationinstance, TCompasICDHeader::getBayLabel) .containsExactlyInAnyOrder("UUID-2", "IED-1", BigInteger.ONE, "BAY-1"); @@ -613,7 +613,7 @@ void getCompasICDHeaders_should_return_ICDHeaders() { private static TIED createTIED() { SCL sclFromFile = SclTestMarshaller.getSCLFromFile("/scd-ied-dtt-com-import-stds/std.xml"); - return sclFromFile.getIED().get(0); + return sclFromFile.getIED().getFirst(); } @Test @@ -630,4 +630,18 @@ void createPrivate_compas_Topo_should_succeed(){ .map(JAXBElement::getValue) .containsExactly(tCompasTopo1, tCompasTopo2); } + + @Test + void extractStringPrivate_should_succeed() { + // Given + TIED tied = new TIED(); + TPrivate tPrivate = new TPrivate(); + tPrivate.setType("MyCustomType"); + tPrivate.getContent().add("hello World"); + tied.getPrivate().add(tPrivate); + // When + Optional result = PrivateUtils.extractStringPrivate(tied, "MyCustomType"); + // Then + assertThat(result).hasValue("hello World"); + } }