summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentCapabilitiesPropertiesMergeBL.java29
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceArtifactsMerge.java26
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceCapabilitiesPropertiesMerge.java (renamed from catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceCapabiliteisPropertiesMerge.java)19
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceForwardingPathMerge.java27
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceHeatEnvMerge.java18
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsMergeBL.java58
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsRedeclareHandler.java84
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeDataBusinessLogic.java22
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceMergeInterface.java3
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropertiesMergeBL.java57
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstancePropsAndInputsMerge.java65
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceRelationMerge.java348
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ComponentsMergeCommand.java22
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ContainerRelationsMergeInfo.java (renamed from catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/VfRelationsMergeInfo.java)12
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/DataForMergeHolder.java77
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/ExternalRefsMergeBL.java49
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/merge/instance/RelationMergeInfo.java26
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