1 package org.openecomp.sdc.be.components.property;
3 import static org.apache.commons.collections.MapUtils.isNotEmpty;
6 import java.util.Arrays;
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;
19 @org.springframework.stereotype.Component
20 public class PropertyDeclarationOrchestrator {
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;
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);
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());
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());
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;
70 return StorageOperationStatus.OK;
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;
87 return StorageOperationStatus.OK;
91 private PropertyDeclarator getPropertyDeclarator(ComponentInstInputsMap componentInstInputsMap) {
92 if (isNotEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
93 return componentInstanceInputPropertyDeclarator;
95 if (isNotEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
96 return componentInstancePropertyDeclarator;
98 if (isNotEmpty(componentInstInputsMap.getPolicyProperties())) {
99 return policyPropertyDeclarator;
101 if (isNotEmpty(componentInstInputsMap.getGroupProperties())) {
102 return groupPropertyDeclarator;
104 if(isNotEmpty(componentInstInputsMap.getServiceProperties())) {
105 return servicePropertyDeclarator;
107 if(isNotEmpty(componentInstInputsMap.getComponentPropertiesToPolicies())) {
108 return componentPropertyToPolicyDeclarator;
110 if(isNotEmpty(componentInstInputsMap.getComponentInstancePropertiesToPolicies())) {
111 return componentInstancePropertyToPolicyDeclarator;
113 throw new IllegalStateException("there are no properties selected for declaration");