Update DMI plugin with new subscription schemas 46/142146/3
authoremaclee <lee.anjella.macabuhay@est.tech>
Tue, 30 Sep 2025 10:42:02 +0000 (11:42 +0100)
committeremaclee <lee.anjella.macabuhay@est.tech>
Tue, 30 Sep 2025 15:39:11 +0000 (16:39 +0100)
- update imported packages to align with new subscription
  schemas in CPS
- upgrade to CPS latest version in pom file (from 3.7.0 to
  3.7.1)

Issue-ID: CPS-2723
Change-Id: I6d0b6eb674b86fb3fe53cd4508fde85e8dbeff23
Signed-off-by: emaclee <lee.anjella.macabuhay@est.tech>
dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumer.java
dmi-service/src/main/java/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapper.java
dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiInEventConsumerSpec.groovy
dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/cmsubscription/DmiOutEventToCloudEventMapperSpec.groovy
dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/notifications/mapper/CloudEventMapperSpec.groovy
dmi-service/src/test/resources/cmNotificationSubscriptionCreationEvent.json
pom.xml

index 9df7450..4bec4d2 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2024 Nordix Foundation
+ *  Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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.
@@ -25,9 +25,9 @@ import lombok.RequiredArgsConstructor;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.onap.cps.ncmp.dmi.notifications.cmsubscription.model.CmNotificationSubscriptionStatus;
 import org.onap.cps.ncmp.dmi.notifications.mapper.CloudEventMapper;
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.Data;
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.DmiOutEvent;
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.DmiInEvent;
+import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.Data;
+import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.DataJobSubscriptionDmiOutEvent;
+import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.DataJobSubscriptionDmiInEvent;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.kafka.annotation.KafkaListener;
 import org.springframework.kafka.core.KafkaTemplate;
@@ -53,10 +53,10 @@ public class DmiInEventConsumer {
         containerFactory = "cloudEventConcurrentKafkaListenerContainerFactory")
     public void consumeDmiInEvent(
         final ConsumerRecord<String, CloudEvent> dmiInCloudEvent) {
-        final DmiInEvent cmNotificationSubscriptionDmiInEvent =
+        final DataJobSubscriptionDmiInEvent dataJobSubscriptionDmiInEvent =
             CloudEventMapper.toTargetEvent(dmiInCloudEvent.value(),
-                DmiInEvent.class);
-        if (cmNotificationSubscriptionDmiInEvent != null) {
+                    DataJobSubscriptionDmiInEvent.class);
+        if (dataJobSubscriptionDmiInEvent != null) {
             final String subscriptionId = dmiInCloudEvent.value().getId();
             final String subscriptionType = dmiInCloudEvent.value().getType();
             final String correlationId = String.valueOf(dmiInCloudEvent.value()
@@ -84,8 +84,8 @@ public class DmiInEventConsumer {
         final String eventKey, final String subscriptionType, final String correlationId,
         final CmNotificationSubscriptionStatus cmNotificationSubscriptionStatus) {
 
-        final DmiOutEvent cmNotificationSubscriptionDmiOutEvent =
-            new DmiOutEvent();
+        final DataJobSubscriptionDmiOutEvent dataJobSubscriptionDmiOutEvent =
+            new DataJobSubscriptionDmiOutEvent();
         final Data dmiOutEventData = new Data();
 
         if (cmNotificationSubscriptionStatus.equals(CmNotificationSubscriptionStatus.ACCEPTED)) {
@@ -95,10 +95,10 @@ public class DmiInEventConsumer {
             dmiOutEventData.setStatusCode("104");
             dmiOutEventData.setStatusMessage("REJECTED");
         }
-        cmNotificationSubscriptionDmiOutEvent.setData(dmiOutEventData);
+        dataJobSubscriptionDmiOutEvent.setData(dmiOutEventData);
 
         cloudEventKafkaTemplate.send(dmoOutEventTopic, eventKey,
-            DmiOutEventToCloudEventMapper.toCloudEvent(cmNotificationSubscriptionDmiOutEvent,
+            DmiOutEventToCloudEventMapper.toCloudEvent(dataJobSubscriptionDmiOutEvent,
                 subscriptionType, dmiName, correlationId));
 
     }
index fd42c40..fa8f004 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2024 Nordix Foundation
+ *  Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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.
@@ -28,7 +28,7 @@ import java.util.UUID;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.onap.cps.ncmp.dmi.exception.CloudEventConstructionException;
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.DmiOutEvent;
+import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.DataJobSubscriptionDmiOutEvent;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class DmiOutEventToCloudEventMapper {
@@ -38,13 +38,13 @@ public class DmiOutEventToCloudEventMapper {
     /**
      * Maps SubscriptionEventResponse to a CloudEvent.
      *
-     * @param dmiOutEvent object.
-     * @param subscriptionType          String of subscription type.
-     * @param dmiName                   String of dmiName.
-     * @param correlationId             String of correlationId.
+     * @param dataJobSubscriptionDmiOutEvent event object.
+     * @param subscriptionType               String of subscription type.
+     * @param dmiName                        String of dmiName.
+     * @param correlationId                  String of correlationId.
      * @return CloudEvent built.
      */
-    public static CloudEvent toCloudEvent(final DmiOutEvent dmiOutEvent,
+    public static CloudEvent toCloudEvent(final DataJobSubscriptionDmiOutEvent dataJobSubscriptionDmiOutEvent,
                                           final String subscriptionType, final String dmiName,
                                           final String correlationId) {
         try {
@@ -52,7 +52,7 @@ public class DmiOutEventToCloudEventMapper {
                 .withType(subscriptionType)
                 .withDataSchema(URI.create("urn:cps:org.onap.ncmp.dmi.cm.subscription:1.0.0"))
                 .withExtension("correlationid", correlationId)
-                .withData(objectMapper.writeValueAsBytes(dmiOutEvent)).build();
+                .withData(objectMapper.writeValueAsBytes(dataJobSubscriptionDmiOutEvent)).build();
         } catch (final Exception ex) {
             throw new CloudEventConstructionException("The Cloud Event could not be constructed",
                 "Invalid object passed", ex);
index 52fa379..de53286 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2024 Nordix Foundation
+ *  Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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.
@@ -32,9 +32,9 @@ import org.onap.cps.ncmp.dmi.TestUtils
 import org.onap.cps.ncmp.dmi.api.kafka.MessagingBaseSpec
 import org.onap.cps.ncmp.dmi.notifications.cmsubscription.model.CmNotificationSubscriptionStatus
 import org.onap.cps.ncmp.dmi.notifications.mapper.CloudEventMapper
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.Data
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.DmiOutEvent
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.ncmp_to_dmi.DmiInEvent
+import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.Data
+import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.DataJobSubscriptionDmiOutEvent
+import org.onap.cps.ncmp.impl.datajobs.subscription.ncmp_to_dmi.DataJobSubscriptionDmiInEvent
 import org.slf4j.LoggerFactory
 import org.spockframework.spring.SpringBean
 import org.springframework.test.annotation.DirtiesContext
@@ -74,7 +74,7 @@ class DmiInEventConsumerSpec extends MessagingBaseSpec {
             def correlationId = 'test-subscriptionId#test-ncmp-dmi'
             def cmSubscriptionDmiOutEventData = new Data(statusCode: subscriptionStatusCode, statusMessage: subscriptionStatusMessage)
             def subscriptionEventResponse =
-                    new DmiOutEvent().withData(cmSubscriptionDmiOutEventData)
+                    new DataJobSubscriptionDmiOutEvent().withData(cmSubscriptionDmiOutEventData)
         and: 'consumer has a subscription'
             kafkaConsumer.subscribe([testTopic] as List<String>)
         when: 'an event is published'
@@ -102,11 +102,11 @@ class DmiInEventConsumerSpec extends MessagingBaseSpec {
             def eventKey = UUID.randomUUID().toString()
             def timestamp = new Timestamp(1679521929511)
             def jsonData = TestUtils.getResourceFileContent('cmNotificationSubscriptionCreationEvent.json')
-            def subscriptionEvent = objectMapper.readValue(jsonData, DmiInEvent.class)
+            def subscriptionEvent = objectMapper.readValue(jsonData, DataJobSubscriptionDmiInEvent.class)
             objectUnderTest.dmoOutEventTopic = testTopic
             def cloudEvent = CloudEventBuilder.v1().withId(UUID.randomUUID().toString()).withSource(URI.create('test-ncmp-dmi'))
                     .withType(subscriptionType)
-                    .withDataSchema(URI.create("urn:cps:" + DmiInEvent.class.getName() + ":1.0.0"))
+                    .withDataSchema(URI.create("urn:cps:" + DataJobSubscriptionDmiInEvent.class.getName() + ":1.0.0"))
                     .withExtension("correlationid", eventKey)
                     .withTime(OffsetDateTime.ofInstant(timestamp.toInstant(), ZoneId.of("UTC")))
                     .withData(objectMapper.writeValueAsBytes(subscriptionEvent)).build()
index 95ac93f..4b2b59f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2024 Nordix Foundation
+ *  Copyright (C) 2024-2025 OpenInfra Foundation Europe. 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.
@@ -23,8 +23,8 @@ package org.onap.cps.ncmp.dmi.notifications.cmsubscription
 import com.fasterxml.jackson.databind.ObjectMapper
 import io.cloudevents.core.builder.CloudEventBuilder
 import org.onap.cps.ncmp.dmi.exception.CloudEventConstructionException
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.Data
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.dmi_to_ncmp.DmiOutEvent
+import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.Data
+import org.onap.cps.ncmp.impl.datajobs.subscription.dmi_to_ncmp.DataJobSubscriptionDmiOutEvent
 import org.spockframework.spring.SpringBean
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.boot.test.context.SpringBootTest
@@ -44,25 +44,25 @@ class DmiOutEventToCloudEventMapperSpec extends Specification {
             def dmiName = 'test-ncmp-dmi'
             def correlationId = 'subscription1#test-ncmp-dmi'
             def cmSubscriptionDmiOutEventData = new Data(statusCode: "1", statusMessage: "accepted")
-            def cmSubscriptionDmiOutEvent =
-                    new DmiOutEvent().withData(cmSubscriptionDmiOutEventData)
+            def dataJobSubscriptionDmiOutEvent =
+                    new DataJobSubscriptionDmiOutEvent().withData(cmSubscriptionDmiOutEventData)
         when: 'a Cm Subscription DMI Out Event is converted'
-            def result = objectUnderTest.toCloudEvent(cmSubscriptionDmiOutEvent, "subscriptionCreatedStatus", dmiName, correlationId)
+            def result = objectUnderTest.toCloudEvent(dataJobSubscriptionDmiOutEvent, "subscriptionCreatedStatus", dmiName, correlationId)
         then: 'Cm Subscription DMI Out Event is converted as expected'
             def expectedCloudEvent = CloudEventBuilder.v1().withId(UUID.randomUUID().toString()).withSource(URI.create('test-ncmp-dmi'))
                     .withType("subscriptionCreated")
-                    .withDataSchema(URI.create("urn:cps:" + DmiOutEvent.class.getName() + ":1.0.0"))
+                    .withDataSchema(URI.create("urn:cps:" + DataJobSubscriptionDmiOutEvent.class.getName() + ":1.0.0"))
                     .withExtension("correlationid", correlationId)
-                    .withData(objectMapper.writeValueAsBytes(cmSubscriptionDmiOutEvent)).build()
+                    .withData(objectMapper.writeValueAsBytes(dataJobSubscriptionDmiOutEvent)).build()
             assert expectedCloudEvent.data == result.data
     }
 
     def 'Map the Cloud Event to data of the subscription event with null parameters causes an exception'() {
         given: 'an empty subscription response event and event key'
             def correlationId = 'subscription1#test-ncmp-dmi'
-            def dmiOutEvent = new DmiOutEvent()
+            def dataJobSubscriptionDmiOutEvent = new DataJobSubscriptionDmiOutEvent()
         when: 'the cm subscription dmi out Event map to data of cloud event'
-            objectUnderTest.toCloudEvent(dmiOutEvent, "subscriptionCreatedStatus", null , correlationId)
+            objectUnderTest.toCloudEvent(dataJobSubscriptionDmiOutEvent, "subscriptionCreatedStatus", null , correlationId)
         then: 'a run time exception is thrown'
             thrown(CloudEventConstructionException)
     }
index 7393b66..5836b28 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START========================================================
- * Copyright (c) 2024 Nordix Foundation.
+ * Copyright (c) 2024-2025 OpenInfra Foundation Europe. 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.
@@ -22,7 +22,7 @@ package org.onap.cps.ncmp.dmi.notifications.mapper
 
 import com.fasterxml.jackson.databind.ObjectMapper
 import io.cloudevents.core.builder.CloudEventBuilder
-import org.onap.cps.ncmp.impl.cmnotificationsubscription_1_0_0.client_to_ncmp.NcmpInEvent
+import org.onap.cps.ncmp.impl.datajobs.subscription.client_to_ncmp.DataJobSubscriptionOperationInEvent
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.boot.test.context.SpringBootTest
 import spock.lang.Specification
@@ -37,13 +37,13 @@ class CloudEventMapperSpec extends Specification {
         expect: 'Events mapped correctly'
             assert mappedCloudEvent == (CloudEventMapper.toTargetEvent(testCloudEvent(), targetClass) != null)
         where: 'below are the scenarios'
-            scenario                | targetClass                                   || mappedCloudEvent
-            'valid concrete type'   | NcmpInEvent.class || true
-            'invalid concrete type' | ArrayList.class                               || false
+            scenario                | targetClass                              || mappedCloudEvent
+            'valid concrete type'   | DataJobSubscriptionOperationInEvent.class|| true
+            'invalid concrete type' | ArrayList.class                          || false
     }
 
     def testCloudEvent() {
-        return CloudEventBuilder.v1().withData(objectMapper.writeValueAsBytes(new NcmpInEvent()))
+        return CloudEventBuilder.v1().withData(objectMapper.writeValueAsBytes(new DataJobSubscriptionOperationInEvent()))
                 .withId("cmhandle1")
                 .withSource(URI.create('test-source'))
                 .withDataSchema(URI.create('test'))
index 7f8adb3..9c708ac 100644 (file)
         }
       }
     ],
-    "predicates": [
-      {
-        "targetFilter": [
-          "CMHandle1",
-          "CMHandle2",
-          "CMHandle3"
+    "productionJobDefinition": {
+      "targetSelector": {
+        "dataNodeSelector": "/parent[id=\"1\"] \n/parent[id=\"3\"]/child\n/parent[id=\"4\"]"
+      },
+      "dataSelector": {
+        "notificationTypes": [
+          ""
         ],
-        "scopeFilter": {
-          "datastore": "ncmp-datastore:passthrough-running",
-          "xpathFilter": [
-            "//_3gpp-nr-nrm-gnbdufunction:GNBDUFunction/_3gpp-nr-nrm-nrcelldu:NRCellDU/",
-            "//_3gpp-nr-nrm-gnbcuupfunction:GNBCUUPFunction//",
-            "//_3gpp-nr-nrm-gnbcucpfunction:GNBCUCPFunction/_3gpp-nr-nrm-nrcelldu:NRCellCU//",
-            "//_3gpp-nr-nrm-nrsectorcarrier:NRSectorCarrier//"
-          ]
-        }
+        "notificationFilter": ""
       }
-    ]
+    }
   }
 }
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index ef70778..dfc7488 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,7 @@
 
         <!-- Project Versioning and Timestamp -->
         <cps.groupId>org.onap.cps</cps.groupId>
-        <cps.version>3.7.0</cps.version>
+        <cps.version>3.7.1</cps.version>
         <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
 
         <!-- Code Quality and Dependency Management -->