summaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java')
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java195
1 files changed, 174 insertions, 21 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java
index 83c8183a01..887ce12c3c 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java
@@ -23,6 +23,7 @@ package org.openecomp.sdc.be.components.impl;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.math.BigDecimal;
+import java.rmi.activation.ActivationSystem;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.EnumMap;
@@ -30,6 +31,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
@@ -270,7 +272,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
}
// step 8
Either<Either<ArtifactDefinition, Operation>, ResponseFormat> result = validateAndHandleArtifact(componentId, componentType, operation, artifactId, artifactInfo, origMd5, originData, interfaceName, operationName, parentId, user, component,
- shouldLock, inTransaction);
+ shouldLock, inTransaction, true);
return result;
}
@@ -283,7 +285,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
* @return
*/
public Either<Either<ArtifactDefinition, Operation>, ResponseFormat> validateAndHandleArtifact(String componentUniqueId, ComponentTypeEnum componentType, ArtifactOperationInfo operation, String artifactUniqueId,
- ArtifactDefinition artifactDefinition, String origMd5, String originData, String interfaceName, String operationName, String parentId, User user, Component component, boolean shouldLock, boolean inTransaction) {
+ ArtifactDefinition artifactDefinition, String origMd5, String originData, String interfaceName, String operationName, String parentId, User user, Component component, boolean shouldLock, boolean inTransaction, boolean needUpdateGroup) {
Component parent = component;
Wrapper<ResponseFormat> errorWrapper = new Wrapper<>();
@@ -293,7 +295,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
Either<Either<ArtifactDefinition, Operation>, ResponseFormat> result;
if (errorWrapper.isEmpty()) {
// step 10
- result = doAction(componentUniqueId, componentType, operation, artifactUniqueId, artifactDefinition, origMd5, originData, interfaceName, operationName, auditingAction, user, parent, shouldLock, inTransaction);
+ result = doAction(componentUniqueId, componentType, operation, artifactUniqueId, artifactDefinition, origMd5, originData, interfaceName, operationName, auditingAction, user, parent, shouldLock, inTransaction, needUpdateGroup);
} else {
result = Either.right(errorWrapper.getInnerElement());
}
@@ -387,7 +389,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
}
private Either<Either<ArtifactDefinition, Operation>, ResponseFormat> doAction(String componentId, ComponentTypeEnum componentType, ArtifactOperationInfo operation, String artifactId, ArtifactDefinition artifactInfo, String origMd5,
- String originData, String interfaceName, String operationName, AuditingActionEnum auditingAction, User user, org.openecomp.sdc.be.model.Component parent, boolean shouldLock, boolean inTransaction) {
+ String originData, String interfaceName, String operationName, AuditingActionEnum auditingAction, User user, org.openecomp.sdc.be.model.Component parent, boolean shouldLock, boolean inTransaction, boolean needUpdateGroup) {
if (interfaceName != null && operationName != null) {
interfaceName = interfaceName.toLowerCase();
operationName = operationName.toLowerCase();
@@ -401,22 +403,119 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
case Delete:
return handleDelete(componentId, artifactId, user, auditingAction, componentType, parent, interfaceName, operationName, shouldLock, inTransaction);
case Update:
+ Either<Either<ArtifactDefinition, Operation>, ResponseFormat> result = null;
ArtifactTypeEnum artifactType = ArtifactTypeEnum.findType(artifactInfo.getArtifactType());
if (componentType.equals(ComponentTypeEnum.RESOURCE_INSTANCE)
&& (artifactType == ArtifactTypeEnum.HEAT || artifactType == ArtifactTypeEnum.HEAT_VOL || artifactType == ArtifactTypeEnum.HEAT_NET || artifactType == ArtifactTypeEnum.HEAT_ENV)) {
- return handleUpdateHeatEnv(componentId, artifactInfo, auditingAction, artifactId, user, componentType, parent, originData, origMd5, operation, shouldLock, inTransaction);
+ result = handleUpdateHeatEnv(componentId, artifactInfo, auditingAction, artifactId, user, componentType, parent, originData, origMd5, operation, shouldLock, inTransaction);
+ if (needUpdateGroup && result.isLeft()) {
+ Either<ArtifactDefinition, Operation> updateResult = result.left().value();
+ ActionStatus error = updateGroupInstance(artifactInfo, updateResult.left().value(), parent, componentType, componentId);
+ if (error != ActionStatus.OK) {
+ result = Either.right(componentsUtils.getResponseFormat(error));
+ }
+ }
} else {
if (componentType.equals(ComponentTypeEnum.RESOURCE) && artifactType == ArtifactTypeEnum.HEAT_ENV) {
- return handleUpdateHeatWithHeatEnvParams(componentId, artifactInfo, auditingAction, artifactId, user, componentType, parent, originData, origMd5, operation, shouldLock, inTransaction);
+ result = handleUpdateHeatWithHeatEnvParams(componentId, artifactInfo, auditingAction, artifactId, user, componentType, parent, originData, origMd5, operation, shouldLock, inTransaction, needUpdateGroup);
+ }
+ }
+ if (result == null) {
+ result = handleUpdate(componentId, artifactInfo, operation, auditingAction, artifactId, user, componentType, parent, origMd5, originData, interfaceName, operationName, shouldLock, inTransaction);
+ if (needUpdateGroup && result.isLeft()) {
+ Either<ArtifactDefinition, Operation> updateResult = result.left().value();
+
+ ActionStatus error = updateGroupForHeat(artifactInfo, updateResult.left().value(), parent, componentType);
+ if (error != ActionStatus.OK) {
+ result = Either.right(componentsUtils.getResponseFormat(error));
+ }
}
}
- return handleUpdate(componentId, artifactInfo, operation, auditingAction, artifactId, user, componentType, parent, origMd5, originData, interfaceName, operationName, shouldLock, inTransaction);
+ return result;
case Create:
return handleCreate(componentId, artifactInfo, operation, auditingAction, user, componentType, parent, origMd5, originData, interfaceName, operationName, shouldLock, inTransaction);
}
return null;
}
+ private ActionStatus updateGroupForHeat(ArtifactDefinition artifactInfo, ArtifactDefinition artAfterUpdate, Component parent, ComponentTypeEnum componentType) {
+ List<GroupDefinition> groups = parent.getGroups();
+ if (groups != null && !groups.isEmpty()) {
+ List<GroupDataDefinition> groupToUpdate = groups.stream().filter(g -> g.getArtifacts() != null && g.getArtifacts().contains(artifactInfo.getUniqueId())).collect(Collectors.toList());
+ if (groupToUpdate != null && !groupToUpdate.isEmpty()) {
+ groupToUpdate.forEach(g -> {
+ g.getArtifacts().remove(artifactInfo.getUniqueId());
+ g.getArtifactsUuid().remove(artifactInfo.getArtifactUUID());
+ g.getArtifacts().add(artAfterUpdate.getUniqueId());
+ g.getArtifactsUuid().add(artAfterUpdate.getArtifactUUID());
+ });
+ Either<List<GroupDefinition>, StorageOperationStatus> status = toscaOperationFacade.updateGroupsOnComponent(parent, componentType, groupToUpdate);
+ if (status.isRight()) {
+ log.debug("Failed to update groups of the component {}. ", parent.getUniqueId());
+ return componentsUtils.convertFromStorageResponse(status.right().value());
+ }
+ }
+ }
+ return ActionStatus.OK;
+ }
+
+ private ActionStatus updateGroupForHeat(ArtifactDefinition artifactInfoHeat, ArtifactDefinition artHeatAfterUpdate, ArtifactDefinition artifactInfoHeatE, ArtifactDefinition artHEAfterUpdate, Component parent, ComponentTypeEnum componentType) {
+ List<GroupDefinition> groups = parent.getGroups();
+ if (groups != null && !groups.isEmpty()) {
+ List<GroupDataDefinition> groupToUpdate = groups.stream().filter(g -> g.getArtifacts() != null && g.getArtifacts().contains(artifactInfoHeat.getUniqueId())).collect(Collectors.toList());
+ if (groupToUpdate != null && !groupToUpdate.isEmpty()) {
+ groupToUpdate.forEach(g -> {
+ g.getArtifacts().remove(artifactInfoHeat.getUniqueId());
+ g.getArtifactsUuid().remove(artifactInfoHeat.getArtifactUUID());
+ g.getArtifacts().remove(artifactInfoHeatE.getUniqueId());
+ g.getArtifacts().add(artHeatAfterUpdate.getUniqueId());
+ g.getArtifactsUuid().add(artHeatAfterUpdate.getArtifactUUID());
+ g.getArtifacts().add(artHEAfterUpdate.getUniqueId());
+ });
+ Either<List<GroupDefinition>, StorageOperationStatus> status = toscaOperationFacade.updateGroupsOnComponent(parent, componentType, groupToUpdate);
+ if (status.isRight()) {
+ log.debug("Failed to update groups of the component {}. ", parent.getUniqueId());
+ return componentsUtils.convertFromStorageResponse(status.right().value());
+ }
+ }
+ }
+ return ActionStatus.OK;
+ }
+
+ private ActionStatus updateGroupInstance(ArtifactDefinition artifactInfo, ArtifactDefinition artAfterUpdate, Component parent, ComponentTypeEnum componentType, String parentId) {
+ List<GroupInstance> updatedGroupInstances = new ArrayList<>();
+ List<GroupInstance> groupInstances = null;
+ Optional<ComponentInstance> componentInstOp = parent.getComponentInstances().stream().filter(ci -> ci.getUniqueId().equals(parentId)).findFirst();
+ if (componentInstOp.isPresent()) {
+ groupInstances = componentInstOp.get().getGroupInstances();
+ }
+ if (CollectionUtils.isNotEmpty(groupInstances)) {
+ boolean isUpdated = false;
+ for (GroupInstance groupInstance : groupInstances) {
+ isUpdated = false;
+ if (CollectionUtils.isNotEmpty(groupInstance.getGroupInstanceArtifacts()) && groupInstance.getGroupInstanceArtifacts().contains(artifactInfo.getUniqueId())) {
+ groupInstance.getGroupInstanceArtifacts().remove(artifactInfo.getUniqueId());
+ groupInstance.getGroupInstanceArtifacts().add(artAfterUpdate.getUniqueId());
+ isUpdated = true;
+ }
+ if (CollectionUtils.isNotEmpty(groupInstance.getGroupInstanceArtifactsUuid()) && groupInstance.getGroupInstanceArtifactsUuid().contains(artifactInfo.getArtifactUUID())) {
+ groupInstance.getGroupInstanceArtifactsUuid().remove(artifactInfo.getArtifactUUID());
+ groupInstance.getGroupInstanceArtifacts().add(artAfterUpdate.getArtifactUUID());
+ isUpdated = true;
+ }
+ if (isUpdated) {
+ updatedGroupInstances.add(groupInstance);
+ }
+ }
+ }
+ Either<List<GroupInstance>, StorageOperationStatus> status = toscaOperationFacade.updateGroupInstancesOnComponent(parent, componentType, parentId, updatedGroupInstances);
+ if (status.isRight()) {
+ log.debug("Failed to update groups of the component {}. ", parent.getUniqueId());
+ return componentsUtils.convertFromStorageResponse(status.right().value());
+ }
+ return ActionStatus.OK;
+ }
+
Either<Either<ArtifactDefinition, Operation>, ResponseFormat> generateNotSavedArtifact(org.openecomp.sdc.be.model.Component parent, ArtifactDefinition artifactInfo, boolean shouldLock, boolean inTransaction) {
Either<Either<ArtifactDefinition, Operation>, ResponseFormat> result;
if (artifactInfo.getArtifactGroupType() == ArtifactGroupTypeEnum.TOSCA) {
@@ -437,7 +536,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
}
private Either<Either<ArtifactDefinition, Operation>, ResponseFormat> handleUpdateHeatWithHeatEnvParams(String componentId, ArtifactDefinition artifactInfo, AuditingActionEnum auditingAction, String artifactId, User user,
- ComponentTypeEnum componentType, Component parent, String originData, String origMd5, ArtifactOperationInfo operation, boolean shouldLock, boolean inTransaction) {
+ ComponentTypeEnum componentType, Component parent, String originData, String origMd5, ArtifactOperationInfo operation, boolean shouldLock, boolean inTransaction, boolean needToUpdateGroup) {
convertParentType(componentType);
String parentId = parent.getUniqueId();
Either<ArtifactDefinition, StorageOperationStatus> artifactHeatRes = artifactToscaOperation.getArtifactById(componentId, artifactInfo.getGeneratedFromId());
@@ -476,7 +575,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
}
Either<Either<ArtifactDefinition, Operation>, ResponseFormat> resultOp = null;
try {
- resultOp = updateHeatParams(componentId, artifactId, artifactInfo, user, auditingAction, parent, componentType, currHeatArtifact, origMd5);
+ resultOp = updateHeatParams(componentId, artifactId, artifactInfo, user, auditingAction, parent, componentType, currHeatArtifact, origMd5, needToUpdateGroup);
return resultOp;
} finally {
@@ -1061,11 +1160,11 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
private ArtifactDefinition findArtifact(Component parentComponent, ComponentTypeEnum componentType, String parentId, String artifactId) {
ArtifactDefinition foundArtifact;
if (parentComponent.getUniqueId().equals(parentId)) {
- foundArtifact = artifactsResolver.findArtifactOnComponent(parentComponent, componentType, artifactId);
- } else {
- ComponentInstance instance = findComponentInstance(parentId, parentComponent);
- foundArtifact = artifactsResolver.findArtifactOnComponentInstance(instance, artifactId);
- }
+ foundArtifact = artifactsResolver.findArtifactOnComponent(parentComponent, componentType, artifactId);
+ } else {
+ ComponentInstance instance = findComponentInstance(parentId, parentComponent);
+ foundArtifact = artifactsResolver.findArtifactOnComponentInstance(instance, artifactId);
+ }
return foundArtifact;
}
@@ -2557,6 +2656,18 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
String artifactType = artifactInfo.getArtifactType();
if (NodeTypeEnum.Resource == convertParentType
&& (ArtifactTypeEnum.HEAT.getType().equalsIgnoreCase(artifactType) || ArtifactTypeEnum.HEAT_VOL.getType().equalsIgnoreCase(artifactType) || ArtifactTypeEnum.HEAT_NET.getType().equalsIgnoreCase(artifactType))) {
+
+ if (!artifactUniqueId.equals(artifactId)) {
+ // need to update the generated id in heat env
+ Map<String, ArtifactDefinition> deploymentArtifacts = parent.getDeploymentArtifacts();
+ Optional<Entry<String, ArtifactDefinition>> findFirst = deploymentArtifacts.entrySet().stream().filter(a -> a.getValue().getGeneratedFromId().equals(artifactId)).findFirst();
+ if (findFirst.isPresent()) {
+ ArtifactDefinition artifactEnvInfo = findFirst.get().getValue();
+ artifactEnvInfo.setArtifactChecksum(null);
+ artifactToscaOperation.updateHeatEnvArtifact(parent.getUniqueId(), artifactEnvInfo, artifactId, artifactUniqueId, convertParentType, parentId);
+ }
+ }
+
/*
* if (!artifactUniqueId.equals(artifactId)) { artifactToscaOperation.updateHeatEnvArtifact(parentId, null, artifactId, artifactUniqueId, convertParentType);
*
@@ -2692,8 +2803,8 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
if (!ArtifactTypeEnum.HEAT_ENV.getType().equalsIgnoreCase(artifactType)) {
// HEAT specific YAML validation
DeploymentArtifactHeatConfiguration heatConfiguration = yamlToObjectConverter.convert(decodedPayload, DeploymentArtifactHeatConfiguration.class);
- if (heatConfiguration == null || heatConfiguration.getHeat_template_version() == null || heatConfiguration.getResources() == null) {
- log.debug("HEAT doesn't contain required \"heat_template_version\" and \"resources\" sections ");
+ if (heatConfiguration == null || heatConfiguration.getHeat_template_version() == null) {
+ log.debug("HEAT doesn't contain required \"heat_template_version\" section.");
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_DEPLOYMENT_ARTIFACT_HEAT, artifactType);
return Either.right(responseFormat);
}
@@ -3552,7 +3663,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
oldCheckSum = artifactDefinition.getArtifactChecksum();
artifactDefinition.setArtifactChecksum(newCheckSum);
-// artifactToscaOperation.updateUUID(artifactDefinition, oldCheckSum, artifactDefinition.getArtifactVersion());
+ // artifactToscaOperation.updateUUID(artifactDefinition, oldCheckSum, artifactDefinition.getArtifactVersion());
artifactDefinition.setEsId(artifactDefinition.getUniqueId());
updateArifactDefinitionStatus = artifactToscaOperation.updateArifactOnResource(artifactDefinition, component.getUniqueId(), artifactDefinition.getUniqueId(), componentType.getNodeType(), instanceId);
@@ -3765,7 +3876,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
}
private Either<Either<ArtifactDefinition, Operation>, ResponseFormat> updateHeatParams(String componentId, String artifactId, ArtifactDefinition artifactEnvInfo, User user, AuditingActionEnum auditingAction, Component parent,
- ComponentTypeEnum componentType, ArtifactDefinition currHeatArtifact, String origMd5) {
+ ComponentTypeEnum componentType, ArtifactDefinition currHeatArtifact, String origMd5, boolean needToUpdateGroup) {
Either<Either<ArtifactDefinition, Operation>, ResponseFormat> resultOp = null;
Either<ArtifactDefinition, Operation> insideEither = null;
@@ -3773,6 +3884,21 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
* currently getArtifactById does not retrieve heatParameters Either<ArtifactDefinition, StorageOperationStatus> artifactRes = artifactOperation.getArtifactById(artifactId, false); ArtifactDefinition currArtifact = artifactRes.left().value();
*/
String currentHeatId = currHeatArtifact.getUniqueId();
+
+ String esArtifactId = currHeatArtifact.getEsId();
+ Either<ESArtifactData, CassandraOperationStatus> artifactfromES = artifactCassandraDao.getArtifact(esArtifactId);
+ if (artifactfromES.isRight()) {
+ CassandraOperationStatus resourceUploadStatus = artifactfromES.right().value();
+ StorageOperationStatus storageResponse = DaoStatusConverter.convertCassandraStatusToStorageStatus(resourceUploadStatus);
+ ActionStatus actionStatus = componentsUtils.convertFromStorageResponse(storageResponse);
+ log.debug("Error when getting artifact from ES, error: {}", actionStatus.name());
+ return Either.right(componentsUtils.getResponseFormatByArtifactId(actionStatus, currHeatArtifact.getArtifactDisplayName()));
+ }
+
+ ESArtifactData esArtifactData = artifactfromES.left().value();
+ byte[] data = esArtifactData.getDataAsArray();
+
+
ArtifactDefinition updatedHeatArt = currHeatArtifact;
List<HeatParameterDefinition> updatedHeatEnvParams = artifactEnvInfo.getListHeatParameters();
@@ -3817,17 +3943,44 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
}
updatedHeatArt = operationStatus.left().value();
+ boolean res = true;
+ if (!updatedHeatArt.getDuplicated() || esArtifactData.getId() == null)
+ esArtifactData.setId(updatedHeatArt.getEsId());
+ res = saveArtifacts(esArtifactData, parent.getUniqueId(), false);
+
+ if (res) {
+ log.debug("Artifact saved into ES - {}", updatedHeatArt.getUniqueId());
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
+ handleAuditing(auditingAction, parent, parent.getUniqueId(), user, updatedHeatArt, currentHeatId, updatedHeatArt.getUniqueId(), responseFormat, componentType, null);
+ // resultOp = Either.left(result.left().value());
+ // return resultOp;
+ } else {
+ BeEcompErrorManager.getInstance().logBeDaoSystemError("Update Artifact");
+ log.debug("Failed to save the artifact.");
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR);
+ handleAuditing(auditingAction, parent, parent.getUniqueId(), user, updatedHeatArt, currentHeatId, updatedHeatArt.getUniqueId(), responseFormat, componentType, null);
+ resultOp = Either.right(responseFormat);
+ // return resultOp;
+ }
+
insideEither = Either.left(updatedHeatArt);
}
}
-
+ Either<ArtifactDefinition, StorageOperationStatus> updateHeatEnvArtifact;
if (!currentHeatId.equals(updatedHeatArt.getUniqueId())) {
artifactEnvInfo.setArtifactChecksum(null);
- artifactToscaOperation.updateHeatEnvArtifact(parent.getUniqueId(), artifactEnvInfo, currentHeatId, updatedHeatArt.getUniqueId(), componentType.getNodeType(), componentId);
+ updateHeatEnvArtifact = artifactToscaOperation.updateHeatEnvArtifact(parent.getUniqueId(), artifactEnvInfo, currentHeatId, updatedHeatArt.getUniqueId(), componentType.getNodeType(), componentId);
} else {
- artifactToscaOperation.updateHeatEnvPlaceholder(artifactEnvInfo, componentId, componentType.getNodeType());
+ updateHeatEnvArtifact = artifactToscaOperation.updateHeatEnvPlaceholder(artifactEnvInfo, componentId, componentType.getNodeType());
}
+ if ( needToUpdateGroup && updateHeatEnvArtifact.isLeft() ){
+ ActionStatus result = updateGroupForHeat(currHeatArtifact, updatedHeatArt, artifactEnvInfo, updateHeatEnvArtifact.left().value(), parent, componentType);
+ if ( result != ActionStatus.OK ){
+ ResponseFormat responseFormat = componentsUtils.getResponseFormat(result);
+ return Either.right(responseFormat);
+ }
+ }
resultOp = Either.left(insideEither);
ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
handleAuditing(auditingAction, parent, parent.getUniqueId(), user, currHeatArtifact, null, artifactId, responseFormat, componentType, "");