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