2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.client.adapter.vnf.mapper;
24 import org.onap.sdnc.northbound.client.model.GenericResourceApiParamParam;
25 import org.onap.sdnc.northbound.client.model.GenericResourceApiVfmoduletopologyVfModuleTopology;
26 import com.fasterxml.jackson.core.JsonParseException;
27 import com.fasterxml.jackson.databind.JsonMappingException;
28 import com.fasterxml.jackson.databind.ObjectMapper;
30 import org.onap.sdnc.northbound.client.model.GenericResourceApiParam;
31 import org.onap.so.adapters.vnfrest.CreateVolumeGroupRequest;
32 import org.onap.so.adapters.vnfrest.DeleteVolumeGroupRequest;
33 import org.onap.so.bpmn.core.UrnPropertiesReader;
34 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
35 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
36 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
37 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
38 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
39 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
40 import org.onap.so.entity.MsoRequest;
41 import org.springframework.stereotype.Component;
42 import org.springframework.web.util.UriUtils;
44 import java.io.IOException;
45 import java.io.UnsupportedEncodingException;
46 import java.util.HashMap;
47 import java.util.List;
49 import java.util.UUID;
52 public class VnfAdapterObjectMapper {
53 private ObjectMapper mapper = new ObjectMapper();
55 public CreateVolumeGroupRequest createVolumeGroupRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, OrchestrationContext orchestrationContext, ServiceInstance serviceInstance, GenericVnf genericVnf, VolumeGroup volumeGroup, String sdncVfModuleQueryResponse) throws JsonParseException, JsonMappingException, IOException {
56 CreateVolumeGroupRequest createVolumeGroupRequest = new CreateVolumeGroupRequest();
58 createVolumeGroupRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
59 createVolumeGroupRequest.setTenantId(cloudRegion.getTenantId());
60 createVolumeGroupRequest.setVolumeGroupId(volumeGroup.getVolumeGroupId());
61 createVolumeGroupRequest.setVolumeGroupName(volumeGroup.getVolumeGroupName());
62 createVolumeGroupRequest.setVnfType(genericVnf.getVnfType());
63 createVolumeGroupRequest.setVnfVersion(serviceInstance.getModelInfoServiceInstance().getModelVersion());
64 createVolumeGroupRequest.setVfModuleType(volumeGroup.getModelInfoVfModule().getModelName());
65 createVolumeGroupRequest.setModelCustomizationUuid(volumeGroup.getModelInfoVfModule().getModelCustomizationUUID());
66 createVolumeGroupRequest.setVolumeGroupParams(createVolumeGroupParams(requestContext,genericVnf, volumeGroup, sdncVfModuleQueryResponse));
68 createVolumeGroupRequest.setSkipAAI(true);
69 createVolumeGroupRequest.setSuppressBackout(orchestrationContext.getIsRollbackEnabled());
70 createVolumeGroupRequest.setFailIfExists(true);
72 createVolumeGroupRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
74 String messageId = getRandomUuid();
75 createVolumeGroupRequest.setMessageId(messageId);
76 createVolumeGroupRequest.setNotificationUrl(createCallbackUrl("VNFAResponse", messageId));
78 return createVolumeGroupRequest;
81 public DeleteVolumeGroupRequest deleteVolumeGroupRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, ServiceInstance serviceInstance, VolumeGroup volumeGroup) throws IOException {
82 DeleteVolumeGroupRequest deleteVolumeGroupRequest = new DeleteVolumeGroupRequest();
84 deleteVolumeGroupRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
85 deleteVolumeGroupRequest.setTenantId(cloudRegion.getTenantId());
86 deleteVolumeGroupRequest.setVolumeGroupId(volumeGroup.getVolumeGroupId());
87 deleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getHeatStackId());
89 deleteVolumeGroupRequest.setSkipAAI(true);
90 deleteVolumeGroupRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
92 String messageId = getRandomUuid();
93 deleteVolumeGroupRequest.setMessageId(messageId);
94 deleteVolumeGroupRequest.setNotificationUrl(createCallbackUrl("VNFAResponse", messageId));
96 return deleteVolumeGroupRequest;
99 public Map<String, String> createVolumeGroupParams(RequestContext requestContext,GenericVnf genericVnf, VolumeGroup volumeGroup, String sdncVfModuleQueryResponse) throws JsonParseException, JsonMappingException, IOException {
100 Map<String, String> volumeGroupParams = new HashMap<>();
101 final String USER_PARAM_NAME_KEY = "name";
102 final String USER_PARAM_VALUE_KEY = "value";
103 // sdncVfModuleQueryResponse will not be available in aLaCarte case
104 if (sdncVfModuleQueryResponse != null) {
105 GenericResourceApiVfmoduletopologyVfModuleTopology vfModuleTopology = mapper.readValue(sdncVfModuleQueryResponse, GenericResourceApiVfmoduletopologyVfModuleTopology.class);
106 buildParamsMapFromSdncParams(volumeGroupParams, vfModuleTopology.getVfModuleParameters());
109 if(null != requestContext.getRequestParameters() && null != requestContext.getRequestParameters().getUserParams()) {
110 List<Map<String, Object>> userParams = requestContext.getRequestParameters().getUserParams();
111 for (Map<String, Object> userParamsMap : userParams) {
112 if ( userParamsMap.containsKey(USER_PARAM_NAME_KEY) && (userParamsMap.get(USER_PARAM_NAME_KEY) instanceof String)
113 && userParamsMap.containsKey(USER_PARAM_VALUE_KEY) && (userParamsMap.get(USER_PARAM_VALUE_KEY) instanceof String)) {
114 volumeGroupParams.put((String) userParamsMap.get(USER_PARAM_NAME_KEY), (String) userParamsMap.get(USER_PARAM_VALUE_KEY));
118 volumeGroupParams.put("vnf_id", genericVnf.getVnfId());
119 volumeGroupParams.put("vnf_name", genericVnf.getVnfName());
120 volumeGroupParams.put("vf_module_id", volumeGroup.getVolumeGroupId());
121 volumeGroupParams.put("vf_module_name", volumeGroup.getVolumeGroupName());
123 return volumeGroupParams;
126 public MsoRequest createMsoRequest(RequestContext requestContext, ServiceInstance serviceInstance) {
127 MsoRequest msoRequest = new MsoRequest();
129 msoRequest.setRequestId(requestContext.getMsoRequestId());
130 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
135 private void buildParamsMapFromSdncParams(Map<String,String> volumeGroupParams, GenericResourceApiParam sdncParameters) {
136 if (sdncParameters != null) {
137 List<GenericResourceApiParamParam> sdncParametersList = sdncParameters.getParam();
138 if (sdncParametersList != null) {
139 for (int i = 0; i < sdncParametersList.size(); i++) {
140 GenericResourceApiParamParam param = sdncParametersList.get(i);
141 String parameterName = param.getName();
142 String parameterValue = param.getValue();
143 volumeGroupParams.put(parameterName, parameterValue);
149 protected String getRandomUuid() {
150 return UUID.randomUUID().toString();
153 protected String createCallbackUrl(String messageType, String correlator) throws UnsupportedEncodingException {
154 String endpoint = getProperty("mso.workflow.message.endpoint");
156 while (endpoint.endsWith("/")) {
157 endpoint = endpoint.substring(0, endpoint.length()-1);
160 return endpoint + "/" + UriUtils.encodePathSegment(messageType, "UTF-8") + "/" + UriUtils.encodePathSegment(correlator, "UTF-8");
163 protected String getProperty(String key) {
164 return UrnPropertiesReader.getVariable(key);