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
9 package org.onap.nbi.apis.serviceorder.workflow;
11 import java.util.LinkedHashMap;
12 import org.onap.nbi.apis.serviceorder.MultiClient;
13 import org.onap.nbi.apis.serviceorder.model.RelatedParty;
14 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
15 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
16 import org.onap.nbi.apis.serviceorder.model.StateType;
17 import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo;
18 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
19 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderItemInfo;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22 import org.springframework.beans.factory.annotation.Autowired;
23 import org.springframework.http.HttpStatus;
24 import org.springframework.http.ResponseEntity;
25 import org.springframework.stereotype.Service;
26 import org.springframework.util.StringUtils;
29 public class CheckOrderConsistenceManager {
33 private MultiClient serviceOrderConsumerService;
35 private static final Logger LOGGER = LoggerFactory.getLogger(CheckOrderConsistenceManager.class);
37 public ServiceOrderInfo checkServiceOrder(ServiceOrder serviceOrder) {
38 ServiceOrderInfo serviceOrderInfo = new ServiceOrderInfo();
39 serviceOrderInfo.setServiceOrderId(serviceOrder.getId());
40 manageCustomer(serviceOrder, serviceOrderInfo);
41 int nbItemsCompleted = 0;
43 for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
44 ServiceOrderItemInfo serviceOrderItemInfo = new ServiceOrderItemInfo();
45 handleServiceFromCatalog(serviceOrderItem, serviceOrderItemInfo);
46 if (!existServiceInCatalog(serviceOrderItemInfo)) {
47 serviceOrderInfo.setIsServiceOrderRejected(true);
48 serviceOrderItem.setState(StateType.REJECTED);
50 "service order item {} of service order {} rejected cause no service catalog found for id {}",
51 serviceOrderItem.getId(), serviceOrder.getId(),
52 serviceOrderItem.getService().getServiceSpecification().getId());
54 switch (serviceOrderItem.getAction()) {
56 handleServiceOrderItemInAdd(serviceOrderInfo, serviceOrderItem, serviceOrderItemInfo);
60 handleServiceOrderItemInChange(serviceOrderInfo, serviceOrderItem, serviceOrderItemInfo);
63 serviceOrderInfo.setAllItemsInAdd(false);
64 serviceOrderItem.setState(StateType.COMPLETED);
72 if (serviceOrder.getOrderItem().size() != nbItemsCompleted) {
73 serviceOrderInfo.setAllItemsCompleted(false);
75 serviceOrderInfo.setAllItemsCompleted(true);
78 return serviceOrderInfo;
82 private void handleServiceOrderItemInChange(ServiceOrderInfo serviceOrderInfo, ServiceOrderItem serviceOrderItem,
83 ServiceOrderItemInfo serviceOrderItemInfo) {
84 serviceOrderInfo.setAllItemsInAdd(false);
85 if (shouldAcceptServiceOrderItemToChange(serviceOrderInfo, serviceOrderItem,
86 serviceOrderItemInfo)) {
87 serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
89 serviceOrderInfo.setIsServiceOrderRejected(true);
90 serviceOrderItem.setState(StateType.REJECTED);
94 private void handleServiceOrderItemInAdd(ServiceOrderInfo serviceOrderInfo, ServiceOrderItem serviceOrderItem,
95 ServiceOrderItemInfo serviceOrderItemInfo) {
96 if (shouldAcceptServiceOrderItemToAdd(serviceOrderItem, serviceOrderInfo.getServiceOrderId())) {
97 serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
99 serviceOrderInfo.setIsServiceOrderRejected(true);
100 serviceOrderItem.setState(StateType.REJECTED);
104 private boolean shouldAcceptServiceOrderItemToAdd(ServiceOrderItem serviceOrderItem,
105 String serviceOrderId) {
106 if (!StringUtils.isEmpty(serviceOrderItem.getService().getId())) {
108 .warn("serviceOrderItem {} for serviceorder {} rejected cause service.id must be empty in add action",
109 serviceOrderItem.getId(), serviceOrderId);
111 } else if (!serviceOrderConsumerService.isTenantIdPresentInAAI()) {
112 LOGGER.warn("serviceOrderItem {} for serviceOrder {} rejected cause tenantId not found in AAI",
113 serviceOrderItem.getId(), serviceOrderId);
119 private boolean shouldAcceptServiceOrderItemToChange(ServiceOrderInfo serviceOrderInfo,
120 ServiceOrderItem serviceOrderItem,
121 ServiceOrderItemInfo serviceOrderItemInfo) {
123 if (StringUtils.isEmpty(serviceOrderItem.getService().getId())) {
125 "serviceOrderItem {} for serviceOrder {} rejected cause service.id is mandatory in delete/change action",
126 serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId());
128 } else if (!isCustomerFromServiceOrderPresentInInventory(serviceOrderInfo)) {
130 .warn("serviceOrderItem {} for serviceOrder {} rejected cause customer not found in inventory",
131 serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId());
133 } else if (!existServiceInInventory(serviceOrderItem, serviceOrderItemInfo,
134 serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId())) {
136 .warn("serviceOrderItem {} for serviceOrder {} rejected cause service id {} not found in inventory",
137 serviceOrderItem.getId(), serviceOrderInfo.getServiceOrderId(),
138 serviceOrderItem.getService().getId());
144 private void manageCustomer(ServiceOrder serviceOrder, ServiceOrderInfo serviceOrderInfo) {
145 RelatedParty customerFromServiceOrder = getCustomerFromServiceOrder(serviceOrder);
146 SubscriberInfo subscriberInfo = new SubscriberInfo();
147 if (customerFromServiceOrder != null) {
148 subscriberInfo.setSubscriberName(customerFromServiceOrder.getName());
149 subscriberInfo.setGlobalSubscriberId(customerFromServiceOrder.getId());
150 serviceOrderInfo.setUseServiceOrderCustomer(true);
152 subscriberInfo.setSubscriberName("generic");
153 subscriberInfo.setGlobalSubscriberId("generic");
154 serviceOrderInfo.setUseServiceOrderCustomer(false);
156 serviceOrderInfo.setSubscriberInfo(subscriberInfo);
161 private RelatedParty getCustomerFromServiceOrder(ServiceOrder serviceOrder) {
162 if (serviceOrder.getRelatedParty() != null) {
163 for (RelatedParty relatedParty : serviceOrder.getRelatedParty()) {
164 if ("ONAPcustomer".equalsIgnoreCase(relatedParty.getRole())) {
172 private boolean isCustomerFromServiceOrderPresentInInventory(ServiceOrderInfo serviceOrderInfo) {
174 if (serviceOrderInfo.isUseServiceOrderCustomer()) {
175 return serviceOrderConsumerService
176 .isCustomerPresentInAAI(serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
181 private boolean existServiceInInventory(ServiceOrderItem serviceOrderItem,
182 ServiceOrderItemInfo serviceOrderItemInfo, String globalSubscriberId) {
183 String serviceName = (String) serviceOrderItemInfo.getCatalogResponse().get("name");
184 return serviceOrderConsumerService.doesServiceExistInServiceInventory(
185 serviceOrderItem.getService().getId(), serviceName, globalSubscriberId);
188 private boolean existServiceInCatalog(ServiceOrderItemInfo serviceOrderItemInfo) {
189 return serviceOrderItemInfo.getCatalogResponse() != null;
192 private void handleServiceFromCatalog(ServiceOrderItem serviceOrderItem,
193 ServiceOrderItemInfo serviceOrderItemInfo) {
194 ResponseEntity<Object> response = serviceOrderConsumerService
195 .getServiceCatalog(serviceOrderItem.getService().getServiceSpecification().getId());
196 if (response != null && (response.getStatusCode().equals(HttpStatus.OK)
197 || response.getStatusCode().equals(HttpStatus.PARTIAL_CONTENT))) {
198 LinkedHashMap body = (LinkedHashMap) response.getBody();
199 serviceOrderItemInfo.setCatalogResponse(body);
201 LOGGER.warn("unable to retrieve catalog information for service {}",
202 serviceOrderItem.getService().getServiceSpecification().getId());