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