1 package org.onap.nbi.apis.serviceorder.workflow;
3 import org.onap.nbi.apis.serviceorder.model.OrderItemRelationship;
4 import org.onap.nbi.apis.serviceorder.model.ServiceOrder;
5 import org.onap.nbi.apis.serviceorder.model.ServiceOrderItem;
6 import org.onap.nbi.apis.serviceorder.model.orchestrator.ExecutionTask;
7 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfo;
8 import org.onap.nbi.apis.serviceorder.model.orchestrator.ServiceOrderInfoJson;
9 import org.onap.nbi.apis.serviceorder.repositories.ExecutionTaskRepository;
10 import org.onap.nbi.apis.serviceorder.repositories.ServiceOrderInfoRepository;
11 import org.onap.nbi.apis.serviceorder.utils.JsonEntityConverter;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14 import org.springframework.beans.factory.annotation.Autowired;
15 import org.springframework.scheduling.annotation.EnableScheduling;
16 import org.springframework.scheduling.annotation.Scheduled;
17 import org.springframework.stereotype.Service;
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.List;
25 public class SOTaskManager {
28 private ExecutionTaskRepository executionTaskRepository;
31 private ServiceOrderInfoRepository serviceOrderInfoRepository;
34 private SOTaskProcessor soTaskProcessor;
36 private static final Logger LOGGER = LoggerFactory.getLogger(SOTaskManager.class);
40 * @param serviceOrderInfoJson
42 private void registerOrderItemExecutionPlan(List<ServiceOrderItem> orderItems,
43 ServiceOrderInfoJson serviceOrderInfoJson) {
44 List<ExecutionTask> executionTasksSaved = new ArrayList<>();
45 Map<String, Long> internalIdOrderItemsMap = new HashMap<>();
46 if (orderItems != null) {
47 // first we save create all the execution tasks with order item id in relied tasks
48 for (ServiceOrderItem orderItem : orderItems) {
49 ExecutionTask task = new ExecutionTask();
50 task.setOrderItemId(orderItem.getId());
52 StringBuilder sb = new StringBuilder();
53 for (OrderItemRelationship orderItemRelationship : orderItem.getOrderItemRelationship()) {
54 sb.append(orderItemRelationship.getId()).append(" ");
56 task.setReliedTasks(sb.toString());
57 task.setServiceOrderInfoJson(serviceOrderInfoJson);
58 ExecutionTask savedTask = executionTaskRepository.save(task);
59 executionTasksSaved.add(savedTask);
60 internalIdOrderItemsMap.put(savedTask.getOrderItemId(), savedTask.getInternalId());
62 // then we replace all orderitem ids in reliedtasks field with internalid of the tasks
63 for (ExecutionTask executionTask : executionTasksSaved) {
64 for (String key : internalIdOrderItemsMap.keySet()) {
65 String replace = executionTask.getReliedTasks().replace(key,
66 String.valueOf(internalIdOrderItemsMap.get(key)));
67 executionTask.setReliedTasks(replace);
69 executionTaskRepository.save(executionTask);
77 * @param serviceOrderInfo
79 public void registerServiceOrder(ServiceOrder serviceOrder, ServiceOrderInfo serviceOrderInfo) {
80 String json = JsonEntityConverter.convertServiceOrderInfoToJson(serviceOrderInfo);
81 ServiceOrderInfoJson serviceOrderInfoJson = new ServiceOrderInfoJson(serviceOrder.getId(), json);
82 serviceOrderInfoRepository.save(serviceOrderInfoJson);
83 registerOrderItemExecutionPlan(serviceOrder.getOrderItem(), serviceOrderInfoJson);
87 @Scheduled(fixedRate = 2000)
88 private void processExecutionPlan() {
89 List<ExecutionTask> taskToExecute = executionTaskRepository.findByReliedTasksIsEmpty();
90 for (ExecutionTask executionTask : taskToExecute) {
91 soTaskProcessor.processOrderItem(executionTask);