Add serviceOrder rest services
[externalapi/nbi.git] / src / main / java / org / onap / nbi / apis / serviceorder / workflow / SOTaskManager.java
1 package org.onap.nbi.apis.serviceorder.workflow;
2
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;
21 import java.util.Map;
22
23 @Service
24 @EnableScheduling
25 public class SOTaskManager {
26
27     @Autowired
28     private ExecutionTaskRepository executionTaskRepository;
29
30     @Autowired
31     private ServiceOrderInfoRepository serviceOrderInfoRepository;
32
33     @Autowired
34     private SOTaskProcessor soTaskProcessor;
35
36     private static final Logger LOGGER = LoggerFactory.getLogger(SOTaskManager.class);
37
38     /**
39      * @param orderItems
40      * @param serviceOrderInfoJson
41      */
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());
51                 task.setNbRetries(3);
52                 StringBuilder sb = new StringBuilder();
53                 for (OrderItemRelationship orderItemRelationship : orderItem.getOrderItemRelationship()) {
54                     sb.append(orderItemRelationship.getId()).append(" ");
55                 }
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());
61             }
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);
68                 }
69                 executionTaskRepository.save(executionTask);
70             }
71         }
72     }
73
74     /**
75      *
76      * @param serviceOrder
77      * @param serviceOrderInfo
78      */
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);
84     }
85
86
87     @Scheduled(fixedRate = 2000)
88     private void processExecutionPlan() {
89         List<ExecutionTask> taskToExecute = executionTaskRepository.findByReliedTasksIsEmpty();
90         for (ExecutionTask executionTask : taskToExecute) {
91             soTaskProcessor.processOrderItem(executionTask);
92         }
93     }
94 }