df233d5841a0e711f757226e666aa6d8de3a87d8
[externalapi/nbi.git] / src / main / java / org / onap / nbi / apis / serviceorder / workflow / SOGetStatusManager.java
1 /**
2  * Copyright (c) 2018 Orange
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5  * the License. You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11  * specific language governing permissions and limitations under the License.
12  */
13 package org.onap.nbi.apis.serviceorder.workflow;
14
15 import org.onap.nbi.apis.serviceorder.SoClient;
16 import org.onap.nbi.apis.serviceorder.model.ActionType;
17 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
18 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
19 import org.onap.nbi.apis.serviceorder.model.StateType;
20 import org.onap.nbi.apis.serviceorder.model.consumer.GetE2ERequestStatusResponse;
21 import org.onap.nbi.apis.serviceorder.model.consumer.GetRequestStatusResponse;
22 import org.onap.nbi.apis.serviceorder.model.consumer.RequestState;
23 import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26 import org.springframework.beans.factory.annotation.Autowired;
27 import org.springframework.stereotype.Service;
28
29 @Service
30 public class SOGetStatusManager {
31
32     private static final Logger LOGGER = LoggerFactory.getLogger(SOGetStatusManager.class);
33
34     @Autowired
35     private ServiceOrderService serviceOrderService;
36
37     @Autowired
38     private SoClient soClient;
39
40
41
42     public void pollRequestStatus(ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem, boolean e2eService) {
43         if (e2eService) {
44             pollE2ESoRequestStatus(serviceOrder, serviceOrderItem);
45         } else {
46             pollSoRequestStatus(serviceOrder, serviceOrderItem);
47
48         }
49     }
50
51     /**
52      * * @param orderItem
53      */
54     private void pollSoRequestStatus(ServiceOrder serviceOrder,
55         ServiceOrderItem orderItem) {
56         String requestId = orderItem.getRequestId();
57         GetRequestStatusResponse response = null;
58
59         response = soClient.callGetRequestStatus(requestId);
60         if (response != null) {
61             orderItem.setPercentProgress(String.valueOf(response.getRequest().getRequestStatus().getPercentProgress()));
62             if (response.getRequest().getRequestStatus().getPercentProgress() != 100) {
63                 LOGGER.debug("orderitem id {} still in progress from so", orderItem.getId());
64             } else if (RequestState.COMPLETE != response.getRequest().getRequestStatus().getRequestState()) {
65                 serviceOrderService.updateOrderItemState(serviceOrder, orderItem, StateType.FAILED);
66                 LOGGER.debug("orderitem id {} failed, response from request status {}", orderItem.getId(),
67                     response.getRequest().getRequestStatus().getRequestState());
68             } else {
69                 updateOrderItemIfStatusCompleted(serviceOrder, orderItem);
70                 LOGGER.debug("orderitem id {} completed");
71             }
72         } else {
73             LOGGER.debug("orderitem id {} still in progress from so", orderItem.getId());
74         }
75
76     }
77
78     private void updateOrderItemIfStatusCompleted(ServiceOrder serviceOrder, ServiceOrderItem orderItem) {
79         if(orderItem.getAction()!= ActionType.MODIFY){
80             serviceOrderService.updateOrderItemState(serviceOrder, orderItem, StateType.COMPLETED);
81         } else {
82             if(StateType.INPROGRESS_MODIFY_REQUEST_CREATE_SEND ==orderItem.getState()){
83                 serviceOrderService.updateOrderItemState(serviceOrder, orderItem, StateType.COMPLETED);
84             } else {
85                 serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.INPROGRESS_MODIFY_ITEM_TO_CREATE);
86             }
87         }
88     }
89
90     private void pollE2ESoRequestStatus(ServiceOrder serviceOrder, ServiceOrderItem orderItem) {
91         String operationId = orderItem.getRequestId();
92         String serviceId = orderItem.getService().getId();
93         GetE2ERequestStatusResponse response = null;
94         final String ERROR = "error";
95         final String FINISHED = "finished";
96         final String PROCESSING = "processing";
97         String result = null;
98         response = soClient.callE2EGetRequestStatus(operationId, serviceId);
99         if (response != null) {
100             orderItem.setPercentProgress(response.getOperation().getProgress());
101             result = response.getOperation().getResult();
102             if (PROCESSING.equals(result)) {
103                 LOGGER.debug("orderitem id {} still in progress from so", orderItem.getId());
104             } else if (ERROR.equals(result)) {
105                 serviceOrderService.updateOrderItemState(serviceOrder, orderItem, StateType.FAILED);
106                 LOGGER.debug("orderitem id {} failed, response from request status {}", orderItem.getId(),
107                     response.getOperation().getResult());
108             } else if (FINISHED.equals(result)) {
109                 updateOrderItemIfStatusCompleted(serviceOrder, orderItem);
110                 LOGGER.debug("orderitem id {} completed");
111             }
112         } else {
113             LOGGER.debug("orderitem id {} still in progress from so", orderItem.getId());
114         }
115     }
116
117 }