Replace gson mapper with jackson mapper
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / impl / operations / DmiModelOperations.java
index c582584..1ce6dcf 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation
+ *  Copyright (C) 2021-2022 Nordix Foundation
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -22,18 +22,25 @@ 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.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.models.YangResource;
 import org.onap.cps.spi.model.ModuleReference;
+import org.onap.cps.utils.JsonObjectMapper;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
 
+/**
+ * Operations class for DMI Model.
+ */
 @Component
 public class DmiModelOperations extends DmiOperations {
 
@@ -43,10 +50,10 @@ public class DmiModelOperations extends DmiOperations {
      * @param dmiRestClient {@code DmiRestClient}
      */
     public DmiModelOperations(final PersistenceCmHandleRetriever cmHandlePropertiesRetriever,
-                              final ObjectMapper objectMapper,
+                              final JsonObjectMapper jsonObjectMapper,
                               final NcmpConfiguration.DmiProperties dmiProperties,
                               final DmiRestClient dmiRestClient) {
-        super(cmHandlePropertiesRetriever, objectMapper, dmiProperties, dmiRestClient);
+        super(cmHandlePropertiesRetriever, jsonObjectMapper, dmiProperties, dmiRestClient);
     }
 
     /**
@@ -55,12 +62,14 @@ public class DmiModelOperations extends DmiOperations {
      * @param persistenceCmHandle the persistence cm handle
      * @return module references
      */
-    public ResponseEntity<String> getModuleReferences(final PersistenceCmHandle persistenceCmHandle) {
+    public List<ModuleReference> getModuleReferences(final PersistenceCmHandle persistenceCmHandle) {
         final DmiRequestBody dmiRequestBody = DmiRequestBody.builder()
             .build();
         dmiRequestBody.asCmHandleProperties(persistenceCmHandle.getAdditionalProperties());
-        return getResourceFromDmiWithJsonData(persistenceCmHandle.resolveDmiServiceName(MODEL),
-            getDmiRequestBodyAsString(dmiRequestBody), persistenceCmHandle.getId(), "modules");
+        final ResponseEntity<Object> dmiFetchModulesResponseEntity = getResourceFromDmiWithJsonData(
+            persistenceCmHandle.resolveDmiServiceName(MODEL),
+                jsonObjectMapper.asJsonString(dmiRequestBody), persistenceCmHandle.getId(), "modules");
+        return toModuleReferences((Map) dmiFetchModulesResponseEntity.getBody());
     }
 
     /**
@@ -68,17 +77,18 @@ public class DmiModelOperations extends DmiOperations {
      *
      * @param persistenceCmHandle the persistenceCmHandle
      * @param unknownModuleReferences the unknown module references
-     * @return yang resources
+     * @return yang resources as map of module name to yang(re)source
      */
-    public ResponseEntity<String>  getNewYangResourcesFromDmi(final PersistenceCmHandle persistenceCmHandle,
-                                                              final List<ModuleReference> unknownModuleReferences) {
+    public Map<String, String> getNewYangResourcesFromDmi(final PersistenceCmHandle persistenceCmHandle,
+                                                          final List<ModuleReference> unknownModuleReferences) {
         final String jsonDataWithDataAndCmHandleProperties = getRequestBodyToFetchYangResources(
             unknownModuleReferences, persistenceCmHandle.getAdditionalProperties());
-        return getResourceFromDmiWithJsonData(
+        final ResponseEntity<Object> responseEntity = getResourceFromDmiWithJsonData(
             persistenceCmHandle.resolveDmiServiceName(MODEL),
             jsonDataWithDataAndCmHandleProperties,
             persistenceCmHandle.getId(),
             "moduleResources");
+        return asModuleNameToYangResourceMap(responseEntity);
     }
 
     /**
@@ -90,7 +100,7 @@ public class DmiModelOperations extends DmiOperations {
      * @param resourceName name of the resource(s)
      * @return {@code ResponseEntity} response entity
      */
-    private ResponseEntity<String> getResourceFromDmiWithJsonData(final String dmiServiceName,
+    private ResponseEntity<Object> getResourceFromDmiWithJsonData(final String dmiServiceName,
                                                                   final String jsonData,
                                                                   final String cmHandle,
                                                                   final String resourceName) {
@@ -122,7 +132,6 @@ public class DmiModelOperations extends DmiOperations {
     }
 
     private static JsonObject toJsonObject(final List<PersistenceCmHandle.AdditionalProperty> cmHandleProperties) {
-        //TODO Toine/Joe Double check format with existing test data
         final JsonObject asJsonObject = new JsonObject();
         for (final PersistenceCmHandle.AdditionalProperty additionalProperty : cmHandleProperties) {
             asJsonObject.addProperty(additionalProperty.getName(), additionalProperty.getValue());
@@ -130,4 +139,34 @@ public class DmiModelOperations extends DmiOperations {
         return asJsonObject;
     }
 
+    private List<ModuleReference> toModuleReferences(final Map<String, Object> dmiFetchModulesResponseAsMap) {
+        final List<ModuleReference> moduleReferences = new ArrayList<>();
+
+        if (dmiFetchModulesResponseAsMap != null) {
+            final List<Object> moduleReferencesAsList = (List) dmiFetchModulesResponseAsMap.get("schemas");
+            if (moduleReferencesAsList != null) {
+                moduleReferencesAsList.forEach(moduleReferenceAsMap -> {
+                    final ModuleReference moduleReference =
+                            jsonObjectMapper.convertToValueType(moduleReferenceAsMap, ModuleReference.class);
+                    moduleReferences.add(moduleReference);
+                });
+            }
+        }
+        return moduleReferences;
+    }
+
+    private Map<String, String> asModuleNameToYangResourceMap(final ResponseEntity<Object> responseEntity) {
+        final Map<String, String> yangResourcesModuleNameToContentMap = new HashMap<>();
+        final List<Map<String, String>> yangResourcesAsList = (List) responseEntity.getBody();
+
+        if (yangResourcesAsList != null) {
+            yangResourcesAsList.forEach(yangResourceAsMap -> {
+                final YangResource yangResource =
+                        jsonObjectMapper.convertToValueType(yangResourceAsMap, YangResource.class);
+                yangResourcesModuleNameToContentMap.put(yangResource.getModuleName(),
+                    yangResource.getYangSource());
+            });
+        }
+        return yangResourcesModuleNameToContentMap;
+    }
 }