From 2db7d7ef1070e7b91ec2fa2b56b17ab1a7fdf486 Mon Sep 17 00:00:00 2001 From: Ravi Pendurty Date: Mon, 10 Nov 2025 16:58:47 +0530 Subject: [PATCH] Support o-ran-hardware revision - 2024-04-15 Support backward compatibility also Issue-ID: OAM-530 Change-Id: Ia91d4e93dcdf06219b55ce939069d77554900fe8 Signed-off-by: Ravi Pendurty --- .../oran/impl/dom/ORanDOMNetworkElement.java | 1 + .../oran/impl/dom/ORanNetworkElementFactory.java | 18 +++--- .../oran/util/ORanDeviceManagerQNames.java | 8 +-- .../wt/devicemanager/oran/yangspecs/ORANFM.java | 4 +- .../devicemanager/oran/yangspecs/OranHardware.java | 72 ++++++++++++++++++++++ .../oran/impl/dom/TestORanDOMNetworkElement.java | 5 +- .../impl/dom/TestORanNetworkElementFactory.java | 8 ++- 7 files changed, 99 insertions(+), 17 deletions(-) create mode 100644 features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/yangspecs/OranHardware.java diff --git a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/ORanDOMNetworkElement.java b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/ORanDOMNetworkElement.java index 4a4883d..61752a7 100644 --- a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/ORanDOMNetworkElement.java +++ b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/ORanDOMNetworkElement.java @@ -111,6 +111,7 @@ public class ORanDOMNetworkElement implements NetworkElement, IConfigChangedList this.oranDomChangeNotificationListener = new ORanDOMChangeNotificationListener(netconfDomAccessor, vesCollectorService, databaseService); if(oranfm.isEmpty()) { + LOG.error("unable to detect ORAN FM module version"); throw new RuntimeException("unable to detect ORAN FM module version"); } this.oranDomFaultNotificationListener = diff --git a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/ORanNetworkElementFactory.java b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/ORanNetworkElementFactory.java index 1f0fa06..f3a21a7 100644 --- a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/ORanNetworkElementFactory.java +++ b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/ORanNetworkElementFactory.java @@ -25,7 +25,7 @@ import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRep import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.factory.NetworkElementFactory; import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement; import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.config.ORanDMConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.util.ORanDeviceManagerQNames; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.yangspecs.OranHardware; import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider; import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities; import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor; @@ -42,22 +42,26 @@ public class ORanNetworkElementFactory implements NetworkElementFactory { QName.create("urn:onf:otcc:wireless:yang:radio-access:commscope-onecell", "2020-06-22", "onecell").intern(); private ORanDMConfig oranSupervisionConfig; private ConfigurationFileRepresentation configFileRepresentation; + private Optional oranhw = Optional.empty(); - public ORanNetworkElementFactory(ConfigurationFileRepresentation configFileRepresentation, ORanDMConfig oranSupervisionConfig) { + public ORanNetworkElementFactory(ConfigurationFileRepresentation configFileRepresentation, + ORanDMConfig oranSupervisionConfig) { this.configFileRepresentation = configFileRepresentation; this.oranSupervisionConfig = oranSupervisionConfig; } @Override public Optional create(NetconfAccessor accessor, DeviceManagerServiceProvider serviceProvider) { + Optional domAccessor = accessor.getNetconfDomAccessor(); + if (domAccessor.isPresent()) { + this.oranhw = OranHardware.getModule(accessor.getNetconfDomAccessor().get()); + } Capabilities capabilites = accessor.getCapabilites(); if (!capabilites.isSupportingNamespace(OneCell)) { - if (capabilites.isSupportingNamespace(ORanDeviceManagerQNames.ORAN_HW_COMPONENT)) { + if (this.oranhw.isPresent()) { log.info("Create device {} ", ORanDOMNetworkElement.class.getName()); - Optional domAccessor = accessor.getNetconfDomAccessor(); - if (domAccessor.isPresent()) { - return Optional.of(new ORanDOMNetworkElement(domAccessor.get(), serviceProvider, oranSupervisionConfig, configFileRepresentation)); - } + return Optional.of(new ORanDOMNetworkElement(domAccessor.get(), serviceProvider, oranSupervisionConfig, + configFileRepresentation)); } } return Optional.empty(); diff --git a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/util/ORanDeviceManagerQNames.java b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/util/ORanDeviceManagerQNames.java index e2ad092..1b67266 100644 --- a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/util/ORanDeviceManagerQNames.java +++ b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/util/ORanDeviceManagerQNames.java @@ -69,10 +69,10 @@ public class ORanDeviceManagerQNames { QName.create(CALLHOME_SERVER_MODULE, "unique-id"); //o-ran-hardware.yang - public static final String ORAN_HW_NS = "urn:o-ran:hardware:1.0"; - public static final String ORAN_HW_REVISION = "2019-03-28"; - public static final @NonNull QName ORAN_HW_MODULE = QName.create(ORAN_HW_NS, ORAN_HW_REVISION, "o-ran-hardware").intern(); - public static final @NonNull QName ORAN_HW_COMPONENT = QName.create(ORAN_HW_MODULE, "O-RAN-HW-COMPONENT"); +// public static final String ORAN_HW_NS = "urn:o-ran:hardware:1.0"; +// public static final String ORAN_HW_REVISION = "2024-04-15"; +// public static final @NonNull QName ORAN_HW_MODULE = QName.create(ORAN_HW_NS, ORAN_HW_REVISION, "o-ran-hardware").intern(); +// public static final @NonNull QName ORAN_HW_COMPONENT = QName.create(ORAN_HW_MODULE, "O-RAN-HW-COMPONENT"); //ietf-netconf-notifications.yang public static final String IETF_NETCONF_NOTIFICATIONS_NS = "urn:ietf:params:xml:ns:yang:ietf-netconf-notifications"; diff --git a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/yangspecs/ORANFM.java b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/yangspecs/ORANFM.java index 474a621..a0611a8 100644 --- a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/yangspecs/ORANFM.java +++ b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/yangspecs/ORANFM.java @@ -38,7 +38,9 @@ public class ORANFM extends YangModule { QNameModule.of(XMLNamespace.of(NAMESPACE), Revision.of("2019-02-04")); public static final QNameModule ORANFM_2022_08_15 = QNameModule.of(XMLNamespace.of(NAMESPACE), Revision.of("2022-08-15")); - private static final List MODULES = Arrays.asList(ORANFM_2019_02_04, ORANFM_2022_08_15); + public static final QNameModule ORANFM_2024_08_12 = + QNameModule.of(XMLNamespace.of(NAMESPACE), Revision.of("2024-08-12")); + private static final List MODULES = Arrays.asList(ORANFM_2019_02_04, ORANFM_2022_08_15, ORANFM_2024_08_12); ORANFM(NetconfDomAccessor netconfDomAccessor, QNameModule module) { super(netconfDomAccessor, module); diff --git a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/yangspecs/OranHardware.java b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/yangspecs/OranHardware.java new file mode 100644 index 0000000..a8e376b --- /dev/null +++ b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/yangspecs/OranHardware.java @@ -0,0 +1,72 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : ccsdk features + * ================================================================================ + * Copyright (C) 2025 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + * + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.yangspecs; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.Capabilities; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfDomAccessor; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; +import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.XMLNamespace; + +public class OranHardware extends YangModule { + + public static final String NAMESPACE = "urn:o-ran:hardware:1.0"; + public static final QNameModule ORANHW_2019_03_28 = + QNameModule.of(XMLNamespace.of(NAMESPACE), Revision.of("2019-03-28")); + public static final QNameModule ORANHW_2024_04_15 = + QNameModule.of(XMLNamespace.of(NAMESPACE), Revision.of("2024-04-15")); + private static final List MODULES = Arrays.asList(ORANHW_2019_03_28, ORANHW_2024_04_15); + + OranHardware(NetconfDomAccessor netconfDomAccessor, QNameModule module) { + super(netconfDomAccessor, module); + } + + public QName getModuleQName() { + return getQName("o-ran-hardware"); + } + + public QName getComponentQName() { + return getQName("O-RAN-HW-COMPONENT"); + } + + + /** + * Get specific instance, depending on capabilities + * + * @param netconfDomAccessor + * @return + */ + public static Optional getModule(NetconfDomAccessor netconfDomAccessor) { + Capabilities capabilities = netconfDomAccessor.getCapabilites(); + for (QNameModule module : MODULES) { + if (capabilities.isSupportingNamespaceAndRevision(module)) { + return Optional.of(new OranHardware(netconfDomAccessor, module)); + } + } + return Optional.empty(); + } + +} diff --git a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/TestORanDOMNetworkElement.java b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/TestORanDOMNetworkElement.java index 0653c6d..d9e98f4 100644 --- a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/TestORanDOMNetworkElement.java +++ b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/TestORanDOMNetworkElement.java @@ -37,9 +37,9 @@ import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRep import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement; import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.config.ORanDMConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.util.ORanDeviceManagerQNames; import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.yangspecs.ORANFM; import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.yangspecs.OnapSystem; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.yangspecs.OranHardware; import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider; import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService; import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.NotificationProxyParser; @@ -122,7 +122,8 @@ public class TestORanDOMNetworkElement { @Test public void test() { Optional oRanNe; - when(capabilities.isSupportingNamespace(ORanDeviceManagerQNames.ORAN_HW_COMPONENT)).thenReturn(true); + when(capabilities.isSupportingNamespaceAndRevision( + QNameModule.of(XMLNamespace.of(OranHardware.NAMESPACE), Revision.of("2019-03-28")))).thenReturn(true); when(capabilities.isSupportingNamespace(OneCell)).thenReturn(false); when(capabilities.isSupportingNamespace(OnapSystem1)).thenReturn(false); diff --git a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/TestORanNetworkElementFactory.java b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/TestORanNetworkElementFactory.java index 4751118..9b76174 100644 --- a/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/TestORanNetworkElementFactory.java +++ b/features/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/dom/TestORanNetworkElementFactory.java @@ -31,9 +31,9 @@ import org.junit.Test; import org.onap.ccsdk.features.sdnr.wt.common.configuration.ConfigurationFileRepresentation; import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.config.ORanDMConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.util.ORanDeviceManagerQNames; import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.yangspecs.ORANFM; import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.yangspecs.OnapSystem; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.oran.yangspecs.OranHardware; import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider; import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.FaultService; import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.VESCollectorService; @@ -102,14 +102,16 @@ public class TestORanNetworkElementFactory { @Test public void testCreateORANHWComponent() throws Exception { - when(domAccessor.getCapabilites().isSupportingNamespace(ORanDeviceManagerQNames.ORAN_HW_COMPONENT)).thenReturn(true); + when(capabilities.isSupportingNamespaceAndRevision( + QNameModule.of(XMLNamespace.of(OranHardware.NAMESPACE), Revision.of("2019-03-28")))).thenReturn(true); ORanNetworkElementFactory factory = new ORanNetworkElementFactory(oranCfg, oranDmConfig); assertTrue((factory.create(accessor, serviceProvider)).isPresent()); } @Test public void testCreateNone() throws Exception { - when(domAccessor.getCapabilites().isSupportingNamespace(ORanDeviceManagerQNames.ORAN_HW_COMPONENT)).thenReturn(false); + when(capabilities.isSupportingNamespaceAndRevision( + QNameModule.of(XMLNamespace.of(OranHardware.NAMESPACE), Revision.of("2019-03-28")))).thenReturn(false); ORanNetworkElementFactory factory = new ORanNetworkElementFactory(oranCfg, oranDmConfig); assertTrue(!(factory.create(accessor, serviceProvider).isPresent())); } -- 2.16.6