babddc4da10fc40c680e534668d907fe5a1698b7
[sdc.git] /
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 ComponentPropertyDeclarator servicePropertyDeclarator;
26     private List<PropertyDeclarator> propertyDeclarators;
27
28     public PropertyDeclarationOrchestrator(
29         ComponentInstanceInputPropertyDeclarator componentInstanceInputPropertyDeclarator,
30         ComponentInstancePropertyDeclarator componentInstancePropertyDeclarator,
31         PolicyPropertyDeclarator policyPropertyDeclarator,
32         GroupPropertyDeclarator groupPropertyDeclarator,
33         ComponentPropertyDeclarator servicePropertyDeclarator) {
34         this.componentInstanceInputPropertyDeclarator = componentInstanceInputPropertyDeclarator;
35         this.componentInstancePropertyDeclarator = componentInstancePropertyDeclarator;
36         this.policyPropertyDeclarator = policyPropertyDeclarator;
37         this.groupPropertyDeclarator = groupPropertyDeclarator;
38         this.servicePropertyDeclarator = servicePropertyDeclarator;
39         propertyDeclarators = Arrays.asList(componentInstanceInputPropertyDeclarator, componentInstancePropertyDeclarator, policyPropertyDeclarator, groupPropertyDeclarator, servicePropertyDeclarator);
40     }
41
42     public Either<List<InputDefinition>, StorageOperationStatus> declarePropertiesToInputs(Component component, ComponentInstInputsMap componentInstInputsMap) {
43         PropertyDeclarator propertyDeclarator = getPropertyDeclarator(componentInstInputsMap);
44         Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
45         return propertyDeclarator.declarePropertiesAsInputs(component, propsToDeclare.getLeft(), propsToDeclare.getRight());
46     }
47
48     public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputToDelete) {
49         log.debug("#unDeclarePropertiesAsInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
50         for (PropertyDeclarator propertyDeclarator : propertyDeclarators) {
51             StorageOperationStatus storageOperationStatus = propertyDeclarator.unDeclarePropertiesAsInputs(component, inputToDelete);
52             if (StorageOperationStatus.OK != storageOperationStatus) {
53                 log.debug("#unDeclarePropertiesAsInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
54                 return storageOperationStatus;
55             }
56         }
57         return StorageOperationStatus.OK;
58
59     }
60
61     private PropertyDeclarator getPropertyDeclarator(ComponentInstInputsMap componentInstInputsMap) {
62         if (isNotEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
63             return componentInstanceInputPropertyDeclarator;
64         }
65         if (isNotEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
66             return componentInstancePropertyDeclarator;
67         }
68         if (isNotEmpty(componentInstInputsMap.getPolicyProperties())) {
69             return policyPropertyDeclarator;
70         }
71         if (isNotEmpty(componentInstInputsMap.getGroupProperties())) {
72             return groupPropertyDeclarator;
73         }
74         if(isNotEmpty(componentInstInputsMap.getServiceProperties())) {
75             return servicePropertyDeclarator;
76         }
77         throw new IllegalStateException("there are no properties selected for declaration");
78
79     }
80
81 }