2 * Copyright (c) 2018 Orange
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package org.onap.nbi.apis.serviceorder.workflow;
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;
34 public class CheckOrderConsistenceManager {
38 private MultiClient serviceOrderConsumerService;
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;
47 for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
48 ServiceOrderItemInfo serviceOrderItemInfo = new ServiceOrderItemInfo();
49 serviceOrderItemInfo.setId(serviceOrderItem.getId());
50 handleServiceFromCatalog(serviceOrderItem, serviceOrderItemInfo);
51 switch (serviceOrderItem.getAction()) {
53 if (existServiceInCatalog(serviceOrderItemInfo)
54 && StringUtils.isEmpty(serviceOrderItem.getService().getId())
55 && serviceOrderConsumerService.isTenantIdPresentInAAI()) {
56 serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
58 isServiceOrderRejected = true;
59 serviceOrderItem.setState(StateType.REJECTED);
64 isAllItemsInAdd = false;
65 if (isCustomerFromServiceOrderPresentInInventory(serviceOrderInfo)
66 && existServiceInInventory(serviceOrderItem, serviceOrderItemInfo,
67 serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId())) {
68 serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
70 isServiceOrderRejected = true;
71 serviceOrderItem.setState(StateType.REJECTED);
75 isAllItemsInAdd = false;
76 serviceOrderItem.setState(StateType.COMPLETED);
81 if (serviceOrder.getOrderItem().size() != nbItemsCompleted) {
82 serviceOrderInfo.setAllItemsCompleted(false);
84 serviceOrderInfo.setAllItemsCompleted(true);
86 serviceOrderInfo.setAllItemsInAdd(isAllItemsInAdd);
87 serviceOrderInfo.setIsServiceOrderRejected(isServiceOrderRejected);
89 return serviceOrderInfo;
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);
101 subscriberInfo.setSubscriberName("generic");
102 subscriberInfo.setGlobalSubscriberId("generic");
103 serviceOrderInfo.setUseServiceOrderCustomer(false);
105 serviceOrderInfo.setSubscriberInfo(subscriberInfo);
110 private RelatedParty getCustomerFromServiceOrder(ServiceOrder serviceOrder) {
111 for (RelatedParty relatedParty : serviceOrder.getRelatedParty()) {
112 if ("ONAPcustomer".equalsIgnoreCase(relatedParty.getRole())) {
119 private boolean isCustomerFromServiceOrderPresentInInventory(ServiceOrderInfo serviceOrderInfo) {
121 if (serviceOrderInfo.isUseServiceOrderCustomer()) {
123 boolean customerPresentInAAI = serviceOrderConsumerService
124 .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
125 return customerPresentInAAI;
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) {
143 private boolean existServiceInCatalog(ServiceOrderItemInfo serviceOrderItemInfo) {
144 return serviceOrderItemInfo.getCatalogResponse() != null;
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);