1 package org.openecomp.sdc.be.components.property;
4 import org.apache.commons.collections.CollectionUtils;
5 import org.openecomp.sdc.be.datatypes.elements.PolicyDataDefinition;
6 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
7 import org.openecomp.sdc.be.impl.ComponentsUtils;
8 import org.openecomp.sdc.be.model.Component;
9 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
10 import org.openecomp.sdc.be.model.InputDefinition;
11 import org.openecomp.sdc.be.model.PolicyDefinition;
12 import org.openecomp.sdc.be.model.jsontitan.operations.PolicyOperation;
13 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
14 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
18 import java.util.ArrayList;
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Objects;
22 import java.util.Optional;
23 import java.util.stream.Collectors;
25 import static org.openecomp.sdc.be.components.property.GetInputUtils.isGetInputValueForInput;
27 @org.springframework.stereotype.Component
28 public class PolicyPropertyDecelerator extends DefaultPropertyDecelerator<PolicyDefinition, PropertyDataDefinition> {
30 private static final Logger log = LoggerFactory.getLogger(PolicyPropertyDecelerator.class);
31 private PolicyOperation policyOperation;
33 public PolicyPropertyDecelerator(ComponentsUtils componentsUtils, PropertyOperation propertyOperation, PolicyOperation policyOperation) {
34 super(componentsUtils, propertyOperation);
35 this.policyOperation = policyOperation;
39 PropertyDataDefinition createDeclaredProperty(PropertyDataDefinition prop) {
40 return new PropertyDataDefinition(prop);
44 Either<?, StorageOperationStatus> updatePropertiesValues(Component component, String policyId, List<PropertyDataDefinition> properties) {
45 log.debug("#updatePropertiesValues - updating policies properties for policy {} on component {}", policyId, component.getUniqueId());
46 StorageOperationStatus updateStatus = policyOperation.updatePolicyProperties(component, policyId, properties);
47 return updateStatus == StorageOperationStatus.OK ? Either.left(updateStatus) : Either.right(updateStatus);
51 Optional<PolicyDefinition> resolvePropertiesOwner(Component component, String policyId) {
52 log.debug("#resolvePropertiesOwner - fetching policy {} of component {}", policyId, component.getUniqueId());
53 return Optional.ofNullable(component.getPolicyById(policyId));
57 void addPropertiesListToInput(PropertyDataDefinition declaredProp, PropertyDataDefinition originalProp, InputDefinition input) {
58 List<ComponentInstanceProperty> propertiesList = input.getProperties();
59 if(propertiesList == null) {
60 propertiesList = new ArrayList<>(); // adding the property with the new value for UI
62 propertiesList.add(new ComponentInstanceProperty(declaredProp));
63 input.setProperties(propertiesList);
68 public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputForDelete) {
69 return getPolicyPropertiesDeclaredAsInput(component, inputForDelete.getUniqueId())
70 .map(policyProperties -> unDeclarePolicyProperties(component, inputForDelete, policyProperties))
71 .orElse(StorageOperationStatus.OK);
74 private StorageOperationStatus unDeclarePolicyProperties(Component container, InputDefinition input, PolicyProperties policyProperties) {
75 String policyId = policyProperties.getPolicyId();
76 List<PropertyDataDefinition> propsDeclaredAsInput = policyProperties.getProperties();
77 propsDeclaredAsInput.forEach(policyProp -> prepareValueBeforeDelete(input, policyProp, Collections.emptyList()));
78 return policyOperation.updatePolicyProperties(container, policyId, propsDeclaredAsInput);
81 private Optional<PolicyProperties> getPolicyPropertiesDeclaredAsInput(Component container, String inputId) {
82 if (container.getPolicies() == null) {
83 return Optional.empty();
85 return container.getPolicies().values()
87 .filter(policy -> Objects.nonNull(policy.getProperties()))
88 .collect(Collectors.toMap(PolicyDataDefinition::getUniqueId,
89 p -> getPolicyPropertiesDeclaredAsInput(p, inputId)))
92 .filter(entry -> !entry.getValue().isEmpty())
93 .map(entry -> new PolicyProperties(entry.getKey(), entry.getValue()))
97 private boolean isPropertyDeclaredAsInputByInputId(PropertyDataDefinition property, String inputId) {
98 if (CollectionUtils.isEmpty(property.getGetInputValues())) {
101 return property.getGetInputValues().stream()
102 .filter(Objects::nonNull)
103 .anyMatch(getInputVal -> isGetInputValueForInput(getInputVal, inputId));
106 private List<PropertyDataDefinition> getPolicyPropertiesDeclaredAsInput(PolicyDefinition policy, String inputId) {
107 return policy.getProperties()
109 .filter(prop -> isPropertyDeclaredAsInputByInputId(prop, inputId))
110 .collect(Collectors.toList());
113 private class PolicyProperties {
114 private String policyId;
115 private List<PropertyDataDefinition> properties;
117 PolicyProperties(String policyId, List<PropertyDataDefinition> properties) {
118 this.policyId = policyId;
119 this.properties = properties;
122 String getPolicyId() {
126 public List<PropertyDataDefinition> getProperties() {