1 package org.openecomp.sdc.be.components.property.propertytopolicydeclarators;
5 import java.util.Optional;
6 import org.apache.commons.collections4.CollectionUtils;
7 import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic;
8 import org.openecomp.sdc.be.components.property.DefaultPropertyDeclarator;
9 import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition;
10 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
11 import org.openecomp.sdc.be.impl.ComponentsUtils;
12 import org.openecomp.sdc.be.model.Component;
13 import org.openecomp.sdc.be.model.InputDefinition;
14 import org.openecomp.sdc.be.model.PolicyDefinition;
15 import org.openecomp.sdc.be.model.PropertyDefinition;
16 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
17 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
18 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
20 @org.springframework.stereotype.Component
21 public class ComponentPropertyToPolicyDeclarator extends DefaultPropertyDeclarator<Component, PropertyDataDefinition> {
23 private ToscaOperationFacade toscaOperationFacade;
24 PropertyBusinessLogic propertyBL;
27 public ComponentPropertyToPolicyDeclarator(ComponentsUtils componentsUtils, PropertyOperation propertyOperation,
28 ToscaOperationFacade toscaOperationFacade, PropertyBusinessLogic propertyBusinessLogic) {
29 super(componentsUtils, propertyOperation);
30 this.toscaOperationFacade = toscaOperationFacade;
31 this.propertyBL = propertyBusinessLogic;
35 public PropertyDataDefinition createDeclaredProperty(PropertyDataDefinition prop) {
36 return new PropertyDataDefinition(prop);
40 public Either<?, StorageOperationStatus> updatePropertiesValues(Component component, String policyId,
41 List<PropertyDataDefinition> properties) {
42 if(CollectionUtils.isNotEmpty(properties)) {
43 for(PropertyDataDefinition property : properties) {
44 Either<PropertyDefinition, StorageOperationStatus>
45 storageStatus = toscaOperationFacade
46 .updatePropertyOfComponent(component, new PropertyDefinition(property));
47 if(storageStatus.isRight()) {
48 return Either.right(storageStatus.right().value());
52 return Either.left(properties);
57 public Optional<Component> resolvePropertiesOwner(Component component, String propertyId) {
58 return Optional.of(component);
62 public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition input) {
63 // no need for implementation since we are in a policy scenario
64 return StorageOperationStatus.OK;
68 public void addPropertiesListToInput(PropertyDataDefinition declaredProp, InputDefinition input) {
69 // no need for implementation since we are in a policy scenario
74 public StorageOperationStatus unDeclarePropertiesAsPolicies(Component component, PolicyDefinition policy) {
75 Optional<PropertyDefinition> propertyToUpdateCandidate =
76 getDeclaredPropertyByPolicyId(component, policy.getUniqueId());
78 if(propertyToUpdateCandidate.isPresent()) {
79 return unDeclarePolicy(component, propertyToUpdateCandidate.get(), policy);
82 return StorageOperationStatus.OK;
85 private StorageOperationStatus unDeclarePolicy(Component component, PropertyDefinition propertyToUpdate, PolicyDefinition policy) {
86 updatePropertyAfterUndeclaration(propertyToUpdate, policy);
88 Either<PropertyDefinition, StorageOperationStatus> status = toscaOperationFacade
89 .updatePropertyOfComponent(component, propertyToUpdate);
90 if(status.isRight()) {
91 return status.right().value();
94 return StorageOperationStatus.OK;
97 private void updatePropertyAfterUndeclaration(PropertyDefinition propertyToUpdate, PolicyDefinition policy) {
98 List<GetPolicyValueDataDefinition> getPolicyValues = propertyToUpdate.getGetPolicyValues();
99 Optional<GetPolicyValueDataDefinition> getPolicyCandidateToRemove = getPolicyValues.stream()
100 .filter(getPolicyValue -> getPolicyValue.getPolicyId()
101 .equals(policy.getUniqueId()))
104 getPolicyCandidateToRemove.ifPresent(getPolicyValue -> {
105 getPolicyValues.remove(getPolicyValue);
106 propertyToUpdate.setValue(getPolicyValue.getOrigPropertyValue());
110 private Optional<PropertyDefinition> getDeclaredPropertyByPolicyId(Component component,
112 List<PropertyDefinition> properties = component.getProperties();
114 if(CollectionUtils.isEmpty(properties)) {
115 return Optional.empty();
118 for(PropertyDefinition propertyDefinition : properties) {
119 List<GetPolicyValueDataDefinition> getPolicyValues = propertyDefinition.getGetPolicyValues();
120 if(CollectionUtils.isEmpty(getPolicyValues)) {
125 Optional<GetPolicyValueDataDefinition> getPolicyCandidate =
126 getPolicyValues.stream().filter(getPolicy -> getPolicy.getPolicyId().equals(policyId)).findAny();
128 if(getPolicyCandidate.isPresent()) {
129 propertyDefinition.setValue(getPolicyCandidate.get().getOrigPropertyValue());
130 return Optional.of(propertyDefinition);
134 return Optional.empty();