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 List<PropertyDeclarator> propertyDeclarators;
27 public PropertyDeclarationOrchestrator(ComponentInstanceInputPropertyDeclarator componentInstanceInputPropertyDeclarator, ComponentInstancePropertyDeclarator componentInstancePropertyDeclarator, PolicyPropertyDeclarator policyPropertyDeclarator, GroupPropertyDeclarator groupPropertyDeclarator) {
28 this.componentInstanceInputPropertyDeclarator = componentInstanceInputPropertyDeclarator;
29 this.componentInstancePropertyDeclarator = componentInstancePropertyDeclarator;
30 this.policyPropertyDeclarator = policyPropertyDeclarator;
31 this.groupPropertyDeclarator = groupPropertyDeclarator;
32 propertyDeclarators = Arrays.asList(componentInstanceInputPropertyDeclarator, componentInstancePropertyDeclarator, policyPropertyDeclarator, groupPropertyDeclarator);
35 public Either<List<InputDefinition>, StorageOperationStatus> declarePropertiesToInputs(Component component, ComponentInstInputsMap componentInstInputsMap) {
36 PropertyDeclarator propertyDeclarator = getPropertyDeclarator(componentInstInputsMap);
37 Pair<String, List<ComponentInstancePropInput>> propsToDeclare = componentInstInputsMap.resolvePropertiesToDeclare();
38 return propertyDeclarator.declarePropertiesAsInputs(component, propsToDeclare.getLeft(), propsToDeclare.getRight());
41 public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputToDelete) {
42 log.debug("#unDeclarePropertiesAsInputs - removing input declaration for input {} on component {}", inputToDelete.getName(), component.getUniqueId());
43 for (PropertyDeclarator propertyDeclarator : propertyDeclarators) {
44 StorageOperationStatus storageOperationStatus = propertyDeclarator.unDeclarePropertiesAsInputs(component, inputToDelete);
45 if (StorageOperationStatus.OK != storageOperationStatus) {
46 log.debug("#unDeclarePropertiesAsInputs - failed to remove input declaration for input {} on component {}. reason {}", inputToDelete.getName(), component.getUniqueId(), storageOperationStatus);
47 return storageOperationStatus;
50 return StorageOperationStatus.OK;
54 private PropertyDeclarator getPropertyDeclarator(ComponentInstInputsMap componentInstInputsMap) {
55 if (isNotEmpty(componentInstInputsMap.getComponentInstanceInputsMap())) {
56 return componentInstanceInputPropertyDeclarator;
58 if (isNotEmpty(componentInstInputsMap.getComponentInstanceProperties())) {
59 return componentInstancePropertyDeclarator;
61 if (isNotEmpty(componentInstInputsMap.getPolicyProperties())) {
62 return policyPropertyDeclarator;
64 if (isNotEmpty(componentInstInputsMap.getGroupProperties())) {
65 return groupPropertyDeclarator;
67 throw new IllegalStateException("there are no properties selected for declaration");