2 * Copyright (c) 2018 Orange <p> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
3 * file except in compliance with the License. You may obtain a copy of the License at <p>
4 * http://www.apache.org/licenses/LICENSE-2.0 <p> Unless required by applicable law or agreed to in writing, software
5 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
6 * either express or implied. See the License for the specific language governing permissions and limitations under the
10 package org.onap.nbi.apis.serviceorder.workflow;
13 import org.onap.nbi.apis.serviceorder.MultiClient;
14 import org.onap.nbi.apis.serviceorder.model.RelatedParty;
15 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
16 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
17 import org.onap.nbi.apis.serviceorder.model.StateType;
18 import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo;
19 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
20 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderItemInfo;
21 import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
22 import org.onap.nbi.apis.serviceorder.utils.E2EServiceUtils;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25 import org.springframework.beans.factory.annotation.Autowired;
26 import org.springframework.stereotype.Service;
27 import org.springframework.util.StringUtils;
30 public class CheckOrderConsistenceManager {
33 private MultiClient serviceOrderConsumerService;
36 private ServiceOrderService serviceOrderService;
38 private static final Logger LOGGER = LoggerFactory.getLogger(CheckOrderConsistenceManager.class);
40 public ServiceOrderInfo checkServiceOrder(ServiceOrder serviceOrder) {
41 ServiceOrderInfo serviceOrderInfo = new ServiceOrderInfo();
42 serviceOrderInfo.setServiceOrderId(serviceOrder.getId());
43 manageCustomer(serviceOrder, serviceOrderInfo);
44 int nbItemsCompleted = 0;
46 for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
47 ServiceOrderItemInfo serviceOrderItemInfo = new ServiceOrderItemInfo();
48 handleServiceFromCatalog(serviceOrderItem, serviceOrder, serviceOrderItemInfo);
49 if (!existServiceInCatalog(serviceOrderItemInfo)) {
50 serviceOrderInfo.setIsServiceOrderRejected(true);
51 serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.REJECTED);
53 "service order item {} of service order {} rejected cause no service catalog found for id {}",
54 serviceOrderItem.getId(), serviceOrder.getId(),
55 serviceOrderItem.getService().getServiceSpecification().getId());
56 serviceOrderService.addOrderItemMessage(serviceOrder, serviceOrderItem, "102");
58 switch (serviceOrderItem.getAction()) {
60 handleServiceOrderItemInAdd(serviceOrderInfo, serviceOrder, serviceOrderItem,
61 serviceOrderItemInfo);
65 handleServiceOrderItemInChange(serviceOrderInfo, serviceOrder, serviceOrderItem,
66 serviceOrderItemInfo);
69 serviceOrderInfo.setAllItemsInAdd(false);
70 serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.COMPLETED);
78 if (serviceOrder.getOrderItem().size() != nbItemsCompleted) {
79 serviceOrderInfo.setAllItemsCompleted(false);
81 serviceOrderInfo.setAllItemsCompleted(true);
84 return serviceOrderInfo;
88 private void handleServiceOrderItemInChange(ServiceOrderInfo serviceOrderInfo, ServiceOrder serviceOrder,
89 ServiceOrderItem serviceOrderItem, ServiceOrderItemInfo serviceOrderItemInfo) {
90 serviceOrderInfo.setAllItemsInAdd(false);
91 if (shouldAcceptServiceOrderItemToChange(serviceOrderInfo, serviceOrder, serviceOrderItem,
92 serviceOrderItemInfo)) {
93 serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
95 serviceOrderInfo.setIsServiceOrderRejected(true);
96 serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.REJECTED);
100 private void handleServiceOrderItemInAdd(ServiceOrderInfo serviceOrderInfo, ServiceOrder serviceOrder,
101 ServiceOrderItem serviceOrderItem, ServiceOrderItemInfo serviceOrderItemInfo) {
102 boolean e2eService = E2EServiceUtils.isE2EService(serviceOrderItemInfo);
103 if (shouldAcceptServiceOrderItemToAdd(serviceOrderItem, serviceOrder, serviceOrderInfo.getServiceOrderId(),
105 serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
107 serviceOrderInfo.setIsServiceOrderRejected(true);
108 serviceOrderService.updateOrderItemState(serviceOrder, serviceOrderItem, StateType.REJECTED);
112 private boolean shouldAcceptServiceOrderItemToAdd(ServiceOrderItem serviceOrderItem, ServiceOrder serviceOrder,
113 String serviceOrderId, Boolean e2eService) {
114 if (!StringUtils.isEmpty(serviceOrderItem.getService().getId())) {
115 LOGGER.warn("serviceOrderItem {} for serviceorder {} rejected cause service.id must be empty in add action",
116 serviceOrderItem.getId(), serviceOrderId);
117 serviceOrderService.addOrderItemMessage(serviceOrder, serviceOrderItem, "103");
119 } else if (!e2eService && !serviceOrderConsumerService.isTenantIdPresentInAAI(serviceOrder)) {
120 LOGGER.warn("serviceOrderItem {} for serviceOrder {} rejected cause tenantId not found in AAI",
121 serviceOrderItem.getId(), serviceOrderId);
122 serviceOrderService.addOrderMessage(serviceOrder, "503");
129 private boolean shouldAcceptServiceOrderItemToChange(ServiceOrderInfo serviceOrderInfo, ServiceOrder serviceOrder,
130 ServiceOrderItem serviceOrderItem, ServiceOrderItemInfo serviceOrderItemInfo) {
132 if (StringUtils.isEmpty(serviceOrderItem.getService().getId())) {
134 "serviceOrderItem {} for serviceOrder {} rejected cause service.id is mandatory in delete/change action",
135 serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId());
136 serviceOrderService.addOrderItemMessage(serviceOrder, serviceOrderItem, "101");
138 } else if (!isCustomerFromServiceOrderPresentInInventory(serviceOrderInfo, serviceOrder)) {
139 LOGGER.warn("serviceOrderItem {} for serviceOrder {} rejected cause customer not found in inventory",
140 serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId());
141 serviceOrderService.addOrderMessage(serviceOrder, "104");
143 } else if (!existServiceInInventory(serviceOrderItem, serviceOrder, serviceOrderItemInfo,
144 serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId())) {
145 LOGGER.warn("serviceOrderItem {} for serviceOrder {} rejected cause service id {} not found in inventory",
146 serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId(),
147 serviceOrderItem.getService().getId());
148 serviceOrderService.addOrderItemMessage(serviceOrder, serviceOrderItem, "106");
154 private void manageCustomer(ServiceOrder serviceOrder, ServiceOrderInfo serviceOrderInfo) {
155 RelatedParty customerFromServiceOrder = getCustomerFromServiceOrder(serviceOrder);
156 SubscriberInfo subscriberInfo = new SubscriberInfo();
157 if (customerFromServiceOrder != null) {
158 subscriberInfo.setSubscriberName(customerFromServiceOrder.getName());
159 subscriberInfo.setGlobalSubscriberId(customerFromServiceOrder.getId());
160 serviceOrderInfo.setUseServiceOrderCustomer(true);
162 subscriberInfo.setSubscriberName("generic");
163 subscriberInfo.setGlobalSubscriberId("generic");
164 serviceOrderInfo.setUseServiceOrderCustomer(false);
166 serviceOrderInfo.setSubscriberInfo(subscriberInfo);
170 private RelatedParty getCustomerFromServiceOrder(ServiceOrder serviceOrder) {
171 if (serviceOrder.getRelatedParty() != null) {
172 for (RelatedParty relatedParty : serviceOrder.getRelatedParty()) {
173 if ("ONAPcustomer".equalsIgnoreCase(relatedParty.getRole())) {
181 private boolean isCustomerFromServiceOrderPresentInInventory(ServiceOrderInfo serviceOrderInfo,
182 ServiceOrder serviceOrder) {
184 if (serviceOrderInfo.isUseServiceOrderCustomer()) {
185 return serviceOrderConsumerService
186 .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId(), serviceOrder);
191 private boolean existServiceInInventory(ServiceOrderItem serviceOrderItem, ServiceOrder serviceOrder,
192 ServiceOrderItemInfo serviceOrderItemInfo, String globalSubscriberId) {
193 String serviceName = (String) serviceOrderItemInfo.getCatalogResponse().get("name");
194 return serviceOrderConsumerService.doesServiceExistInServiceInventory(serviceOrderItem.getService().getId(),
195 serviceName, globalSubscriberId, serviceOrder);
198 private boolean existServiceInCatalog(ServiceOrderItemInfo serviceOrderItemInfo) {
199 return serviceOrderItemInfo.getCatalogResponse() != null;
202 private void handleServiceFromCatalog(ServiceOrderItem serviceOrderItem, ServiceOrder serviceOrder,
203 ServiceOrderItemInfo serviceOrderItemInfo) {
204 Map body = serviceOrderConsumerService.getServiceCatalog(
205 serviceOrderItem.getService().getServiceSpecification().getId(), serviceOrder, serviceOrderItem);
206 serviceOrderItemInfo.setCatalogResponse(body);