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