diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance')
17 files changed, 427 insertions, 515 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 index caf73187e1..7863243765 100644 --- 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 @@ -1,9 +1,8 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.List; -import java.util.Map; - +import fj.data.Either; import org.apache.commons.collections.CollectionUtils; +import org.openecomp.sdc.be.components.merge.VspComponentsMergeCommand; 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; @@ -15,20 +14,24 @@ 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 org.openecomp.sdc.common.log.wrappers.Logger; +import org.springframework.core.annotation.Order; -import fj.data.Either; +import java.util.List; +import java.util.Map; + +import static org.openecomp.sdc.be.components.merge.resource.ResourceDataMergeBusinessLogic.ANY_ORDER_COMMAND; @org.springframework.stereotype.Component -public class ComponentCapabilitiesPropertiesMergeBL implements ComponentsMergeCommand { +@Order(ANY_ORDER_COMMAND) +public class ComponentCapabilitiesPropertiesMergeBL implements VspComponentsMergeCommand { - private static final Logger LOGGER = LoggerFactory.getLogger(ComponentCapabilitiesPropertiesMergeBL.class); + private static final Logger log = Logger.getLogger(ComponentCapabilitiesPropertiesMergeBL.class); - private DataDefinitionsValuesMergingBusinessLogic dataDefinitionsValuesMergingBusinessLogic; - private ToscaOperationFacade toscaOperationFacade; - private ComponentsUtils componentsUtils; - private CapabilityResolver capabilityResolver; + private final DataDefinitionsValuesMergingBusinessLogic dataDefinitionsValuesMergingBusinessLogic; + private final ToscaOperationFacade toscaOperationFacade; + private final ComponentsUtils componentsUtils; + private final CapabilityResolver capabilityResolver; public ComponentCapabilitiesPropertiesMergeBL(DataDefinitionsValuesMergingBusinessLogic dataDefinitionsValuesMergingBusinessLogic, ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, CapabilityResolver capabilityResolver) { this.dataDefinitionsValuesMergingBusinessLogic = dataDefinitionsValuesMergingBusinessLogic; @@ -95,7 +98,7 @@ public class ComponentCapabilitiesPropertiesMergeBL implements ComponentsMergeCo return toscaOperationFacade.getToscaElement(cmptId, propertiesCapabilitiesFilter) .right() .map(err -> { - LOGGER.debug("failed to fetch cmpt {} with properties capabilities. status: {}", cmptId, err); + log.debug("failed to fetch cmpt {} with properties capabilities. status: {}", cmptId, err); return err; }); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceArtifactsMerge.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceArtifactsMerge.java index 83f36adf62..f6de767ed4 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceArtifactsMerge.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceArtifactsMerge.java @@ -1,22 +1,17 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; - +import fj.data.Either; import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic; -import org.openecomp.sdc.be.model.ArtifactDefinition; -import org.openecomp.sdc.be.model.Component; -import org.openecomp.sdc.be.model.ComponentInstance; -import org.openecomp.sdc.be.model.Operation; -import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.model.*; import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; import org.openecomp.sdc.common.api.Constants; import org.openecomp.sdc.exception.ResponseFormat; import org.springframework.beans.factory.annotation.Autowired; -import fj.data.Either; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; /** * Created by chaya on 9/20/2017. @@ -37,7 +32,7 @@ public class ComponentInstanceArtifactsMerge implements ComponentInstanceMergeIn Map<String, ArtifactDefinition> deploymentArtifactsCreatedOnTheInstance = componentInstancesDeploymentArtifacts.entrySet() .stream() .filter(i -> !originalComponentDeploymentArtifacts.containsKey(i.getKey())) - .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); dataHolder.setOrigComponentDeploymentArtifactsCreatedOnTheInstance(deploymentArtifactsCreatedOnTheInstance); @@ -46,7 +41,7 @@ public class ComponentInstanceArtifactsMerge implements ComponentInstanceMergeIn Map<String, ArtifactDefinition> informationalArtifactsCreatedOnTheInstance = componentInstancesInformationalArtifacts.entrySet() .stream() .filter(i -> !originalComponentInformationalArtifacts.containsKey(i.getKey())) - .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); dataHolder.setOrigComponentInformationalArtifactsCreatedOnTheInstance(informationalArtifactsCreatedOnTheInstance); } @@ -60,12 +55,12 @@ public class ComponentInstanceArtifactsMerge implements ComponentInstanceMergeIn Map<String, ArtifactDefinition> currentInstanceDeploymentArtifacts = updatedContainerComponent.safeGetComponentInstanceDeploymentArtifacts(newInstanceId); Map<String, ArtifactDefinition> filteredDeploymentArtifactsToAdd = Optional.ofNullable(origInstanceDeploymentArtifactsCreatedOnTheInstance).orElse(new HashMap<>()).entrySet().stream() .filter(artifact -> noArtifactWithTheSameLabel(artifact.getValue().getArtifactLabel(), currentInstanceDeploymentArtifacts)) - .collect(Collectors.toMap(p -> p.getKey(), q -> q.getValue())); + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); Map<String, ArtifactDefinition> origInstanceInformationalArtifactsCreatedOnTheInstance = dataHolder.getOrigComponentInformationalArtifactsCreatedOnTheInstance(); Map<String, ArtifactDefinition> currentInstanceInformationalArtifacts = updatedContainerComponent.safeGetComponentInstanceInformationalArtifacts(newInstanceId); Map<String, ArtifactDefinition> filteredInformationalArtifactsToAdd = Optional.ofNullable(origInstanceInformationalArtifactsCreatedOnTheInstance).orElse(new HashMap<>()).entrySet().stream() .filter(artifact -> noArtifactWithTheSameLabel(artifact.getValue().getArtifactLabel(), currentInstanceInformationalArtifacts)) - .collect(Collectors.toMap(p -> p.getKey(), q -> q.getValue())); + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); Map<String, ArtifactDefinition> allFilteredArtifactsToAdd = new HashMap<>(); allFilteredArtifactsToAdd.putAll(filteredDeploymentArtifactsToAdd); allFilteredArtifactsToAdd.putAll(filteredInformationalArtifactsToAdd); @@ -89,7 +84,6 @@ public class ComponentInstanceArtifactsMerge implements ComponentInstanceMergeIn if (uploadArtifactToService.isRight()) { return Either.right(uploadArtifactToService.right().value()); } - toscaOperationFacade.commit(); } return Either.left(updatedContainerComponent); } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceCapabiliteisPropertiesMerge.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceCapabilitiesPropertiesMerge.java index b43e263580..e528147fbb 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceCapabiliteisPropertiesMerge.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceCapabilitiesPropertiesMerge.java @@ -1,12 +1,6 @@ package org.openecomp.sdc.be.components.merge.instance; -import static org.apache.commons.collections.MapUtils.isNotEmpty; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - +import fj.data.Either; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.model.CapabilityDefinition; @@ -15,15 +9,20 @@ import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.exception.ResponseFormat; -import fj.data.Either; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import static org.apache.commons.collections.MapUtils.isNotEmpty; @org.springframework.stereotype.Component -public class ComponentInstanceCapabiliteisPropertiesMerge implements ComponentInstanceMergeInterface { +public class ComponentInstanceCapabilitiesPropertiesMerge implements ComponentInstanceMergeInterface { private ComponentCapabilitiesPropertiesMergeBL capabilitiesPropertiesMergeBL; private ComponentsUtils componentsUtils; - public ComponentInstanceCapabiliteisPropertiesMerge(ComponentCapabilitiesPropertiesMergeBL capabilitiesPropertiesMergeBL, ComponentsUtils componentsUtils) { + public ComponentInstanceCapabilitiesPropertiesMerge(ComponentCapabilitiesPropertiesMergeBL capabilitiesPropertiesMergeBL, ComponentsUtils componentsUtils) { this.capabilitiesPropertiesMergeBL = capabilitiesPropertiesMergeBL; this.componentsUtils = componentsUtils; } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceForwardingPathMerge.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceForwardingPathMerge.java index 5824b43bf7..13e85085d6 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceForwardingPathMerge.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceForwardingPathMerge.java @@ -1,36 +1,26 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - +import fj.data.Either; import org.javatuples.Pair; import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.datatypes.elements.ForwardingPathDataDefinition; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.impl.ForwardingPathUtils; -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.Service; -import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.model.*; import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.exception.ResponseFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import fj.data.Either; +import java.util.*; +import java.util.stream.Collectors; @org.springframework.stereotype.Component public class ComponentInstanceForwardingPathMerge implements ComponentInstanceMergeInterface { - private static Logger log = LoggerFactory.getLogger(ComponentInstanceForwardingPathMerge.class); + private static Logger log = Logger.getLogger(ComponentInstanceForwardingPathMerge.class); @Autowired private ServiceBusinessLogic serviceBusinessLogic; @@ -46,7 +36,7 @@ public class ComponentInstanceForwardingPathMerge implements ComponentInstanceMe ComponentInstance currentResourceInstance, Component originComponent) { dataHolder.setOrigInstanceCapabilities(getAllInstanceCapabilities(currentResourceInstance)); dataHolder.setOrigInstanceNode(originComponent); - dataHolder.setOrigComponentInstId(currentResourceInstance.getUniqueId()); + dataHolder.setOrigComponentInstId(currentResourceInstance.getName()); } @Override @@ -108,6 +98,9 @@ public class ComponentInstanceForwardingPathMerge implements ComponentInstanceMe private List<CapabilityDefinition> getAllInstanceCapabilities(ComponentInstance currentResourceInstance) { + if(currentResourceInstance.getCapabilities() == null || currentResourceInstance.getCapabilities().isEmpty()){ + return Collections.EMPTY_LIST; + } return currentResourceInstance.getCapabilities().values().stream().flatMap(Collection::stream) .collect(Collectors.toList()); } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceHeatEnvMerge.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceHeatEnvMerge.java index f66eaa8061..32919d9602 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceHeatEnvMerge.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceHeatEnvMerge.java @@ -1,23 +1,17 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.List; -import java.util.Map; - +import fj.data.Either; import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic; import org.openecomp.sdc.be.components.merge.heat.HeatEnvArtifactsMergeBusinessLogic; import org.openecomp.sdc.be.impl.ComponentsUtils; -import org.openecomp.sdc.be.model.ArtifactDefinition; -import org.openecomp.sdc.be.model.Component; -import org.openecomp.sdc.be.model.ComponentInstance; -import org.openecomp.sdc.be.model.Operation; -import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.model.*; import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum; +import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.exception.ResponseFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import fj.data.Either; +import java.util.List; +import java.util.Map; /** * Created by chaya on 9/20/2017. @@ -25,7 +19,7 @@ import fj.data.Either; @org.springframework.stereotype.Component("ComponentInstanceHeatEnvMerge") public class ComponentInstanceHeatEnvMerge implements ComponentInstanceMergeInterface { - private static final Logger log = LoggerFactory.getLogger(ComponentInstanceHeatEnvMerge.class); + private static final Logger log = Logger.getLogger(ComponentInstanceHeatEnvMerge.class); @Autowired private ArtifactsBusinessLogic artifactsBusinessLogic; diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsMergeBL.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsMergeBL.java index c2332055ab..037ab86368 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsMergeBL.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsMergeBL.java @@ -1,9 +1,7 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.Collections; -import java.util.List; -import java.util.Map; - +import fj.data.Either; +import org.openecomp.sdc.be.components.merge.VspComponentsMergeCommand; import org.openecomp.sdc.be.components.merge.property.DataDefinitionsValuesMergingBusinessLogic; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.impl.ComponentsUtils; @@ -13,20 +11,28 @@ import org.openecomp.sdc.be.model.ComponentInstanceInput; import org.openecomp.sdc.be.model.InputDefinition; import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.springframework.core.annotation.Order; -import fj.data.Either; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; -@org.springframework.stereotype.Component -public class ComponentInstanceInputsMergeBL implements ComponentsMergeCommand { +import static org.openecomp.sdc.be.components.merge.resource.ResourceDataMergeBusinessLogic.ANY_ORDER_COMMAND; - @javax.annotation.Resource - private ToscaOperationFacade toscaOperationFacade; +@org.springframework.stereotype.Component +@Order(ANY_ORDER_COMMAND) +public class ComponentInstanceInputsMergeBL implements VspComponentsMergeCommand { - @javax.annotation.Resource - private ComponentsUtils componentsUtils; + private final ToscaOperationFacade toscaOperationFacade; + private final ComponentsUtils componentsUtils; + private final DataDefinitionsValuesMergingBusinessLogic propertyValuesMergingBusinessLogic; - @javax.annotation.Resource - private DataDefinitionsValuesMergingBusinessLogic propertyValuesMergingBusinessLogic; + public ComponentInstanceInputsMergeBL(ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, DataDefinitionsValuesMergingBusinessLogic propertyValuesMergingBusinessLogic) { + this.toscaOperationFacade = toscaOperationFacade; + this.componentsUtils = componentsUtils; + this.propertyValuesMergingBusinessLogic = propertyValuesMergingBusinessLogic; + } @Override public ActionStatus mergeComponents(Component prevComponent, Component currentComponent) { @@ -44,12 +50,30 @@ public class ComponentInstanceInputsMergeBL implements ComponentsMergeCommand { } public ActionStatus mergeComponentInstanceInputs(List<ComponentInstanceInput> oldInstProps, List<InputDefinition> oldInputs, Component newComponent, String instanceId) { - List<ComponentInstanceInput> newInstInput = newComponent.safeGetComponentInstanceInput(instanceId); - if (newInstInput == null) { + List<ComponentInstanceInput> newInstInputs = newComponent.safeGetComponentInstanceInput(instanceId); + if (newInstInputs == null) { return ActionStatus.OK; } - propertyValuesMergingBusinessLogic.mergeInstanceDataDefinitions(oldInstProps, oldInputs, newInstInput, newComponent.getInputs()); - return updateComponentInstanceInputs(newComponent, instanceId, newInstInput); + + List<ComponentInstanceInput> oldRedeclaredInputs = findComponentInputs(oldInstProps); + oldRedeclaredInputs.forEach(oldInput -> newInstInputs.stream() + .filter(newInstInput -> oldInput.getName().equals(newInstInput.getName())) + .forEach(this::switchValues)); + + propertyValuesMergingBusinessLogic.mergeInstanceDataDefinitions(oldInstProps, oldInputs, newInstInputs, newComponent.getInputs()); + return updateComponentInstanceInputs(newComponent, instanceId, newInstInputs); + } + + private void switchValues(ComponentInstanceInput input) { + String tempDefaultValue = input.getDefaultValue(); + input.setDefaultValue(input.getValue()); + input.setValue(tempDefaultValue); + } + + private List<ComponentInstanceInput> findComponentInputs(List<ComponentInstanceInput> oldInstProps) { + return oldInstProps.stream() + .filter(ComponentInstanceInput::isGetInputProperty) + .collect(Collectors.toList()); } private ActionStatus updateComponentInstanceInputs(Component newComponent, String instanceId, List<ComponentInstanceInput> newInstInput) { diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsRedeclareHandler.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsRedeclareHandler.java new file mode 100644 index 0000000000..f3312398e1 --- /dev/null +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsRedeclareHandler.java @@ -0,0 +1,84 @@ +package org.openecomp.sdc.be.components.merge.instance; + +import org.openecomp.sdc.be.components.merge.input.DeclaredInputsResolver; +import org.openecomp.sdc.be.components.merge.input.InputsValuesMergingBusinessLogic; +import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.dao.utils.MapUtil; +import org.openecomp.sdc.be.datatypes.elements.Annotation; +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.InputDefinition; +import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; +import org.openecomp.sdc.be.model.utils.ComponentUtilities; +import org.openecomp.sdc.common.log.wrappers.Logger; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +import static java.util.Collections.singletonMap; +import static java.util.stream.Collectors.toList; +import static org.apache.commons.collections.CollectionUtils.isEmpty; +import static org.openecomp.sdc.be.dao.utils.MapUtil.toMap; + +@org.springframework.stereotype.Component +public class ComponentInstanceInputsRedeclareHandler { + + private static final Logger log = Logger.getLogger(ComponentInstanceInputsRedeclareHandler.class); + private final DeclaredInputsResolver declaredInputsResolver; + private final ToscaOperationFacade toscaOperationFacade; + private final ComponentsUtils componentsUtils; + private final InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic; + + public ComponentInstanceInputsRedeclareHandler(DeclaredInputsResolver declaredInputsResolver, ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic) { + this.declaredInputsResolver = declaredInputsResolver; + this.toscaOperationFacade = toscaOperationFacade; + this.componentsUtils = componentsUtils; + this.inputsValuesMergingBusinessLogic = inputsValuesMergingBusinessLogic; + } + + ActionStatus redeclareComponentInputsForInstance(Component container, String newInstanceId, Component newInstanceOriginType, List<InputDefinition> oldInputs) { + log.debug("#redeclareComponentInputsForInstance - getting inputs that were previously declared from instance {} and setting on current component {}", newInstanceId, container.getUniqueId()); + Map<String, List<PropertyDataDefinition>> allPropertiesForInstance = getAllGetPropertiesForInstance(container, newInstanceId); + List<InputDefinition> previouslyDeclaredInputs = declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(oldInputs, container, allPropertiesForInstance); + inputsValuesMergingBusinessLogic.mergeComponentInputs(oldInputs, previouslyDeclaredInputs); + updateInputsAnnotations(allPropertiesForInstance.get(newInstanceId), newInstanceOriginType, previouslyDeclaredInputs); + + return updateInputs(container.getUniqueId(), previouslyDeclaredInputs); + } + + private void updateInputsAnnotations(List<PropertyDataDefinition> instanceProps, Component newInstanceOriginType, List<InputDefinition> previouslyDeclaredInputs) { + Map<String, PropertyDataDefinition> instancePropsById = toMap(instanceProps, PropertyDataDefinition::getUniqueId); + for (InputDefinition input : previouslyDeclaredInputs) { + List<Annotation> originPropInputAnnotations = getAnnotationsFromOriginType(newInstanceOriginType, input.getPropertyId(), instancePropsById); + if(!isEmpty(originPropInputAnnotations)){ + input.setAnnotations(originPropInputAnnotations); + } + } + } + + private List<Annotation> getAnnotationsFromOriginType(Component originType, String propertyId, Map<String, PropertyDataDefinition> instancePropsById) { + PropertyDataDefinition instanceProp = instancePropsById.get(propertyId); + String originPropInputName = instanceProp.getName(); + return ComponentUtilities.getInputAnnotations(originType, originPropInputName); + } + + private Map<String, List<PropertyDataDefinition>> getAllGetPropertiesForInstance(Component newComponent, String instanceId) { + List<PropertyDataDefinition> allInstanceProps = Stream.of(newComponent.safeGetComponentInstanceProperties(instanceId), + newComponent.safeGetComponentInstanceInput(instanceId)) + .flatMap(Collection::stream) + .map(PropertyDataDefinition::new) + .collect(toList()); + return singletonMap(instanceId, allInstanceProps); + } + + private ActionStatus updateInputs(String containerId, List<InputDefinition> inputsToUpdate) { + log.debug("#updateInputs - updating inputs for container {}", containerId); + return toscaOperationFacade.updateInputsToComponent(inputsToUpdate, containerId) + .either(updatedInputs -> ActionStatus.OK, + componentsUtils::convertFromStorageResponse); + } + +} diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeDataBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeDataBusinessLogic.java index 111b1b3738..81e2f4ce7b 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeDataBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeDataBusinessLogic.java @@ -1,7 +1,7 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.List; - +import fj.data.Either; +import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.model.Component; @@ -10,19 +10,18 @@ import org.openecomp.sdc.be.model.ComponentParametersView; import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.exception.ResponseFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import fj.data.Either; +import java.util.List; /** * Created by chaya on 9/12/2017. */ @org.springframework.stereotype.Component("componentInstanceMergeDataBusinessLogic") public class ComponentInstanceMergeDataBusinessLogic { - private static final Logger log = LoggerFactory.getLogger(ComponentInstanceMergeDataBusinessLogic.class); + private static final Logger log = Logger.getLogger(ComponentInstanceMergeDataBusinessLogic.class); @Autowired private List<ComponentInstanceMergeInterface> componentInstancesMergeBLs; @@ -70,9 +69,13 @@ public class ComponentInstanceMergeDataBusinessLogic { Component updatedContainerComponent = componentWithInstancesInputsAndProperties.left().value(); for (ComponentInstanceMergeInterface compInstMergeBL: componentInstancesMergeBLs) { - Either<Component, ResponseFormat> compInstanceMergeEither = compInstMergeBL.mergeDataAfterCreate(user, dataHolder, updatedContainerComponent, newInstanceId); - if (compInstanceMergeEither.isRight()) { - return Either.right(compInstanceMergeEither.right().value()); + try { + Either<Component, ResponseFormat> compInstanceMergeEither = compInstMergeBL.mergeDataAfterCreate(user, dataHolder, updatedContainerComponent, newInstanceId); + if (compInstanceMergeEither.isRight()) { + return Either.right(compInstanceMergeEither.right().value()); + } + } catch (ComponentException e) { + return Either.right(componentsUtils.getResponseFormat(e)); } } @@ -83,6 +86,7 @@ public class ComponentInstanceMergeDataBusinessLogic { ComponentParametersView filter = new ComponentParametersView(true); filter.setIgnoreComponentInstances(false); filter.setIgnoreComponentInstancesInputs(false); + filter.setIgnoreInputs(false);//dr filter.setIgnoreComponentInstancesProperties(false); filter.setIgnoreCapabilities(false); filter.setIgnoreCapabiltyProperties(false); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeInterface.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeInterface.java index 1d2849b94c..f4bcfdab5c 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeInterface.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeInterface.java @@ -1,12 +1,11 @@ package org.openecomp.sdc.be.components.merge.instance; +import fj.data.Either; import org.openecomp.sdc.be.model.Component; import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.exception.ResponseFormat; -import fj.data.Either; - /** * Created by chaya on 9/20/2017. */ diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropertiesMergeBL.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropertiesMergeBL.java index fe2de7882e..04c43b4c65 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropertiesMergeBL.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropertiesMergeBL.java @@ -1,31 +1,39 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.Collections; -import java.util.List; -import java.util.Map; - +import fj.data.Either; +import org.openecomp.sdc.be.components.merge.VspComponentsMergeCommand; import org.openecomp.sdc.be.components.merge.property.DataDefinitionsValuesMergingBusinessLogic; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.model.Component; +import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.model.ComponentInstanceProperty; import org.openecomp.sdc.be.model.InputDefinition; import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.springframework.core.annotation.Order; -import fj.data.Either; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; -@org.springframework.stereotype.Component -public class ComponentInstancePropertiesMergeBL implements ComponentsMergeCommand { +import static org.openecomp.sdc.be.components.merge.resource.ResourceDataMergeBusinessLogic.ANY_ORDER_COMMAND; - @javax.annotation.Resource - private ToscaOperationFacade toscaOperationFacade; +@org.springframework.stereotype.Component +@Order(ANY_ORDER_COMMAND) +public class ComponentInstancePropertiesMergeBL implements VspComponentsMergeCommand { - @javax.annotation.Resource(name = "componentUtils") - private ComponentsUtils componentsUtils; + private final ToscaOperationFacade toscaOperationFacade; + private final ComponentsUtils componentsUtils; + private final DataDefinitionsValuesMergingBusinessLogic propertyValuesMergingBusinessLogic; - @javax.annotation.Resource - private DataDefinitionsValuesMergingBusinessLogic propertyValuesMergingBusinessLogic; + public ComponentInstancePropertiesMergeBL(ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, DataDefinitionsValuesMergingBusinessLogic propertyValuesMergingBusinessLogic) { + this.toscaOperationFacade = toscaOperationFacade; + this.componentsUtils = componentsUtils; + this.propertyValuesMergingBusinessLogic = propertyValuesMergingBusinessLogic; + } @Override public ActionStatus mergeComponents(Component prevComponent, Component currentComponent) { @@ -33,7 +41,15 @@ public class ComponentInstancePropertiesMergeBL implements ComponentsMergeComman if (newInstProps == null) { return ActionStatus.OK; } - newInstProps.forEach((instanceId, newProps) -> mergeOldInstancePropertiesValues(prevComponent, currentComponent, instanceId, newProps) ); + Map<String, String> currComponentNames = getComponentNameByUniqueId(currentComponent); + Map<String, String> prevComponentUniqueIds = getComponentUniqueIdByName(prevComponent); + + newInstProps.forEach((instanceId, newProps) -> { + String instanceName = currComponentNames.get(instanceId); + String oldInstanceId = prevComponentUniqueIds.get(instanceName); + + mergeOldInstancePropertiesValues(prevComponent, currentComponent, oldInstanceId, newProps); + }); return updateComponentInstancesProperties(currentComponent, newInstProps); } @@ -51,6 +67,19 @@ public class ComponentInstancePropertiesMergeBL implements ComponentsMergeComman propertyValuesMergingBusinessLogic.mergeInstanceDataDefinitions(oldInstProps, oldInputs, newInstProps, newComponent.getInputs()); return updateComponentInstanceProperties(newComponent, instanceId, newInstProps); } + + private static Map<String, String> getComponentNameByUniqueId(Component component) { + return asMap(component, ComponentInstance::getUniqueId, ComponentInstance::getName); + } + + private static Map<String, String> getComponentUniqueIdByName(Component component) { + return asMap(component, ComponentInstance::getName, ComponentInstance::getUniqueId); + } + + private static Map<String, String> asMap(Component component, Function<? super ComponentInstance, ? extends String> keyMapper, Function<? super ComponentInstance, ? extends String> valueMapper) { + return component.safeGetComponentInstances().stream(). + collect(Collectors.toMap(keyMapper, valueMapper)); + } private void mergeOldInstancePropertiesValues(Component oldComponent, Component newComponent, String instanceId, List<ComponentInstanceProperty> newProps) { List<ComponentInstanceProperty> oldInstProperties = oldComponent == null ? Collections.emptyList() : oldComponent.safeGetComponentInstanceProperties(instanceId); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropsAndInputsMerge.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropsAndInputsMerge.java index 82e6b6368e..dc037abe80 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropsAndInputsMerge.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropsAndInputsMerge.java @@ -1,26 +1,18 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.ArrayList; -import java.util.List; - -import org.openecomp.sdc.be.components.merge.input.ComponentInputsMergeBL; +import fj.data.Either; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.impl.ComponentsUtils; -import org.openecomp.sdc.be.model.Component; -import org.openecomp.sdc.be.model.ComponentInstance; -import org.openecomp.sdc.be.model.ComponentInstanceInput; -import org.openecomp.sdc.be.model.ComponentInstanceProperty; -import org.openecomp.sdc.be.model.ComponentParametersView; -import org.openecomp.sdc.be.model.InputDefinition; -import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.model.*; import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.exception.ResponseFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import fj.data.Either; +import java.util.ArrayList; +import java.util.List; + +import static org.apache.commons.collections.CollectionUtils.isNotEmpty; /** * Created by chaya on 9/20/2017. @@ -28,22 +20,21 @@ import fj.data.Either; @org.springframework.stereotype.Component("ComponentInstancePropsAndInputsMerge") public class ComponentInstancePropsAndInputsMerge implements ComponentInstanceMergeInterface { - private static final Logger LOGGER = LoggerFactory.getLogger(ComponentInstancePropsAndInputsMerge.class); - - @Autowired - private ToscaOperationFacade toscaOperationFacade; - - @Autowired - private ComponentsUtils componentsUtils; + private static final Logger log = Logger.getLogger(ComponentInstancePropsAndInputsMerge.class); - @Autowired - private ComponentInstancePropertiesMergeBL componentInstancePropertiesMergeBL; + private final ToscaOperationFacade toscaOperationFacade; + private final ComponentsUtils componentsUtils; + private final ComponentInstancePropertiesMergeBL componentInstancePropertiesMergeBL; + private final ComponentInstanceInputsMergeBL resourceInstanceInputsMergeBL; + private final ComponentInstanceInputsRedeclareHandler instanceInputsRedeclareHandler; - @Autowired - private ComponentInstanceInputsMergeBL resourceInstanceInputsMergeBL; - - @Autowired - private ComponentInputsMergeBL resourceInputsMergeBL; + public ComponentInstancePropsAndInputsMerge(ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, ComponentInstancePropertiesMergeBL componentInstancePropertiesMergeBL, ComponentInstanceInputsMergeBL resourceInstanceInputsMergeBL, ComponentInstanceInputsRedeclareHandler instanceInputsRedeclareHandler) { + this.toscaOperationFacade = toscaOperationFacade; + this.componentsUtils = componentsUtils; + this.componentInstancePropertiesMergeBL = componentInstancePropertiesMergeBL; + this.resourceInstanceInputsMergeBL = resourceInstanceInputsMergeBL; + this.instanceInputsRedeclareHandler = instanceInputsRedeclareHandler; + } @Override public void saveDataBeforeMerge(DataForMergeHolder dataHolder, Component containerComponent, ComponentInstance currentResourceInstance, Component originComponent) { @@ -79,7 +70,7 @@ public class ComponentInstancePropsAndInputsMerge implements ComponentInstanceMe ActionStatus actionStatus = componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(originComponentInstanceProps, originComponentsInputs, updatedComponent, instanceId); if (actionStatus != ActionStatus.OK) { - LOGGER.error("Failed to update component {} with merged instance properties", updatedComponent.getUniqueId(), newComponentInstancesProps); + log.error("Failed to update component {} with merged instance properties", updatedComponent.getUniqueId(), newComponentInstancesProps); return Either.right(actionStatus); } return Either.left(newComponentInstancesProps); @@ -91,7 +82,7 @@ public class ComponentInstancePropsAndInputsMerge implements ComponentInstanceMe List<ComponentInstanceInput> newComponentInstancesInputs = updatedComponent.safeGetComponentInstanceInput(instanceId); ActionStatus actionStatus = resourceInstanceInputsMergeBL.mergeComponentInstanceInputs(originComponentInstanceInputs, originComponentsInputs, updatedComponent, instanceId); if (actionStatus != ActionStatus.OK) { - LOGGER.error("Failed to update component {} with merged instance properties", updatedComponent.getUniqueId(), newComponentInstancesInputs); + log.error("Failed to update component {} with merged instance properties", updatedComponent.getUniqueId(), newComponentInstancesInputs); return Either.right(actionStatus); } return Either.left(newComponentInstancesInputs); @@ -100,19 +91,19 @@ public class ComponentInstancePropsAndInputsMerge implements ComponentInstanceMe private Either<List<InputDefinition>, ActionStatus> mergeComponentInputsIntoContainer(DataForMergeHolder dataHolder, String newContainerComponentId, String newInstanceId) { List<InputDefinition> origComponentInputs = dataHolder.getOrigComponentInputs(); List<InputDefinition> inputsToAddToContainer = new ArrayList<>(); - if (origComponentInputs != null && !origComponentInputs.isEmpty()) { + if (isNotEmpty(origComponentInputs)) { // get instance inputs and properties after merge Either<Component, StorageOperationStatus> componentWithInstancesInputsAndProperties = getComponentWithInstancesInputsAndProperties(newContainerComponentId); if (componentWithInstancesInputsAndProperties.isRight()) { - LOGGER.error("Component %s was not found", newContainerComponentId); + log.error("Component %s was not found", newContainerComponentId); return Either.right(componentsUtils.convertFromStorageResponse(componentWithInstancesInputsAndProperties.right().value())); } Component updatedContainerComponent = componentWithInstancesInputsAndProperties.left().value(); - - ActionStatus redeclareStatus = resourceInputsMergeBL.redeclareComponentInputsForInstance(origComponentInputs, updatedContainerComponent, newInstanceId); + Component currInstanceOriginType = dataHolder.getCurrInstanceNode(); + ActionStatus redeclareStatus = instanceInputsRedeclareHandler.redeclareComponentInputsForInstance(updatedContainerComponent, newInstanceId, currInstanceOriginType, origComponentInputs); if (redeclareStatus != ActionStatus.OK) { - LOGGER.error("Failed to update component {} with merged inputs {}", newContainerComponentId, inputsToAddToContainer); - Either.right(redeclareStatus); + log.error("Failed to update component {} with merged inputs {}", newContainerComponentId, inputsToAddToContainer); + return Either.right(redeclareStatus); } } return Either.left(inputsToAddToContainer); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceRelationMerge.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceRelationMerge.java index 96f878abe0..995eae701c 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceRelationMerge.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceRelationMerge.java @@ -1,49 +1,45 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; -import java.util.stream.Collectors; -import java.util.stream.Stream; - +import fj.data.Either; import org.apache.commons.lang3.StringUtils; +import org.openecomp.sdc.be.components.merge.utils.CapabilityOwner; +import org.openecomp.sdc.be.components.merge.utils.ComponentInstanceBuildingBlocks; import org.openecomp.sdc.be.components.merge.utils.MergeInstanceUtils; +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.RelationshipInfo; import org.openecomp.sdc.be.model.RequirementCapabilityRelDef; -import org.openecomp.sdc.be.model.RequirementDefinition; -import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.common.datastructure.Wrapper; +import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.exception.ResponseFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import com.att.aft.dme2.internal.google.common.annotations.VisibleForTesting; - -import fj.data.Either; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; @org.springframework.stereotype.Component("ComponentInstanceRelashionMerge") public class ComponentInstanceRelationMerge implements ComponentInstanceMergeInterface { - private static Logger log = LoggerFactory.getLogger(ComponentInstanceRelationMerge.class); - - @Autowired - private ComponentsUtils componentsUtils; + private static final Logger log = Logger.getLogger(ComponentInstanceRelationMerge.class); - @Autowired - private MergeInstanceUtils mergeInstanceUtils; - - @Autowired - private ToscaOperationFacade toscaOperationFacade; + private final ComponentsUtils componentsUtils; + private final MergeInstanceUtils mergeInstanceUtils; + private final ToscaOperationFacade toscaOperationFacade; + public ComponentInstanceRelationMerge(ComponentsUtils componentsUtils, MergeInstanceUtils mergeInstanceUtils, ToscaOperationFacade toscaOperationFacade) { + this.componentsUtils = componentsUtils; + this.mergeInstanceUtils = mergeInstanceUtils; + this.toscaOperationFacade = toscaOperationFacade; + } + @Override public void saveDataBeforeMerge(DataForMergeHolder dataHolder, Component containerComponent, ComponentInstance currentResourceInstance, Component originComponent) { @@ -58,16 +54,16 @@ public class ComponentInstanceRelationMerge implements ComponentInstanceMergeInt currentResourceInstance); if (!relationsFrom.isEmpty() || !relationsTo.isEmpty()) { - List<ComponentInstance> vfcInstances = mergeInstanceUtils.getVfcInstances(currentResourceInstance, originComponent); + ComponentInstanceBuildingBlocks instBuildingBlocks = mergeInstanceUtils.getInstanceAtomicBuildingBlocks(currentResourceInstance, originComponent); - if (vfcInstances != null) { - List<RelationMergeInfo> fromRelInfoList = convert(relationsFrom, rel -> mapRelationRequirement(rel, vfcInstances)); - List<RelationMergeInfo> toRelInfoList = convert(relationsTo, rel -> mapRelationCapability(rel, vfcInstances)); + if (instBuildingBlocks != null) { + List<RelationMergeInfo> fromRelInfoList = convert(relationsFrom, rel -> mergeInstanceUtils.mapRelationRequirement(rel, instBuildingBlocks.getVfcInstances())); + List<RelationMergeInfo> toRelInfoList = convert(relationsTo, rel -> mergeInstanceUtils.mapRelationCapability(rel, instBuildingBlocks.getCapabilitiesOwners())); // Encapsulate all needed info in one container - VfRelationsMergeInfo vfRelationsMergeInfo = new VfRelationsMergeInfo(fromRelInfoList, toRelInfoList); + ContainerRelationsMergeInfo containerRelationsMergeInfo = new ContainerRelationsMergeInfo(fromRelInfoList, toRelInfoList); // Save it - dataHolder.setVfRelationsInfo(vfRelationsMergeInfo); + dataHolder.setVfRelationsInfo(containerRelationsMergeInfo); } } else { @@ -81,7 +77,7 @@ public class ComponentInstanceRelationMerge implements ComponentInstanceMergeInt public Either<Component, ResponseFormat> mergeDataAfterCreate(User user, DataForMergeHolder dataHolder, Component updatedContainerComponent, String newInstanceId) { Wrapper<Either<Component, ResponseFormat>> resultWrapper = new Wrapper<>(); - VfRelationsMergeInfo vfRelationsMergeInfo = getRelationsMergeInfo(dataHolder, updatedContainerComponent, resultWrapper); + ContainerRelationsMergeInfo containerRelationsMergeInfo = getRelationsMergeInfo(dataHolder, updatedContainerComponent, resultWrapper); ComponentInstance newComponentInstance = null; if(resultWrapper.isEmpty()) { @@ -89,31 +85,13 @@ public class ComponentInstanceRelationMerge implements ComponentInstanceMergeInt newComponentInstance = loadComponentInstance(updatedContainerComponent, newInstanceId, resultWrapper); } - if(resultWrapper.isEmpty() && vfRelationsMergeInfo != null) { + if(resultWrapper.isEmpty() && containerRelationsMergeInfo != null) { // Load VFCI and filter them by name - List<ComponentInstance> vfcInstances = mergeInstanceUtils.getVfcInstances(newComponentInstance); - if(vfcInstances != null) { - Map<String, ComponentInstance> vfciMap = mergeInstanceUtils.convertToVfciNameMap(vfcInstances); - + ComponentInstanceBuildingBlocks instanceBuildBlocks = mergeInstanceUtils.getInstanceAtomicBuildingBlocks(newComponentInstance); + if(instanceBuildBlocks != null) { // Process Relationships - List<RelationMergeInfo> toRelationsInfo = vfRelationsMergeInfo.getToRelationsInfo(); - Stream<RequirementCapabilityRelDef> toRelationsInfoStream = null; - if (toRelationsInfo != null) { - toRelationsInfoStream = toRelationsInfo.stream() - .map(oldCapInfo -> restoreCapabilityRelation(oldCapInfo, newInstanceId, vfciMap, updatedContainerComponent)) - .filter(Objects::nonNull); - } - - List<RelationMergeInfo> fromRelationsInfo = vfRelationsMergeInfo.getFromRelationsInfo(); - Stream<RequirementCapabilityRelDef> fromRelationsInfoStream = null; - if( fromRelationsInfo != null) { - //For Each old requirement relation info - fromRelationsInfoStream = fromRelationsInfo.stream() - .map(oldReqInfo -> restoreRequirementRelation(oldReqInfo, newInstanceId, vfciMap, updatedContainerComponent)) - .filter(Objects::nonNull); - } - - // Save relations in updated container (service) + Stream<RequirementCapabilityRelDef> toRelationsInfoStream = getCapabilitiesRelationInfoStream(updatedContainerComponent, newInstanceId, containerRelationsMergeInfo, instanceBuildBlocks); + Stream<RequirementCapabilityRelDef> fromRelationsInfoStream = getRequirementRelationsInfoStream(updatedContainerComponent, newInstanceId, containerRelationsMergeInfo, instanceBuildBlocks); List<RequirementCapabilityRelDef> updatedRelations = getUpdatedRelations(toRelationsInfoStream, fromRelationsInfoStream); StorageOperationStatus saveResult = toscaOperationFacade.associateResourceInstances(updatedContainerComponent.getUniqueId(), updatedRelations); if (saveResult == StorageOperationStatus.OK) { @@ -126,24 +104,31 @@ public class ComponentInstanceRelationMerge implements ComponentInstanceMergeInt } } } - return resultWrapper.getInnerElement(); } - - @VisibleForTesting - public void setToscaOperationFacade(ToscaOperationFacade toscaOperationFacade) { - this.toscaOperationFacade = toscaOperationFacade; - } - - - @VisibleForTesting - public void setComponentsUtils(ComponentsUtils componentsUtils) { - this.componentsUtils = componentsUtils; + + private Stream<RequirementCapabilityRelDef> getRequirementRelationsInfoStream(Component updatedContainerComponent, String newInstanceId, ContainerRelationsMergeInfo containerRelationsMergeInfo, ComponentInstanceBuildingBlocks instanceBuildBlocks) { + Map<String, ComponentInstance> vfciMap = MapUtil.toMap(instanceBuildBlocks.getVfcInstances(), ComponentInstance::getName, (p1, p2) -> p1); + List<RelationMergeInfo> fromRelationsInfo = containerRelationsMergeInfo.getFromRelationsInfo(); + Stream<RequirementCapabilityRelDef> fromRelationsInfoStream = null; + if( fromRelationsInfo != null) { + fromRelationsInfoStream = fromRelationsInfo.stream() + .map(oldReqInfo -> mergeInstanceUtils.restoreRequirementRelation(oldReqInfo, newInstanceId, vfciMap, updatedContainerComponent)) + .filter(Objects::nonNull); + } + return fromRelationsInfoStream; } - - @VisibleForTesting - public void setMergeInstanceUtils(MergeInstanceUtils mergeInstanceUtils) { - this.mergeInstanceUtils = mergeInstanceUtils; + + private Stream<RequirementCapabilityRelDef> getCapabilitiesRelationInfoStream(Component updatedContainerComponent, String newInstanceId, ContainerRelationsMergeInfo containerRelationsMergeInfo, ComponentInstanceBuildingBlocks instanceBuildBlocks) { + Map<String, CapabilityOwner> capOwnersByName = MapUtil.toMap(instanceBuildBlocks.getCapabilitiesOwners(), CapabilityOwner::getName, (p1, p2) -> p1); + List<RelationMergeInfo> toRelationsInfo = containerRelationsMergeInfo.getToRelationsInfo(); + Stream<RequirementCapabilityRelDef> toRelationsInfoStream = null; + if (toRelationsInfo != null) { + toRelationsInfoStream = toRelationsInfo.stream() + .map(oldCapInfo -> mergeInstanceUtils.restoreCapabilityRelation(oldCapInfo, newInstanceId, capOwnersByName, updatedContainerComponent)) + .filter(Objects::nonNull); + } + return toRelationsInfoStream; } /** @@ -184,6 +169,10 @@ public class ComponentInstanceRelationMerge implements ComponentInstanceMergeInt ComponentInstance currentResourceInstance) { final List<RequirementCapabilityRelDef> componentInstancesRelations = containerComponent.getComponentInstancesRelations(); + if (componentInstancesRelations == null) { + return Collections.emptyList(); + } + final String vfInstanceId = currentResourceInstance.getUniqueId(); return componentInstancesRelations.stream() @@ -194,223 +183,20 @@ public class ComponentInstanceRelationMerge implements ComponentInstanceMergeInt private List<RelationMergeInfo> convert(List<RequirementCapabilityRelDef> relationsDef, Function<RequirementCapabilityRelDef, RelationMergeInfo> mapFunc) { return relationsDef.stream() - .map(mapFunc::apply) + .map(mapFunc) .filter(Objects::nonNull) .collect(Collectors.toList()); } - private RelationMergeInfo mapRelationCapability(RequirementCapabilityRelDef relDef, List<ComponentInstance> vfcInstances) { - // Id of the VfcInstance that is the owner of the capability - String ownerId = relDef.resolveSingleRelationship().getRelation().getCapabilityOwnerId(); - return createRelationMergeInfo(vfcInstances, ownerId, currVfcInst -> mapVfcInstanceCapability(currVfcInst, relDef)); - } - - private RelationMergeInfo mapRelationRequirement(RequirementCapabilityRelDef relDef, List<ComponentInstance> vfcInstances) { - // Id of the VfcInstance that is the owner of the requirement - String ownerId = relDef.resolveSingleRelationship().getRelation().getRequirementOwnerId(); - return createRelationMergeInfo(vfcInstances, ownerId, currVfcInst -> mapVfcInstanceRequirement(currVfcInst, relDef)); - } - - private RelationMergeInfo createRelationMergeInfo(List<ComponentInstance> vfcInstances, String ownerId, Function<ComponentInstance, RelationMergeInfo> mapFunc) { - return vfcInstances.stream() - .filter(inst -> StringUtils.equals(inst.getUniqueId(), ownerId)) - .map(mapFunc::apply) - .filter(Objects::nonNull) - .findAny() - .orElse(null); - } - - - private RelationMergeInfo mapVfcInstanceCapability(ComponentInstance vfcInstance, RequirementCapabilityRelDef relDef) { - String capabilityUniqueId = relDef.resolveSingleRelationship().getRelation().getCapabilityUid(); - - - String vfcInstanceName = vfcInstance.getName(); - String vfcUid = vfcInstance.getComponentUid(); - - Either<Resource, StorageOperationStatus> vfcResource = toscaOperationFacade.getToscaElement(vfcUid); - if(vfcResource.isLeft()) { - Resource vfc = vfcResource.left().value(); - - CapabilityDefinition capabilityDef = retrieveCapabilityDefinition(capabilityUniqueId, vfc); - String capabilityType; - String capabilityName; - if (capabilityDef != null) { - capabilityType = capabilityDef.getType(); - capabilityName = capabilityDef.getName(); - } - else { - log.debug("Failed to retrieve capability type for relation with name: {} and uniqueId {}", relDef.resolveSingleRelationship().getRelation().getCapability(), capabilityUniqueId); - capabilityType = null; - capabilityName = null; - } - - return new RelationMergeInfo(capabilityType, capabilityName, vfcInstanceName, relDef); - } - else { - log.debug("Failed to load VFC by uid {}", vfcUid); - return null; - } - } - - private RelationMergeInfo mapVfcInstanceRequirement(ComponentInstance vfcInstance, RequirementCapabilityRelDef relDef) { - String requirementUniqueId = relDef.resolveSingleRelationship().getRelation().getRequirementUid(); - - String vfcInstanceName = vfcInstance.getName(); - String vfcUid = vfcInstance.getComponentUid(); - - Either<Resource, StorageOperationStatus> vfcResource = toscaOperationFacade.getToscaElement(vfcUid); - if(vfcResource.isLeft()) { - Resource vfc = vfcResource.left().value(); - - RequirementDefinition requirementDef = retrieveRequirementDefinition(requirementUniqueId, vfc); - String requirementType; - String requirementName; - if (requirementDef != null) { - requirementType = requirementDef.getCapability(); - requirementName = requirementDef.getName(); - } - else { - log.debug("Failed to retrieve requirement type for relation with name: {} and uniqueId {}", relDef.resolveSingleRelationship().getRelation().getRequirement(), requirementUniqueId); - requirementType = null; - requirementName = null; - } - - return new RelationMergeInfo(requirementType, requirementName, vfcInstanceName, relDef); - } - else { - log.debug("Failed to load VFC by uid {}", vfcUid); - return null; - } - } - - private CapabilityDefinition retrieveCapabilityDefinition(String uniqueId, Resource vfc) { - return vfc.getCapabilities().values().stream() - .flatMap(List::stream) - .filter(Objects::nonNull) - .filter(def -> uniqueId.equals(def.getUniqueId())) - .findFirst() - .orElse(null); - } - - private String retrieveCapabilityUid(String name, Component vfc) { - return vfc.getCapabilities().values().stream() - .flatMap(List::stream) - .filter(Objects::nonNull) - .filter(def -> name.equals(def.getName())) - .findFirst() - .map(CapabilityDefinition::getUniqueId) - .orElse(null); - } - - private RequirementDefinition retrieveRequirementDefinition(String uniqueId, Resource vfc) { - return vfc.getRequirements().values().stream() - .flatMap(List::stream) - .filter(Objects::nonNull) - .filter(def -> uniqueId.equals(def.getUniqueId())) - .findFirst() - .orElse(null); - } - - private String retrieveRequirementUid(String name, Component vfc) { - return vfc.getRequirements().values().stream() - .flatMap(List::stream) - .filter(Objects::nonNull) - .filter(def -> name.equals(def.getName())) - .findFirst() - .map(RequirementDefinition::getUniqueId) - .orElse(null); - } - - - - private VfRelationsMergeInfo getRelationsMergeInfo(DataForMergeHolder dataHolder, - Component updatedContainerComponent, - Wrapper<Either<Component, ResponseFormat>> resultWrapper) { - VfRelationsMergeInfo vfRelationsMergeInfo = dataHolder.getVfRelationsMergeInfo(); - if (vfRelationsMergeInfo == null) { + private ContainerRelationsMergeInfo getRelationsMergeInfo(DataForMergeHolder dataHolder, + Component updatedContainerComponent, + Wrapper<Either<Component, ResponseFormat>> resultWrapper) { + ContainerRelationsMergeInfo containerRelationsMergeInfo = dataHolder.getContainerRelationsMergeInfo(); + if (containerRelationsMergeInfo == null) { log.debug("There is no info about relations should be restored."); resultWrapper.setInnerElement(Either.left(updatedContainerComponent)); } - return vfRelationsMergeInfo; - } - - - private RequirementCapabilityRelDef restoreCapabilityRelation(RelationMergeInfo oldCapInfo, - String newInstanceId, - Map<String, ComponentInstance> vfciMap, - Component updatedContainerComponent) { - String oldVfcInstanceName = oldCapInfo.getVfcInstanceName(); - - ComponentInstance newVfcInstance = vfciMap.get(oldVfcInstanceName); - if (newVfcInstance != null) { - // Append relation to updated container - RequirementCapabilityRelDef oldRelDef = oldCapInfo.getRelDef(); - oldRelDef.setToNode(newInstanceId); - - RelationshipInfo oldRelationshipInfo = oldRelDef.resolveSingleRelationship().getRelation(); - oldRelationshipInfo.setCapabilityOwnerId(newVfcInstance.getUniqueId()); - oldRelationshipInfo.getRelationship().setType(oldCapInfo.getCapReqType()); - - - String vfcUid = newVfcInstance.getComponentUid(); - Either<Component, StorageOperationStatus> eitherComponent = toscaOperationFacade.getToscaElement(vfcUid); - - if(eitherComponent.isLeft()) { - String capabilityUid = retrieveCapabilityUid(oldCapInfo.getCapReqName() , eitherComponent.left().value()); - oldRelationshipInfo.setCapabilityUid(capabilityUid); - } - else { - log.debug("Unexpected error: resource was not loaded for VF ID: {}", vfcUid); - } - - updatedContainerComponent.getComponentInstancesRelations().add(oldRelDef); - return oldRelDef; - } - else { - log.debug("Skip relation since it was not found VFC Instance with name {}", oldVfcInstanceName); - return null; - } - } - - - - private RequirementCapabilityRelDef restoreRequirementRelation(RelationMergeInfo oldReqInfo, - String newInstanceId, - Map<String, ComponentInstance> vfciMap, - Component updatedContainerComponent) { - String oldVfcInstanceName = oldReqInfo.getVfcInstanceName(); - - ComponentInstance newVfcInstance = vfciMap.get(oldReqInfo.getVfcInstanceName()); - if (newVfcInstance != null) { - // Append relation to updated container - RequirementCapabilityRelDef oldRelDef = oldReqInfo.getRelDef(); - oldRelDef.setFromNode(newInstanceId); - - RelationshipInfo oldRelationshipInfo = oldRelDef.resolveSingleRelationship().getRelation(); - oldRelationshipInfo.setRequirementOwnerId(newVfcInstance.getUniqueId()); - oldRelationshipInfo.getRelationship().setType(oldReqInfo.getCapReqType()); - - String vfcUid = newVfcInstance.getComponentUid(); - Either<Component, StorageOperationStatus> eitherComponent = toscaOperationFacade.getToscaElement(vfcUid); - - if(eitherComponent.isLeft()) { - String requirementUid = retrieveRequirementUid(oldReqInfo.getCapReqName() , eitherComponent.left().value()); - oldRelationshipInfo.setRequirementUid(requirementUid); - } - else { - log.debug("Unexpected error: resource was not loaded for VF ID: {}", vfcUid); - } - - updatedContainerComponent.getComponentInstancesRelations().add(oldRelDef); - return oldRelDef; - } - else { - log.debug("Skip relation since it was not found VFC Instance with name {}", oldVfcInstanceName); - return null; - } + return containerRelationsMergeInfo; } - - } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentsMergeCommand.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentsMergeCommand.java deleted file mode 100644 index 5dcb1dda79..0000000000 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentsMergeCommand.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.openecomp.sdc.be.components.merge.instance; - -import org.openecomp.sdc.be.dao.api.ActionStatus; -import org.openecomp.sdc.be.model.Component; - -public interface ComponentsMergeCommand { - - /** - * encapsulates the logic of merging component inner entities from the previous component into the currently updated component - * @param prevComponent the old component, whose entities need to be merged - * @param currentComponent the new component, whose entities need to be merged - * @return the status of the merge process - */ - ActionStatus mergeComponents(Component prevComponent, Component currentComponent); - - /** - * - * @return short description of the command for logging purposes - */ - String description(); - -} diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/VfRelationsMergeInfo.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ContainerRelationsMergeInfo.java index e116b66408..7440838a87 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/VfRelationsMergeInfo.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ContainerRelationsMergeInfo.java @@ -2,11 +2,11 @@ package org.openecomp.sdc.be.components.merge.instance; import java.util.List; -public class VfRelationsMergeInfo { +public class ContainerRelationsMergeInfo { private List<RelationMergeInfo> fromRelationsInfo; private List<RelationMergeInfo> toRelationsInfo; - public VfRelationsMergeInfo(List<RelationMergeInfo> fromRelationsInfo, List<RelationMergeInfo> toRelationsInfo) { + ContainerRelationsMergeInfo(List<RelationMergeInfo> fromRelationsInfo, List<RelationMergeInfo> toRelationsInfo) { this.fromRelationsInfo = fromRelationsInfo; this.toRelationsInfo = toRelationsInfo; } @@ -15,16 +15,8 @@ public class VfRelationsMergeInfo { return fromRelationsInfo; } - public void setFromRelationsInfo(List<RelationMergeInfo> fromRelationsInfo) { - this.fromRelationsInfo = fromRelationsInfo; - } - public List<RelationMergeInfo> getToRelationsInfo() { return toRelationsInfo; } - public void setToRelationsInfo(List<RelationMergeInfo> toRelationsInfo) { - this.toRelationsInfo = toRelationsInfo; - } - }
\ No newline at end of file diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java index 636bdda854..7388819ebf 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java @@ -1,18 +1,9 @@ package org.openecomp.sdc.be.components.merge.instance; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.openecomp.sdc.be.model.ArtifactDefinition; -import org.openecomp.sdc.be.model.CapabilityDefinition; -import org.openecomp.sdc.be.model.Component; -import org.openecomp.sdc.be.model.ComponentInstanceInput; -import org.openecomp.sdc.be.model.ComponentInstanceProperty; -import org.openecomp.sdc.be.model.InputDefinition; + +import org.openecomp.sdc.be.model.*; + +import java.util.*; /** * Created by chaya on 9/7/2017. @@ -24,10 +15,12 @@ public class DataForMergeHolder { private List<InputDefinition> origComponentInputs; private Map<String, ArtifactDefinition> origCompInstDeploymentArtifactsCreatedOnTheInstance; private Map<String, ArtifactDefinition> origCompInstInformationalArtifactsCreatedOnTheInstance; + private Map<String, List<String>> origComponentInstanceExternalRefs; private List<ArtifactDefinition> origComponentInstanceHeatEnvArtifacts; - private VfRelationsMergeInfo vfRelationsMergeInfo; + private ContainerRelationsMergeInfo containerRelationsMergeInfo; private List<CapabilityDefinition> origInstanceCapabilities; private Component origInstanceNode; + private Component currInstanceNode; private String origComponentInstId; public DataForMergeHolder() { @@ -39,19 +32,19 @@ public class DataForMergeHolder { origInstanceCapabilities = new ArrayList<>(); } - public List<ArtifactDefinition> getOrigComponentInstanceHeatEnvArtifacts() { + List<ArtifactDefinition> getOrigComponentInstanceHeatEnvArtifacts() { return origComponentInstanceHeatEnvArtifacts; } - public void setOrigComponentInstanceHeatEnvArtifacts(List<ArtifactDefinition> origComponentInstanceHeatEnvArtifacts) { + void setOrigComponentInstanceHeatEnvArtifacts(List<ArtifactDefinition> origComponentInstanceHeatEnvArtifacts) { this.origComponentInstanceHeatEnvArtifacts = origComponentInstanceHeatEnvArtifacts; } - public List<ComponentInstanceInput> getOrigComponentInstanceInputs() { + List<ComponentInstanceInput> getOrigComponentInstanceInputs() { return origComponentInstanceInputs; } - public void setOrigComponentInstanceInputs(List<ComponentInstanceInput> origComponentInstanceInputs) { + void setOrigComponentInstanceInputs(List<ComponentInstanceInput> origComponentInstanceInputs) { Optional.ofNullable(origComponentInstanceInputs).orElse(Collections.emptyList()).stream().forEach(input -> { ComponentInstanceInput copyInput = new ComponentInstanceInput(); copyInput.setType(input.getType()); @@ -77,11 +70,11 @@ public class DataForMergeHolder { }); } - public List<ComponentInstanceProperty> getOrigComponentInstanceProperties() { + List<ComponentInstanceProperty> getOrigComponentInstanceProperties() { return origComponentInstanceProperties; } - public void setOrigComponentInstanceProperties(List<ComponentInstanceProperty> origComponentInstanceProperties) { + void setOrigComponentInstanceProperties(List<ComponentInstanceProperty> origComponentInstanceProperties) { Optional.ofNullable(origComponentInstanceProperties).orElse(Collections.emptyList()).stream().forEach(property -> { ComponentInstanceProperty propertyCopy = new ComponentInstanceProperty(); propertyCopy.setType(property.getType()); @@ -95,50 +88,66 @@ public class DataForMergeHolder { }); } - public List<InputDefinition> getOrigComponentInputs() { + List<InputDefinition> getOrigComponentInputs() { return origComponentInputs; } - public void setOrigComponentInputs(List<InputDefinition> origComponentInputs) { + void setOrigComponentInputs(List<InputDefinition> origComponentInputs) { this.origComponentInputs = origComponentInputs; } - public Map<String, ArtifactDefinition> getOrigComponentDeploymentArtifactsCreatedOnTheInstance(){ return this.origCompInstDeploymentArtifactsCreatedOnTheInstance;} + Map<String, ArtifactDefinition> getOrigComponentDeploymentArtifactsCreatedOnTheInstance(){ return this.origCompInstDeploymentArtifactsCreatedOnTheInstance;} - public Map<String, ArtifactDefinition> getOrigComponentInformationalArtifactsCreatedOnTheInstance(){ return origCompInstInformationalArtifactsCreatedOnTheInstance;} + Map<String, ArtifactDefinition> getOrigComponentInformationalArtifactsCreatedOnTheInstance(){ return origCompInstInformationalArtifactsCreatedOnTheInstance;} - public void setOrigComponentDeploymentArtifactsCreatedOnTheInstance(Map<String, ArtifactDefinition> origDeploymentArtifacts){ + void setOrigComponentDeploymentArtifactsCreatedOnTheInstance(Map<String, ArtifactDefinition> origDeploymentArtifacts){ origCompInstDeploymentArtifactsCreatedOnTheInstance = origDeploymentArtifacts; } - public void setOrigComponentInformationalArtifactsCreatedOnTheInstance(Map<String, ArtifactDefinition> origInformationalArtifacts){ + void setOrigComponentInformationalArtifactsCreatedOnTheInstance(Map<String, ArtifactDefinition> origInformationalArtifacts){ origCompInstInformationalArtifactsCreatedOnTheInstance = origInformationalArtifacts; } - public void setVfRelationsInfo(VfRelationsMergeInfo vfRelationsMergeInfo) { - this.vfRelationsMergeInfo = vfRelationsMergeInfo; + Map<String, List<String>> getOrigCompInstExternalRefs() { + return origComponentInstanceExternalRefs; + } + + void setOrigComponentInstanceExternalRefs(Map<String, List<String>> origComponentInstanceExternalRefs) { + this.origComponentInstanceExternalRefs = origComponentInstanceExternalRefs; + } + + void setVfRelationsInfo(ContainerRelationsMergeInfo containerRelationsMergeInfo) { + this.containerRelationsMergeInfo = containerRelationsMergeInfo; } - public VfRelationsMergeInfo getVfRelationsMergeInfo() { - return vfRelationsMergeInfo; + ContainerRelationsMergeInfo getContainerRelationsMergeInfo() { + return containerRelationsMergeInfo; } - public List<CapabilityDefinition> getOrigInstanceCapabilities() { + List<CapabilityDefinition> getOrigInstanceCapabilities() { return origInstanceCapabilities; } - public void setOrigInstanceCapabilities(List<CapabilityDefinition> origInstanceCapabilities) { + void setOrigInstanceCapabilities(List<CapabilityDefinition> origInstanceCapabilities) { this.origInstanceCapabilities = origInstanceCapabilities; } - public Component getOrigInstanceNode() { + Component getOrigInstanceNode() { return origInstanceNode; } - public void setOrigInstanceNode(Component origInstanceNode) { + void setOrigInstanceNode(Component origInstanceNode) { this.origInstanceNode = origInstanceNode; } + Component getCurrInstanceNode() { + return currInstanceNode; + } + + public void setCurrInstanceNode(Component currInstanceNode) { + this.currInstanceNode = currInstanceNode; + } + public String getOrigComponentInstId() { return origComponentInstId; } diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ExternalRefsMergeBL.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ExternalRefsMergeBL.java new file mode 100644 index 0000000000..e9c4364181 --- /dev/null +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ExternalRefsMergeBL.java @@ -0,0 +1,49 @@ +package org.openecomp.sdc.be.components.merge.instance; + +import fj.data.Either; +import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; +import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.model.Component; +import org.openecomp.sdc.be.model.ComponentInstance; +import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.model.jsontitan.operations.ExternalReferencesOperation; +import org.openecomp.sdc.exception.ResponseFormat; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import static org.apache.commons.collections.MapUtils.isEmpty; + +@org.springframework.stereotype.Component +public class ExternalRefsMergeBL implements ComponentInstanceMergeInterface { + + private final ExternalReferencesOperation externalReferencesOperation; + + ExternalRefsMergeBL(ExternalReferencesOperation externalReferencesOperation) { + this.externalReferencesOperation = externalReferencesOperation; + } + + @Override + public void saveDataBeforeMerge(DataForMergeHolder dataHolder, Component containerComponent, + ComponentInstance currentResourceInstance, Component originComponent) { + Map<String, List<String>> externalRefs = externalReferencesOperation.getAllExternalReferences(containerComponent.getUniqueId(), + currentResourceInstance.getUniqueId()); + dataHolder.setOrigComponentInstanceExternalRefs(externalRefs); + } + + @Override + public Either<Component, ResponseFormat> mergeDataAfterCreate(User user, DataForMergeHolder dataHolder, Component updatedContainerComponent, String newInstanceId) { + Optional<ComponentInstance> componentInstance = updatedContainerComponent.getComponentInstanceById(newInstanceId); + if (!componentInstance.isPresent()) { + throw new ComponentException(ActionStatus.COMPONENT_INSTANCE_NOT_FOUND, + newInstanceId); + } + Map<String, List<String>> savedExternalRefs = dataHolder.getOrigCompInstExternalRefs(); + if (!isEmpty(savedExternalRefs)) { + externalReferencesOperation.addAllExternalReferences(updatedContainerComponent.getUniqueId(), + componentInstance.get().getUniqueId(), savedExternalRefs); + } + return Either.left(updatedContainerComponent); + } +} diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/RelationMergeInfo.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/RelationMergeInfo.java index 4ab802ad35..da6ef7156e 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/RelationMergeInfo.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/RelationMergeInfo.java @@ -4,14 +4,14 @@ import org.openecomp.sdc.be.model.RequirementCapabilityRelDef; public class RelationMergeInfo { private String capReqType; - private String vfcInstanceName; + private String capOwnerName; private RequirementCapabilityRelDef relDef; private String capReqName; - public RelationMergeInfo(String capReqType, String capReqName, String vfcInstanceName, RequirementCapabilityRelDef relDef) { + public RelationMergeInfo(String capReqType, String capReqName, String capOwnerName, RequirementCapabilityRelDef relDef) { this.capReqType = capReqType; this.capReqName = capReqName; - this.vfcInstanceName = vfcInstanceName; + this.capOwnerName = capOwnerName; this.relDef = relDef; } @@ -19,31 +19,15 @@ public class RelationMergeInfo { return capReqType; } - public void setCapReqType(String type) { - this.capReqType = type; + public String getCapOwnerName() { + return capOwnerName; } - - public String getVfcInstanceName() { - return vfcInstanceName; - } - - public void setVfcInstanceName(String vfcInstanceName) { - this.vfcInstanceName = vfcInstanceName; - } - public RequirementCapabilityRelDef getRelDef() { return relDef; } - public void setRelDef(RequirementCapabilityRelDef relDef) { - this.relDef = relDef; - } - public String getCapReqName() { return capReqName; } - public void setCapReqName(String capReqName) { - this.capReqName = capReqName; - } }
\ No newline at end of file |