Refactoring Consolidation Service
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / property / PropertyDecelerationOrchestrator.java
1 package org.openecomp.sdc.be.components.property;
2
3 import java.util.Arrays;
4 import java.util.List;
5
6 import org.apache.commons.collections.MapUtils;
7 import org.apache.commons.lang3.tuple.Pair;
8 import org.openecomp.sdc.be.model.Component;
9 import org.openecomp.sdc.be.model.ComponentInstInputsMap;
10 import org.openecomp.sdc.be.model.ComponentInstancePropInput;
11 import org.openecomp.sdc.be.model.InputDefinition;
12 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import fj.data.Either;
17
18 @org.springframework.stereotype.Component
19 public class PropertyDecelerationOrchestrator {
20
21     private static final Logger log = LoggerFactory.getLogger(PropertyDecelerationOrchestrator.class);
22     private ComponentInstanceInputPropertyDecelerator componentInstanceInputPropertyDecelerator;
23     private ComponentInstancePropertyDecelerator componentInstancePropertyDecelerator;
24     private PolicyPropertyDecelerator policyPropertyDecelerator;
25     private List<PropertyDecelerator> propertyDecelerators;
26
27     public PropertyDecelerationOrchestrator(ComponentInstanceInputPropertyDecelerator componentInstanceInputPropertyDecelerator, ComponentInstancePropertyDecelerator componentInstancePropertyDecelerator, PolicyPropertyDecelerator policyPropertyDecelerator) {
28         this.componentInstanceInputPropertyDecelerator = componentInstanceInputPropertyDecelerator;
29         this.componentInstancePropertyDecelerator = componentInstancePropertyDecelerator;
30         this.policyPropertyDecelerator = policyPropertyDecelerator;
31         propertyDecelerators = Arrays.asList(componentInstanceInputPropertyDecelerator, componentInstancePropertyDecelerator, policyPropertyDecelerator);
32     }
33
34     public Either<List<InputDefinition>, StorageOperationStatus> declarePropertiesToInputs(Component component, ComponentInstInputsMap componentInstInputsMap) {
35         PropertyDecelerator propertyDecelerator = getPropertyDecelerator(componentInstInputsMap);
36         Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
37         return propertyDecelerator.declarePropertiesAsInputs(component, propsToDeclare.getLeft(), propsToDeclare.getRight());
38     }
39
40     public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputToDelete) {
41         log.debug("#unDeclarePropertiesAsInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
42         for (PropertyDecelerator propertyDecelerator : propertyDecelerators) {
43             StorageOperationStatus storageOperationStatus = propertyDecelerator.unDeclarePropertiesAsInputs(component, inputToDelete);
44             if (StorageOperationStatus.OK != storageOperationStatus) {
45                 log.debug("#unDeclarePropertiesAsInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
46                 return storageOperationStatus;
47             }
48         }
49         return StorageOperationStatus.OK;
50
51     }
52
53     private PropertyDecelerator getPropertyDecelerator(ComponentInstInputsMap componentInstInputsMap) {
54         if (!MapUtils.isEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
55             return componentInstanceInputPropertyDecelerator;
56         }
57         if (!MapUtils.isEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
58             return componentInstancePropertyDecelerator;
59         }
60         if (!MapUtils.isEmpty(componentInstInputsMap.getPolicyProperties())) {
61             return policyPropertyDecelerator;
62         }
63         throw new IllegalStateException("there are no properties selected for deceleration");
64
65     }
66
67 }