CPS-2187 - #6 Add module Set Tag to ncmp (single cm handle) data request to dmi 14/137914/3
authordavid.mcweeney <david.mcweeney@est.tech>
Wed, 15 May 2024 15:35:48 +0000 (16:35 +0100)
committerdavid.mcweeney <david.mcweeney@est.tech>
Thu, 16 May 2024 11:10:28 +0000 (12:10 +0100)
Change-Id: I59cdb021d8f2f767b943f09715f4becad820e786
Signed-off-by: david.mcweeney <david.mcweeney@est.tech>
Issue-ID: CPS-2187

cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/DmiServiceUrlBuilder.java
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DmiServiceUrlBuilderSpec.groovy
dmi-plugin-demo-and-csit-stub/dmi-plugin-demo-and-csit-stub-service/src/main/java/org/onap/cps/ncmp/dmi/rest/stub/controller/DmiRestStubController.java

index a9ec124..789852a 100644 (file)
@@ -90,9 +90,14 @@ public class DmiDataOperations extends DmiOperations {
         final CmHandleState cmHandleState = yangModelCmHandle.getCompositeState().getCmHandleState();
         validateIfCmHandleStateReady(yangModelCmHandle, cmHandleState);
         final String jsonRequestBody = getDmiRequestBody(READ, requestId, null, null, yangModelCmHandle);
-        final String dmiResourceDataUrl = getDmiRequestUrl(cmResourceAddress.datastoreName(),
-            cmResourceAddress.cmHandleId(), cmResourceAddress.resourceIdentifier(), optionsParamInQuery,
-                topicParamInQuery, yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA));
+
+        final MultiValueMap<String, String> uriQueryParamsMap = getUriQueryParamsMap(
+                cmResourceAddress.resourceIdentifier(), optionsParamInQuery,
+                topicParamInQuery, yangModelCmHandle.getModuleSetTag());
+        final Map<String, Object> uriVariableParamsMap = getUriVariableParamsMap(cmResourceAddress.datastoreName(),
+                yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA), cmResourceAddress.cmHandleId());
+        final String dmiResourceDataUrl = getDmiRequestUrl(uriQueryParamsMap, uriVariableParamsMap);
+
         return dmiRestClient.postOperationWithJsonData(dmiResourceDataUrl, jsonRequestBody, READ, authorization);
     }
 
@@ -111,9 +116,13 @@ public class DmiDataOperations extends DmiOperations {
         final YangModelCmHandle yangModelCmHandle = getYangModelCmHandle(cmHandleId);
         final String jsonRequestBody = getDmiRequestBody(READ, requestId, null, null,
                 yangModelCmHandle);
-        final String dmiResourceDataUrl = getDmiRequestUrl(dataStoreName, cmHandleId, "/",
-                null, null,
-                yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA));
+
+        final MultiValueMap<String, String> uriQueryParamsMap = getUriQueryParamsMap("/", null,
+                null, yangModelCmHandle.getModuleSetTag());
+        final Map<String, Object> uriVariableParamsMap = getUriVariableParamsMap(dataStoreName,
+                yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA), cmHandleId);
+        final String dmiResourceDataUrl = getDmiRequestUrl(uriQueryParamsMap, uriVariableParamsMap);
+
         final CmHandleState cmHandleState = yangModelCmHandle.getCompositeState().getCmHandleState();
         validateIfCmHandleStateReady(yangModelCmHandle, cmHandleState);
         return dmiRestClient.postOperationWithJsonData(dmiResourceDataUrl, jsonRequestBody, READ, null);
@@ -168,9 +177,13 @@ public class DmiDataOperations extends DmiOperations {
         final YangModelCmHandle yangModelCmHandle = getYangModelCmHandle(cmHandleId);
         final String jsonRequestBody = getDmiRequestBody(operationType, null, requestData, dataType,
                 yangModelCmHandle);
-        final String dmiUrl = getDmiRequestUrl(PASSTHROUGH_RUNNING.getDatastoreName(), cmHandleId, resourceId,
-                null, null,
-                yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA));
+
+        final MultiValueMap<String, String> uriQueryParamsMap = getUriQueryParamsMap(resourceId, null,
+                null, yangModelCmHandle.getModuleSetTag());
+        final Map<String, Object> uriVariableParamsMap = getUriVariableParamsMap(PASSTHROUGH_RUNNING.getDatastoreName(),
+                yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA), cmHandleId);
+        final String dmiUrl = getDmiRequestUrl(uriQueryParamsMap, uriVariableParamsMap);
+
         final CmHandleState cmHandleState = yangModelCmHandle.getCompositeState().getCmHandleState();
         validateIfCmHandleStateReady(yangModelCmHandle, cmHandleState);
         return dmiRestClient.postOperationWithJsonData(dmiUrl, jsonRequestBody, operationType, authorization);
@@ -195,16 +208,23 @@ public class DmiDataOperations extends DmiOperations {
         return jsonObjectMapper.asJsonString(dmiRequestBody);
     }
 
-    private String getDmiRequestUrl(final String dataStoreName,
-                                    final String cmHandleId,
-                                    final String resourceId,
-                                    final String optionsParamInQuery,
-                                    final String topicParamInQuery,
-                                    final String dmiServiceName) {
-        return dmiServiceUrlBuilder.getDmiDatastoreUrl(
-                dmiServiceUrlBuilder.populateQueryParams(resourceId, optionsParamInQuery,
-                        topicParamInQuery), dmiServiceUrlBuilder.populateUriVariables(dataStoreName, dmiServiceName,
-                        cmHandleId));
+    private String getDmiRequestUrl(final MultiValueMap<String, String> uriQueryParamsMap,
+                                    final Map<String, Object> uriVariableParamsMap) {
+        return dmiServiceUrlBuilder.getDmiDatastoreUrl(uriQueryParamsMap, uriVariableParamsMap);
+    }
+
+    private MultiValueMap<String, String> getUriQueryParamsMap(final String resourceId,
+                                                               final String optionsParamInQuery,
+                                                               final String topicParamInQuery,
+                                                               final String moduleSetTagParamInQuery) {
+        return dmiServiceUrlBuilder.populateQueryParams(resourceId, optionsParamInQuery,
+                topicParamInQuery, moduleSetTagParamInQuery);
+    }
+
+    private Map<String, Object> getUriVariableParamsMap(final String dataStoreName,
+                                                        final String dmiServiceName,
+                                                        final String cmHandleId) {
+        return dmiServiceUrlBuilder.populateUriVariables(dataStoreName, dmiServiceName, cmHandleId);
     }
 
     private String getDmiServiceDataOperationRequestUrl(final String dmiServiceName,
index 04acaa5..ede5256 100644 (file)
@@ -133,13 +133,15 @@ public class DmiServiceUrlBuilder {
      * This method is used to populate map from query params.
      *
      * @param resourceId          unique id of response for valid topic
-     * @param optionsParamInQuery options into url param
-     * @param topicParamInQuery   topic into url param
+     * @param optionsParamInQuery options as provided by client
+     * @param topicParamInQuery   topic as provided by client
+     * @param moduleSetTag   module set tag associated with the given cm handle
      * @return all valid query params as map
      */
     public MultiValueMap<String, String> populateQueryParams(final String resourceId,
                                                              final String optionsParamInQuery,
-                                                             final String topicParamInQuery) {
+                                                             final String topicParamInQuery,
+                                                             final String moduleSetTag) {
         final MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
         getQueryParamConsumer().accept("resourceIdentifier",
                 resourceId, queryParams);
@@ -147,6 +149,9 @@ public class DmiServiceUrlBuilder {
         if (Strings.isNotEmpty(topicParamInQuery)) {
             getQueryParamConsumer().accept("topic", topicParamInQuery, queryParams);
         }
+        if (Strings.isNotEmpty(moduleSetTag)) {
+            getQueryParamConsumer().accept("moduleSetTag", moduleSetTag, queryParams);
+        }
         return queryParams;
     }
 
index fbf2c3d..205e6e9 100644 (file)
@@ -48,17 +48,19 @@ class DmiServiceUrlBuilderSpec extends Specification {
         given: 'uri variables'
             def uriVars = objectUnderTest.populateUriVariables(PASSTHROUGH_RUNNING.datastoreName, yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA), 'cmHandle')
         and: 'query params'
-            def uriQueries = objectUnderTest.populateQueryParams(resourceId, 'optionsParamInQuery', topic)
+            def uriQueries = objectUnderTest.populateQueryParams(resourceId, 'optionsParamInQuery', topic, moduleSetTag)
         when: 'a dmi datastore service url is generated'
             def dmiServiceUrl = objectUnderTest.getDmiDatastoreUrl(uriQueries, uriVars)
         then: 'service url is generated as expected'
             assert dmiServiceUrl == expectedDmiServiceUrl
         where: 'the following parameters are used'
-            scenario                       | topic               | resourceId   || expectedDmiServiceUrl
-            'With valid resourceId'        | 'topicParamInQuery' | 'resourceId' || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=resourceId&options=optionsParamInQuery&topic=topicParamInQuery'
-            'With Empty resourceId'        | 'topicParamInQuery' | ''           || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?options=optionsParamInQuery&topic=topicParamInQuery'
-            'With Empty dmi base path'     | 'topicParamInQuery' | 'resourceId' || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=resourceId&options=optionsParamInQuery&topic=topicParamInQuery'
-            'With Empty topicParamInQuery' | ''                  | 'resourceId' || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=resourceId&options=optionsParamInQuery'
+            scenario                       | topic               | moduleSetTag | resourceId   || expectedDmiServiceUrl
+            'With valid resourceId'        | 'topicParamInQuery' | ''                | 'resourceId' || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=resourceId&options=optionsParamInQuery&topic=topicParamInQuery'
+            'With Empty resourceId'        | 'topicParamInQuery' | ''                | ''           || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?options=optionsParamInQuery&topic=topicParamInQuery'
+            'With valid moduleSetTag'      | 'topicParamInQuery' | 'module-set-tag1' | 'resourceId' || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=resourceId&options=optionsParamInQuery&topic=topicParamInQuery&moduleSetTag=module-set-tag1'
+            'With Empty moduleSetTag'      | 'topicParamInQuery' | ''                | 'resourceId' || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=resourceId&options=optionsParamInQuery&topic=topicParamInQuery'
+            'With Empty dmi base path'     | 'topicParamInQuery' | ''                | 'resourceId' || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=resourceId&options=optionsParamInQuery&topic=topicParamInQuery'
+            'With Empty topicParamInQuery' | ''                  | ''                | 'resourceId' || 'dmiServiceName/dmi/v1/ch/cmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=resourceId&options=optionsParamInQuery'
     }
 
     def 'Populate dmi data store url #scenario.'() {
@@ -66,7 +68,7 @@ class DmiServiceUrlBuilderSpec extends Specification {
             dmiProperties.dmiBasePath = dmiBasePath
             def uriVars = objectUnderTest.populateUriVariables(PASSTHROUGH_RUNNING.datastoreName, yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA), 'cmHandle')
         and: 'null query params'
-            def uriQueries = objectUnderTest.populateQueryParams(null, null, null)
+            def uriQueries = objectUnderTest.populateQueryParams(null, null, null, null)
         when: 'a dmi datastore service url is generated'
             def dmiServiceUrl = objectUnderTest.getDmiDatastoreUrl(uriQueries, uriVars)
         then: 'the created dmi service url matches the expected'
index f154be6..08bcee7 100644 (file)
@@ -205,9 +205,12 @@ public class DmiRestStubController {
             @RequestParam(value = "resourceIdentifier") final String resourceIdentifier,
             @RequestParam(value = "options", required = false) final String options,
             @RequestParam(value = "topic", required = false) final String topic,
+            @RequestParam(value = "moduleSetTag", required = false) final String moduleSetTag,
             @RequestHeader(value = "Authorization", required = false) final String authorization) {
         log.info("DMI AUTH HEADER: {}", authorization);
         delay(dataForCmHandleDelayMs);
+        log.info("Module set tag received: {}", moduleSetTag);
+
         final String sampleJson = ResourceFileReaderUtil.getResourceFileContent(applicationContext.getResource(
                 ResourceLoader.CLASSPATH_URL_PREFIX + "data/operational/ietf-network-topology-sample-rfc8345.json"));
         return ResponseEntity.ok(sampleJson);