aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentCapabilitiesPropertiesMergeBL.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentCapabilitiesPropertiesMergeBL.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentCapabilitiesPropertiesMergeBL.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentCapabilitiesPropertiesMergeBL.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentCapabilitiesPropertiesMergeBL.java
new file mode 100644
index 0000000000..e7117a2aeb
--- /dev/null
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentCapabilitiesPropertiesMergeBL.java
@@ -0,0 +1,103 @@
+package org.openecomp.sdc.be.components.merge.instance;
+
+import fj.data.Either;
+import org.apache.commons.collections.CollectionUtils;
+import org.openecomp.sdc.be.components.merge.capability.CapabilityResolver;
+import org.openecomp.sdc.be.components.merge.property.DataDefinitionsValuesMergingBusinessLogic;
+import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.dao.utils.MapUtil;
+import org.openecomp.sdc.be.impl.ComponentsUtils;
+import org.openecomp.sdc.be.model.CapabilityDefinition;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.ComponentInstance;
+import org.openecomp.sdc.be.model.ComponentParametersView;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.Map;
+
+@org.springframework.stereotype.Component
+public class ComponentCapabilitiesPropertiesMergeBL implements ComponentsMergeCommand {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ComponentCapabilitiesPropertiesMergeBL.class);
+
+ private DataDefinitionsValuesMergingBusinessLogic dataDefinitionsValuesMergingBusinessLogic;
+ private ToscaOperationFacade toscaOperationFacade;
+ private ComponentsUtils componentsUtils;
+ private CapabilityResolver capabilityResolver;
+
+ public ComponentCapabilitiesPropertiesMergeBL(DataDefinitionsValuesMergingBusinessLogic dataDefinitionsValuesMergingBusinessLogic, ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, CapabilityResolver capabilityResolver) {
+ this.dataDefinitionsValuesMergingBusinessLogic = dataDefinitionsValuesMergingBusinessLogic;
+ this.toscaOperationFacade = toscaOperationFacade;
+ this.componentsUtils = componentsUtils;
+ this.capabilityResolver = capabilityResolver;
+ }
+
+ @Override
+ public String description() {
+ return "merge component instances capabilities properties";
+ }
+
+ @Override
+ public ActionStatus mergeComponents(Component prevComponent, Component currentComponent) {
+ StorageOperationStatus mergeStatus = getCmptWithCapabilitiesProps(currentComponent.getUniqueId())
+ .either(currCmptWithCap -> mergeCmptCalculatedCapabilitiesProperties(prevComponent, currCmptWithCap),
+ err -> err);
+ return componentsUtils.convertFromStorageResponse(mergeStatus);
+ }
+
+ public ActionStatus mergeComponentInstanceCapabilities(Component currentComponent, Component origInstanceCmpt, String instanceId, List<CapabilityDefinition> prevInstanceCapabilities) {
+ if (CollectionUtils.isEmpty(prevInstanceCapabilities)) {
+ return ActionStatus.OK;
+ }
+ Map<CapabilityDefinition, CapabilityDefinition> oldToNewCap = capabilityResolver.resolvePrevCapToNewCapability(currentComponent, origInstanceCmpt, instanceId, prevInstanceCapabilities);
+ oldToNewCap.forEach(this::mergeCapabilityProperties);
+ StorageOperationStatus updateStatus = updateInstanceCapabilitiesProperties(currentComponent, instanceId);
+ return componentsUtils.convertFromStorageResponse(updateStatus);
+ }
+
+ private StorageOperationStatus mergeCmptCalculatedCapabilitiesProperties(Component prevComponent, Component currentComponent) {
+ List<ComponentInstance> prevInstances = prevComponent.getComponentInstances();
+ if (prevInstances == null) {
+ return StorageOperationStatus.OK;
+ }
+ prevInstances.forEach(prevInstance -> mergeInstanceCapabilities(prevInstance, currentComponent));
+ return updateComponentCapabilitiesProperties(currentComponent);
+ }
+
+ private void mergeInstanceCapabilities(ComponentInstance prevInstance, Component currComponent) {
+ ComponentInstance currInstance = MapUtil.toMap(currComponent.getComponentInstances(), ComponentInstance::getName).get(prevInstance.getName());
+ Map<CapabilityDefinition, CapabilityDefinition> oldToNewCapabilities = capabilityResolver.resolvePrevCapIdToNewCapability(prevInstance, currInstance);
+ oldToNewCapabilities.forEach(this::mergeCapabilityProperties);
+ }
+
+ private void mergeCapabilityProperties(CapabilityDefinition prevCapability, CapabilityDefinition currCapability) {
+ dataDefinitionsValuesMergingBusinessLogic.mergeInstanceDataDefinitions(prevCapability.getProperties(), currCapability.getProperties());
+ }
+
+ private StorageOperationStatus updateComponentCapabilitiesProperties(Component currComponent) {
+ return toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(currComponent);
+ }
+
+ private StorageOperationStatus updateInstanceCapabilitiesProperties(Component currComponent, String instanceId) {
+ return toscaOperationFacade.updateComponentInstanceCapabilityProperties(currComponent, instanceId);
+ }
+
+ private Either<Component, StorageOperationStatus> getCmptWithCapabilitiesProps(String cmptId) {
+ ComponentParametersView propertiesCapabilitiesFilter = new ComponentParametersView(true);
+ propertiesCapabilitiesFilter.setIgnoreCapabiltyProperties(false);
+ propertiesCapabilitiesFilter.setIgnoreComponentInstances(false);
+ propertiesCapabilitiesFilter.setIgnoreCapabilities(false);
+ return toscaOperationFacade.getToscaElement(cmptId, propertiesCapabilitiesFilter)
+ .right()
+ .map(err -> {
+ LOGGER.debug("failed to fetch cmpt {} with properties capabilities. status: {}", cmptId, err);
+ return err;
+ });
+
+ }
+
+}