1fb57ef7ef0a554c9026b1b7d5759750db402f48
[externalapi/nbi.git] / src / main / java / org / onap / nbi / apis / serviceorder / workflow / CheckOrderConsistenceManager.java
1 /**
2  *     Copyright (c) 2018 Orange
3  *
4  *     Licensed under the Apache License, Version 2.0 (the "License");
5  *     you may not use this file except in compliance with the License.
6  *     You may obtain a copy of the License at
7  *
8  *         http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *     Unless required by applicable law or agreed to in writing, software
11  *     distributed under the License is distributed on an "AS IS" BASIS,
12  *     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *     See the License for the specific language governing permissions and
14  *     limitations under the License.
15  */
16 package org.onap.nbi.apis.serviceorder.workflow;
17
18 import org.onap.nbi.apis.serviceorder.MultiClient;
19 import org.onap.nbi.apis.serviceorder.model.RelatedParty;
20 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
21 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
22 import org.onap.nbi.apis.serviceorder.model.StateType;
23 import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo;
24 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
25 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderItemInfo;
26 import org.springframework.beans.factory.annotation.Autowired;
27 import org.springframework.http.HttpStatus;
28 import org.springframework.http.ResponseEntity;
29 import org.springframework.stereotype.Service;
30 import org.springframework.util.StringUtils;
31 import java.util.LinkedHashMap;
32
33 @Service
34 public class CheckOrderConsistenceManager {
35
36
37     @Autowired
38     private MultiClient serviceOrderConsumerService;
39
40     public ServiceOrderInfo checkServiceOrder(ServiceOrder serviceOrder) {
41         ServiceOrderInfo serviceOrderInfo = new ServiceOrderInfo();
42         manageCustomer(serviceOrder, serviceOrderInfo);
43         int nbItemsCompleted = 0;
44         boolean isServiceOrderRejected = false;
45         boolean isAllItemsInAdd = true;
46
47         for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
48             ServiceOrderItemInfo serviceOrderItemInfo = new ServiceOrderItemInfo();
49             serviceOrderItemInfo.setId(serviceOrderItem.getId());
50             handleServiceFromCatalog(serviceOrderItem, serviceOrderItemInfo);
51             switch (serviceOrderItem.getAction()) {
52                 case ADD:
53                     if (existServiceInCatalog(serviceOrderItemInfo)
54                             && StringUtils.isEmpty(serviceOrderItem.getService().getId())
55                             && serviceOrderConsumerService.isTenantIdPresentInAAI()) {
56                         serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
57                     } else {
58                         isServiceOrderRejected = true;
59                         serviceOrderItem.setState(StateType.REJECTED);
60                     }
61                     break;
62                 case MODIFY:
63                 case DELETE:
64                     isAllItemsInAdd = false;
65                     if (isCustomerFromServiceOrderPresentInInventory(serviceOrderInfo)
66                             && existServiceInInventory(serviceOrderItem, serviceOrderItemInfo,
67                                     serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId())) {
68                         serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
69                     } else {
70                         isServiceOrderRejected = true;
71                         serviceOrderItem.setState(StateType.REJECTED);
72                     }
73                     break;
74                 case NOCHANGE:
75                     isAllItemsInAdd = false;
76                     serviceOrderItem.setState(StateType.COMPLETED);
77                     nbItemsCompleted++;
78                     break;
79             }
80         }
81         if (serviceOrder.getOrderItem().size() != nbItemsCompleted) {
82             serviceOrderInfo.setAllItemsCompleted(false);
83         } else {
84             serviceOrderInfo.setAllItemsCompleted(true);
85         }
86         serviceOrderInfo.setAllItemsInAdd(isAllItemsInAdd);
87         serviceOrderInfo.setIsServiceOrderRejected(isServiceOrderRejected);
88
89         return serviceOrderInfo;
90
91     }
92
93     private void manageCustomer(ServiceOrder serviceOrder, ServiceOrderInfo serviceOrderInfo) {
94         RelatedParty customerFromServiceOrder = getCustomerFromServiceOrder(serviceOrder);
95         SubscriberInfo subscriberInfo = new SubscriberInfo();
96         if (customerFromServiceOrder != null) {
97             subscriberInfo.setSubscriberName(customerFromServiceOrder.getName());
98             subscriberInfo.setGlobalSubscriberId(customerFromServiceOrder.getId());
99             serviceOrderInfo.setUseServiceOrderCustomer(true);
100         } else {
101             subscriberInfo.setSubscriberName("generic");
102             subscriberInfo.setGlobalSubscriberId("generic");
103             serviceOrderInfo.setUseServiceOrderCustomer(false);
104         }
105         serviceOrderInfo.setSubscriberInfo(subscriberInfo);
106
107     }
108
109
110     private RelatedParty getCustomerFromServiceOrder(ServiceOrder serviceOrder) {
111         for (RelatedParty relatedParty : serviceOrder.getRelatedParty()) {
112             if ("ONAPcustomer".equalsIgnoreCase(relatedParty.getRole())) {
113                 return relatedParty;
114             }
115         }
116         return null;
117     }
118
119     private boolean isCustomerFromServiceOrderPresentInInventory(ServiceOrderInfo serviceOrderInfo) {
120
121         if (serviceOrderInfo.isUseServiceOrderCustomer()) {
122
123             boolean customerPresentInAAI = serviceOrderConsumerService
124                     .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
125             return customerPresentInAAI;
126         }
127         return true;
128     }
129
130     private boolean existServiceInInventory(ServiceOrderItem serviceOrderItem,
131             ServiceOrderItemInfo serviceOrderItemInfo, String globalSubscriberId) {
132         if (!StringUtils.isEmpty(serviceOrderItem.getService().getId())) {
133             String serviceName = (String) serviceOrderItemInfo.getCatalogResponse().get("name");
134             boolean serviceExistInInventory = serviceOrderConsumerService.doesServiceExistInServiceInventory(
135                     serviceOrderItem.getService().getId(), serviceName, globalSubscriberId);
136             if (serviceExistInInventory) {
137                 return true;
138             }
139         }
140         return false;
141     }
142
143     private boolean existServiceInCatalog(ServiceOrderItemInfo serviceOrderItemInfo) {
144         return serviceOrderItemInfo.getCatalogResponse() != null;
145     }
146
147     private void handleServiceFromCatalog(ServiceOrderItem serviceOrderItem,
148             ServiceOrderItemInfo serviceOrderItemInfo) {
149         ResponseEntity<Object> response = serviceOrderConsumerService
150                 .getServiceCatalog(serviceOrderItem.getService().getServiceSpecification().getId());
151         if (response != null && (response.getStatusCode().equals(HttpStatus.OK)
152                 || response.getStatusCode().equals(HttpStatus.PARTIAL_CONTENT))) {
153             LinkedHashMap body = (LinkedHashMap) response.getBody();
154             serviceOrderItemInfo.setCatalogResponse(body);
155         }
156     }
157
158
159
160 }