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;
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);
}
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())));
+ }
+
}
@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;
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;
}
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;
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());