1 package org.openecomp.sdc.be.components.property;
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;
12 import java.util.Arrays;
13 import java.util.List;
15 import static org.apache.commons.collections.MapUtils.isNotEmpty;
17 @org.springframework.stereotype.Component
18 public class PropertyDeclarationOrchestrator {
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;
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);
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());
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;
57 return StorageOperationStatus.OK;
61 private PropertyDeclarator getPropertyDeclarator(ComponentInstInputsMap componentInstInputsMap) {
62 if (isNotEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
63 return componentInstanceInputPropertyDeclarator;
65 if (isNotEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
66 return componentInstancePropertyDeclarator;
68 if (isNotEmpty(componentInstInputsMap.getPolicyProperties())) {
69 return policyPropertyDeclarator;
71 if (isNotEmpty(componentInstInputsMap.getGroupProperties())) {
72 return groupPropertyDeclarator;
74 if(isNotEmpty(componentInstInputsMap.getServiceProperties())) {
75 return servicePropertyDeclarator;
77 throw new IllegalStateException("there are no properties selected for declaration");