--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.oran.smo.teiv.adapters</groupId>
+ <artifactId>adapters</artifactId>
+ <version>0.3.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>common-utils</artifactId>
+ <version>0.3.0-SNAPSHOT</version>
+ <packaging>jar</packaging>
+
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ </license>
+ </licenses>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>net.logstash.logback</groupId>
+ <artifactId>logstash-logback-encoder</artifactId>
+ <version>${version.logback}</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.oran.smo.yangtools.parser</groupId>
+ <artifactId>yang-parser-jar</artifactId>
+ <version>1.2.1-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.oran.smo.yangtools.parser.simple.example</groupId>
+ <artifactId>parser-example</artifactId>
+ <version>0.0.2-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
--- /dev/null
+/*
+ * ============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";
+}
--- /dev/null
+/*
+ * ============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;
+ }
+}
--- /dev/null
+/*
+ * ============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;
+ }
+ }
+}
--- /dev/null
+/*
+ * ============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);
+ }
+}
--- /dev/null
+/*
+ * ============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<YangModelExtractor> 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();
+ }
+
+}
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>org.oran.smo</groupId>
+ <groupId>org.oran.smo.teiv.adapters</groupId>
<artifactId>adapters</artifactId>
<version>0.3.0-SNAPSHOT</version>
</parent>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
+ <dependency>
+ <groupId>org.oran.smo.teiv.adapters</groupId>
+ <artifactId>common-utils</artifactId>
+ <version>0.3.0-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
</dependencies>
<build>
* 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;
* 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;
* 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;
* 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;
* 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;
* 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;
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;
* 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;
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
* ============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;
* 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");
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();
* 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;
* 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;
* 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;
* 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;
* 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
public Map<String, Object> addTeivEntitiesAndRelationships(Map<String, List<Object>> entityMap,
Map<String, List<Object>> 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);
}
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<String, List<Object>> entityMap,
Map<String, List<Object>> 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<>());
}
}
private void addRelationshipWithNrcellcu(NRCellCU nrCellCU, Map<String, List<Object>> 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<>());
}
@Override
public Map<String, Object> 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<String, List<Object>> 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<String, Object> 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<String, Object> 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);
}
}
* 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;
* 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
public Map<String, Object> addTeivEntitiesAndRelationships(Map<String, List<Object>> entityMap,
Map<String, List<Object>> 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);
}
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<String, List<Object>> entityMap,
Map<String, List<Object>> 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<>());
}
}
private void addRelationshipWithNrcelldu(NRCellDU nrCellDU, Map<String, List<Object>> 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<>());
}
@Override
public Map<String, Object> 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<String, List<Object>> 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<String, Object> 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<String, Object> 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);
}
}
* 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 {
ObjectMapper mapper = new ObjectMapper();
try {
- if ("_3gpp-nr-nrm-gnbdufunction:GNBDUFunction".equals(name)) {
+ if (TeivIdBuilder.buildEntityTypeName(_3GPP_GNBDUFUNTION_PREFIX, "GNBDUFunction").equals(name)) {
List<Object> list = (List<Object>) 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<Object> list = (List<Object>) value;
for (Object item : list) {
GNBCUCPFunction cu = mapper.convertValue(item, GNBCUCPFunction.class);
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));
}
@Override
public String getTeivEntityType() {
- return "o-ran-smo-teiv-oam:ManagedElement";
+ return TeivIdBuilder.buildEntityTypeName(SMO_TEIV_OAM_PREFIX, "ManagedElement");
}
}
* 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
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<String, Object> finalJson = Map.of("relationships", List.of(relationshipMap), "entities", List.of(entityMap));
return finalJson;
}
* 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
@Override
public Map<String, Object> addTeivEntitiesAndRelationships(Map<String, List<Object>> entityMap,
Map<String, List<Object>> 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<String, Object> 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");
}
}
* 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;
* 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
@Override
public Map<String, Object> addTeivEntitiesAndRelationships(Map<String, List<Object>> entityMap,
Map<String, List<Object>> 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<String, Object> 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");
}
}
* 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;
* 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;
<version>0.3.0-SNAPSHOT</version>
</parent>
+ <groupId>org.oran.smo.teiv.adapters</groupId>
<artifactId>adapters</artifactId>
<version>0.3.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>ncmp-to-teiv-adapter</module>
+ <module>common-utils</module>
</modules>
<properties>
- <maven.compiler.source>17</maven.compiler.source>
- <maven.compiler.target>17</maven.compiler.target>
+ <maven.compiler.source>${java.version}</maven.compiler.source>
+ <maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
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");
--- /dev/null
+/*
+ * ============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<YangModel> yangModels = parseYangModels(yangDeviceModel, context);
+ Optional<YangModel> 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<AbstractStatement> children = yModule.getChildStatements();
+ for (AbstractStatement child : children) {
+ if (child.getDomElement().getValue().equalsIgnoreCase(nameSpace)) {
+ validNameSpace = child.getDomElement().getValue();
+ break;
+ }
+ }
+ return validNameSpace;
+ }
+
+ private static List<YangModel> parseYangModels(YangDeviceModel yangDeviceModel, ParserExecutionContext context) {
+
+ List<String> yangImplementFiles = new ArrayList<>();
+ List<String> 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<YangModel> 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);
+ }
+}
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<YangModel> parseYangModels(YangDeviceModel yangDeviceModel, ParserExecutionContext context) {