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 StorageOperationStatus unDeclarePropertiesAsListInputs(Component component, InputDefinition input) {
69 // no need for implementation since we are in a policy scenario
70 return StorageOperationStatus.OK;
74 public void addPropertiesListToInput(PropertyDataDefinition declaredProp, InputDefinition input) {
75 // no need for implementation since we are in a policy scenario
79 public StorageOperationStatus unDeclarePropertiesAsPolicies(Component component, PolicyDefinition policy) {
80 Optional<PropertyDefinition> propertyToUpdateCandidate =
81 getDeclaredPropertyByPolicyId(component, policy.getUniqueId());
83 if(propertyToUpdateCandidate.isPresent()) {
84 return unDeclarePolicy(component, propertyToUpdateCandidate.get(), policy);
87 return StorageOperationStatus.OK;
90 private StorageOperationStatus unDeclarePolicy(Component component, PropertyDefinition propertyToUpdate, PolicyDefinition policy) {
91 updatePropertyAfterUndeclaration(propertyToUpdate, policy);
93 Either<PropertyDefinition, StorageOperationStatus> status = toscaOperationFacade
94 .updatePropertyOfComponent(component, propertyToUpdate);
95 if(status.isRight()) {
96 return status.right().value();
99 return StorageOperationStatus.OK;
102 private void updatePropertyAfterUndeclaration(PropertyDefinition propertyToUpdate, PolicyDefinition policy) {
103 List<GetPolicyValueDataDefinition> getPolicyValues = propertyToUpdate.getGetPolicyValues();
104 Optional<GetPolicyValueDataDefinition> getPolicyCandidateToRemove = getPolicyValues.stream()
105 .filter(getPolicyValue -> getPolicyValue.getPolicyId()
106 .equals(policy.getUniqueId()))
109 getPolicyCandidateToRemove.ifPresent(getPolicyValue -> {
110 getPolicyValues.remove(getPolicyValue);
111 propertyToUpdate.setValue(getPolicyValue.getOrigPropertyValue());
115 private Optional<PropertyDefinition> getDeclaredPropertyByPolicyId(Component component,
117 List<PropertyDefinition> properties = component.getProperties();
119 if(CollectionUtils.isEmpty(properties)) {
120 return Optional.empty();
123 for(PropertyDefinition propertyDefinition : properties) {
124 List<GetPolicyValueDataDefinition> getPolicyValues = propertyDefinition.getGetPolicyValues();
125 if(CollectionUtils.isEmpty(getPolicyValues)) {
130 Optional<GetPolicyValueDataDefinition> getPolicyCandidate =
131 getPolicyValues.stream().filter(getPolicy -> getPolicy.getPolicyId().equals(policyId)).findAny();
133 if(getPolicyCandidate.isPresent()) {
134 propertyDefinition.setValue(getPolicyCandidate.get().getOrigPropertyValue());
135 return Optional.of(propertyDefinition);
139 return Optional.empty();