2 * Copyright (c) 2018 Orange
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
15 package org.onap.nbi.apis.serviceorder.workflow;
17 import java.io.IOException;
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.Iterator;
21 import java.util.List;
24 import org.onap.nbi.apis.servicecatalog.ServiceSpecificationService;
25 import org.onap.nbi.apis.serviceorder.SoClient;
26 import org.onap.nbi.apis.serviceorder.model.ServiceCharacteristic;
27 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
28 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
29 import org.onap.nbi.apis.serviceorder.model.StateType;
30 import org.onap.nbi.apis.serviceorder.model.consumer.CloudConfiguration;
31 import org.onap.nbi.apis.serviceorder.model.consumer.CreateE2EServiceInstanceResponse;
32 import org.onap.nbi.apis.serviceorder.model.consumer.CreateMacroServiceInstanceResponse;
33 import org.onap.nbi.apis.serviceorder.model.consumer.CreateServiceInstanceResponse;
34 import org.onap.nbi.apis.serviceorder.model.consumer.MSOE2EPayload;
35 import org.onap.nbi.apis.serviceorder.model.consumer.MSOPayload;
36 import org.onap.nbi.apis.serviceorder.model.consumer.ModelInfo;
37 import org.onap.nbi.apis.serviceorder.model.consumer.OwningEntity;
38 import org.onap.nbi.apis.serviceorder.model.consumer.ParametersModel;
39 import org.onap.nbi.apis.serviceorder.model.consumer.Project;
40 import org.onap.nbi.apis.serviceorder.model.consumer.RequestDetails;
41 import org.onap.nbi.apis.serviceorder.model.consumer.RequestInfo;
42 import org.onap.nbi.apis.serviceorder.model.consumer.RequestParameters;
43 import org.onap.nbi.apis.serviceorder.model.consumer.ResourceModel;
44 import org.onap.nbi.apis.serviceorder.model.consumer.ServiceModel;
45 import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo;
46 import org.onap.nbi.apis.serviceorder.model.consumer.UserParams;
47 import org.onap.nbi.apis.serviceorder.model.consumer.VFModelInfo;
48 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
49 import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52 import org.springframework.beans.factory.annotation.Autowired;
53 import org.springframework.beans.factory.annotation.Value;
54 import org.springframework.http.ResponseEntity;
55 import org.springframework.stereotype.Service;
56 import org.springframework.util.CollectionUtils;
57 import com.fasterxml.jackson.databind.JsonNode;
58 import com.fasterxml.jackson.databind.ObjectMapper;
59 import com.fasterxml.jackson.databind.node.ArrayNode;
60 import com.fasterxml.jackson.databind.node.ObjectNode;
63 public class PostSoProcessor {
65 private static final Logger LOGGER = LoggerFactory.getLogger(PostSoProcessor.class);
67 @Value("${onap.lcpCloudRegionId}")
68 private String lcpCloudRegionId;
70 @Value("${onap.tenantId}")
71 private String tenantId;
73 @Value("${so.owning.entity.id}")
74 private String soOwningEntityId;
76 @Value("${so.owning.entity.name}")
77 private String soOwningEntityName;
79 @Value("${so.project.name}")
80 private String soProjectName;
82 @Value("${onap.cloudOwner}")
83 private String cloudOwner;
85 @Value("${onap.k8sCloudOwner}")
86 private String k8sCloudOwner;
88 @Value("${onap.k8sCloudRegionId}")
89 private String k8sCloudRegionId;
91 @Value("${k8s-rb-profile-name}")
92 private String k8sRbProfileName;
95 private ServiceOrderService serviceOrderService;
98 private SoClient soClient;
101 ServiceSpecificationService serviceSpecificationService;
103 public ResponseEntity<CreateServiceInstanceResponse> postServiceOrderItem(ServiceOrderInfo serviceOrderInfo,
104 ServiceOrderItem serviceOrderItem) {
105 ResponseEntity<CreateServiceInstanceResponse> response = null;
107 response = postSORequest(serviceOrderItem, serviceOrderInfo);
108 } catch (NullPointerException e) {
109 LOGGER.error("Unable to create service instance for serviceOrderItem.id=" + serviceOrderItem.getId(), e);
115 public ResponseEntity<CreateE2EServiceInstanceResponse> postE2EServiceOrderItem(ServiceOrderInfo serviceOrderInfo,
116 ServiceOrderItem serviceOrderItem, ServiceOrder serviceOrder) {
117 ResponseEntity<CreateE2EServiceInstanceResponse> response;
119 response = postE2ESORequest(serviceOrderItem, serviceOrderInfo, serviceOrder);
120 } catch (NullPointerException e) {
121 LOGGER.error("Unable to create service instance for serviceOrderItem.id=" + serviceOrderItem.getId(), e);
127 public ResponseEntity<CreateMacroServiceInstanceResponse> postMacroServiceOrderItem(ServiceOrderInfo serviceOrderInfo,
128 ServiceOrderItem serviceOrderItem) {
129 ResponseEntity<CreateMacroServiceInstanceResponse> response = null;
132 response = postSOMacroRequest(serviceOrderItem, serviceOrderInfo);
133 } catch (NullPointerException e) {
134 LOGGER.error("Unable to create service instance for serviceOrderItem.id=" + serviceOrderItem.getId(), e);
140 private ResponseEntity<CreateServiceInstanceResponse> postSORequest(ServiceOrderItem serviceOrderItem,
141 ServiceOrderInfo serviceOrderInfo) {
142 RequestDetails requestDetails = buildSoRequest(serviceOrderItem, serviceOrderInfo);
143 MSOPayload msoPayload = new MSOPayload(requestDetails);
144 ResponseEntity<CreateServiceInstanceResponse> response = null;
146 switch (serviceOrderItem.getAction()) {
148 response = soClient.callCreateServiceInstance(msoPayload);
151 response = soClient.callDeleteServiceInstance(msoPayload, serviceOrderItem.getService().getId());
154 if (StateType.INPROGRESS_MODIFY_ITEM_TO_CREATE == serviceOrderItem.getState()) {
155 response = soClient.callCreateServiceInstance(msoPayload);
157 if (StateType.ACKNOWLEDGED == serviceOrderItem.getState()) {
158 response = soClient.callDeleteServiceInstance(msoPayload, serviceOrderItem.getService().getId());
167 private ResponseEntity<CreateE2EServiceInstanceResponse> postE2ESORequest(ServiceOrderItem serviceOrderItem,
168 ServiceOrderInfo serviceOrderInfo, ServiceOrder serviceOrder) {
169 ServiceModel service = buildE2ESoRequest(serviceOrderItem,
170 serviceOrderInfo.getServiceOrderItemInfos().get(serviceOrderItem.getId()).getCatalogResponse(),
171 serviceOrderInfo.getSubscriberInfo(), serviceOrder);
172 MSOE2EPayload msoE2EPayload = new MSOE2EPayload(service);
173 ResponseEntity<CreateE2EServiceInstanceResponse> response = null;
174 switch (serviceOrderItem.getAction()) {
176 response = soClient.callE2ECreateServiceInstance(msoE2EPayload);
179 response = soClient.callE2EDeleteServiceInstance(service.getGlobalSubscriberId(),
180 service.getServiceType(), serviceOrderItem.getService().getId());
183 if (StateType.INPROGRESS_MODIFY_ITEM_TO_CREATE == serviceOrderItem.getState()) {
184 response = soClient.callE2ECreateServiceInstance(msoE2EPayload);
186 if (StateType.ACKNOWLEDGED == serviceOrderItem.getState()) {
187 response = soClient.callE2EDeleteServiceInstance(service.getGlobalSubscriberId(),
188 service.getServiceType(), serviceOrderItem.getService().getId());
197 private ResponseEntity<CreateMacroServiceInstanceResponse> postSOMacroRequest(ServiceOrderItem serviceOrderItem,
198 ServiceOrderInfo serviceOrderInfo) {
200 String serviceModuleName = (String) serviceOrderInfo.getServiceOrderItemInfos().get(serviceOrderItem.getId())
201 .getCatalogResponse().get("name");
203 RequestDetails requestDetails = buildSoMacroRequest(serviceOrderItem, serviceOrderInfo);
204 MSOPayload msoMacroPayload = new MSOPayload(requestDetails);
205 ResponseEntity<CreateMacroServiceInstanceResponse> response = null;
207 switch (serviceOrderItem.getAction()) {
209 response = soClient.callMacroCreateServiceInstance(msoMacroPayload);
212 // response = soClient.callDeleteServiceInstance(msoPayload,
213 // serviceOrderItem.getService().getId());
216 if (StateType.INPROGRESS_MODIFY_ITEM_TO_CREATE == serviceOrderItem.getState()) {
217 // response = soClient.callCreateServiceInstance(msoPayload);
219 if (StateType.ACKNOWLEDGED == serviceOrderItem.getState()) {
220 // response = soClient.callDeleteServiceInstance(msoPayload,
221 // serviceOrderItem.getService().getId());
231 * Build SO MACRO CREATE request from the ServiceOrder and catalog informations from SDC
234 * @param serviceOrderInfo
235 * @param subscriberInfo
238 private RequestDetails buildSoMacroRequest(ServiceOrderItem orderItem, ServiceOrderInfo serviceOrderInfo) {
240 RequestDetails requestDetails = new RequestDetails();
241 Map<String, Object> sdcInfos = serviceOrderInfo.getServiceOrderItemInfos().get(orderItem.getId())
242 .getCatalogResponse();
244 String id = orderItem.getService().getServiceSpecification().getId();
245 Map responseChildRes = serviceSpecificationService.get(id);
246 ArrayList<Map<String, Object>> resourseSpecificationArray = (ArrayList<Map<String, Object>>) responseChildRes
247 .get("resourceSpecification");
249 Map<String, Object> resourseSpecificationMap = resourseSpecificationArray.get(0);
251 Map instanceSpecification = (Map) resourseSpecificationMap.get("InstanceSpecification");
252 ArrayList<VFModelInfo> childResourceSpecification = (ArrayList<VFModelInfo>) resourseSpecificationMap
253 .get("childResourceSpecification");
255 List<Object> serviceObject = new ArrayList<>();
257 ArrayList<Object> vnfInstanceParam = new ArrayList<>();
259 //Differentiating vnf with cnf(Can be discussed and improved)
260 if (instanceSpecification.get("public_net_id") != null) {
261 vnfInstanceParam.add(instanceSpecification);
263 Map<String, Object> instanceParam = new HashMap<>();
264 instanceParam.put("k8s-rb-profile-name", k8sRbProfileName);
265 vnfInstanceParam.add(instanceParam);
268 List resSpec = (ArrayList) sdcInfos.get("resourceSpecification");
269 Map resSpecMap = (Map) resSpec.get(0);
271 Map<String, String> vnfInfoObject = new HashMap<>();
272 vnfInfoObject.put("modelName", (String) resSpecMap.get("name"));
273 vnfInfoObject.put("modelVersionId", (String) resSpecMap.get("id"));
274 vnfInfoObject.put("modelInvariantUuid", (String) resSpecMap.get("resourceInvariantUUID"));
275 vnfInfoObject.put("modelVersion", (String) resSpecMap.get("version"));
276 vnfInfoObject.put("modelCustomizationId", (String) resSpecMap.get("modelCustomizationId"));
277 vnfInfoObject.put("modelInstanceName", (String) resSpecMap.get("resourceInstanceName"));
280 CloudConfiguration cloudConfiguration = null;
282 //Differentiating vnf with cnf(Can be discussed and improved)
283 if (instanceSpecification.get("public_net_id") != null) {
284 cloudConfiguration = new CloudConfiguration(lcpCloudRegionId, tenantId, cloudOwner);
286 cloudConfiguration = new CloudConfiguration(k8sCloudRegionId, tenantId, k8sCloudOwner);
289 Map<String, String> platformName = new HashMap<>();
290 platformName.put("platformName", "test");
292 Map<String, String> lob = new HashMap<>();
293 lob.put("lineOfBusinessName", "LOB-Demonstration");
295 Map<String, Object> vnfModel = new HashMap<>();
296 vnfModel.put("modelInfo", vnfInfoObject);
297 vnfModel.put("cloudConfiguration", cloudConfiguration);
298 vnfModel.put("platform", platformName);
299 vnfModel.put("lineOfBusiness", lob);
300 vnfModel.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
301 vnfModel.put("instanceName", (String) resSpecMap.get("resourceInstanceName"));
302 vnfModel.put("instanceParams", vnfInstanceParam);
304 List<Object> vfModulesObjects = new ArrayList<>();
305 ArrayList<Map<String, Object>> vfInstanceParam = new ArrayList<>();
307 //Differentiate CNF from VNF
308 if (instanceSpecification.get("public_net_id") != null) {
309 vfInstanceParam.add(instanceSpecification);
312 Map<String, Object> instanceParam = new HashMap<>();
313 instanceParam.put("k8s-rb-profile-name", k8sRbProfileName);
314 vfInstanceParam.add(instanceParam);
317 for (VFModelInfo crsObject : childResourceSpecification) {
318 Map<String, Object> vfModuleObject = new HashMap<>();
319 Map<String, String> vfModuleInfo = new HashMap<>();
321 vfModuleInfo.put("modelName", crsObject.getModelName());
322 vfModuleInfo.put("modelVersionId", crsObject.getModelUuid());
323 vfModuleInfo.put("modelInvariantUuid", crsObject.getModelInvariantUuid());
324 vfModuleInfo.put("modelVersion", crsObject.getModelVersion());
325 vfModuleInfo.put("modelCustomizationId", crsObject.getModelCustomizationUuid());
326 vfModuleObject.put("modelInfo", vfModuleInfo);
327 vfModuleObject.put("instanceName", crsObject.getModelName());
328 vfModuleObject.put("instanceParams", vfInstanceParam);
330 vfModulesObjects.add(vfModuleObject);
332 vnfModel.put("vfModules", vfModulesObjects);
334 List<Object> vnfObjects = new ArrayList<>();
335 vnfObjects.add(vnfModel);
337 Map<String, Object> vnfData = new HashMap<>();
338 vnfData.put("vnfs", vnfObjects);
340 ModelInfo serviceModelInfo = new ModelInfo();
341 serviceModelInfo.setModelType("service");
342 serviceModelInfo.setModelInvariantId((String) sdcInfos.get("invariantUUID"));
343 serviceModelInfo.setModelVersionId(orderItem.getService().getServiceSpecification().getId());
344 serviceModelInfo.setModelName((String) sdcInfos.get("name"));
345 serviceModelInfo.setModelVersion((String) sdcInfos.get("version"));
347 // Adding List of instanceParams for service
348 // We can add instanceParams Key Value in Map Object and add it to the List, for
349 // For now it is empty to comply with so request
351 List<Map<String, String>> listOfServiceLevelInstanceParams = new ArrayList<>();
352 Map<String, String> serviceInstanceParams= new HashMap<>();
353 listOfServiceLevelInstanceParams.add(serviceInstanceParams);
355 Map<String, Object> serviceData = new HashMap<>();
356 serviceData.put("instanceParams", listOfServiceLevelInstanceParams);
357 serviceData.put("instanceName", orderItem.getService().getName());
358 serviceData.put("resources", vnfData);
359 serviceData.put("modelInfo", serviceModelInfo);
361 Map<String, String> homingObject = new HashMap<>();
362 homingObject.put("Homing_Solution", "none");
363 serviceObject.add(homingObject);
365 Map<String, Object> serviceObject1 = new HashMap<>();
366 serviceObject1.put("service", serviceData);
367 serviceObject.add(serviceObject1);
368 requestDetails.setSubscriberInfo(serviceOrderInfo.getSubscriberInfo());
370 ModelInfo modelInfo = new ModelInfo();
371 modelInfo.setModelType("service");
372 modelInfo.setModelInvariantId((String) sdcInfos.get("invariantUUID"));
373 modelInfo.setModelVersionId(orderItem.getService().getServiceSpecification().getId());
374 modelInfo.setModelName((String) sdcInfos.get("name"));
375 modelInfo.setModelVersion((String) sdcInfos.get("version"));
376 requestDetails.setModelInfo(modelInfo);
378 RequestInfo requestInfo = new RequestInfo();
379 requestInfo.setInstanceName(orderItem.getService().getName());
380 requestInfo.setSource("VID");
381 requestInfo.setSuppressRollback(false);
382 requestInfo.setRequestorId("NBI");
383 requestInfo.setProductFamilyId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");
384 requestDetails.setRequestInfo(requestInfo);
386 // We are taking RequestParameters as map because it has UserParams which gives value as
387 // "name" : "service"
388 // "value" : "", which SO is not accepting
389 Map<String, Object> requestParameters = new HashMap<>();
391 // Get value from serviceOrder request or generate one
392 String serviceTypeFromJson = orderItem.getService().getServicetype();
393 requestParameters.put("subscriptionServiceType",
394 serviceTypeFromJson != null ? serviceTypeFromJson : (String) sdcInfos.get("name"));
395 requestParameters.put("userParams", serviceObject);
396 requestParameters.put("aLaCarte", false);
397 requestDetails.setRequestParameters(requestParameters);
398 requestDetails.setCloudConfiguration(cloudConfiguration);
400 OwningEntity owningEntity = new OwningEntity();
401 owningEntity.setOwningEntityId(soOwningEntityId);
402 owningEntity.setOwningEntityName(soOwningEntityName);
403 requestDetails.setOwningEntity(owningEntity);
405 Project project = new Project();
406 project.setProjectName(soProjectName);
408 requestDetails.setProject(project);
409 return requestDetails;
413 * Build SO CREATE request from the ServiceOrder and catalog informations from SDC
416 * @param serviceOrderInfo
419 private RequestDetails buildSoRequest(ServiceOrderItem orderItem, ServiceOrderInfo serviceOrderInfo) {
420 RequestDetails requestDetails = new RequestDetails();
422 requestDetails.setSubscriberInfo(serviceOrderInfo.getSubscriberInfo());
423 Map<String, Object> sdcInfos =
424 serviceOrderInfo.getServiceOrderItemInfos().get(orderItem.getId()).getCatalogResponse();
425 ModelInfo modelInfo = new ModelInfo();
426 modelInfo.setModelType("service");
427 modelInfo.setModelInvariantId((String) sdcInfos.get("invariantUUID"));
428 modelInfo.setModelNameVersionId(orderItem.getService().getServiceSpecification().getId());
429 modelInfo.setModelVersionId(orderItem.getService().getServiceSpecification().getId());
430 modelInfo.setModelName((String) sdcInfos.get("name"));
431 modelInfo.setModelVersion((String) sdcInfos.get("version"));
432 requestDetails.setModelInfo(modelInfo);
434 RequestInfo requestInfo = new RequestInfo();
435 requestInfo.setInstanceName(orderItem.getService().getName());
436 requestInfo.setSource("VID");
437 requestInfo.setSuppressRollback(false);
438 requestInfo.setRequestorId("NBI");
439 requestDetails.setRequestInfo(requestInfo);
441 RequestParameters requestParameters = new RequestParameters();
443 String serviceTypeFromJson = orderItem.getService().getServicetype();
444 requestParameters.setSubscriptionServiceType(serviceTypeFromJson != null ? serviceTypeFromJson:(String) sdcInfos.get("name"));
445 requestParameters.setUserParams(
446 retrieveUserParamsFromServiceCharacteristics(orderItem.getService().getServiceCharacteristic()));
447 requestParameters.setaLaCarte(true);
448 requestParameters.setTestApi("GR_API");
449 requestDetails.setRequestParameters(requestParameters);
451 CloudConfiguration cloudConfiguration = new CloudConfiguration(lcpCloudRegionId, tenantId, cloudOwner);
452 requestDetails.setCloudConfiguration(cloudConfiguration);
454 OwningEntity owningEntity = new OwningEntity();
455 owningEntity.setOwningEntityId(serviceOrderInfo.getOwningEntityId());
456 owningEntity.setOwningEntityName(soOwningEntityName);
457 requestDetails.setOwningEntity(owningEntity);
459 Project project = new Project();
460 project.setProjectName(soProjectName);
462 requestDetails.setProject(project);
464 return requestDetails;
468 * Build E2E SO CREATE request from the ServiceOrder and catalog informations from SDC
470 * @param serviceOrderItem
471 * @param serviceOrder
475 // ServiceOrderItem serviceOrderItem --> orderItem?
476 private ServiceModel buildE2ESoRequest(ServiceOrderItem serviceOrderItem, Map<String, Object> sdcInfos,
477 SubscriberInfo subscriberInfo, ServiceOrder serviceOrder) {
479 subscriberInfo.getGlobalSubscriberId();
480 ServiceModel service = new ServiceModel();
481 service.setName(serviceOrderItem.getService().getName());
482 service.setDescription(serviceOrder.getDescription());
483 service.setServiceUuid(serviceOrderItem.getService().getServiceSpecification().getId());
484 service.setServiceInvariantUuid((String) sdcInfos.get("invariantUUID"));
485 service.setGlobalSubscriberId(subscriberInfo.getGlobalSubscriberId());
486 String serviceTypeFromJson = serviceOrderItem.getService().getServicetype();
487 service.setServiceType(serviceTypeFromJson != null ? serviceTypeFromJson : (String) sdcInfos.get("name"));
488 ParametersModel parameters = new ParametersModel();
489 ArrayList<ResourceModel> resources = new ArrayList();
491 ArrayList<Object> resourceObjects = (ArrayList<Object>) sdcInfos.get("resourceSpecification");
493 for (int i = 0; i < resourceObjects.size(); i++) {
495 ResourceModel resourceModel = new ResourceModel((Map<String, Object>) resourceObjects.get(i));
496 ParametersModel resourceParameters = new ParametersModel();
497 resourceModel.setParameters(resourceParameters);
498 resources.add(resourceModel);
501 parameters.setResources(resources);
502 List<UserParams> userParams =
503 retrieveUserParamsFromServiceCharacteristics(serviceOrderItem.getService().getServiceCharacteristic());
505 // If there are ServiceCharacteristics add them to requestInputs
506 if (!userParams.isEmpty()) {
507 Map<String, String> requestInputs = new HashMap<String, String>();
508 for (int i = 0; i < userParams.size(); i++) {
509 requestInputs.put(userParams.get(i).getName(), (String) userParams.get(i).getValue());
512 parameters.setRequestInputs(requestInputs);
514 service.setParameters(parameters);
520 * Build a list of UserParams for the SO request by browsing a list of ServiceCharacteristics from
523 private List<UserParams> retrieveUserParamsFromServiceCharacteristics(List<ServiceCharacteristic> characteristics) {
524 List<UserParams> userParams = new ArrayList<>();
525 UserParams userParam;
527 if (!CollectionUtils.isEmpty(characteristics)) {
528 for (ServiceCharacteristic characteristic : characteristics) {
529 // Check is the characteristic is of type object, if proceed as before to allow for
530 // backwards compatibility.
531 if (characteristic.getValueType() != null && !characteristic.getValueType().isEmpty()
532 && characteristic.getValueType().equals("object")) {
533 ObjectMapper mapper = new ObjectMapper();
534 JsonNode jsonNode = null;
536 jsonNode = mapper.readTree(characteristic.getValue().getServiceCharacteristicValue());
537 } catch (IOException e) {
538 LOGGER.error("Failed to read object json {} , exception is ",
539 characteristic.getValue().getServiceCharacteristicValue(), e.getMessage());
541 ObjectNode objectNode = (ObjectNode) jsonNode;
542 Iterator<Map.Entry<String, JsonNode>> iter = objectNode.fields();
543 while (iter.hasNext()) {
544 Map.Entry<String, JsonNode> entry = iter.next();
545 if (!entry.getValue().isArray()) {
546 userParam = new UserParams(entry.getKey(), entry.getValue().asText());
548 ArrayNode arrayNode = (ArrayNode) entry.getValue();
549 String arrayNodeValueString = arrayNode.toString();
550 userParam = new UserParams(entry.getKey(), arrayNodeValueString);
552 userParams.add(userParam);
555 // as UserParams for all other types, boolean, string, integer etc
557 userParam = new UserParams(characteristic.getName(),
558 characteristic.getValue().getServiceCharacteristicValue());
559 userParams.add(userParam);