[cps] Fix getResourceDataForPassthroughOperational endpoint
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / impl / operations / DmiModelOperations.java
index f74616a..b033af8 100644 (file)
@@ -1,6 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation
+ *  Copyright (C) 2021-2022 Nordix Foundation
+ *  Modifications Copyright (C) 2022 Bell Canada
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -22,22 +23,26 @@ package org.onap.cps.ncmp.api.impl.operations;
 
 import static org.onap.cps.ncmp.api.impl.operations.RequiredDmiService.MODEL;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.onap.cps.ncmp.api.impl.client.DmiRestClient;
 import org.onap.cps.ncmp.api.impl.config.NcmpConfiguration;
-import org.onap.cps.ncmp.api.models.PersistenceCmHandle;
+import org.onap.cps.ncmp.api.impl.utils.DmiServiceUrlBuilder;
+import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle;
 import org.onap.cps.ncmp.api.models.YangResource;
 import org.onap.cps.spi.model.ModuleReference;
-import org.springframework.http.HttpHeaders;
+import org.onap.cps.utils.JsonObjectMapper;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 
+/**
+ * Operations class for DMI Model.
+ */
 @Component
 public class DmiModelOperations extends DmiOperations {
 
@@ -46,44 +51,44 @@ public class DmiModelOperations extends DmiOperations {
      *
      * @param dmiRestClient {@code DmiRestClient}
      */
-    public DmiModelOperations(final PersistenceCmHandleRetriever cmHandlePropertiesRetriever,
-                              final ObjectMapper objectMapper,
+    public DmiModelOperations(final YangModelCmHandleRetriever dmiPropertiesRetriever,
+                              final JsonObjectMapper jsonObjectMapper,
                               final NcmpConfiguration.DmiProperties dmiProperties,
-                              final DmiRestClient dmiRestClient) {
-        super(cmHandlePropertiesRetriever, objectMapper, dmiProperties, dmiRestClient);
+                              final DmiRestClient dmiRestClient, final DmiServiceUrlBuilder dmiServiceUrlBuilder) {
+        super(dmiPropertiesRetriever, jsonObjectMapper, dmiProperties, dmiRestClient, dmiServiceUrlBuilder);
     }
 
     /**
      * Retrieves module references.
      *
-     * @param persistenceCmHandle the persistence cm handle
+     * @param yangModelCmHandle the yang model cm handle
      * @return module references
      */
-    public List<ModuleReference> getModuleReferences(final PersistenceCmHandle persistenceCmHandle) {
+    public List<ModuleReference> getModuleReferences(final YangModelCmHandle yangModelCmHandle) {
         final DmiRequestBody dmiRequestBody = DmiRequestBody.builder()
             .build();
-        dmiRequestBody.asCmHandleProperties(persistenceCmHandle.getAdditionalProperties());
+        dmiRequestBody.asDmiProperties(yangModelCmHandle.getDmiProperties());
         final ResponseEntity<Object> dmiFetchModulesResponseEntity = getResourceFromDmiWithJsonData(
-            persistenceCmHandle.resolveDmiServiceName(MODEL),
-            getDmiRequestBodyAsString(dmiRequestBody), persistenceCmHandle.getId(), "modules");
+            yangModelCmHandle.resolveDmiServiceName(MODEL),
+                jsonObjectMapper.asJsonString(dmiRequestBody), yangModelCmHandle.getId(), "modules");
         return toModuleReferences((Map) dmiFetchModulesResponseEntity.getBody());
     }
 
     /**
      * Retrieve yang resources from dmi for any modules that CPS-NCMP hasn't cached before.
      *
-     * @param persistenceCmHandle the persistenceCmHandle
-     * @param unknownModuleReferences the unknown module references
+     * @param yangModelCmHandle the yangModelCmHandle
+     * @param newModuleReferences the unknown module references
      * @return yang resources as map of module name to yang(re)source
      */
-    public Map<String, String> getNewYangResourcesFromDmi(final PersistenceCmHandle persistenceCmHandle,
-                                                          final List<ModuleReference> unknownModuleReferences) {
-        final String jsonDataWithDataAndCmHandleProperties = getRequestBodyToFetchYangResources(
-            unknownModuleReferences, persistenceCmHandle.getAdditionalProperties());
+    public Map<String, String> getNewYangResourcesFromDmi(final YangModelCmHandle yangModelCmHandle,
+                                                          final Collection<ModuleReference> newModuleReferences) {
+        final String jsonWithDataAndDmiProperties = getRequestBodyToFetchYangResources(
+            newModuleReferences, yangModelCmHandle.getDmiProperties());
         final ResponseEntity<Object> responseEntity = getResourceFromDmiWithJsonData(
-            persistenceCmHandle.resolveDmiServiceName(MODEL),
-            jsonDataWithDataAndCmHandleProperties,
-            persistenceCmHandle.getId(),
+            yangModelCmHandle.resolveDmiServiceName(MODEL),
+            jsonWithDataAndDmiProperties,
+            yangModelCmHandle.getId(),
             "moduleResources");
         return asModuleNameToYangResourceMap(responseEntity);
     }
@@ -102,21 +107,21 @@ public class DmiModelOperations extends DmiOperations {
                                                                   final String cmHandle,
                                                                   final String resourceName) {
         final String dmiResourceDataUrl = getDmiResourceUrl(dmiServiceName, cmHandle, resourceName);
-        return dmiRestClient.postOperationWithJsonData(dmiResourceDataUrl, jsonData, new HttpHeaders());
+        return dmiRestClient.postOperationWithJsonData(dmiResourceDataUrl, jsonData);
     }
 
-    private static String getRequestBodyToFetchYangResources(final List<ModuleReference> unknownModuleReferences,
-        final List<PersistenceCmHandle.AdditionalProperty> cmHandleProperties) {
-        final JsonArray moduleReferencesAsJson = getModuleReferencesAsJson(unknownModuleReferences);
+    private static String getRequestBodyToFetchYangResources(final Collection<ModuleReference> newModuleReferences,
+        final List<YangModelCmHandle.Property> dmiProperties) {
+        final JsonArray moduleReferencesAsJson = getModuleReferencesAsJson(newModuleReferences);
         final JsonObject data = new JsonObject();
         data.add("modules", moduleReferencesAsJson);
         final JsonObject jsonRequestObject = new JsonObject();
         jsonRequestObject.add("data", data);
-        jsonRequestObject.add("cmHandleProperties", toJsonObject(cmHandleProperties));
+        jsonRequestObject.add("cmHandleProperties", toJsonObject(dmiProperties));
         return jsonRequestObject.toString();
     }
 
-    private static JsonArray getModuleReferencesAsJson(final List<ModuleReference> unknownModuleReferences) {
+    private static JsonArray getModuleReferencesAsJson(final Collection<ModuleReference> unknownModuleReferences) {
         final JsonArray moduleReferences = new JsonArray();
 
         for (final ModuleReference moduleReference : unknownModuleReferences) {
@@ -128,23 +133,24 @@ public class DmiModelOperations extends DmiOperations {
         return moduleReferences;
     }
 
-    private static JsonObject toJsonObject(final List<PersistenceCmHandle.AdditionalProperty> cmHandleProperties) {
+    private static JsonObject toJsonObject(final List<YangModelCmHandle.Property>
+                                               dmiProperties) {
         final JsonObject asJsonObject = new JsonObject();
-        for (final PersistenceCmHandle.AdditionalProperty additionalProperty : cmHandleProperties) {
+        for (final YangModelCmHandle.Property additionalProperty : dmiProperties) {
             asJsonObject.addProperty(additionalProperty.getName(), additionalProperty.getValue());
         }
         return asJsonObject;
     }
 
-    private List<ModuleReference> toModuleReferences(final Map dmiFetchModulesResponseAsMap) {
+    private List<ModuleReference> toModuleReferences(final Map<String, Object> dmiFetchModulesResponseAsMap) {
         final List<ModuleReference> moduleReferences = new ArrayList<>();
 
         if (dmiFetchModulesResponseAsMap != null) {
-            final List moduleReferencesAsList = (List) dmiFetchModulesResponseAsMap.get("schemas");
+            final List<Object> moduleReferencesAsList = (List) dmiFetchModulesResponseAsMap.get("schemas");
             if (moduleReferencesAsList != null) {
                 moduleReferencesAsList.forEach(moduleReferenceAsMap -> {
                     final ModuleReference moduleReference =
-                        objectMapper.convertValue(moduleReferenceAsMap, ModuleReference.class);
+                            jsonObjectMapper.convertToValueType(moduleReferenceAsMap, ModuleReference.class);
                     moduleReferences.add(moduleReference);
                 });
             }
@@ -159,7 +165,7 @@ public class DmiModelOperations extends DmiOperations {
         if (yangResourcesAsList != null) {
             yangResourcesAsList.forEach(yangResourceAsMap -> {
                 final YangResource yangResource =
-                    objectMapper.convertValue(yangResourceAsMap, YangResource.class);
+                        jsonObjectMapper.convertToValueType(yangResourceAsMap, YangResource.class);
                 yangResourcesModuleNameToContentMap.put(yangResource.getModuleName(),
                     yangResource.getYangSource());
             });