From: KrupaNagabhushan Date: Thu, 9 Oct 2025 09:55:52 +0000 (+0100) Subject: TEIV: Implement generic Entity & Relationship naming/ID generation X-Git-Tag: 0.3.0~7 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F55%2F15155%2F4;p=smo%2Fteiv.git TEIV: Implement generic Entity & Relationship naming/ID generation Issue-ID: SMO-197 Change-Id: I5d27da0564d4300dd8fca9cf8f78dfe59e04b47c Signed-off-by: KrupaNagabhushan --- diff --git a/adapters/common-utils/pom.xml b/adapters/common-utils/pom.xml new file mode 100644 index 0000000..f7e80e7 --- /dev/null +++ b/adapters/common-utils/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + org.oran.smo.teiv.adapters + adapters + 0.3.0-SNAPSHOT + + + common-utils + 0.3.0-SNAPSHOT + jar + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + + org.projectlombok + lombok + + + net.logstash.logback + logstash-logback-encoder + ${version.logback} + + + junit + junit + test + + + org.springframework + spring-test + test + + + org.oran.smo.yangtools.parser + yang-parser-jar + 1.2.1-SNAPSHOT + compile + + + org.oran.smo.yangtools.parser.simple.example + parser-example + 0.0.2-SNAPSHOT + compile + + + org.mockito + mockito-core + test + + + org.junit.jupiter + junit-jupiter + test + + + + diff --git a/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/Constants.java b/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/Constants.java new file mode 100644 index 0000000..fb54877 --- /dev/null +++ b/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/Constants.java @@ -0,0 +1,45 @@ +/* + * ============LICENSE_START======================================================= + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.oran.smo.teiv.adapters.common.utils; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class Constants { + public static final String ORAN_SMO_TEIV_URN_PREFIX = "urn:oran:smo:teiv"; + public static final String SMO_TEIV_RAN_PREFIX = "o-ran-smo-teiv-ran"; + public static final String SMO_TEIV_REL_OAM_RAN_PREFIX = "o-ran-smo-teiv-rel-oam-ran"; + public static final String _3GPP_GNBDUFUNTION_PREFIX = "_3gpp-nr-nrm-gnbdufunction"; + public static final String _3GPP_GNBCUCPFUNTION_PREFIX = "_3gpp-nr-nrm-gnbcucpfunction"; + public static final String SMO_TEIV_OAM_PREFIX = "o-ran-smo-teiv-oam"; + + //relationshipType + public static final String MANAGES = "MANAGES"; + public static final String O1LINK = "O1LINK"; + public static final String PROVIDES = "PROVIDES"; + + //relationshipTypeNames (NCMP) + public static final String OCUCPFUNCTION_PROVIDES_NRCELLCU = "OCUCPFUNCTION_PROVIDES_NRCELLCU"; + public static final String ODUFUNCTION_PROVIDES_NRCELLDU = "ODUFUNCTION_PROVIDES_NRCELLDU"; + public static final String ODUFUNCTION_O1LINK_SMO = "ODUFUNCTION_O1LINK_SMO"; + public static final String OCUCPFUNCTION_O1LINK_SMO = "OCUCPFUNCTION_O1LINK_SMO"; + public static final String MANAGEDELEMENT_MANAGES_OCUCPFUNCTION = "MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"; + public static final String MANAGEDELEMENT_MANAGES_ODUFUNCTION = "MANAGEDELEMENT_MANAGES_ODUFUNCTION"; +} diff --git a/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/TeivIdBuilder.java b/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/TeivIdBuilder.java new file mode 100644 index 0000000..f279218 --- /dev/null +++ b/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/TeivIdBuilder.java @@ -0,0 +1,68 @@ +/* + * ============LICENSE_START======================================================= + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.oran.smo.teiv.adapters.common.utils; + +import static org.oran.smo.teiv.adapters.common.utils.Constants.ORAN_SMO_TEIV_URN_PREFIX; + +public class TeivIdBuilder { + + /** + * Builds a fully qualified function FDN using the given ID. + * + * @param id + * the identifier + * @return the fully qualified FDN string + */ + public static String buildFunctionFdn(String id) { + return ORAN_SMO_TEIV_URN_PREFIX + ":" + id; + } + + /** + * Builds relationshipType name with the given prefix model, relationship type, sourceId, and destinationId. + * + * @param type + * the relationship type + * @param sourceId + * the first identifier + * @param destinationId + * the second identifier + * @return a relationshipTypeName + */ + public static String buildRelationshipTypeName(String prefix, String type, String sourceId, String destinationId) { + return prefix + ":" + sourceId + "_" + type + "_" + destinationId; + } + + public static String buildTeivRelationshipTypeName(String type, String sourceId, String destinationId) { + return buildRelationshipTypeName(ORAN_SMO_TEIV_URN_PREFIX, type, sourceId, destinationId); + } + + /** + * Builds a entityTypeName with given prefix and entityType. + * + * @param prefix + * the string prefix + * @param entityType + * the entity type + * @return a combined prefix and type string + */ + public static String buildEntityTypeName(String prefix, String entityType) { + return prefix + ":" + entityType; + } +} diff --git a/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/YangModelService.java b/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/YangModelService.java new file mode 100644 index 0000000..d7f9fd9 --- /dev/null +++ b/adapters/common-utils/src/main/java/org/oran/smo/teiv/adapters/common/utils/YangModelService.java @@ -0,0 +1,76 @@ +/* + * ============LICENSE_START======================================================= + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.oran.smo.teiv.adapters.common.utils; + +import org.oran.smo.yangtools.parser.model.statements.yang.YModule; +import org.oran.smo.yangtools.parser.simple.example.YangModelExtractor; + +import static org.oran.smo.teiv.adapters.common.utils.Constants.OCUCPFUNCTION_PROVIDES_NRCELLCU; +import static org.oran.smo.teiv.adapters.common.utils.Constants.ODUFUNCTION_PROVIDES_NRCELLDU; +import static org.oran.smo.teiv.adapters.common.utils.Constants.ODUFUNCTION_O1LINK_SMO; +import static org.oran.smo.teiv.adapters.common.utils.Constants.OCUCPFUNCTION_O1LINK_SMO; +import static org.oran.smo.teiv.adapters.common.utils.Constants.MANAGEDELEMENT_MANAGES_OCUCPFUNCTION; +import static org.oran.smo.teiv.adapters.common.utils.Constants.MANAGEDELEMENT_MANAGES_ODUFUNCTION; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_RAN_PREFIX; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_REL_OAM_RAN_PREFIX; + +public class YangModelService { + + /** + * Parse the yang models, validate and extract the relationshipTypeName/EntityTypeName directly from the yan models. + * + * @param typeName + * the relationshipTypeName/EntityTypeName + * @return validated typeName. + */ + public static String validateAndExtractFromYangModel(String typeName) { + if (typeName == null || typeName.isBlank()) { + throw new IllegalArgumentException("Type name cannot be null or blank."); + } + + String yangModelNameSpace = getYangModelNamespace(typeName); + if (yangModelNameSpace == null || yangModelNameSpace.isBlank()) { + throw new IllegalStateException("Failed to derive from YANG model for type: " + typeName); + } + + YModule yModule = YangModelExtractor.parseAndExtractYModule(yangModelNameSpace); + if (yModule == null) { + throw new IllegalStateException("Unable to parse YANG module for namespace: " + yangModelNameSpace); + } + return YangModelExtractor.validateNameSpaceValue(yModule, typeName); + } + + private static String getYangModelNamespace(String typeName) { + switch (typeName) { + case OCUCPFUNCTION_PROVIDES_NRCELLCU: + case ODUFUNCTION_PROVIDES_NRCELLDU: + case ODUFUNCTION_O1LINK_SMO: + case OCUCPFUNCTION_O1LINK_SMO: + return SMO_TEIV_RAN_PREFIX; + + case MANAGEDELEMENT_MANAGES_OCUCPFUNCTION: + case MANAGEDELEMENT_MANAGES_ODUFUNCTION: + return SMO_TEIV_REL_OAM_RAN_PREFIX; + + default: + return null; + } + } +} diff --git a/adapters/common-utils/src/test/java/org/oran/smo/teiv/adapters/common/utils/TeivIdBuilderTest.java b/adapters/common-utils/src/test/java/org/oran/smo/teiv/adapters/common/utils/TeivIdBuilderTest.java new file mode 100644 index 0000000..69a1550 --- /dev/null +++ b/adapters/common-utils/src/test/java/org/oran/smo/teiv/adapters/common/utils/TeivIdBuilderTest.java @@ -0,0 +1,55 @@ +/* + * ============LICENSE_START======================================================= + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.oran.smo.teiv.adapters.common.utils; + +import org.junit.Test; + +import static org.oran.smo.teiv.adapters.common.utils.Constants.ORAN_SMO_TEIV_URN_PREFIX; +import static org.oran.smo.teiv.adapters.common.utils.Constants.PROVIDES; +import static org.springframework.test.util.AssertionErrors.assertEquals; + +public class TeivIdBuilderTest { + + @Test + public void testBuildFunctionFdn() { + String id = "SMO"; + String expected = ORAN_SMO_TEIV_URN_PREFIX + ":" + id; + String actual = TeivIdBuilder.buildFunctionFdn(id); + assertEquals("Function FDN should be correctly built", expected, actual); + } + + @Test + public void testBuildRelationshipTypeName() { + String sourceId = "OCUCPFUNCTION"; + String destinationId = "NRCellCU"; + + String relTypeExpected = ORAN_SMO_TEIV_URN_PREFIX + ":" + sourceId + "_" + PROVIDES + "_" + destinationId; + String relType = TeivIdBuilder.buildTeivRelationshipTypeName(PROVIDES, sourceId, destinationId); + assertEquals("Relationship type name should be correctly formatted", relTypeExpected, relType); + } + + @Test + public void testBuildEntityTypeName() { + String entityType = "NRCellCU"; + String expected = ORAN_SMO_TEIV_URN_PREFIX + ":" + entityType; + String actual = TeivIdBuilder.buildEntityTypeName(ORAN_SMO_TEIV_URN_PREFIX, entityType); + assertEquals("Entity type name should be correctly formatted", expected, actual); + } +} diff --git a/adapters/common-utils/src/test/java/org/oran/smo/teiv/adapters/common/utils/YangModelServiceTest.java b/adapters/common-utils/src/test/java/org/oran/smo/teiv/adapters/common/utils/YangModelServiceTest.java new file mode 100644 index 0000000..e07319b --- /dev/null +++ b/adapters/common-utils/src/test/java/org/oran/smo/teiv/adapters/common/utils/YangModelServiceTest.java @@ -0,0 +1,89 @@ +/* + * ============LICENSE_START======================================================= + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.oran.smo.teiv.adapters.common.utils; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; +import org.oran.smo.yangtools.parser.model.statements.yang.YModule; +import org.oran.smo.yangtools.parser.simple.example.YangModelExtractor; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.oran.smo.teiv.adapters.common.utils.Constants.MANAGEDELEMENT_MANAGES_OCUCPFUNCTION; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_REL_OAM_RAN_PREFIX; +import static org.oran.smo.teiv.adapters.common.utils.Constants.OCUCPFUNCTION_PROVIDES_NRCELLCU; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_RAN_PREFIX; + +public class YangModelServiceTest { + + private MockedStatic yangModelExtractorMock; + + @BeforeEach + void setup() { + // Mock static methods in YangModelExtractor + yangModelExtractorMock = mockStatic(YangModelExtractor.class); + } + + @Test + void testValidateAndExtractFromYangModel_withRanPrefix() { + // Arrange + String typeName = OCUCPFUNCTION_PROVIDES_NRCELLCU; + YModule yModuleMock = mock(YModule.class); + + yangModelExtractorMock.when(() -> YangModelExtractor.parseAndExtractYModule(SMO_TEIV_RAN_PREFIX)).thenReturn( + yModuleMock); + + yangModelExtractorMock.when(() -> YangModelExtractor.validateNameSpaceValue(yModuleMock, typeName)).thenReturn( + typeName); + + // Act + String result = YangModelService.validateAndExtractFromYangModel(typeName); + + // Assert + assertEquals(typeName, result); + yangModelExtractorMock.verify(() -> YangModelExtractor.parseAndExtractYModule(SMO_TEIV_RAN_PREFIX)); + yangModelExtractorMock.verify(() -> YangModelExtractor.validateNameSpaceValue(yModuleMock, typeName)); + } + + @Test + void testValidateAndExtractFromYangModel_withOamRanPrefix() { + String typeName = MANAGEDELEMENT_MANAGES_OCUCPFUNCTION; + YModule yModuleMock = mock(YModule.class); + + yangModelExtractorMock.when(() -> YangModelExtractor.parseAndExtractYModule(SMO_TEIV_REL_OAM_RAN_PREFIX)) + .thenReturn(yModuleMock); + + yangModelExtractorMock.when(() -> YangModelExtractor.validateNameSpaceValue(yModuleMock, typeName)).thenReturn( + typeName); + + String result = YangModelService.validateAndExtractFromYangModel(typeName); + + assertEquals(typeName, result); + } + + @AfterEach + void teardown() { + yangModelExtractorMock.close(); + } + +} diff --git a/adapters/ncmp-to-teiv-adapter/pom.xml b/adapters/ncmp-to-teiv-adapter/pom.xml index 6eb346a..54dc133 100644 --- a/adapters/ncmp-to-teiv-adapter/pom.xml +++ b/adapters/ncmp-to-teiv-adapter/pom.xml @@ -26,7 +26,7 @@ 4.0.0 - org.oran.smo + org.oran.smo.teiv.adapters adapters 0.3.0-SNAPSHOT @@ -75,6 +75,12 @@ okhttp 4.9.3 + + org.oran.smo.teiv.adapters + common-utils + 0.3.0-SNAPSHOT + compile + diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/Application.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/Application.java similarity index 95% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/Application.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/Application.java index c126bc7..28edd63 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/Application.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/Application.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/CloudEventFactory.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/CloudEventFactory.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/CloudEventFactory.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/CloudEventFactory.java index 154b5be..a5d2d0d 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/CloudEventFactory.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/CloudEventFactory.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import io.cloudevents.CloudEvent; import io.cloudevents.core.builder.CloudEventBuilder; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaEventProducer.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaEventProducer.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaEventProducer.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaEventProducer.java index e9fdf68..e4eee65 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaEventProducer.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaEventProducer.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import io.cloudevents.CloudEvent; import lombok.RequiredArgsConstructor; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaProducerConfig.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaProducerConfig.java similarity index 97% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaProducerConfig.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaProducerConfig.java index 8644dc9..6cdbe57 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaProducerConfig.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaProducerConfig.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import io.cloudevents.CloudEvent; import lombok.RequiredArgsConstructor; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaSecurityConfig.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaSecurityConfig.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaSecurityConfig.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaSecurityConfig.java index c8096ab..eb1e3b1 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/KafkaSecurityConfig.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/KafkaSecurityConfig.java @@ -18,7 +18,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import java.util.Map; import lombok.Data; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpPollingClient.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/NcmpPollingClient.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpPollingClient.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/NcmpPollingClient.java index 89fdad6..11c0e5a 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpPollingClient.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/NcmpPollingClient.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -28,7 +28,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import org.oran.smo.ncmp_to_teiv_adapter.models.ManagedElementWrapper; +import org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models.ManagedElementWrapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java index a4f8827..1452cbf 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/NcmpToTeivIngestion.java @@ -17,14 +17,14 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.cloudevents.CloudEvent; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.oran.smo.ncmp_to_teiv_adapter.models.ManagedElementWrapper; +import org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models.ManagedElementWrapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -33,7 +33,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static org.oran.smo.ncmp_to_teiv_adapter.ResourceReader.readResourceFile; +import static org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.ResourceReader.readResourceFile; @Slf4j @Component diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/ResourceReader.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/ResourceReader.java similarity index 97% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/ResourceReader.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/ResourceReader.java index fbdedc4..ee365e0 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/ResourceReader.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/ResourceReader.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import java.io.IOException; import java.net.URISyntaxException; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/SmoPayloadBuilder.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/SmoPayloadBuilder.java similarity index 91% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/SmoPayloadBuilder.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/SmoPayloadBuilder.java index 576267a..eb35065 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/SmoPayloadBuilder.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/SmoPayloadBuilder.java @@ -17,18 +17,19 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import org.oran.smo.teiv.adapters.common.utils.TeivIdBuilder; public class SmoPayloadBuilder { private static final ObjectMapper objectMapper = new ObjectMapper(); public static String build() { ArrayNode sourceIds = objectMapper.createArrayNode(); - sourceIds.add("urn:oran:smo:teiv:SMO"); + sourceIds.add(TeivIdBuilder.buildFunctionFdn("SMO")); sourceIds.add("http://smo.o-ran-sc.org"); sourceIds.add("http://gateway.smo.o-ran-sc.org"); sourceIds.add("http://dentity.smo.o-ran-sc.org"); @@ -44,7 +45,7 @@ public class SmoPayloadBuilder { ObjectNode attributes = objectMapper.createObjectNode(); attributes.put("smoName", "SMO"); ObjectNode smo = objectMapper.createObjectNode(); - smo.put("id", "urn:oran:smo:teiv:SMO"); + smo.put("id", TeivIdBuilder.buildFunctionFdn("SMO")); smo.set("sourceIds", sourceIds); smo.set("attributes", attributes); ArrayNode smoArray = objectMapper.createArrayNode(); diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/AbstractEntity.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/AbstractEntity.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/AbstractEntity.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/AbstractEntity.java index 5adeb14..4c10f20 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/AbstractEntity.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/AbstractEntity.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/AbstractFunction.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/AbstractFunction.java similarity index 95% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/AbstractFunction.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/AbstractFunction.java index 480978f..0842524 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/AbstractFunction.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/AbstractFunction.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import java.util.List; import java.util.Map; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/Attributes.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/Attributes.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/Attributes.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/Attributes.java index bf8bd46..3b1b147 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/Attributes.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/Attributes.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBCUCPAttributes.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBCUCPAttributes.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBCUCPAttributes.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBCUCPAttributes.java index 460c579..fd55fa4 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBCUCPAttributes.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBCUCPAttributes.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBCUCPFunction.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBCUCPFunction.java similarity index 63% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBCUCPFunction.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBCUCPFunction.java index 8131d03..7330ab0 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBCUCPFunction.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBCUCPFunction.java @@ -17,15 +17,24 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; +import org.oran.smo.teiv.adapters.common.utils.TeivIdBuilder; +import org.oran.smo.teiv.adapters.common.utils.YangModelService; import java.util.ArrayList; import java.util.List; import java.util.Map; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_RAN_PREFIX; +import static org.oran.smo.teiv.adapters.common.utils.Constants.OCUCPFUNCTION_PROVIDES_NRCELLCU; +import static org.oran.smo.teiv.adapters.common.utils.Constants.MANAGES; +import static org.oran.smo.teiv.adapters.common.utils.Constants.MANAGEDELEMENT_MANAGES_OCUCPFUNCTION; +import static org.oran.smo.teiv.adapters.common.utils.Constants.OCUCPFUNCTION_O1LINK_SMO; +import static org.oran.smo.teiv.adapters.common.utils.Constants.O1LINK; + public class GNBCUCPFunction extends AbstractFunction { @Getter @@ -39,7 +48,7 @@ public class GNBCUCPFunction extends AbstractFunction { public Map addTeivEntitiesAndRelationships(Map> entityMap, Map> relationshipMap, String parentId) { createRelationshipWithSmo(relationshipMap); - String gnbcucpFunctionFdn = "urn:oran:smo:teiv:" + getId(); + String gnbcucpFunctionFdn = TeivIdBuilder.buildFunctionFdn(getId()); for (NRCellCU nrCellCU : getNrCellCUs()) { addNrcellcuEntitiesAndRelationships(nrCellCU, entityMap, relationshipMap); @@ -47,12 +56,12 @@ public class GNBCUCPFunction extends AbstractFunction { } return Map.of("id", gnbcucpFunctionFdn, "attributes", attributes.createEntityAttributes(), "sourceIds", List.of( - gnbcucpFunctionFdn, "urn:oran:smo:teiv:" + parentId)); + gnbcucpFunctionFdn, TeivIdBuilder.buildFunctionFdn(parentId))); } private void addNrcellcuEntitiesAndRelationships(NRCellCU nrCellCU, Map> entityMap, Map> relationshipMap) { - String type = "o-ran-smo-teiv-ran:NRCellCU"; + String type = TeivIdBuilder.buildEntityTypeName(SMO_TEIV_RAN_PREFIX, "NRCellCU"); if (!entityMap.containsKey(type)) { entityMap.put(type, new ArrayList<>()); } @@ -60,7 +69,7 @@ public class GNBCUCPFunction extends AbstractFunction { } private void addRelationshipWithNrcellcu(NRCellCU nrCellCU, Map> relationshipMap) { - String relType = "o-ran-smo-teiv-ran:OCUCPFUNCTION_PROVIDES_NRCELLCU"; + String relType = YangModelService.validateAndExtractFromYangModel(OCUCPFUNCTION_PROVIDES_NRCELLCU); if (!relationshipMap.containsKey(relType)) { relationshipMap.put(relType, new ArrayList<>()); } @@ -69,34 +78,34 @@ public class GNBCUCPFunction extends AbstractFunction { @Override public Map createRelationshipWithManagedElement(String managedElementId) { - String gnbcucpFunctionFdn = "urn:oran:smo:teiv:" + getId(); - String managedElementFdn = "urn:oran:smo:teiv:" + managedElementId; - return Map.of("id", String.format("urn:oran:smo:teiv:%s_MANAGES_%s", managedElementId, getId()), "aSide", + String gnbcucpFunctionFdn = TeivIdBuilder.buildFunctionFdn(getId()); + String managedElementFdn = TeivIdBuilder.buildFunctionFdn(managedElementId); + return Map.of("id", TeivIdBuilder.buildTeivRelationshipTypeName(MANAGES, managedElementId, getId()), "aSide", managedElementFdn, "bSide", gnbcucpFunctionFdn, "sourceIds", List.of(managedElementFdn, gnbcucpFunctionFdn)); } @Override public String getTeivEntityType() { - return "o-ran-smo-teiv-ran:OCUCPFunction"; + return TeivIdBuilder.buildEntityTypeName(SMO_TEIV_RAN_PREFIX, "OCUCPFunction"); } @Override public String getTeivRelationshipWithManagedElement() { - return "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"; + return YangModelService.validateAndExtractFromYangModel(MANAGEDELEMENT_MANAGES_OCUCPFUNCTION); } @Override public void createRelationshipWithSmo(Map> relationshipMap) { - String ranFunctionRelType = "o-ran-smo-teiv-ran:OCUCPFUNCTION_O1LINK_SMO"; + String ranFunctionRelType = YangModelService.validateAndExtractFromYangModel(OCUCPFUNCTION_O1LINK_SMO); if (!relationshipMap.containsKey(ranFunctionRelType)) { relationshipMap.put(ranFunctionRelType, new ArrayList<>()); } String gnbcucpFunctionId = getId(); String smoId = "SMO"; - Map test = Map.of("id", String.format("urn:oran:smo:teiv:%s_O1LINK_%s", gnbcucpFunctionId, smoId), - "bSide", "urn:oran:smo:teiv:" + smoId, "aSide", "urn:oran:smo:teiv:" + gnbcucpFunctionId, "sourceIds", List - .of(smoId, gnbcucpFunctionId)); + Map test = Map.of("id", TeivIdBuilder.buildTeivRelationshipTypeName(O1LINK, gnbcucpFunctionId, + smoId), "bSide", TeivIdBuilder.buildFunctionFdn(smoId), "aSide", TeivIdBuilder.buildFunctionFdn( + gnbcucpFunctionId), "sourceIds", List.of(smoId, gnbcucpFunctionId)); relationshipMap.get(ranFunctionRelType).add(test); } } diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBDUAttributes.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBDUAttributes.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBDUAttributes.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBDUAttributes.java index 91a90eb..5b7c874 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBDUAttributes.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBDUAttributes.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBDUFunction.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBDUFunction.java similarity index 64% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBDUFunction.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBDUFunction.java index d80cc9d..1f4cc12 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/GNBDUFunction.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/GNBDUFunction.java @@ -17,15 +17,23 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; +import org.oran.smo.teiv.adapters.common.utils.TeivIdBuilder; +import org.oran.smo.teiv.adapters.common.utils.YangModelService; import java.util.ArrayList; import java.util.List; import java.util.Map; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_RAN_PREFIX; +import static org.oran.smo.teiv.adapters.common.utils.Constants.ODUFUNCTION_PROVIDES_NRCELLDU; +import static org.oran.smo.teiv.adapters.common.utils.Constants.MANAGEDELEMENT_MANAGES_ODUFUNCTION; +import static org.oran.smo.teiv.adapters.common.utils.Constants.ODUFUNCTION_O1LINK_SMO; +import static org.oran.smo.teiv.adapters.common.utils.Constants.O1LINK; + public class GNBDUFunction extends AbstractFunction { @Getter @@ -39,7 +47,7 @@ public class GNBDUFunction extends AbstractFunction { public Map addTeivEntitiesAndRelationships(Map> entityMap, Map> relationshipMap, String parentId) { createRelationshipWithSmo(relationshipMap); - String gnbduFunctionFdn = "urn:oran:smo:teiv:" + getId(); + String gnbduFunctionFdn = TeivIdBuilder.buildFunctionFdn(getId()); for (NRCellDU nrCellDU : getNrCellDUs()) { addNrcellduEntitiesAndRelationships(nrCellDU, entityMap, relationshipMap); @@ -47,12 +55,12 @@ public class GNBDUFunction extends AbstractFunction { } return Map.of("id", gnbduFunctionFdn, "attributes", attributes.createEntityAttributes(), "sourceIds", List.of( - gnbduFunctionFdn, "urn:oran:smo:teiv:" + parentId)); + gnbduFunctionFdn, TeivIdBuilder.buildFunctionFdn(parentId))); } private void addNrcellduEntitiesAndRelationships(NRCellDU nrCellDU, Map> entityMap, Map> relationshipMap) { - String type = "o-ran-smo-teiv-ran:NRCellDU"; + String type = TeivIdBuilder.buildEntityTypeName(SMO_TEIV_RAN_PREFIX, "NRCellDU"); if (!entityMap.containsKey(type)) { entityMap.put(type, new ArrayList<>()); } @@ -60,7 +68,7 @@ public class GNBDUFunction extends AbstractFunction { } private void addRelationshipWithNrcelldu(NRCellDU nrCellDU, Map> relationshipMap) { - String relType = "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU"; + String relType = YangModelService.validateAndExtractFromYangModel(ODUFUNCTION_PROVIDES_NRCELLDU); if (!relationshipMap.containsKey(relType)) { relationshipMap.put(relType, new ArrayList<>()); } @@ -69,33 +77,33 @@ public class GNBDUFunction extends AbstractFunction { @Override public Map createRelationshipWithManagedElement(String managedElementId) { - String gnbduFunctionFdn = "urn:oran:smo:teiv:" + getId(); - String managedElementFdn = "urn:oran:smo:teiv:" + managedElementId; - return Map.of("id", String.format("urn:oran:smo:teiv:%s_MANAGES_%s", managedElementId, getId()), "aSide", + String gnbduFunctionFdn = TeivIdBuilder.buildFunctionFdn(getId()); + String managedElementFdn = TeivIdBuilder.buildFunctionFdn(managedElementId); + return Map.of("id", TeivIdBuilder.buildTeivRelationshipTypeName("MANAGES", gnbduFunctionFdn, getId()), "aSide", managedElementFdn, "bSide", gnbduFunctionFdn, "sourceIds", List.of(managedElementFdn, gnbduFunctionFdn)); } @Override public String getTeivEntityType() { - return "o-ran-smo-teiv-ran:ODUFunction"; + return TeivIdBuilder.buildEntityTypeName(SMO_TEIV_RAN_PREFIX, "ODUFunction"); } @Override public String getTeivRelationshipWithManagedElement() { - return "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION"; + return YangModelService.validateAndExtractFromYangModel(MANAGEDELEMENT_MANAGES_ODUFUNCTION); } @Override public void createRelationshipWithSmo(Map> relationshipMap) { - String ranFunctionRelType = "o-ran-smo-teiv-ran:ODUFUNCTION_O1LINK_SMO"; + String ranFunctionRelType = YangModelService.validateAndExtractFromYangModel(ODUFUNCTION_O1LINK_SMO); if (!relationshipMap.containsKey(ranFunctionRelType)) { relationshipMap.put(ranFunctionRelType, new ArrayList<>()); } String gnbduFunctionId = getId(); String smoId = "SMO"; - Map test = Map.of("id", String.format("urn:oran:smo:teiv:%s_O1LINK_%s", gnbduFunctionId, smoId), - "bSide", "urn:oran:smo:teiv:" + smoId, "aSide", "urn:oran:smo:teiv:" + gnbduFunctionId, "sourceIds", List - .of(smoId, gnbduFunctionId)); + Map test = Map.of("id", TeivIdBuilder.buildTeivRelationshipTypeName(O1LINK, gnbduFunctionId, smoId), + "bSide", TeivIdBuilder.buildFunctionFdn(smoId), "aSide", TeivIdBuilder.buildFunctionFdn(gnbduFunctionId), + "sourceIds", List.of(smoId, gnbduFunctionId)); relationshipMap.get(ranFunctionRelType).add(test); } } diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/ManagedElement.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/ManagedElement.java similarity index 82% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/ManagedElement.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/ManagedElement.java index aa34457..45ffa90 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/ManagedElement.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/ManagedElement.java @@ -17,17 +17,22 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +import org.oran.smo.teiv.adapters.common.utils.TeivIdBuilder; import java.util.ArrayList; import java.util.List; import java.util.Map; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_OAM_PREFIX; +import static org.oran.smo.teiv.adapters.common.utils.Constants._3GPP_GNBDUFUNTION_PREFIX; +import static org.oran.smo.teiv.adapters.common.utils.Constants._3GPP_GNBCUCPFUNTION_PREFIX; + @Slf4j public class ManagedElement extends AbstractEntity { @@ -40,13 +45,13 @@ public class ManagedElement extends AbstractEntity { ObjectMapper mapper = new ObjectMapper(); try { - if ("_3gpp-nr-nrm-gnbdufunction:GNBDUFunction".equals(name)) { + if (TeivIdBuilder.buildEntityTypeName(_3GPP_GNBDUFUNTION_PREFIX, "GNBDUFunction").equals(name)) { List list = (List) value; for (Object item : list) { GNBDUFunction du = mapper.convertValue(item, GNBDUFunction.class); ranFunctions.add(du); } - } else if ("_3gpp-nr-nrm-gnbcucpfunction:GNBCUCPFunction".equals(name)) { + } else if (TeivIdBuilder.buildEntityTypeName(_3GPP_GNBCUCPFUNTION_PREFIX, "GNBCUCPFunction").equals(name)) { List list = (List) value; for (Object item : list) { GNBCUCPFunction cu = mapper.convertValue(item, GNBCUCPFunction.class); @@ -67,7 +72,7 @@ public class ManagedElement extends AbstractEntity { addRanFunctionEntitiesAndRelationships(ranFunction, entityMap, relationshipMap); addRelationshipWithRanFunction(ranFunction, relationshipMap); } - String managedElementId = "urn:oran:smo:teiv:" + getId(); + String managedElementId = TeivIdBuilder.buildFunctionFdn(getId()); return Map.of("id", managedElementId, "sourceIds", List.of(managedElementId)); } @@ -91,6 +96,6 @@ public class ManagedElement extends AbstractEntity { @Override public String getTeivEntityType() { - return "o-ran-smo-teiv-oam:ManagedElement"; + return TeivIdBuilder.buildEntityTypeName(SMO_TEIV_OAM_PREFIX, "ManagedElement"); } } diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/ManagedElementWrapper.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/ManagedElementWrapper.java similarity index 84% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/ManagedElementWrapper.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/ManagedElementWrapper.java index 9d62e09..ede8615 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/ManagedElementWrapper.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/ManagedElementWrapper.java @@ -17,16 +17,19 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; +import org.oran.smo.teiv.adapters.common.utils.TeivIdBuilder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_OAM_PREFIX; + public class ManagedElementWrapper { @Getter @@ -40,7 +43,8 @@ public class ManagedElementWrapper { for (ManagedElement managedElement : this.managedElements) { managedElements.add(managedElement.addTeivEntitiesAndRelationships(entityMap, relationshipMap, "")); } - entityMap.put("o-ran-smo-teiv-oam:ManagedElement", new ArrayList<>(managedElements)); + entityMap.put(TeivIdBuilder.buildEntityTypeName(SMO_TEIV_OAM_PREFIX, "ManagedElement"), new ArrayList<>( + managedElements)); Map finalJson = Map.of("relationships", List.of(relationshipMap), "entities", List.of(entityMap)); return finalJson; } diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellCU.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellCU.java similarity index 71% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellCU.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellCU.java index 3baca75..cf3ddb1 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellCU.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellCU.java @@ -17,14 +17,17 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; +import org.oran.smo.teiv.adapters.common.utils.TeivIdBuilder; import java.util.List; import java.util.Map; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_RAN_PREFIX; + public class NRCellCU extends AbstractEntity { @Getter @@ -34,20 +37,20 @@ public class NRCellCU extends AbstractEntity { @Override public Map addTeivEntitiesAndRelationships(Map> entityMap, Map> relationshipMap, String parentId) { - String nrcellcucpFdn = "urn:oran:smo:teiv:" + getId(); + String nrcellcucpFdn = TeivIdBuilder.buildFunctionFdn(getId()); return Map.of("id", nrcellcucpFdn, "attributes", attributes.createEntityAttributes(), "sourceIds", List.of( - nrcellcucpFdn, "urn:oran:smo:teiv:" + parentId)); + nrcellcucpFdn, TeivIdBuilder.buildFunctionFdn(parentId))); } public Map createRelationshipWithGnbcucpFunction(String gnbcucpFunctionId) { - String gnbcucpFunctionFdn = "urn:oran:smo:teiv:" + gnbcucpFunctionId; - String nrcellCuFdn = "urn:oran:smo:teiv:" + getId(); - return Map.of("id", String.format("urn:oran:smo:teiv:%s_PROVIDES_%s", gnbcucpFunctionId, getId()), "aSide", + String gnbcucpFunctionFdn = TeivIdBuilder.buildFunctionFdn(gnbcucpFunctionId); + String nrcellCuFdn = TeivIdBuilder.buildFunctionFdn(getId()); + return Map.of("id", TeivIdBuilder.buildTeivRelationshipTypeName("PROVIDES", gnbcucpFunctionId, getId()), "aSide", gnbcucpFunctionFdn, "bSide", nrcellCuFdn, "sourceIds", List.of(gnbcucpFunctionFdn, nrcellCuFdn)); } @Override public String getTeivEntityType() { - return "o-ran-smo-teiv-ran:NRCellCU"; + return TeivIdBuilder.buildEntityTypeName(SMO_TEIV_RAN_PREFIX, "NRCellCU"); } } diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellCUAttributes.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellCUAttributes.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellCUAttributes.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellCUAttributes.java index 57e764f..16ed0b9 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellCUAttributes.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellCUAttributes.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellDU.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellDU.java similarity index 71% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellDU.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellDU.java index 247ac59..67b3d6c 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellDU.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellDU.java @@ -17,14 +17,17 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; +import org.oran.smo.teiv.adapters.common.utils.TeivIdBuilder; import java.util.List; import java.util.Map; +import static org.oran.smo.teiv.adapters.common.utils.Constants.SMO_TEIV_RAN_PREFIX; + public class NRCellDU extends AbstractEntity { @Getter @@ -34,20 +37,20 @@ public class NRCellDU extends AbstractEntity { @Override public Map addTeivEntitiesAndRelationships(Map> entityMap, Map> relationshipMap, String parentId) { - String nrcellduFdn = "urn:oran:smo:teiv:" + getId(); + String nrcellduFdn = TeivIdBuilder.buildFunctionFdn(getId()); return Map.of("id", nrcellduFdn, "attributes", attributes.createEntityAttributes(), "sourceIds", List.of( - nrcellduFdn, "urn:oran:smo:teiv:" + parentId)); + nrcellduFdn, TeivIdBuilder.buildFunctionFdn(parentId))); } public Map createRelationshipWithGnbduFunction(String gnbduFunctionId) { - String gnbduFunctionFdn = "urn:oran:smo:teiv:" + gnbduFunctionId; - String nrcellduFdn = "urn:oran:smo:teiv:" + getId(); - return Map.of("id", String.format("urn:oran:smo:teiv:%s_PROVIDES_%s", gnbduFunctionId, getId()), "aSide", + String gnbduFunctionFdn = TeivIdBuilder.buildFunctionFdn(gnbduFunctionId); + String nrcellduFdn = TeivIdBuilder.buildFunctionFdn(getId()); + return Map.of("id", TeivIdBuilder.buildTeivRelationshipTypeName("PROVIDES", gnbduFunctionId, getId()), "aSide", gnbduFunctionFdn, "bSide", nrcellduFdn, "sourceIds", List.of(gnbduFunctionFdn, nrcellduFdn)); } @Override public String getTeivEntityType() { - return "o-ran-smo-teiv-ran:NRCellDU"; + return TeivIdBuilder.buildEntityTypeName(SMO_TEIV_RAN_PREFIX, "NRCellDU"); } } diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellDUAttributes.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellDUAttributes.java similarity index 96% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellDUAttributes.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellDUAttributes.java index 0272a76..8a97efc 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/NRCellDUAttributes.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/NRCellDUAttributes.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; diff --git a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/Plmnid.java b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/Plmnid.java similarity index 94% rename from adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/Plmnid.java rename to adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/Plmnid.java index bad2104..b9975d4 100644 --- a/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/ncmp_to_teiv_adapter/models/Plmnid.java +++ b/adapters/ncmp-to-teiv-adapter/src/main/java/org/oran/smo/teiv/adapters/ncmp_to_teiv_adapter/models/Plmnid.java @@ -17,7 +17,7 @@ * SPDX-License-Identifier: Apache-2.0 * ============LICENSE_END========================================================= */ -package org.oran.smo.ncmp_to_teiv_adapter.models; +package org.oran.smo.teiv.adapters.ncmp_to_teiv_adapter.models; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; diff --git a/adapters/pom.xml b/adapters/pom.xml index 425557b..d2d2f0a 100644 --- a/adapters/pom.xml +++ b/adapters/pom.xml @@ -30,6 +30,7 @@ 0.3.0-SNAPSHOT + org.oran.smo.teiv.adapters adapters 0.3.0-SNAPSHOT pom @@ -43,11 +44,12 @@ ncmp-to-teiv-adapter + common-utils - 17 - 17 + ${java.version} + ${java.version} UTF-8 diff --git a/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/JsonParserExample.java b/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/JsonParserExample.java index 628407b..5cf331e 100644 --- a/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/JsonParserExample.java +++ b/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/JsonParserExample.java @@ -31,7 +31,7 @@ import java.io.IOException; public class JsonParserExample { - private static final String DIR = "yang-parser-example/src/main/resources/json/"; + private static final String DIR = "yang-parser/parser-example/src/main/resources/json/"; public static JsonValue parseJsonFile(ParserExecutionContext context) { final File jsonFile = new File(DIR + "AntennaModule-response.json"); diff --git a/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/YangModelExtractor.java b/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/YangModelExtractor.java new file mode 100644 index 0000000..ae055be --- /dev/null +++ b/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/YangModelExtractor.java @@ -0,0 +1,116 @@ +/* + * ============LICENSE_START======================================================= + * Modifications Copyright (C) 2025 OpenInfra Foundation Europe + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.oran.smo.yangtools.parser.simple.example; + +import org.oran.smo.yangtools.parser.ParserExecutionContext; +import org.oran.smo.yangtools.parser.YangDeviceModel; +import org.oran.smo.yangtools.parser.findings.FindingsManager; +import org.oran.smo.yangtools.parser.findings.ModifyableFindingSeverityCalculator; +import org.oran.smo.yangtools.parser.findings.ModuleAndFindingTypeAndSchemaNodePathFilterPredicate; +import org.oran.smo.yangtools.parser.input.FileBasedYangInput; +import org.oran.smo.yangtools.parser.model.ConformanceType; +import org.oran.smo.yangtools.parser.model.YangModel; +import org.oran.smo.yangtools.parser.model.statements.AbstractStatement; +import org.oran.smo.yangtools.parser.model.statements.ietf.IetfExtensionsClassSupplier; +import org.oran.smo.yangtools.parser.model.statements.oran.OranExtensionsClassSupplier; +import org.oran.smo.yangtools.parser.model.statements.threegpp.ThreeGppExtensionsClassSupplier; +import org.oran.smo.yangtools.parser.model.statements.yang.YModule; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + +public class YangModelExtractor { + + private static YangDeviceModel yangDeviceModel; + private static ModifyableFindingSeverityCalculator severityCalculator; + private static FindingsManager findingsManager; + private static ParserExecutionContext context; + + private static final String DIR = "teiv/src/main/resources/models/"; + + public static YModule parseAndExtractYModule(String yangModelNameSpace) { + setUp(); + List yangModels = parseYangModels(yangDeviceModel, context); + Optional optionalRanModel = yangModels.stream().filter(yangModel -> yangModelNameSpace.equals(yangModel + .getModuleIdentity().getModuleName())).findFirst(); + return optionalRanModel.map(yangModel -> yangModel.getYangModelRoot().getModule()).orElse(null); + } + + public static String validateNameSpaceValue(YModule yModule, String nameSpace) { + String validNameSpace = null; + List children = yModule.getChildStatements(); + for (AbstractStatement child : children) { + if (child.getDomElement().getValue().equalsIgnoreCase(nameSpace)) { + validNameSpace = child.getDomElement().getValue(); + break; + } + } + return validNameSpace; + } + + private static List parseYangModels(YangDeviceModel yangDeviceModel, ParserExecutionContext context) { + + List yangImplementFiles = new ArrayList<>(); + List yangImportFiles = new ArrayList<>(); + + //latest revised yang models used + yangImplementFiles.add("o-ran-smo-teiv-ran.yang"); + yangImplementFiles.add("o-ran-smo-teiv-rel-oam-ran.yang"); + + final List yangModels = new ArrayList<>(); + + for (final String relativeFilePath : yangImplementFiles) { + yangModels.add(new YangModel(new FileBasedYangInput(new File(DIR + relativeFilePath)), + ConformanceType.IMPLEMENT)); + } + for (final String relativeFilePath : yangImportFiles) { + yangModels.add(new YangModel(new FileBasedYangInput(new File(DIR + "import/" + relativeFilePath)), + ConformanceType.IMPORT)); + } + + yangDeviceModel.parseIntoYangModels(context, yangModels); + + return yangModels; + } + + private static void setUp() { + yangDeviceModel = new YangDeviceModel("Yang Parser JAR Test Device Model"); + + severityCalculator = new ModifyableFindingSeverityCalculator(); + + findingsManager = new FindingsManager(severityCalculator); + + // suppress all findings from ietf and iana + findingsManager.addFilterPredicate(ModuleAndFindingTypeAndSchemaNodePathFilterPredicate.fromString( + "ietf*,iana*;*;*")); + + final ThreeGppExtensionsClassSupplier threeGppStatementFactory = new ThreeGppExtensionsClassSupplier(); + final IetfExtensionsClassSupplier ietfStatementFactory = new IetfExtensionsClassSupplier(); + final OranExtensionsClassSupplier oranStatementFactory = new OranExtensionsClassSupplier(); + + context = new ParserExecutionContext(findingsManager, Arrays.asList(threeGppStatementFactory, oranStatementFactory, + ietfStatementFactory)); + context.setFailFast(false); + context.setSuppressFindingsOnUnusedSchemaNodes(true); + } +} diff --git a/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/YangParserExample.java b/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/YangParserExample.java index f4810ea..a6498ef 100644 --- a/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/YangParserExample.java +++ b/yang-parser/parser-example/src/main/java/org/oran/smo/yangtools/parser/simple/example/YangParserExample.java @@ -32,7 +32,7 @@ import java.util.List; public class YangParserExample { - private static final String DIR = "yang-parser-example/src/main/resources/yang/"; + private static final String DIR = "yang-parser/parser-example/src/main/resources/yang/"; public static List parseYangModels(YangDeviceModel yangDeviceModel, ParserExecutionContext context) {