1 package org.openecomp.sdc.be.components.property;
4 import org.apache.commons.collections.MapUtils;
5 import org.apache.commons.lang3.tuple.Pair;
6 import org.openecomp.sdc.be.model.Component;
7 import org.openecomp.sdc.be.model.ComponentInstInputsMap;
8 import org.openecomp.sdc.be.model.ComponentInstancePropInput;
9 import org.openecomp.sdc.be.model.InputDefinition;
10 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
14 import java.util.Arrays;
15 import java.util.List;
17 @org.springframework.stereotype.Component
18 public class PropertyDecelerationOrchestrator {
20 private static final Logger log = LoggerFactory.getLogger(PropertyDecelerationOrchestrator.class);
21 private ComponentInstanceInputPropertyDecelerator componentInstanceInputPropertyDecelerator;
22 private ComponentInstancePropertyDecelerator componentInstancePropertyDecelerator;
23 private PolicyPropertyDecelerator policyPropertyDecelerator;
24 private List<PropertyDecelerator> propertyDecelerators;
26 public PropertyDecelerationOrchestrator(ComponentInstanceInputPropertyDecelerator componentInstanceInputPropertyDecelerator, ComponentInstancePropertyDecelerator componentInstancePropertyDecelerator, PolicyPropertyDecelerator policyPropertyDecelerator) {
27 this.componentInstanceInputPropertyDecelerator = componentInstanceInputPropertyDecelerator;
28 this.componentInstancePropertyDecelerator = componentInstancePropertyDecelerator;
29 this.policyPropertyDecelerator = policyPropertyDecelerator;
30 propertyDecelerators = Arrays.asList(componentInstanceInputPropertyDecelerator, componentInstancePropertyDecelerator, policyPropertyDecelerator);
33 public Either<List<InputDefinition>, StorageOperationStatus> declarePropertiesToInputs(Component component, ComponentInstInputsMap componentInstInputsMap) {
34 PropertyDecelerator propertyDecelerator = getPropertyDecelerator(componentInstInputsMap);
35 Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
36 return propertyDecelerator.declarePropertiesAsInputs(component, propsToDeclare.getLeft(), propsToDeclare.getRight());
39 public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputToDelete) {
40 log.debug("#unDeclarePropertiesAsInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
41 for (PropertyDecelerator propertyDecelerator : propertyDecelerators) {
42 StorageOperationStatus storageOperationStatus = propertyDecelerator.unDeclarePropertiesAsInputs(component, inputToDelete);
43 if (StorageOperationStatus.OK != storageOperationStatus) {
44 log.debug("#unDeclarePropertiesAsInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
45 return storageOperationStatus;
48 return StorageOperationStatus.OK;
52 private PropertyDecelerator getPropertyDecelerator(ComponentInstInputsMap componentInstInputsMap) {
53 if (!MapUtils.isEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
54 return componentInstanceInputPropertyDecelerator;
56 if (!MapUtils.isEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
57 return componentInstancePropertyDecelerator;
59 if (!MapUtils.isEmpty(componentInstInputsMap.getPolicyProperties())) {
60 return policyPropertyDecelerator;
62 throw new IllegalStateException("there are no properties selected for deceleration");