Upgrade sonar plugin
[vid.git] / vid-app-common / src / main / java / org / openecomp / vid / mso / MsoBusinessLogic.java
1 package org.openecomp.vid.mso;
2
3 import com.fasterxml.jackson.databind.DeserializationFeature;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
6 import org.openecomp.portalsdk.core.util.SystemProperties;
7 import org.openecomp.vid.controller.MsoController;
8 import org.openecomp.vid.mso.rest.*;
9
10 import java.text.DateFormat;
11 import java.text.SimpleDateFormat;
12 import java.util.ArrayList;
13 import java.util.Date;
14 import java.util.List;
15
16 import static org.openecomp.vid.controller.MsoController.SVC_INSTANCE_ID;
17 import static org.openecomp.vid.controller.MsoController.REQUEST_TYPE;
18 import static org.openecomp.vid.controller.MsoController.VNF_INSTANCE_ID;
19
20 /**
21  * Created by pickjonathan on 19/06/2017.
22  */
23 public class MsoBusinessLogic {
24
25     /**
26      * The Mso REST client
27      * This should be replaced with mso client factory.
28      */
29     private MsoInterface msoClientInterface;
30
31     /**
32      * The logger.
33      */
34     EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoController.class);
35
36     /**
37      * The Constant dateFormat.
38      */
39     final static DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
40
41     public MsoBusinessLogic() {
42         msoClientInterface = MsoRestInterfaceFactory.getInstance();
43     }
44
45     // this function should get params from tosca and send them to instance at mso, then return success response.
46     public MsoResponseWrapper createSvcInstance(RequestDetails msoRequest) throws Exception {
47         String methodName = "createSvcInstance ";
48         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
49
50         String endpoint;
51         try {
52             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
53         } catch (Exception exception) {
54             throw exception;
55         }
56
57         return msoClientInterface.createSvcInstance(msoRequest, endpoint);
58     }
59
60     public MsoResponseWrapper createVnf(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
61         String methodName = "createVnf";
62         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
63
64         String endpoint;
65         try {
66             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
67         } catch (Exception exception) {
68             throw exception;
69         }
70
71         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
72         return msoClientInterface.createVnf(requestDetails, vnf_endpoint);
73     }
74
75     public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception {
76         String methodName = "createNwInstance";
77         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
78
79         String endpoint;
80         try {
81             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
82         } catch (Exception exception) {
83             throw exception;
84         }
85
86         String nw_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
87         return msoClientInterface.createNwInstance(requestDetails, nw_endpoint);
88     }
89
90     public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
91         String methodName = "createVolumeGroupInstance";
92         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
93
94         String endpoint;
95         try {
96             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
97         } catch (Exception exception) {
98             throw exception;
99         }
100
101         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
102         vnf_endpoint = vnf_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
103
104         return msoClientInterface.createVolumeGroupInstance(requestDetails, vnf_endpoint);
105     }
106
107     public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception{
108         String methodName = "createVfModuleInstance";
109         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
110
111         String endpoint;
112         try {
113             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
114         } catch (Exception exception) {
115             throw exception;
116         }
117
118         String partial_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
119         String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
120
121         return msoClientInterface.createVfModuleInstance(requestDetails, vf_module_endpoint);
122     }
123
124     public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String serviceInstanceId) throws Exception{
125         String methodName = "deleteSvcInstance";
126         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
127
128         String endpoint;
129         try {
130             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
131         } catch (Exception exception) {
132             throw exception;
133         }
134
135         String svc_endpoint = endpoint + "/" + serviceInstanceId;
136
137         return msoClientInterface.deleteSvcInstance(requestDetails, svc_endpoint);
138     }
139
140     public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception{
141         String methodName = "deleteVnf";
142         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
143
144         String endpoint;
145         try {
146             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
147         } catch (Exception exception) {
148             throw exception;
149         }
150         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
151         vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
152
153         return msoClientInterface.deleteVnf(requestDetails, vnf_endpoint);
154     }
155
156     public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String vfModuleId) throws Exception{
157         String methodName = "deleteVfModule";
158         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
159
160         String endpoint;
161         try {
162             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
163         } catch (Exception exception) {
164             throw exception;
165         }
166
167         String vf__modules_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId).replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
168
169         String delete_vf_endpoint = vf__modules_endpoint + '/' + vfModuleId;
170
171         return msoClientInterface.deleteVfModule(requestDetails, delete_vf_endpoint);
172     }
173
174     public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String volumeGroupId)throws Exception{
175         String methodName = "deleteVolumeGroupInstance";
176         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
177
178         String endpoint;
179         try {
180             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
181         } catch (Exception exception) {
182             throw exception;
183         }
184
185         String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
186         String vnf_endpoint = svc_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
187         String delete_volume_group_endpoint = vnf_endpoint + "/" + volumeGroupId;
188
189         return msoClientInterface.deleteVolumeGroupInstance(requestDetails, delete_volume_group_endpoint);
190     }
191
192     public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String serviceInstanceId, String networkInstanceId) throws Exception{
193         String methodName = "deleteNwInstance";
194         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
195
196         String endpoint;
197         try {
198             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
199         } catch (Exception exception) {
200             throw exception;
201         }
202
203         String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
204         String delete_nw_endpoint = svc_endpoint + "/" + networkInstanceId;
205
206         return msoClientInterface.deleteNwInstance(requestDetails, delete_nw_endpoint);
207     }
208
209     public MsoResponseWrapper getOrchestrationRequest(String requestId)throws Exception{
210         String methodName = "getOrchestrationRequest";
211         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
212         MsoResponseWrapper w = null;
213         try {
214             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ);
215             String path = p + "/" + requestId;
216
217             RestObject<String> restObjStr = new RestObject<String>();
218             String str = new String();
219             restObjStr.set(str);
220
221             msoClientInterface.getOrchestrationRequest(str, "", path, restObjStr);
222
223             return MsoUtil.wrapResponse(restObjStr);
224
225         } catch (Exception e) {
226             logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
227             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
228             throw e;
229         }
230     }
231
232     public MsoResponseWrapper getOrchestrationRequests(String filterString)throws Exception{
233         String methodName = "getOrchestrationRequest";
234         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
235         MsoResponseWrapper w = null;
236         try {
237             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
238             String path = p + filterString;
239
240             RestObject<String> restObjStr = new RestObject<String>();
241             String str = new String();
242             restObjStr.set(str);
243
244             msoClientInterface.getOrchestrationRequest(str, "", path, restObjStr);
245
246             return MsoUtil.wrapResponse(restObjStr);
247
248         } catch (Exception e) {
249             logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
250             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
251             throw e;
252         }
253     }
254
255     public List<Request> getOrchestrationRequestsForDashboard()throws Exception{
256         String methodName = "getOrchestrationRequestsForDashboard";
257         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
258
259         try {
260             String path = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
261             path += "filter=modelType:EQUALS:vnf";
262             RestObject<String> restObjStr = new RestObject<String>();
263             String str = new String();
264             restObjStr.set(str);
265
266             MsoResponseWrapper msoResponseWrapper =  msoClientInterface.getOrchestrationRequestsForDashboard(str, "", path, restObjStr);
267             List<RequestWrapper> allOrchestrationRequests = deserializeOrchestrationRequestsJson(msoResponseWrapper.getEntity());
268
269             List<Request> filteredOrchestrationRequests = new ArrayList<>();
270             for (RequestWrapper currentRequest:allOrchestrationRequests){
271                 if ((currentRequest.getRequest() != null) && (currentRequest.getRequest().getRequestScope() == Request.RequestScope.VNF) && ((currentRequest.getRequest().getRequestType() ==
272                         Request.RequestType.REPLACE_INSTANCE)||(currentRequest.getRequest().getRequestType() ==
273                         Request.RequestType.UPDATE_INSTANCE) )) {
274                     filteredOrchestrationRequests.add(currentRequest.getRequest());
275                 }
276             }
277             return filteredOrchestrationRequests;
278         } catch (Exception e) {
279             logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
280             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
281             throw e;
282         }
283
284     }
285
286     private List<RequestWrapper> deserializeOrchestrationRequestsJson(String orchestrationRequestsJson) throws Exception {
287         String methodName = "deserializeOrchestrationRequestsJson";
288         logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start");
289
290         ObjectMapper mapper = new ObjectMapper();
291         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
292         mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
293         RequestList requestList = mapper.readValue(orchestrationRequestsJson , RequestList.class);
294         return requestList.getRequestList();
295     }
296
297
298     public List<Task> getManualTasksByRequestId(String originalRequestId)throws Exception{
299         String methodName = "getManualTasksByRequestId";
300         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
301
302         try {
303             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
304             String path = p + "?originalRequestId=" + originalRequestId;
305
306             RestObject<String> restObjStr = new RestObject<String>();
307             String str = new String();
308             restObjStr.set(str);
309
310             MsoResponseWrapper msoResponseWrapper = msoClientInterface.getManualTasksByRequestId(str, "", path, restObjStr);
311             return deserializeManualTasksJson(msoResponseWrapper.getEntity());
312
313         } catch (Exception e) {
314             logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
315             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
316             throw e;
317         }
318     }
319
320     private List<Task> deserializeManualTasksJson(String manualTasksJson) throws Exception{
321         String methodName = "deserializeManualTasksJson";
322         logger.debug(dateFormat.format(new Date()) + "<== " + methodName + " start");
323
324         ObjectMapper mapper = new ObjectMapper();
325         TaskList taskList = mapper.readValue(manualTasksJson , TaskList.class);
326         return taskList.getTaskList();
327     }
328
329
330     public MsoResponseWrapper completeManualTask(RequestDetails requestDetails , String taskId)throws Exception{
331         String methodName = "completeManualTask";
332         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
333         MsoResponseWrapper w = null;
334         try {
335             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
336             String path = p + "/" + taskId + "/complete";
337
338             RestObject<String> restObjStr = new RestObject<String>();
339             String str = new String();
340             restObjStr.set(str);
341
342             msoClientInterface.completeManualTask(requestDetails , str, "", path, restObjStr);
343
344             return MsoUtil.wrapResponse(restObjStr);
345
346         } catch (Exception e) {
347             logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
348             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
349             throw e;
350         }
351     }
352
353     public MsoResponseWrapper activateServiceInstance(RequestDetails requestDetails , String serviceInstanceId)throws Exception{
354         String methodName = "activateServiceInstance";
355         logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
356         try {
357             String path ="/" + serviceInstanceId  + "/activate";
358
359             RestObject<String> restObjStr = new RestObject<>();
360             String str = "";
361             restObjStr.set(str);
362
363             msoClientInterface.activateServiceInstance(requestDetails , str, "", path, restObjStr);
364
365             return MsoUtil.wrapResponse(restObjStr);
366
367         } catch (Exception e) {
368             logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
369             logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
370             throw e;
371         }
372     }
373
374
375
376
377     private String validateEndpointPath(String endpointEnvVariable) throws Exception {
378         String endpoint = SystemProperties.getProperty(endpointEnvVariable);
379         if (endpoint == null || endpoint.isEmpty()) {
380             throw new Exception(endpointEnvVariable + " env variable is not defined");
381         }
382         return endpoint;
383     }
384
385         public MsoResponseWrapper updateVnf(org.openecomp.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
386            String methodName = "updateVnf";
387        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
388        
389        String endpoint;
390         try {
391             endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
392         } catch (Exception exception) {
393             throw exception;
394         }
395         String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
396         vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
397         return msoClientInterface.updateVnf(requestDetails, vnf_endpoint);              
398         }
399         
400         public MsoResponseWrapper replaceVnf(org.openecomp.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) throws Exception {
401                 String methodName = "replaceVnf";
402                 logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + " start");
403                 
404                 String endpoint;
405                 try {
406                         endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
407                 } catch (Exception exception) {
408                         throw exception;
409                 }
410                 String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
411                 vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
412                 vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, "replace"); //No Constants file, TODO: once you create - add it.
413                 return msoClientInterface.replaceVnf(requestDetails, vnf_endpoint);             
414         }
415
416 }