44e3db059502e10231538e6f8996fb61efe4c314
[externalapi/nbi.git] / src / main / java / org / onap / nbi / apis / serviceorder / workflow / CheckOrderConsistenceManager.java
1 package org.onap.nbi.apis.serviceorder.workflow;
2
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;
17
18 @Service
19 public class CheckOrderConsistenceManager {
20
21
22     @Autowired
23     private MultiClient serviceOrderConsumerService;
24
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;
31
32         for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
33             ServiceOrderItemInfo serviceOrderItemInfo = new ServiceOrderItemInfo();
34             serviceOrderItemInfo.setId(serviceOrderItem.getId());
35             handleServiceFromCatalog(serviceOrderItem, serviceOrderItemInfo);
36             switch (serviceOrderItem.getAction()) {
37                 case ADD:
38                     if (existServiceInCatalog(serviceOrderItemInfo)
39                             && StringUtils.isEmpty(serviceOrderItem.getService().getId())
40                             && serviceOrderConsumerService.isTenantIdPresentInAAI()) {
41                         serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
42                     } else {
43                         isServiceOrderRejected = true;
44                         serviceOrderItem.setState(StateType.REJECTED);
45                     }
46                     break;
47                 case MODIFY:
48                 case DELETE:
49                     isAllItemsInAdd = false;
50                     if (isCustomerFromServiceOrderPresentInInventory(serviceOrderInfo)
51                             && existServiceInInventory(serviceOrderItem, serviceOrderItemInfo,
52                                     serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId())) {
53                         serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
54                     } else {
55                         isServiceOrderRejected = true;
56                         serviceOrderItem.setState(StateType.REJECTED);
57                     }
58                     break;
59                 case NOCHANGE:
60                     isAllItemsInAdd = false;
61                     serviceOrderItem.setState(StateType.COMPLETED);
62                     nbItemsCompleted++;
63                     break;
64             }
65         }
66         if (serviceOrder.getOrderItem().size() != nbItemsCompleted) {
67             serviceOrderInfo.setAllItemsCompleted(false);
68         } else {
69             serviceOrderInfo.setAllItemsCompleted(true);
70         }
71         serviceOrderInfo.setAllItemsInAdd(isAllItemsInAdd);
72         serviceOrderInfo.setIsServiceOrderRejected(isServiceOrderRejected);
73
74         return serviceOrderInfo;
75
76     }
77
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);
85         } else {
86             subscriberInfo.setSubscriberName("generic");
87             subscriberInfo.setGlobalSubscriberId("generic");
88             serviceOrderInfo.setUseServiceOrderCustomer(false);
89         }
90         serviceOrderInfo.setSubscriberInfo(subscriberInfo);
91
92     }
93
94
95     private RelatedParty getCustomerFromServiceOrder(ServiceOrder serviceOrder) {
96         for (RelatedParty relatedParty : serviceOrder.getRelatedParty()) {
97             if ("ONAPcustomer".equalsIgnoreCase(relatedParty.getRole())) {
98                 return relatedParty;
99             }
100         }
101         return null;
102     }
103
104     private boolean isCustomerFromServiceOrderPresentInInventory(ServiceOrderInfo serviceOrderInfo) {
105
106         if (serviceOrderInfo.isUseServiceOrderCustomer()) {
107
108             boolean customerPresentInAAI = serviceOrderConsumerService
109                     .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
110             return customerPresentInAAI;
111         }
112         return true;
113     }
114
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) {
122                 return true;
123             }
124         }
125         return false;
126     }
127
128     private boolean existServiceInCatalog(ServiceOrderItemInfo serviceOrderItemInfo) {
129         return serviceOrderItemInfo.getCatalogResponse() != null;
130     }
131
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);
140         }
141     }
142
143
144
145 }