Workflow Docker containers
[sdc/sdc-workflow-designer.git] / workflow / workflow-designer-be / src / main / java / org / onap / sdc / workflow / services / impl / WorkflowManagerImpl.java
1 package org.onap.sdc.workflow.services.impl;
2
3 import java.util.Collection;
4 import java.util.function.Predicate;
5 import java.util.stream.Collectors;
6 import org.onap.sdc.workflow.persistence.types.Workflow;
7 import org.onap.sdc.workflow.services.UniqueValueService;
8 import org.onap.sdc.workflow.services.WorkflowManager;
9 import org.onap.sdc.workflow.services.exceptions.EntityNotFoundException;
10 import org.onap.sdc.workflow.services.impl.mappers.WorkflowMapper;
11 import org.openecomp.sdc.versioning.ItemManager;
12 import org.openecomp.sdc.versioning.types.Item;
13 import org.openecomp.sdc.versioning.types.ItemStatus;
14 import org.springframework.beans.factory.annotation.Autowired;
15 import org.springframework.beans.factory.annotation.Qualifier;
16 import org.springframework.stereotype.Service;
17
18 @Service("workflowManager")
19 public class WorkflowManagerImpl implements WorkflowManager {
20
21     public static final String WORKFLOW_TYPE = "WORKFLOW";
22     private static final String WORKFLOW_NOT_FOUND_ERROR_MSG = "Workflow with id '%s' does not exist";
23     private static final String WORKFLOW_NAME_UNIQUE_TYPE = "WORKFLOW_NAME";
24     static final Predicate<Item> ITEM_PREDICATE = item -> WORKFLOW_TYPE.equals(item.getType());
25
26     private final ItemManager itemManager;
27     private final UniqueValueService uniqueValueService;
28     private final WorkflowMapper workflowMapper;
29
30     @Autowired
31     public WorkflowManagerImpl(ItemManager itemManager,
32             @Qualifier("uniqueValueService") UniqueValueService uniqueValueService, WorkflowMapper workflowMapper) {
33         this.itemManager = itemManager;
34         this.uniqueValueService = uniqueValueService;
35         this.workflowMapper = workflowMapper;
36     }
37
38     @Override
39     public Collection<Workflow> list() {
40         return itemManager.list(ITEM_PREDICATE).stream().map(workflowMapper::itemToWorkflow)
41                           .collect(Collectors.toList());
42     }
43
44     @Override
45     public Workflow get(Workflow workflow) {
46         Item retrievedItem = itemManager.get(workflow.getId());
47         if (retrievedItem == null) {
48             throw new EntityNotFoundException(String.format(WORKFLOW_NOT_FOUND_ERROR_MSG, workflow.getId()));
49         }
50         return this.workflowMapper.itemToWorkflow(retrievedItem);
51     }
52
53     @Override
54     public Workflow create(Workflow workflow) {
55         Item item = workflowMapper.workflowToItem(workflow);
56         item.setStatus(ItemStatus.ACTIVE);
57
58         uniqueValueService.validateUniqueValue(WORKFLOW_NAME_UNIQUE_TYPE, new String[] {workflow.getName()});
59         workflow.setId(itemManager.create(item).getId());
60         uniqueValueService.createUniqueValue(WORKFLOW_NAME_UNIQUE_TYPE, new String[] {workflow.getName()});
61         return workflow;
62     }
63
64     @Override
65     public void update(Workflow workflow) {
66         Item retrievedItem = itemManager.get(workflow.getId());
67         if (retrievedItem == null) {
68             throw new EntityNotFoundException(String.format(WORKFLOW_NOT_FOUND_ERROR_MSG, workflow.getId()));
69         }
70
71         uniqueValueService.updateUniqueValue(WORKFLOW_NAME_UNIQUE_TYPE, retrievedItem.getName(), workflow.getName());
72
73         Item item = workflowMapper.workflowToItem(workflow);
74         item.setId(workflow.getId());
75         item.setStatus(retrievedItem.getStatus());
76         item.setVersionStatusCounters(retrievedItem.getVersionStatusCounters());
77         itemManager.update(item);
78     }
79 }