1 package org.onap.nbi.apis.serviceorder.workflow;
3 import org.onap.nbi.apis.serviceorder.MultiClient;
4 import org.onap.nbi.apis.serviceorder.model.RelatedParty;
5 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
6 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
7 import org.onap.nbi.apis.serviceorder.model.StateType;
8 import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo;
9 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
10 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderItemInfo;
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.http.HttpStatus;
13 import org.springframework.http.ResponseEntity;
14 import org.springframework.stereotype.Service;
15 import org.springframework.util.StringUtils;
16 import java.util.LinkedHashMap;
19 public class CheckOrderConsistenceManager {
23 private MultiClient serviceOrderConsumerService;
25 public ServiceOrderInfo checkServiceOrder(ServiceOrder serviceOrder) {
26 ServiceOrderInfo serviceOrderInfo = new ServiceOrderInfo();
27 manageCustomer(serviceOrder, serviceOrderInfo);
28 int nbItemsCompleted = 0;
29 boolean isServiceOrderRejected = false;
30 boolean isAllItemsInAdd = true;
32 for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
33 ServiceOrderItemInfo serviceOrderItemInfo = new ServiceOrderItemInfo();
34 serviceOrderItemInfo.setId(serviceOrderItem.getId());
35 handleServiceFromCatalog(serviceOrderItem, serviceOrderItemInfo);
36 switch (serviceOrderItem.getAction()) {
38 if (existServiceInCatalog(serviceOrderItemInfo)
39 && StringUtils.isEmpty(serviceOrderItem.getService().getId())
40 && serviceOrderConsumerService.isTenantIdPresentInAAI()) {
41 serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
43 isServiceOrderRejected = true;
44 serviceOrderItem.setState(StateType.REJECTED);
49 isAllItemsInAdd = false;
50 if (isCustomerFromServiceOrderPresentInInventory(serviceOrderInfo)
51 && existServiceInInventory(serviceOrderItem, serviceOrderItemInfo,
52 serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId())) {
53 serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
55 isServiceOrderRejected = true;
56 serviceOrderItem.setState(StateType.REJECTED);
60 isAllItemsInAdd = false;
61 serviceOrderItem.setState(StateType.COMPLETED);
66 if (serviceOrder.getOrderItem().size() != nbItemsCompleted) {
67 serviceOrderInfo.setAllItemsCompleted(false);
69 serviceOrderInfo.setAllItemsCompleted(true);
71 serviceOrderInfo.setAllItemsInAdd(isAllItemsInAdd);
72 serviceOrderInfo.setIsServiceOrderRejected(isServiceOrderRejected);
74 return serviceOrderInfo;
78 private void manageCustomer(ServiceOrder serviceOrder, ServiceOrderInfo serviceOrderInfo) {
79 RelatedParty customerFromServiceOrder = getCustomerFromServiceOrder(serviceOrder);
80 SubscriberInfo subscriberInfo = new SubscriberInfo();
81 if (customerFromServiceOrder != null) {
82 subscriberInfo.setSubscriberName(customerFromServiceOrder.getName());
83 subscriberInfo.setGlobalSubscriberId(customerFromServiceOrder.getId());
84 serviceOrderInfo.setUseServiceOrderCustomer(true);
86 subscriberInfo.setSubscriberName("generic");
87 subscriberInfo.setGlobalSubscriberId("generic");
88 serviceOrderInfo.setUseServiceOrderCustomer(false);
90 serviceOrderInfo.setSubscriberInfo(subscriberInfo);
95 private RelatedParty getCustomerFromServiceOrder(ServiceOrder serviceOrder) {
96 for (RelatedParty relatedParty : serviceOrder.getRelatedParty()) {
97 if ("ONAPcustomer".equalsIgnoreCase(relatedParty.getRole())) {
104 private boolean isCustomerFromServiceOrderPresentInInventory(ServiceOrderInfo serviceOrderInfo) {
106 if (serviceOrderInfo.isUseServiceOrderCustomer()) {
108 boolean customerPresentInAAI = serviceOrderConsumerService
109 .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
110 return customerPresentInAAI;
115 private boolean existServiceInInventory(ServiceOrderItem serviceOrderItem,
116 ServiceOrderItemInfo serviceOrderItemInfo, String globalSubscriberId) {
117 if (!StringUtils.isEmpty(serviceOrderItem.getService().getId())) {
118 String serviceName = (String) serviceOrderItemInfo.getCatalogResponse().get("name");
119 boolean serviceExistInInventory = serviceOrderConsumerService.doesServiceExistInServiceInventory(
120 serviceOrderItem.getService().getId(), serviceName, globalSubscriberId);
121 if (serviceExistInInventory) {
128 private boolean existServiceInCatalog(ServiceOrderItemInfo serviceOrderItemInfo) {
129 return serviceOrderItemInfo.getCatalogResponse() != null;
132 private void handleServiceFromCatalog(ServiceOrderItem serviceOrderItem,
133 ServiceOrderItemInfo serviceOrderItemInfo) {
134 ResponseEntity<Object> response = serviceOrderConsumerService
135 .getServiceCatalog(serviceOrderItem.getService().getServiceSpecification().getId());
136 if (response != null && (response.getStatusCode().equals(HttpStatus.OK)
137 || response.getStatusCode().equals(HttpStatus.PARTIAL_CONTENT))) {
138 LinkedHashMap body = (LinkedHashMap) response.getBody();
139 serviceOrderItemInfo.setCatalogResponse(body);