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());
64 * @param componentInstInputsMap
68 public Either<InputDefinition, StorageOperationStatus> declarePropertiesToListInput(Component component, ComponentInstInputsMap componentInstInputsMap, InputDefinition input) {
69 PropertyDeclarator propertyDeclarator = getPropertyDeclarator(componentInstInputsMap);
70 Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
71 log.debug("#declarePropertiesToInputs: componentId={}, propOwnerId={}", component.getUniqueId(), propsToDeclare.getLeft());
72 return propertyDeclarator.declarePropertiesAsListInput(component, propsToDeclare.getLeft(), propsToDeclare.getRight(), input);
75 public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputToDelete) {
76 log.debug("#unDeclarePropertiesAsInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
77 for (PropertyDeclarator propertyDeclarator : propertyDeclaratorsToInput) {
78 StorageOperationStatus storageOperationStatus = propertyDeclarator.unDeclarePropertiesAsInputs(component, inputToDelete);
79 if (StorageOperationStatus.OK != storageOperationStatus) {
80 log.debug("#unDeclarePropertiesAsInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
81 return storageOperationStatus;
84 return StorageOperationStatus.OK;
88 * Un declare properties declared as list type input
91 * @param inputToDelete
94 public StorageOperationStatus unDeclarePropertiesAsListInputs(Component component, InputDefinition inputToDelete) {
95 log.debug("#unDeclarePropertiesAsListInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
96 for (PropertyDeclarator propertyDeclarator : propertyDeclaratorsToInput) {
97 StorageOperationStatus storageOperationStatus = propertyDeclarator.unDeclarePropertiesAsListInputs(component, inputToDelete);
98 if (StorageOperationStatus.OK != storageOperationStatus) {
99 log.debug("#unDeclarePropertiesAsListInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
100 return storageOperationStatus;
103 return StorageOperationStatus.OK;
108 * Get properties owner id
110 * @param componentInstInputsMap
113 public String getPropOwnerId(ComponentInstInputsMap componentInstInputsMap) {
114 Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
115 return propsToDeclare.getLeft();
118 public StorageOperationStatus unDeclarePropertiesAsPolicies(Component component, PolicyDefinition policyToDelete) {
119 log.debug("#unDeclarePropertiesAsInputs - removing policy declaration for input {} on component {}", policyToDelete
120 .getName(), component.getUniqueId());
121 for(PropertyDeclarator propertyDeclarator : propertyDeclaratorsToPolicy) {
122 StorageOperationStatus storageOperationStatus =
123 propertyDeclarator.unDeclarePropertiesAsPolicies(component, policyToDelete);
124 if (StorageOperationStatus.OK != storageOperationStatus) {
125 log.debug("#unDeclarePropertiesAsInputs - failed to remove policy declaration for policy {} on component {}. reason {}", policyToDelete
126 .getName(), component.getUniqueId(), storageOperationStatus);
127 return storageOperationStatus;
131 return StorageOperationStatus.OK;
135 private PropertyDeclarator getPropertyDeclarator(ComponentInstInputsMap componentInstInputsMap) {
136 if (isNotEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
137 return componentInstanceInputPropertyDeclarator;
139 if (isNotEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
140 return componentInstancePropertyDeclarator;
142 if (isNotEmpty(componentInstInputsMap.getPolicyProperties())) {
143 return policyPropertyDeclarator;
145 if (isNotEmpty(componentInstInputsMap.getGroupProperties())) {
146 return groupPropertyDeclarator;
148 if(isNotEmpty(componentInstInputsMap.getServiceProperties())) {
149 return servicePropertyDeclarator;
151 if(isNotEmpty(componentInstInputsMap.getComponentPropertiesToPolicies())) {
152 return componentPropertyToPolicyDeclarator;
154 if(isNotEmpty(componentInstInputsMap.getComponentInstancePropertiesToPolicies())) {
155 return componentInstancePropertyToPolicyDeclarator;
157 throw new IllegalStateException("there are no properties selected for declaration");