3a32559dda1110ab5fc8ab6432a3627908e2af48
[sdc.git] /
1 package org.openecomp.sdc.be.components.property;
2
3 import static org.apache.commons.collections.MapUtils.isNotEmpty;
4
5 import fj.data.Either;
6 import java.util.Arrays;
7 import java.util.List;
8 import org.apache.commons.lang3.tuple.Pair;
9 import org.openecomp.sdc.be.components.property.propertytopolicydeclarators.ComponentInstancePropertyToPolicyDeclarator;
10 import org.openecomp.sdc.be.components.property.propertytopolicydeclarators.ComponentPropertyToPolicyDeclarator;
11 import org.openecomp.sdc.be.model.Component;
12 import org.openecomp.sdc.be.model.ComponentInstInputsMap;
13 import org.openecomp.sdc.be.model.ComponentInstancePropInput;
14 import org.openecomp.sdc.be.model.InputDefinition;
15 import org.openecomp.sdc.be.model.PolicyDefinition;
16 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
17 import org.openecomp.sdc.common.log.wrappers.Logger;
18
19 @org.springframework.stereotype.Component
20 public class PropertyDeclarationOrchestrator {
21
22     private static final Logger log = Logger.getLogger(PropertyDeclarationOrchestrator.class);
23     private ComponentInstanceInputPropertyDeclarator componentInstanceInputPropertyDeclarator;
24     private ComponentInstancePropertyDeclarator componentInstancePropertyDeclarator;
25     private PolicyPropertyDeclarator policyPropertyDeclarator;
26     private GroupPropertyDeclarator groupPropertyDeclarator;
27     private ComponentPropertyDeclarator servicePropertyDeclarator;
28     private List<PropertyDeclarator> propertyDeclaratorsToInput;
29     private List<PropertyDeclarator> propertyDeclaratorsToPolicy;
30     private ComponentPropertyToPolicyDeclarator componentPropertyToPolicyDeclarator;
31     private ComponentInstancePropertyToPolicyDeclarator componentInstancePropertyToPolicyDeclarator;
32
33     public PropertyDeclarationOrchestrator(ComponentInstanceInputPropertyDeclarator componentInstanceInputPropertyDeclarator,
34             ComponentInstancePropertyDeclarator componentInstancePropertyDeclarator, PolicyPropertyDeclarator policyPropertyDeclarator,
35             GroupPropertyDeclarator groupPropertyDeclarator, ComponentPropertyDeclarator servicePropertyDeclarator,
36             ComponentPropertyToPolicyDeclarator componentPropertyToPolicyDeclarator,
37             ComponentInstancePropertyToPolicyDeclarator componentInstancePropertyToPolicyDeclarator) {
38         this.componentInstanceInputPropertyDeclarator = componentInstanceInputPropertyDeclarator;
39         this.componentInstancePropertyDeclarator = componentInstancePropertyDeclarator;
40         this.policyPropertyDeclarator = policyPropertyDeclarator;
41         this.groupPropertyDeclarator = groupPropertyDeclarator;
42         this.servicePropertyDeclarator = servicePropertyDeclarator;
43         this.componentPropertyToPolicyDeclarator = componentPropertyToPolicyDeclarator;
44         this.componentInstancePropertyToPolicyDeclarator = componentInstancePropertyToPolicyDeclarator;
45         propertyDeclaratorsToInput = Arrays.asList(componentInstanceInputPropertyDeclarator, componentInstancePropertyDeclarator, policyPropertyDeclarator, groupPropertyDeclarator, servicePropertyDeclarator);
46         propertyDeclaratorsToPolicy = Arrays.asList(componentPropertyToPolicyDeclarator, componentInstancePropertyToPolicyDeclarator);
47     }
48
49     public Either<List<InputDefinition>, StorageOperationStatus> declarePropertiesToInputs(Component component, ComponentInstInputsMap componentInstInputsMap) {
50         PropertyDeclarator propertyDeclarator = getPropertyDeclarator(componentInstInputsMap);
51         Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
52         return propertyDeclarator.declarePropertiesAsInputs(component, propsToDeclare.getLeft(), propsToDeclare.getRight());
53     }
54
55     public Either<List<PolicyDefinition>, StorageOperationStatus> declarePropertiesToPolicies(Component component, ComponentInstInputsMap componentInstInputsMap) {
56         PropertyDeclarator propertyDeclarator = getPropertyDeclarator(componentInstInputsMap);
57         Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
58         return propertyDeclarator.declarePropertiesAsPolicies(component, propsToDeclare.getLeft(), propsToDeclare.getRight());
59     }
60
61     public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputToDelete) {
62         log.debug("#unDeclarePropertiesAsInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
63         for (PropertyDeclarator propertyDeclarator : propertyDeclaratorsToInput) {
64             StorageOperationStatus storageOperationStatus = propertyDeclarator.unDeclarePropertiesAsInputs(component, inputToDelete);
65             if (StorageOperationStatus.OK != storageOperationStatus) {
66                 log.debug("#unDeclarePropertiesAsInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
67                 return storageOperationStatus;
68             }
69         }
70         return StorageOperationStatus.OK;
71
72     }
73
74     public StorageOperationStatus unDeclarePropertiesAsPolicies(Component component, PolicyDefinition policyToDelete) {
75         log.debug("#unDeclarePropertiesAsInputs - removing policy declaration for input {} on component {}", policyToDelete
76                                                                                                                      .getName(), component.getUniqueId());
77         for(PropertyDeclarator propertyDeclarator : propertyDeclaratorsToPolicy) {
78             StorageOperationStatus storageOperationStatus =
79                     propertyDeclarator.unDeclarePropertiesAsPolicies(component, policyToDelete);
80             if (StorageOperationStatus.OK != storageOperationStatus) {
81                 log.debug("#unDeclarePropertiesAsInputs - failed to remove policy declaration for policy {} on component {}. reason {}", policyToDelete
82                                                                                                                                                  .getName(), component.getUniqueId(), storageOperationStatus);
83                 return storageOperationStatus;
84             }
85         }
86
87         return StorageOperationStatus.OK;
88
89     }
90
91     private PropertyDeclarator getPropertyDeclarator(ComponentInstInputsMap componentInstInputsMap) {
92         if (isNotEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
93             return componentInstanceInputPropertyDeclarator;
94         }
95         if (isNotEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
96             return componentInstancePropertyDeclarator;
97         }
98         if (isNotEmpty(componentInstInputsMap.getPolicyProperties())) {
99             return policyPropertyDeclarator;
100         }
101         if (isNotEmpty(componentInstInputsMap.getGroupProperties())) {
102             return groupPropertyDeclarator;
103         }
104         if(isNotEmpty(componentInstInputsMap.getServiceProperties())) {
105             return servicePropertyDeclarator;
106         }
107         if(isNotEmpty(componentInstInputsMap.getComponentPropertiesToPolicies())) {
108             return componentPropertyToPolicyDeclarator;
109         }
110         if(isNotEmpty(componentInstInputsMap.getComponentInstancePropertiesToPolicies())) {
111             return componentInstancePropertyToPolicyDeclarator;
112         }
113         throw new IllegalStateException("there are no properties selected for declaration");
114
115     }
116
117 }