vnf spin up gr api vnf s base module fails
[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 import java.io.IOException;
24 import java.io.UnsupportedEncodingException;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.UUID;
29
30 import javax.annotation.PostConstruct;
31
32 import org.apache.commons.lang3.StringUtils;
33 import org.onap.sdnc.northbound.client.model.GenericResourceApiParam;
34 import org.onap.sdnc.northbound.client.model.GenericResourceApiParamParam;
35 import org.onap.sdnc.northbound.client.model.GenericResourceApiVfModuleTopology;
36 import org.onap.sdnc.northbound.client.model.GenericResourceApiVfmoduletopologyVfModuleTopology;
37 import org.onap.so.adapters.vnfrest.CreateVolumeGroupRequest;
38 import org.onap.so.adapters.vnfrest.DeleteVolumeGroupRequest;
39 import org.onap.so.bpmn.core.UrnPropertiesReader;
40 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
41 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
42 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
43 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
44 import org.onap.so.bpmn.servicedecomposition.generalobjects.OrchestrationContext;
45 import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext;
46 import org.onap.so.entity.MsoRequest;
47 import org.springframework.stereotype.Component;
48 import org.springframework.web.util.UriUtils;
49
50 import com.fasterxml.jackson.core.JsonParseException;
51 import com.fasterxml.jackson.databind.DeserializationFeature;
52 import com.fasterxml.jackson.databind.JsonMappingException;
53 import com.fasterxml.jackson.databind.ObjectMapper;
54
55 @Component
56 public class VnfAdapterObjectMapper {
57         private ObjectMapper mapper = new ObjectMapper();
58         
59         @PostConstruct
60         public void init () {
61                 mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
62         }
63
64         public CreateVolumeGroupRequest createVolumeGroupRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, OrchestrationContext orchestrationContext, ServiceInstance serviceInstance, GenericVnf genericVnf, VolumeGroup volumeGroup, String sdncVfModuleQueryResponse) throws JsonParseException, JsonMappingException, IOException {
65                 CreateVolumeGroupRequest createVolumeGroupRequest = new CreateVolumeGroupRequest();
66                 
67                 createVolumeGroupRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
68                 createVolumeGroupRequest.setTenantId(cloudRegion.getTenantId());
69                 createVolumeGroupRequest.setVolumeGroupId(volumeGroup.getVolumeGroupId());
70                 createVolumeGroupRequest.setVolumeGroupName(volumeGroup.getVolumeGroupName());
71                 createVolumeGroupRequest.setVnfType(genericVnf.getVnfType());
72                 createVolumeGroupRequest.setVnfVersion(serviceInstance.getModelInfoServiceInstance().getModelVersion());
73                 createVolumeGroupRequest.setVfModuleType(volumeGroup.getModelInfoVfModule().getModelName());
74                 createVolumeGroupRequest.setModelCustomizationUuid(volumeGroup.getModelInfoVfModule().getModelCustomizationUUID());
75                 createVolumeGroupRequest.setVolumeGroupParams(createVolumeGroupParams(requestContext,genericVnf, volumeGroup, sdncVfModuleQueryResponse));
76                 
77                 createVolumeGroupRequest.setSkipAAI(true);
78                 createVolumeGroupRequest.setSuppressBackout(Boolean.TRUE.equals(orchestrationContext.getIsRollbackEnabled()));
79                 createVolumeGroupRequest.setFailIfExists(true);
80                 
81                 createVolumeGroupRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
82                 
83                 String messageId = getRandomUuid();
84                 createVolumeGroupRequest.setMessageId(messageId);
85                 createVolumeGroupRequest.setNotificationUrl(createCallbackUrl("VNFAResponse", messageId));
86                 
87                 return createVolumeGroupRequest;
88         }
89         
90         public DeleteVolumeGroupRequest deleteVolumeGroupRequestMapper(RequestContext requestContext, CloudRegion cloudRegion, ServiceInstance serviceInstance, VolumeGroup volumeGroup) throws IOException {
91                 DeleteVolumeGroupRequest deleteVolumeGroupRequest = new DeleteVolumeGroupRequest();
92                 
93                 deleteVolumeGroupRequest.setCloudSiteId(cloudRegion.getLcpCloudRegionId());
94                 deleteVolumeGroupRequest.setTenantId(cloudRegion.getTenantId());
95                 deleteVolumeGroupRequest.setVolumeGroupId(volumeGroup.getVolumeGroupId());
96                 if (!StringUtils.isEmpty(volumeGroup.getHeatStackId())){
97                         deleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getHeatStackId());
98                 } else
99                 {
100                         deleteVolumeGroupRequest.setVolumeGroupStackId(volumeGroup.getVolumeGroupName());
101                 }
102                 
103                 deleteVolumeGroupRequest.setSkipAAI(true);
104                 deleteVolumeGroupRequest.setMsoRequest(createMsoRequest(requestContext, serviceInstance));
105                 
106                 String messageId = getRandomUuid();
107                 deleteVolumeGroupRequest.setMessageId(messageId);
108                 deleteVolumeGroupRequest.setNotificationUrl(createCallbackUrl("VNFAResponse", messageId));
109                 
110                 return deleteVolumeGroupRequest;
111         }
112         
113         public Map<String, Object> createVolumeGroupParams(RequestContext requestContext,GenericVnf genericVnf, VolumeGroup volumeGroup, String sdncVfModuleQueryResponse) throws JsonParseException, JsonMappingException, IOException {
114                 Map<String, Object> volumeGroupParams = new HashMap<>();
115                 final String USER_PARAM_NAME_KEY = "name";
116         final String USER_PARAM_VALUE_KEY = "value";
117                 // sdncVfModuleQueryResponse will not be available in aLaCarte case
118                 if (sdncVfModuleQueryResponse != null) {                
119                         GenericResourceApiVfModuleTopology vfModuleTop = mapper.readValue(sdncVfModuleQueryResponse, GenericResourceApiVfModuleTopology.class);
120                         GenericResourceApiVfmoduletopologyVfModuleTopology vfModuleTopology  = vfModuleTop.getVfModuleTopology();
121                         buildParamsMapFromSdncParams(volumeGroupParams, vfModuleTopology.getVfModuleParameters());
122                 }
123
124         if(null != requestContext.getRequestParameters() && null != requestContext.getRequestParameters().getUserParams()) {
125             List<Map<String, Object>> userParams = requestContext.getRequestParameters().getUserParams();
126             for (Map<String, Object> userParamsMap : userParams) {
127                 if ( userParamsMap.containsKey(USER_PARAM_NAME_KEY) && (userParamsMap.get(USER_PARAM_NAME_KEY) instanceof String)
128                         && userParamsMap.containsKey(USER_PARAM_VALUE_KEY) && (userParamsMap.get(USER_PARAM_VALUE_KEY) instanceof String)) {
129                     volumeGroupParams.put((String) userParamsMap.get(USER_PARAM_NAME_KEY), (String) userParamsMap.get(USER_PARAM_VALUE_KEY));
130                 }
131             }
132         }
133                 volumeGroupParams.put("vnf_id", genericVnf.getVnfId());
134                 volumeGroupParams.put("vnf_name", genericVnf.getVnfName());
135                 volumeGroupParams.put("vf_module_id", volumeGroup.getVolumeGroupId());
136                 volumeGroupParams.put("vf_module_name", volumeGroup.getVolumeGroupName());
137                 
138                 return volumeGroupParams;
139         }
140         
141         public MsoRequest createMsoRequest(RequestContext requestContext, ServiceInstance serviceInstance) {
142                 MsoRequest msoRequest = new MsoRequest();
143                 
144                 msoRequest.setRequestId(requestContext.getMsoRequestId());
145                 msoRequest.setServiceInstanceId(serviceInstance.getServiceInstanceId());
146                 
147                 return msoRequest;
148         }
149         
150         private void buildParamsMapFromSdncParams(Map<String,Object> volumeGroupParams, GenericResourceApiParam sdncParameters) {               
151                 if (sdncParameters != null) {
152                         List<GenericResourceApiParamParam> sdncParametersList = sdncParameters.getParam();
153                         if (sdncParametersList != null) {
154                                 for (int i = 0; i < sdncParametersList.size(); i++) {
155                                         GenericResourceApiParamParam param = sdncParametersList.get(i);
156                                         String parameterName = param.getName();
157                                         String parameterValue = param.getValue();
158                                         volumeGroupParams.put(parameterName, parameterValue);
159                                 }                               
160                         }
161                 }                                               
162         }
163         
164         protected String getRandomUuid() {
165                 return UUID.randomUUID().toString();
166         }
167         
168         protected String createCallbackUrl(String messageType, String correlator) throws UnsupportedEncodingException {
169                 String endpoint = getProperty("mso.workflow.message.endpoint");
170
171                 while (endpoint.endsWith("/")) {
172                         endpoint = endpoint.substring(0, endpoint.length()-1);
173                 }
174
175                 return endpoint + "/" + UriUtils.encodePathSegment(messageType, "UTF-8") + "/" + UriUtils.encodePathSegment(correlator, "UTF-8");
176         }
177         
178         protected String getProperty(String key) {
179                 return UrnPropertiesReader.getVariable(key);
180         }
181
182 }