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