*/
package org.onap.nbi.apis.serviceorder;
-import java.util.Date;
import java.util.List;
import javax.validation.Valid;
import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
-import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
import org.onap.nbi.apis.serviceorder.model.StateType;
import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
-import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
+import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
import org.onap.nbi.apis.serviceorder.workflow.CheckOrderConsistenceManager;
import org.onap.nbi.apis.serviceorder.workflow.CreateAAICustomerManager;
import org.onap.nbi.apis.serviceorder.workflow.CreateAAIServiceTypeManager;
@EnableScheduling
public class ServiceOrderResource extends ResourceManagement<ServiceOrder> {
+
+
@Autowired
- ServiceOrderRepository serviceOrderRepository;
+ ServiceOrderService serviceOrderService;
@Autowired
CheckOrderConsistenceManager checkOrderConsistenceManager;
public ResponseEntity<Object> getServiceOrder(@PathVariable String serviceOrderId,
@RequestParam MultiValueMap<String, String> params) {
- ServiceOrder serviceOrder = serviceOrderRepository.findOne(serviceOrderId);
+ ServiceOrder serviceOrder = serviceOrderService.findServiceOrderById(serviceOrderId);
if (serviceOrder == null) {
return ResponseEntity.notFound().build();
}
Query query = multiCriteriaRequestBuilder.buildRequest(params);
List<ServiceOrder> serviceOrders = mongoTemplate.find(query, ServiceOrder.class);
JsonRepresentation filter = new JsonRepresentation(params);
- long totalCount = serviceOrderRepository.count();
+ long totalCount = serviceOrderService.countServiceOrder();
HttpHeaders headers = new HttpHeaders();
headers.add("X-Total-Count", String.valueOf(totalCount));
headers.add("X-Result-Count", String.valueOf(serviceOrders.size()));
@DeleteMapping(value = "/{serviceOrderId}")
public ResponseEntity<Object> deleteServiceOrder(@PathVariable String serviceOrderId) {
- serviceOrderRepository.delete(serviceOrderId);
+ serviceOrderService.deleteServiceOrder(serviceOrderId);
return this.deleteResponse();
throw new ValidationException(errors.getAllErrors());
}
- serviceOrder.setState(StateType.ACKNOWLEDGED);
- serviceOrder.setOrderDate(new Date());
- for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
- serviceOrderItem.setState(StateType.ACKNOWLEDGED);
- }
-
- ServiceOrder serviceOrderSaved = serviceOrderRepository.save(serviceOrder);
- serviceOrderSaved.setHref("serviceOrder/" + serviceOrderSaved.getId());
- serviceOrderRepository.save(serviceOrderSaved);
+ ServiceOrder serviceOrderSaved =serviceOrderService.updateOrderAndItemStateToAcknowledged(serviceOrder);
+ serviceOrderService.updateOrderHref(serviceOrderSaved);
JsonRepresentation filter = new JsonRepresentation(params);
return this.createResponse(serviceOrderSaved, filter);
@Scheduled(fixedDelay = 5000)
public void scheduleCheckServiceOrders() {
- List<ServiceOrder> acknowledgedOrders = serviceOrderRepository.findByState(StateType.ACKNOWLEDGED);
+ List<ServiceOrder> acknowledgedOrders = serviceOrderService.findServiceOrdersByState(StateType.ACKNOWLEDGED);
for (ServiceOrder serviceOrder : acknowledgedOrders) {
ServiceOrderInfo serviceOrderInfo = checkOrderConsistenceManager.checkServiceOrder(serviceOrder);
if (serviceOrderInfo.isServiceOrderRejected()) {
- changeServiceOrderState(serviceOrder, StateType.REJECTED);
+ serviceOrderService.updateOrderFinalState(serviceOrder, StateType.REJECTED);
} else if (serviceOrderInfo.isAllItemsCompleted()) {
- changeServiceOrderState(serviceOrder, StateType.COMPLETED);
+ serviceOrderService.updateOrderFinalState(serviceOrder, StateType.COMPLETED);
} else {
- serviceOrderRepository.save(serviceOrder);
createAAICustomer.createAAICustomer(serviceOrder,serviceOrderInfo);
if(StateType.ACKNOWLEDGED==serviceOrder.getState()) {
createAAIServiceType.createAAIServiceType(serviceOrder, serviceOrderInfo);
}
}
- /**
- *
- * @param serviceOrder
- * @param stateType
- */
- private void changeServiceOrderState(ServiceOrder serviceOrder, StateType stateType) {
- serviceOrder.setState(stateType);
- serviceOrder.setCompletionDateTime(new Date());
- serviceOrderRepository.save(serviceOrder);
- }
-
}
--- /dev/null
+/**
+ * Copyright (c) 2018 Orange
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onap.nbi.apis.serviceorder.service;
+
+import java.util.Date;
+import java.util.List;
+import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
+import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
+import org.onap.nbi.apis.serviceorder.model.StateType;
+import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ServiceOrderService {
+
+ @Autowired
+ ServiceOrderRepository serviceOrderRepository;
+
+ public ServiceOrder findServiceOrderById(String serviceOrderId){
+ return serviceOrderRepository.findOne(serviceOrderId);
+ }
+
+ public List<ServiceOrder> findServiceOrdersByState(StateType state){
+ return serviceOrderRepository.findByState(state);
+ }
+
+ public void updateOrderState(ServiceOrder serviceOrder,StateType state){
+ serviceOrder.setState(state);
+ serviceOrderRepository.save(serviceOrder);
+ }
+
+ public void updateOrderFinalState(ServiceOrder serviceOrder,StateType state){
+ serviceOrder.setState(state);
+ serviceOrder.setCompletionDateTime(new Date());
+ serviceOrderRepository.save(serviceOrder);
+ }
+
+ public void updateOrderItemState(ServiceOrder serviceOrder,ServiceOrderItem serviceOrderItem, StateType state){
+ serviceOrderItem.setState(state);
+ serviceOrderRepository.save(serviceOrder);
+ }
+
+ public ServiceOrder updateOrderAndItemStateToAcknowledged(ServiceOrder serviceOrder){
+ serviceOrder.setState(StateType.ACKNOWLEDGED);
+ serviceOrder.setOrderDate(new Date());
+ for (ServiceOrderItem serviceOrderItem : serviceOrder.getOrderItem()) {
+ serviceOrderItem.setState(StateType.ACKNOWLEDGED);
+ }
+ return serviceOrderRepository.save(serviceOrder);
+ }
+
+ public void updateOrderHref(ServiceOrder serviceOrder){
+ serviceOrder.setHref("serviceOrder/" + serviceOrder.getId());
+ serviceOrderRepository.save(serviceOrder);
+ }
+
+
+ public void deleteServiceOrder(String serviceOrderId){
+ serviceOrderRepository.delete(serviceOrderId);
+ }
+
+ public long countServiceOrder(){
+ return serviceOrderRepository.count();
+ }
+
+
+}
import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo;
import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderItemInfo;
+import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@Autowired
private MultiClient serviceOrderConsumerService;
+ @Autowired
+ private ServiceOrderService serviceOrderService;
+
private static final Logger LOGGER = LoggerFactory.getLogger(CheckOrderConsistenceManager.class);
public ServiceOrderInfo checkServiceOrder(ServiceOrder serviceOrder) {
handleServiceFromCatalog(serviceOrderItem, serviceOrderItemInfo);
if (!existServiceInCatalog(serviceOrderItemInfo)) {
serviceOrderInfo.setIsServiceOrderRejected(true);
- serviceOrderItem.setState(StateType.REJECTED);
+ serviceOrderService.updateOrderItemState(serviceOrder,serviceOrderItem,StateType.REJECTED);
LOGGER.warn(
"service order item {} of service order {} rejected cause no service catalog found for id {}",
serviceOrderItem.getId(), serviceOrder.getId(),
} else {
switch (serviceOrderItem.getAction()) {
case ADD:
- handleServiceOrderItemInAdd(serviceOrderInfo, serviceOrderItem, serviceOrderItemInfo);
+ handleServiceOrderItemInAdd(serviceOrderInfo,serviceOrder, serviceOrderItem, serviceOrderItemInfo);
break;
case MODIFY:
case DELETE:
- handleServiceOrderItemInChange(serviceOrderInfo, serviceOrderItem, serviceOrderItemInfo);
+ handleServiceOrderItemInChange(serviceOrderInfo,serviceOrder, serviceOrderItem, serviceOrderItemInfo);
break;
case NOCHANGE:
serviceOrderInfo.setAllItemsInAdd(false);
- serviceOrderItem.setState(StateType.COMPLETED);
+ serviceOrderService.updateOrderItemState(serviceOrder,serviceOrderItem,StateType.COMPLETED);
nbItemsCompleted++;
break;
}
}
- private void handleServiceOrderItemInChange(ServiceOrderInfo serviceOrderInfo, ServiceOrderItem serviceOrderItem,
+ private void handleServiceOrderItemInChange(ServiceOrderInfo serviceOrderInfo,
+ ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem,
ServiceOrderItemInfo serviceOrderItemInfo) {
serviceOrderInfo.setAllItemsInAdd(false);
if (shouldAcceptServiceOrderItemToChange(serviceOrderInfo, serviceOrderItem,
serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
} else {
serviceOrderInfo.setIsServiceOrderRejected(true);
- serviceOrderItem.setState(StateType.REJECTED);
+ serviceOrderService.updateOrderItemState(serviceOrder,serviceOrderItem,StateType.REJECTED);
}
}
- private void handleServiceOrderItemInAdd(ServiceOrderInfo serviceOrderInfo, ServiceOrderItem serviceOrderItem,
+ private void handleServiceOrderItemInAdd(ServiceOrderInfo serviceOrderInfo,
+ ServiceOrder serviceOrder, ServiceOrderItem serviceOrderItem,
ServiceOrderItemInfo serviceOrderItemInfo) {
if (shouldAcceptServiceOrderItemToAdd(serviceOrderItem, serviceOrderInfo.getServiceOrderId())) {
serviceOrderInfo.addServiceOrderItemInfos(serviceOrderItem.getId(), serviceOrderItemInfo);
} else {
serviceOrderInfo.setIsServiceOrderRejected(true);
- serviceOrderItem.setState(StateType.REJECTED);
+ serviceOrderService.updateOrderItemState(serviceOrder,serviceOrderItem,StateType.REJECTED);
}
}
*/
package org.onap.nbi.apis.serviceorder.workflow;
-import java.util.Date;
import org.onap.nbi.apis.serviceorder.MultiClient;
import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
import org.onap.nbi.apis.serviceorder.model.StateType;
import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
-import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
+import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
private MultiClient serviceOrderConsumerService;
@Autowired
- ServiceOrderRepository serviceOrderRepository;
+ ServiceOrderService serviceOrderService;
private static final Logger LOGGER = LoggerFactory.getLogger(CreateAAICustomerManager.class);
boolean customerCreated = serviceOrderConsumerService.putCustomer(serviceOrderInfo.getSubscriberInfo());
if (!customerCreated) {
- serviceOrder.setState(StateType.REJECTED);
- serviceOrder.setCompletionDateTime(new Date());
- serviceOrderRepository.save(serviceOrder);
+ serviceOrderService.updateOrderFinalState(serviceOrder,StateType.REJECTED);
LOGGER.warn("serviceOrder {} rejected : cannot create customer", serviceOrder.getId());
}
}
*/
package org.onap.nbi.apis.serviceorder.workflow;
-import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import org.onap.nbi.apis.serviceorder.MultiClient;
import org.onap.nbi.apis.serviceorder.model.ActionType;
import org.onap.nbi.apis.serviceorder.model.StateType;
import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderItemInfo;
-import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
+import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.LinkedHashMap;
-import java.util.List;
@Service
public class CreateAAIServiceTypeManager {
private MultiClient serviceOrderConsumerService;
@Autowired
- ServiceOrderRepository serviceOrderRepository;
+ ServiceOrderService serviceOrderService;
private static final Logger LOGGER = LoggerFactory.getLogger(CreateAAIServiceTypeManager.class);
boolean serviceCreated = serviceOrderConsumerService.putServiceType(
serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId(), sdcServiceName);
if (!serviceCreated) {
- serviceOrder.setState(StateType.REJECTED);
- serviceOrder.setCompletionDateTime(new Date());
- serviceOrderRepository.save(serviceOrder);
+ serviceOrderService.updateOrderFinalState(serviceOrder,StateType.REJECTED);
LOGGER.warn("serviceOrder {} rejected : cannot create service type {} for customer {}",
serviceOrder.getId(), sdcServiceName,
serviceOrderInfo.getSubscriberInfo().getGlobalSubscriberId());
*/
package org.onap.nbi.apis.serviceorder.workflow;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
import org.onap.nbi.apis.serviceorder.SoClient;
import org.onap.nbi.apis.serviceorder.model.ServiceCharacteristic;
import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
import org.onap.nbi.apis.serviceorder.model.StateType;
-import org.onap.nbi.apis.serviceorder.model.consumer.*;
+import org.onap.nbi.apis.serviceorder.model.consumer.CloudConfiguration;
+import org.onap.nbi.apis.serviceorder.model.consumer.CreateServiceInstanceResponse;
+import org.onap.nbi.apis.serviceorder.model.consumer.GetRequestStatusResponse;
+import org.onap.nbi.apis.serviceorder.model.consumer.MSOPayload;
+import org.onap.nbi.apis.serviceorder.model.consumer.ModelInfo;
+import org.onap.nbi.apis.serviceorder.model.consumer.RequestDetails;
+import org.onap.nbi.apis.serviceorder.model.consumer.RequestInfo;
+import org.onap.nbi.apis.serviceorder.model.consumer.RequestParameters;
+import org.onap.nbi.apis.serviceorder.model.consumer.RequestState;
+import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo;
+import org.onap.nbi.apis.serviceorder.model.consumer.UserParams;
import org.onap.nbi.apis.serviceorder.model.orchestrator.ExecutionTask;
import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
import org.onap.nbi.apis.serviceorder.repositories.ExecutionTaskRepository;
-import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderRepository;
+import org.onap.nbi.apis.serviceorder.service.ServiceOrderService;
import org.onap.nbi.apis.serviceorder.utils.JsonEntityConverter;
import org.onap.nbi.exceptions.TechnicalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
-import java.io.IOException;
-import java.util.*;
-
@Service
public class SOTaskProcessor {
@Value("${onap.tenantId}")
private String tenantId;
+
@Autowired
- private ServiceOrderRepository serviceOrderRepository;
+ private ServiceOrderService serviceOrderService;
@Autowired
private ExecutionTaskRepository executionTaskRepository;
ServiceOrderInfo serviceOrderInfo = getServiceOrderInfo(executionTask);
- ServiceOrder serviceOrder = serviceOrderRepository.findOne(serviceOrderInfo.getServiceOrderId());
+ ServiceOrder serviceOrder = serviceOrderService.findServiceOrderById(serviceOrderInfo.getServiceOrderId());
ServiceOrderItem serviceOrderItem = getServiceOrderItem(executionTask, serviceOrder);
if (StateType.ACKNOWLEDGED == serviceOrderItem.getState()) {
if (executionTask.getNbRetries() > 0 && StateType.FAILED != serviceOrderItem.getState()
) {
// TODO lancer en asynchrone
- pollSoRequestStatus(serviceOrderItem);
+ pollSoRequestStatus(serviceOrder,serviceOrderItem);
if (serviceOrderItem.getState().equals(StateType.COMPLETED)) {
updateSuccessTask(executionTask);
} else {
}
if (atLeastOneNotFinished) {
- serviceOrder.setState(StateType.INPROGRESS);
+ serviceOrderService.updateOrderState(serviceOrder,StateType.INPROGRESS);
} else {
- serviceOrder.setCompletionDateTime(new Date());
+ StateType finalState;
if (atLeastOneFailed) {
if (!atLeastOneCompleted) {
- serviceOrder.setState(StateType.FAILED);
+ finalState=StateType.FAILED;
} else {
- serviceOrder.setState(StateType.PARTIAL);
+ finalState=StateType.PARTIAL;
}
} else {
- serviceOrder.setState(StateType.COMPLETED);
+ finalState=StateType.COMPLETED;
}
+ serviceOrderService.updateOrderFinalState(serviceOrder,finalState);
}
- serviceOrderRepository.save(serviceOrder);
}
/**
* * @param orderItem
*/
- private void pollSoRequestStatus(ServiceOrderItem orderItem) throws InterruptedException {
+ private void pollSoRequestStatus(ServiceOrder serviceOrder,
+ ServiceOrderItem orderItem) throws InterruptedException {
boolean stopPolling = false;
String requestId = orderItem.getRequestId();
GetRequestStatusResponse response = null;
if (response != null) {
if (response.getRequest().getRequestStatus().getPercentProgress() != 100) {
nbRetries++;
- orderItem.setState(StateType.INPROGRESS);
+ serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.INPROGRESS);
Thread.sleep(1000);
LOGGER.debug("orderitem id {} still in progress from so",orderItem.getId());
} else if (RequestState.COMPLETE != response.getRequest().getRequestStatus().getRequestState()) {
- orderItem.setState(StateType.FAILED);
+ serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.FAILED);
stopPolling = true;
LOGGER.debug("orderitem id {} failed, response from request status {}",orderItem.getId(),response.getRequest().getRequestStatus().getRequestState());
} else {
- orderItem.setState(StateType.COMPLETED);
+ serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.COMPLETED);
stopPolling = true;
LOGGER.debug("orderitem id {} completed");
}
} else {
- orderItem.setState(StateType.INPROGRESS);
+ serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.INPROGRESS);
stopPolling = true;
LOGGER.debug("orderitem id {} still in progress from so",orderItem.getId());
}
if (response == null) {
LOGGER.warn("response=null for serviceOrderItem.id=" + orderItem.getId());
- orderItem.setState(StateType.FAILED);
+ serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.FAILED);
}
else {
CreateServiceInstanceResponse createServiceInstanceResponse = response.getBody();
if (!response.getStatusCode().is2xxSuccessful() || response.getBody() == null
|| response.getBody().getRequestReferences() == null) {
- orderItem.setState(StateType.FAILED);
+ serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.FAILED);
LOGGER.warn("order item {} failed , status {} , response {}",orderItem.getId(),response.getStatusCode(),response.getBody());
} else {
- orderItem.setState(StateType.INPROGRESS);
+ serviceOrderService.updateOrderItemState(serviceOrder,orderItem,StateType.INPROGRESS);
}
}
- serviceOrderRepository.save(serviceOrder);
}
/**
for (ServiceOrderItem item : serviceOrder.getOrderItem()) {
for (ExecutionTask taskToDelete : executionTasksToDelete) {
if (taskToDelete.getOrderItemId().equals(item.getId())) {
- item.setState(StateType.FAILED);
+ serviceOrderService.updateOrderItemState(serviceOrder,item,StateType.FAILED);
LOGGER.warn("task {} with orderitem id {} to failed cause orderitem id {} failed ",taskToDelete.getInternalId(),taskToDelete.getOrderItemId(),executionTask.getOrderItemId());
}