Containerization feature of SO
[so.git] / bpmn / so-bpmn-tasks / src / main / java / org / onap / so / client / adapter / vnf / mapper / VnfAdapterObjectMapper.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.onap.so.client.adapter.vnf.mapper;
22
23
24 import org.onap.sdnc.apps.client.model.GenericResourceApiParamParam;
25 import org.onap.sdnc.apps.client.model.GenericResourceApiVfmoduletopologyVfModuleTopology;
26 import com.fasterxml.jackson.core.JsonParseException;
27 import com.fasterxml.jackson.databind.JsonMappingException;
28 import com.fasterxml.jackson.databind.ObjectMapper;
29
30 import org.onap.sdnc.apps.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;
43
44 import java.io.IOException;
45 import java.io.UnsupportedEncodingException;
46 import java.util.HashMap;
47 import java.util.List;
48 import java.util.Map;
49 import java.util.UUID;
50
51 @Component
52 public class VnfAdapterObjectMapper {
53         private ObjectMapper mapper = new ObjectMapper();
54
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();
57                 
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));
67                 
68                 createVolumeGroupRequest.setSkipAAI(true);
69                 createVolumeGroupRequest.setSuppressBackout(orchestrationContext.getIsRollbackEnabled());
70                 createVolumeGroupRequest.setFailIfExists(true);
71                 
72                 createVolumeGroupRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
73                 
74                 String messageId = getRandomUuid();
75                 createVolumeGroupRequest.setMessageId(messageId);
76                 createVolumeGroupRequest.setNotificationUrl(createCallbackUrl("VNFAResponse", messageId));
77                 
78                 return createVolumeGroupRequest;
79         }
80         
81         public DeleteVolumeGroupRequest deleteVolumeGroupRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, ServiceInstance serviceInstance, VolumeGroup volumeGroup) throws IOException {
82                 DeleteVolumeGroupRequest deleteVolumeGroupRequest = new DeleteVolumeGroupRequest();
83                 
84                 deleteVolumeGroupRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
85                 deleteVolumeGroupRequest.setTenantId(cloudRegion.getTenantId());
86                 deleteVolumeGroupRequest.setVolumeGroupId(volumeGroup.getVolumeGroupId());
87                 deleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getHeatStackId());
88                 
89                 deleteVolumeGroupRequest.setSkipAAI(true);
90                 deleteVolumeGroupRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
91                 
92                 String messageId = getRandomUuid();
93                 deleteVolumeGroupRequest.setMessageId(messageId);
94                 deleteVolumeGroupRequest.setNotificationUrl(createCallbackUrl("VNFAResponse", messageId));
95                 
96                 return deleteVolumeGroupRequest;
97         }
98         
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());
107                 }
108
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));
115                 }
116             }
117         }
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());
122                 
123                 return volumeGroupParams;
124         }
125         
126         public MsoRequest createMsoRequest(RequestContext requestContext, ServiceInstance serviceInstance) {
127                 MsoRequest msoRequest = new MsoRequest();
128                 
129                 msoRequest.setRequestId(requestContext.getMsoRequestId());
130                 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
131                 
132                 return msoRequest;
133         }
134         
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);
144                                 }                               
145                         }
146                 }                                               
147         }
148         
149         protected String getRandomUuid() {
150                 return UUID.randomUUID().toString();
151         }
152         
153         protected String createCallbackUrl(String messageType, String correlator) throws UnsupportedEncodingException {
154                 String endpoint = getProperty("mso.workflow.message.endpoint");
155
156                 while (endpoint.endsWith("/")) {
157                         endpoint = endpoint.substring(0, endpoint.length()-1);
158                 }
159
160                 return endpoint + "/" + UriUtils.encodePathSegment(messageType, "UTF-8") + "/" + UriUtils.encodePathSegment(correlator, "UTF-8");
161         }
162         
163         protected String getProperty(String key) {
164                 return UrnPropertiesReader.getVariable(key);
165         }
166
167 }