summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/property/PolicyPropertyDecelerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/property/PolicyPropertyDecelerator.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/property/PolicyPropertyDecelerator.java130
1 files changed, 130 insertions, 0 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/property/PolicyPropertyDecelerator.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/property/PolicyPropertyDecelerator.java
new file mode 100644
index 0000000000..be3c82fa09
--- /dev/null
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/property/PolicyPropertyDecelerator.java
@@ -0,0 +1,130 @@
+package org.openecomp.sdc.be.components.property;
+
+import fj.data.Either;
+import org.apache.commons.collections.CollectionUtils;
+import org.openecomp.sdc.be.datatypes.elements.PolicyDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
+import org.openecomp.sdc.be.impl.ComponentsUtils;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.ComponentInstanceProperty;
+import org.openecomp.sdc.be.model.InputDefinition;
+import org.openecomp.sdc.be.model.PolicyDefinition;
+import org.openecomp.sdc.be.model.jsontitan.operations.PolicyOperation;
+import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
+import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import static org.openecomp.sdc.be.components.property.GetInputUtils.isGetInputValueForInput;
+
+@org.springframework.stereotype.Component
+public class PolicyPropertyDecelerator extends DefaultPropertyDecelerator<PolicyDefinition, PropertyDataDefinition> {
+
+ private static final Logger log = LoggerFactory.getLogger(PolicyPropertyDecelerator.class);
+ private PolicyOperation policyOperation;
+
+ public PolicyPropertyDecelerator(ComponentsUtils componentsUtils, PropertyOperation propertyOperation, PolicyOperation policyOperation) {
+ super(componentsUtils, propertyOperation);
+ this.policyOperation = policyOperation;
+ }
+
+ @Override
+ PropertyDataDefinition createDeclaredProperty(PropertyDataDefinition prop) {
+ return new PropertyDataDefinition(prop);
+ }
+
+ @Override
+ Either<?, StorageOperationStatus> updatePropertiesValues(Component component, String policyId, List<PropertyDataDefinition> properties) {
+ log.debug("#updatePropertiesValues - updating policies properties for policy {} on component {}", policyId, component.getUniqueId());
+ StorageOperationStatus updateStatus = policyOperation.updatePolicyProperties(component, policyId, properties);
+ return updateStatus == StorageOperationStatus.OK ? Either.left(updateStatus) : Either.right(updateStatus);
+ }
+
+ @Override
+ Optional<PolicyDefinition> resolvePropertiesOwner(Component component, String policyId) {
+ log.debug("#resolvePropertiesOwner - fetching policy {} of component {}", policyId, component.getUniqueId());
+ return Optional.ofNullable(component.getPolicyById(policyId));
+ }
+
+ @Override
+ void addPropertiesListToInput(PropertyDataDefinition declaredProp, PropertyDataDefinition originalProp, InputDefinition input) {
+ List<ComponentInstanceProperty> propertiesList = input.getProperties();
+ if(propertiesList == null) {
+ propertiesList = new ArrayList<>(); // adding the property with the new value for UI
+ }
+ propertiesList.add(new ComponentInstanceProperty(declaredProp));
+ input.setProperties(propertiesList);
+
+ }
+
+ @Override
+ public StorageOperationStatus unDeclarePropertiesAsInputs(Component component, InputDefinition inputForDelete) {
+ return getPolicyPropertiesDeclaredAsInput(component, inputForDelete.getUniqueId())
+ .map(policyProperties -> unDeclarePolicyProperties(component, inputForDelete, policyProperties))
+ .orElse(StorageOperationStatus.OK);
+ }
+
+ private StorageOperationStatus unDeclarePolicyProperties(Component container, InputDefinition input, PolicyProperties policyProperties) {
+ String policyId = policyProperties.getPolicyId();
+ List<PropertyDataDefinition> propsDeclaredAsInput = policyProperties.getProperties();
+ propsDeclaredAsInput.forEach(policyProp -> prepareValueBeforeDelete(input, policyProp, Collections.emptyList()));
+ return policyOperation.updatePolicyProperties(container, policyId, propsDeclaredAsInput);
+ }
+
+ private Optional<PolicyProperties> getPolicyPropertiesDeclaredAsInput(Component container, String inputId) {
+ if (container.getPolicies() == null) {
+ return Optional.empty();
+ }
+ return container.getPolicies().values()
+ .stream()
+ .filter(policy -> Objects.nonNull(policy.getProperties()))
+ .collect(Collectors.toMap(PolicyDataDefinition::getUniqueId,
+ p -> getPolicyPropertiesDeclaredAsInput(p, inputId)))
+ .entrySet()
+ .stream()
+ .filter(entry -> !entry.getValue().isEmpty())
+ .map(entry -> new PolicyProperties(entry.getKey(), entry.getValue()))
+ .findFirst();
+ }
+
+ private boolean isPropertyDeclaredAsInputByInputId(PropertyDataDefinition property, String inputId) {
+ if (CollectionUtils.isEmpty(property.getGetInputValues())) {
+ return false;
+ }
+ return property.getGetInputValues().stream()
+ .filter(Objects::nonNull)
+ .anyMatch(getInputVal -> isGetInputValueForInput(getInputVal, inputId));
+ }
+
+ private List<PropertyDataDefinition> getPolicyPropertiesDeclaredAsInput(PolicyDefinition policy, String inputId) {
+ return policy.getProperties()
+ .stream()
+ .filter(prop -> isPropertyDeclaredAsInputByInputId(prop, inputId))
+ .collect(Collectors.toList());
+ }
+
+ private class PolicyProperties {
+ private String policyId;
+ private List<PropertyDataDefinition> properties;
+
+ PolicyProperties(String policyId, List<PropertyDataDefinition> properties) {
+ this.policyId = policyId;
+ this.properties = properties;
+ }
+
+ String getPolicyId() {
+ return policyId;
+ }
+
+ public List<PropertyDataDefinition> getProperties() {
+ return properties;
+ }
+ }
+}