Enable complex data types in service instanceParams 78/128378/2
authorJozsef Csongvai <jozsef.csongvai@bell.ca>
Thu, 7 Apr 2022 17:36:27 +0000 (13:36 -0400)
committerJozsef Csongvai <jozsef.csongvai@bell.ca>
Mon, 11 Apr 2022 02:52:42 +0000 (02:52 +0000)
Issue-ID: SO-3923
Signed-off-by: Jozsef Csongvai <jozsef.csongvai@bell.ca>
Change-Id: Ibf371c4ffbedd6548a8e9630a9baeb5e2c43d7f4

bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsForService.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/cds/ConfigureInstanceParamsUtil.java
common/src/main/java/org/onap/so/serviceinstancebeans/Service.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java

index e8c88e0..4148a60 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.onap.so.client.cds;
 
-import static org.onap.so.client.cds.ConfigureInstanceParamsUtil.applyParamsToObject;
+import static org.onap.so.client.cds.ConfigureInstanceParamsUtil.applyJsonParamsToObject;
 import com.google.gson.JsonObject;
 import java.util.List;
 import java.util.Map;
@@ -49,7 +49,7 @@ public class ConfigureInstanceParamsForService {
             Optional<Service> service =
                     extractServiceFromUserParameters.getServiceFromRequestUserParams(userParamsFromRequest);
 
-            service.map(Service::getInstanceParams).ifPresent(p -> applyParamsToObject(p, jsonObject));
+            service.map(Service::getInstanceParams).ifPresent(p -> applyJsonParamsToObject(p, jsonObject));
         } catch (Exception e) {
             throw new PayloadGenerationException("Failed to resolve instance parameters", e);
         }
index 117fd74..7e9c885 100644 (file)
 
 package org.onap.so.client.cds;
 
+import com.google.gson.Gson;
 import com.google.gson.JsonObject;
 import java.util.List;
 import java.util.Map;
 
 public final class ConfigureInstanceParamsUtil {
 
+    private static final Gson gson = new Gson();
+
     public static void applyParamsToObject(List<Map<String, String>> instanceParamsList, JsonObject jsonObject) {
         instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream())
                 .forEachOrdered(entry -> jsonObject.addProperty(entry.getKey(), entry.getValue()));
     }
 
+    public static void applyJsonParamsToObject(List<Map<String, Object>> instanceParamsList, JsonObject jsonObject) {
+        instanceParamsList.stream().flatMap(instanceParamsMap -> instanceParamsMap.entrySet().stream())
+                .forEachOrdered(entry -> jsonObject.add(entry.getKey(), gson.toJsonTree(entry.getValue())));
+    }
+
 }
index c368f67..3c3e10c 100644 (file)
@@ -42,7 +42,7 @@ public class Service implements Serializable {
     @JsonProperty("instanceName")
     protected String instanceName;
     @JsonProperty("instanceParams")
-    private List<Map<String, String>> instanceParams = new ArrayList<>();
+    private List<Map<String, Object>> instanceParams = new ArrayList<>();
     @JsonProperty("resources")
     protected Resources resources;
 
@@ -70,11 +70,11 @@ public class Service implements Serializable {
         this.instanceName = instanceName;
     }
 
-    public List<Map<String, String>> getInstanceParams() {
+    public List<Map<String, Object>> getInstanceParams() {
         return instanceParams;
     }
 
-    public void setInstanceParams(List<Map<String, String>> instanceParams) {
+    public void setInstanceParams(List<Map<String, Object>> instanceParams) {
         this.instanceParams = instanceParams;
     }
 
index cddb1ad..531d87c 100644 (file)
@@ -33,7 +33,10 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
 import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response;
@@ -841,7 +844,11 @@ public class RequestHandlerUtils extends AbstractRestHandler {
             if (params.containsKey("service")) {
                 Service service = serviceMapper(params);
 
-                addUserParams(userParams, service.getInstanceParams());
+                // Filter out non-string params for backward compatibility
+                Map<String, String> svcStrParams = service.getInstanceParams().stream().map(Map::entrySet)
+                        .flatMap(Set::stream).filter(e -> e.getValue() instanceof String)
+                        .collect(Collectors.toMap(Entry::getKey, e -> (String) e.getValue()));
+                userParams.putAll(svcStrParams);
 
                 for (Networks network : service.getResources().getNetworks()) {
                     addUserParams(userParams, network.getInstanceParams());