Preparing the request payload for calling SO macro flow.
[externalapi/nbi.git] / src / main / java / org / onap / nbi / apis / serviceorder / workflow / SOTaskProcessor.java
index d63d122..fe0938d 100644 (file)
@@ -24,6 +24,7 @@ import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
 import org.onap.nbi.apis.serviceorder.model.StateType;
 import org.onap.nbi.apis.serviceorder.model.consumer.CreateE2EServiceInstanceResponse;
+import org.onap.nbi.apis.serviceorder.model.consumer.CreateMacroServiceInstanceResponse;
 import org.onap.nbi.apis.serviceorder.model.consumer.CreateServiceInstanceResponse;
 import org.onap.nbi.apis.serviceorder.model.orchestrator.ExecutionTask;
 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
@@ -92,8 +93,10 @@ public class SOTaskProcessor {
                 updateE2EServiceOrderItem(response, serviceOrderItem, serviceOrder);
             } else if (macroService) {
               LOGGER.info("Mode type macro");
-              //TODO: Add logic to construct SO macro request body and call SO macro flow.(EXTAPI-368)
-
+              // call SO macro flow.(EXTAPI-368)
+              ResponseEntity<CreateMacroServiceInstanceResponse> response = postSoProcessor
+                  .postMacroServiceOrderItem(serviceOrderInfo, serviceOrderItem);
+              updateMacroServiceOrderItem(response, serviceOrderItem, serviceOrder);
             } else {
 
                 ResponseEntity<CreateServiceInstanceResponse> response =
@@ -216,6 +219,35 @@ public class SOTaskProcessor {
         }
     }
 
+    /**
+     * Update ServiceOrderItem with SO response by using serviceOrderRepository with the serviceOrderId
+     */
+    private void updateMacroServiceOrderItem(ResponseEntity<CreateMacroServiceInstanceResponse> response,
+        ServiceOrderItem orderItem, ServiceOrder serviceOrder) {
+
+        if (response == null || !response.getStatusCode().is2xxSuccessful()) {
+            LOGGER.warn("response ko for serviceOrderItem.id=" + orderItem.getId());
+            serviceOrderService.updateOrderItemState(serviceOrder, orderItem, StateType.FAILED);
+            buildOrderMessageIfNeeded(orderItem, serviceOrder, response);
+        } else {
+            CreateMacroServiceInstanceResponse createMacroServiceInstanceResponse = response.getBody();
+            if (createMacroServiceInstanceResponse != null && !orderItem.getState().equals(StateType.FAILED)) {
+                orderItem.getService().setId(createMacroServiceInstanceResponse.getRequestReferences().getInstanceId());
+                orderItem.setRequestId(createMacroServiceInstanceResponse.getRequestReferences().getRequestId());
+            }
+
+            if (!response.getStatusCode().is2xxSuccessful() || response.getBody() == null
+                        || response.getBody().getRequestReferences() == null) {
+                serviceOrderService.updateOrderItemState(serviceOrder, orderItem, StateType.FAILED);
+                LOGGER
+                    .warn("order item {} failed , status {} , response {}", orderItem.getId(), response.getStatusCode(),
+                        response.getBody());
+            } else {
+                serviceOrderService.updateOrderItemState(serviceOrder, orderItem, StateType.INPROGRESS);
+            }
+        }
+    }
+    
     private void updateOrderItemToInProgress(ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem) {
         if (serviceOrderItem.getAction() != ActionType.MODIFY) {
             serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.INPROGRESS);
@@ -341,4 +373,4 @@ public class SOTaskProcessor {
         LOGGER.debug("Difference {} and Polling Duration {}", differenceInMillis, pollingDurationInMins);
         return (differenceInMillis > pollingDurationInMillis);
     }
-}
+}
\ No newline at end of file