diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarArtifactsAndGroupsBusinessLogic.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarArtifactsAndGroupsBusinessLogic.java | 679 |
1 files changed, 367 insertions, 312 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarArtifactsAndGroupsBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarArtifactsAndGroupsBusinessLogic.java index f94cd38670..0192516bf0 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarArtifactsAndGroupsBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/CsarArtifactsAndGroupsBusinessLogic.java @@ -26,6 +26,8 @@ import com.google.gson.JsonObject; import fj.data.Either; import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic; import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.ArtifactOperationEnum; @@ -35,6 +37,7 @@ import org.openecomp.sdc.be.components.impl.CsarValidationUtils; import org.openecomp.sdc.be.components.impl.GroupBusinessLogic; import org.openecomp.sdc.be.components.impl.ImportUtils; import org.openecomp.sdc.be.components.impl.ImportUtils.ResultStatusEnum; +import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.config.BeEcompErrorManager.ErrorSeverity; import org.openecomp.sdc.be.config.Configuration.VfModuleProperty; @@ -47,7 +50,16 @@ import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.info.ArtifactTemplateInfo; import org.openecomp.sdc.be.info.MergedArtifactInfo; -import org.openecomp.sdc.be.model.*; +import org.openecomp.sdc.be.model.ArtifactDefinition; +import org.openecomp.sdc.be.model.ComponentParametersView; +import org.openecomp.sdc.be.model.GroupDefinition; +import org.openecomp.sdc.be.model.GroupProperty; +import org.openecomp.sdc.be.model.GroupTypeDefinition; +import org.openecomp.sdc.be.model.HeatParameterDefinition; +import org.openecomp.sdc.be.model.Operation; +import org.openecomp.sdc.be.model.PropertyDefinition; +import org.openecomp.sdc.be.model.Resource; +import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.be.model.heat.HeatParameterType; import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ArtifactsOperations; import org.openecomp.sdc.be.model.jsonjanusgraph.operations.InterfaceOperation; @@ -64,16 +76,27 @@ import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum; import org.openecomp.sdc.common.api.ArtifactTypeEnum; import org.openecomp.sdc.common.api.Constants; import org.openecomp.sdc.common.log.wrappers.Logger; -import org.openecomp.sdc.common.util.GeneralUtility; import org.openecomp.sdc.exception.ResponseFormat; import org.springframework.beans.factory.annotation.Autowired; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; +import java.util.OptionalInt; +import java.util.Scanner; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.IntStream; +import static org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.FAILED_UPLOAD_ARTIFACT_TO_COMPONENT; import static org.openecomp.sdc.be.tosca.CsarUtils.ARTIFACTS_PATH; @@ -89,6 +112,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { private static final String ARTIFACT_WITH_NAME_AND_TYPE_ALREADY_EXIST_WITH_TYPE = "Artifact with name {} and type {} already exist with type {}"; private final Gson gson = new Gson(); private static final Pattern pattern = Pattern.compile("\\..(.*?)\\.."); + private static final String LABEL_COUNTER_DELIMITER = "[^0-9]+"; protected final ArtifactsBusinessLogic artifactsBusinessLogic; private final GroupBusinessLogic groupBusinessLogic; @@ -108,13 +132,12 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { } public Either<Resource, ResponseFormat> createResourceArtifactsFromCsar(CsarInfo csarInfo, Resource resource, - String artifactsMetaFile, String artifactsMetaFileName, List<ArtifactDefinition> createdArtifacts, - boolean shouldLock, boolean inTransaction) { + String artifactsMetaFile, String artifactsMetaFileName, List<ArtifactDefinition> createdArtifacts) { log.debug("parseResourceArtifactsInfoFromFile start"); return parseResourceArtifactsInfoFromFile(resource, artifactsMetaFile, artifactsMetaFileName) .left() - .bind( p-> createResourceArtifacts(csarInfo, resource, p, createdArtifacts,shouldLock, inTransaction)) + .bind( p-> createResourceArtifacts(csarInfo, resource, p, createdArtifacts)) .right() .map(rf -> { componentsUtils.auditResource(rf, csarInfo.getModifier(), resource, AuditingActionEnum.IMPORT_RESOURCE); return rf;}) .left() @@ -137,35 +160,34 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { } List<GroupDefinition> groups = updatedResource.getGroups(); - Map<String, ArtifactDefinition> deplymentArtifact = updatedResource.getDeploymentArtifacts(); - if (deplymentArtifact == null || deplymentArtifact.isEmpty()) { - if(groups != null){ - List<GroupDefinition> listToDelete = groups.stream().filter(g -> g.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)).collect(Collectors.toList()); - groupBusinessLogic.deleteGroups(updatedResource, listToDelete); - } + Map<String, ArtifactDefinition> deploymentArtifact = updatedResource.getDeploymentArtifacts(); + if (MapUtils.isEmpty(deploymentArtifact)) { + deleteGroupsByType(groups, Constants.DEFAULT_GROUP_VF_MODULE, updatedResource); return createResourceArtifacts(csarInfo, updatedResource, parseResourceInfoFromYamlEither.left().value(), - createdNewArtifacts, shouldLock, inTransaction); + createdNewArtifacts); } - List<ArtifactDefinition> createdDeplymentArtifactsAfterDelete = deplymentArtifact.values().stream().collect(Collectors.toList()); - - int labelCounter = createdDeplymentArtifactsAfterDelete.size(); + List<ArtifactDefinition> createdDeploymentArtifactsAfterDelete = deploymentArtifact.values().stream() + .collect(Collectors.toList()); + int labelCounter = createdDeploymentArtifactsAfterDelete + .stream() + .map(ArtifactDefinition::getArtifactLabel) + .filter(this::isLastCharacterInLabelADigit) + .map(this::getNextInt) + .flatMapToInt(this::toStream) + .max() + .orElse(-1) + 1; ////////////////////////////////////// create set parsed ////////////////////////////////////// artifacts/////////////////////////////////////////// Map<String, List<ArtifactTemplateInfo>> parsedArtifactsMap = parseResourceInfoFromYamlEither.left().value(); - - List<ArtifactTemplateInfo> artifactsWithoutGroups = null; - if (parsedArtifactsMap.containsKey(ArtifactTemplateInfo.CSAR_ARTIFACT)) { - artifactsWithoutGroups = parsedArtifactsMap.get(ArtifactTemplateInfo.CSAR_ARTIFACT); - parsedArtifactsMap.remove(ArtifactTemplateInfo.CSAR_ARTIFACT); - } + List<ArtifactTemplateInfo> artifactsWithoutGroups = parsedArtifactsMap.remove(ArtifactTemplateInfo.CSAR_ARTIFACT); Collection<List<ArtifactTemplateInfo>> parsedArifactsCollection = parsedArtifactsMap.values(); Either<Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>>, ResponseFormat> parsedArtifactsPerGroupEither = createArtifactsTemplateCollection(csarInfo, updatedResource, createdNewArtifacts, shouldLock, inTransaction, - createdDeplymentArtifactsAfterDelete, labelCounter, parsedArifactsCollection); + createdDeploymentArtifactsAfterDelete, labelCounter, parsedArifactsCollection); if(parsedArtifactsPerGroupEither.isRight()){ log.error("Failed to parse artifacts. Status is {} ", parsedArtifactsPerGroupEither.right().value()); return Either.right(parsedArtifactsPerGroupEither.right().value()); @@ -175,20 +197,20 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { // find master in group Map<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> groupArtifact = findMasterArtifactInGroup( - groups, deplymentArtifact); + groups, deploymentArtifact); ///////////////////////////////// find artifacts to ///////////////////////////////// delete//////////////////////////////////////////////////// Map<String, List<ArtifactDefinition>> groupToDelete = new HashMap<>(); - Set<ArtifactDefinition> artifactsToDelete = findArtifactThatNotInGroupToDelete(parsedGroup, createdDeplymentArtifactsAfterDelete); + Set<ArtifactDefinition> artifactsToDelete = findArtifactThatNotInGroupToDelete(parsedGroup, createdDeploymentArtifactsAfterDelete); Set<ArtifactTemplateInfo> jsonMasterArtifacts = parsedGroup.keySet(); Map<GroupDefinition, MergedArtifactInfo> mergedgroup = mergeGroupInUpdateFlow(groupArtifact, parsedGroup, - artifactsToDelete, groupToDelete, jsonMasterArtifacts, createdDeplymentArtifactsAfterDelete); + artifactsToDelete, groupToDelete, jsonMasterArtifacts, createdDeploymentArtifactsAfterDelete); - List<ArtifactDefinition> deletedArtifacts = new ArrayList<>();; + List<ArtifactDefinition> deletedArtifacts = new ArrayList<>(); Either<Resource, ResponseFormat> deletedArtifactsEither = deleteArtifactsInUpdateCsarFlow( updatedResource, csarInfo.getModifier(), shouldLock, inTransaction, artifactsToDelete, groupToDelete, deletedArtifacts); if (deletedArtifactsEither.isRight()) { @@ -200,97 +222,60 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { updatedResource = deletedArtifactsEither.left().value(); // need to update resource if we updated artifacts - if (!deletedArtifacts.isEmpty()) { - for (ArtifactDefinition deletedArtifact : deletedArtifacts) { - ArtifactDefinition artToRemove = null; - for (ArtifactDefinition artFromResource : createdDeplymentArtifactsAfterDelete) { - if (deletedArtifact.getUniqueId().equalsIgnoreCase(artFromResource.getUniqueId())) { - artToRemove = artFromResource; - break; - } - } - if (artToRemove != null) { - createdDeplymentArtifactsAfterDelete.remove(artToRemove); - } - - } - } + excludeDeletedArtifacts(deletedArtifacts, createdDeploymentArtifactsAfterDelete); ////////////// dissociate, associate or create ////////////// artifacts//////////////////////////// Either<Resource, ResponseFormat> assDissotiateEither = associateAndDissociateArtifactsToGroup(csarInfo, - updatedResource, createdNewArtifacts, labelCounter, inTransaction, - createdDeplymentArtifactsAfterDelete, mergedgroup, deletedArtifacts); + updatedResource, createdNewArtifacts, labelCounter, + createdDeploymentArtifactsAfterDelete, mergedgroup, deletedArtifacts); groups = updatedResource.getGroups(); if (assDissotiateEither.isRight()) { log.debug("Failed to delete artifacts. Status is {} ", assDissotiateEither.right().value()); - return Either.right(assDissotiateEither.right().value()); - } + updatedResource = assDissotiateEither.left().value(); - deplymentArtifact = updatedResource.getDeploymentArtifacts(); - createdDeplymentArtifactsAfterDelete.clear(); - if (deplymentArtifact != null && !deplymentArtifact.isEmpty()) { - for (Entry<String, ArtifactDefinition> entry : deplymentArtifact.entrySet()) { - createdDeplymentArtifactsAfterDelete.add(entry.getValue()); - } - } + deploymentArtifact = updatedResource.getDeploymentArtifacts(); + createdDeploymentArtifactsAfterDelete = deploymentArtifact.values().stream() + .collect(Collectors.toList()); + // update vfModule names Set<GroupDefinition> groupForAssociateWithMembers = mergedgroup.keySet(); - if (groups != null && !groups.isEmpty()) { - Either<List<GroupDefinition>, ResponseFormat> validateUpdateVfGroupNamesRes = groupBusinessLogic - .validateUpdateVfGroupNamesOnGraph(groups, updatedResource); - if (validateUpdateVfGroupNamesRes.isRight()) { - return Either.right(validateUpdateVfGroupNamesRes.right().value()); - } - List<GroupDefinition> heatGroups = null; - - heatGroups = groups.stream().filter(e -> e.getMembers() != null).collect(Collectors.toList()); - - for (GroupDefinition updatedGroupDef : groupForAssociateWithMembers) { - - if (updatedGroupDef.getMembers() != null && !updatedGroupDef.getMembers().isEmpty()) { - updatedGroupDef.getMembers().clear(); - } - Map<String, String> members = new HashMap<>(); - Set<String> artifactsGroup = new HashSet<>(); - artifactsGroup.addAll(updatedGroupDef.getArtifacts()); - associateMembersToArtifacts(createdNewArtifacts, createdDeplymentArtifactsAfterDelete, heatGroups, - artifactsGroup, members); - if (!members.isEmpty()) { - updatedGroupDef.setMembers(members); - - } - - } - - } + Either<Resource, ResponseFormat> validateUpdateVfGroupNamesRes = updateVfModuleNames(createdNewArtifacts, + updatedResource, groups, createdDeploymentArtifactsAfterDelete, groupForAssociateWithMembers); + if (validateUpdateVfGroupNamesRes != null) return validateUpdateVfGroupNamesRes; //////////////// create new artifacts in update //////////////// flow//////////////////////////// - List<ArtifactTemplateInfo> newArtifactsGroup = new ArrayList<>(); + List<ArtifactTemplateInfo> newArtifactsGroup = createNewArtifcats(parsedGroup, groupArtifact); + Either<Resource, ResponseFormat> validateGroupNamesRes = handleArtifactsInGroup(csarInfo, createdNewArtifacts, + updatedResource, groups, createdDeploymentArtifactsAfterDelete, labelCounter, newArtifactsGroup); + if (validateGroupNamesRes != null) return validateGroupNamesRes; - for (Entry<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroupSetEntry : parsedGroup.entrySet()) { - ArtifactTemplateInfo parsedArtifactMaster = parsedGroupSetEntry.getKey(); - boolean isNewGroup = true; - for (Entry<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> groupListEntry : groupArtifact - .entrySet()) { - Map<ArtifactDefinition, List<ArtifactDefinition>> groupArtifacts = groupListEntry.getValue(); - Set<ArtifactDefinition> group = groupArtifacts.keySet(); - for (ArtifactDefinition artifactInfo : group) { - if (parsedArtifactMaster.getFileName().equalsIgnoreCase(artifactInfo.getArtifactName())) { - parsedArtifactMaster.setGroupName(groupListEntry.getKey().getName()); - isNewGroup = false; - } - } - } - if (isNewGroup) { - newArtifactsGroup.add(parsedArtifactMaster); + // updatedGroup + Either<Resource, ResponseFormat> updateVersionEither = updateGroupVersion(updatedResource, groupForAssociateWithMembers); + if (updateVersionEither != null) return updateVersionEither; + if (!CollectionUtils.isEmpty(artifactsWithoutGroups)) { + for (ArtifactTemplateInfo t : artifactsWithoutGroups) { + List<ArtifactTemplateInfo> artifacts = new ArrayList<>(); + artifacts.add(t); + Either<Resource, ResponseFormat> resStatus = createGroupDeploymentArtifactsFromCsar(csarInfo, updatedResource, + artifacts, createdNewArtifacts, createdDeploymentArtifactsAfterDelete, labelCounter); + if (checkResponse(resStatus)) return resStatus; } } + + Either<Resource, StorageOperationStatus> eitherGetResource = toscaOperationFacade.getToscaElement(updatedResource.getUniqueId()); + return mapResult(eitherGetResource, updatedResource); + } + + private Either<Resource, ResponseFormat> handleArtifactsInGroup(CsarInfo csarInfo, List<ArtifactDefinition> createdNewArtifacts, + Resource updatedResource, List<GroupDefinition> groups, + List<ArtifactDefinition> createdDeploymentArtifactsAfterDelete, + int labelCounter, List<ArtifactTemplateInfo> newArtifactsGroup) { if (!newArtifactsGroup.isEmpty()) { Collections.sort(newArtifactsGroup, ArtifactTemplateInfo::compareByGroupName); int startGroupCounter = groupBusinessLogic.getNextVfModuleNameCounter(groups); @@ -300,18 +285,33 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { return Either.right(validateGroupNamesRes.right().value()); } Either<Resource, ResponseFormat> resStatus = createGroupDeploymentArtifactsFromCsar(csarInfo, updatedResource, - newArtifactsGroup, createdNewArtifacts, createdDeplymentArtifactsAfterDelete, labelCounter, - shouldLock, inTransaction); - if (resStatus.isRight()) { - return resStatus; + newArtifactsGroup, createdNewArtifacts, createdDeploymentArtifactsAfterDelete, labelCounter); + checkResponse(resStatus); + } + return null; + } + + private boolean checkResponse(Either<Resource, ResponseFormat> resStatus) { + return (resStatus.isRight()); + } + + private Either<Resource, ResponseFormat> updateVfModuleNames(List<ArtifactDefinition> createdNewArtifacts, Resource updatedResource, List<GroupDefinition> groups, List<ArtifactDefinition> createdDeploymentArtifactsAfterDelete, Set<GroupDefinition> groupForAssociateWithMembers) { + if (!CollectionUtils.isEmpty(groups)) { + Either<List<GroupDefinition>, ResponseFormat> validateUpdateVfGroupNamesRes = groupBusinessLogic + .validateUpdateVfGroupNamesOnGraph(groups, updatedResource); + if (validateUpdateVfGroupNamesRes.isRight()) { + return Either.right(validateUpdateVfGroupNamesRes.right().value()); } + updateGroupMemebers(groups, groupForAssociateWithMembers, createdNewArtifacts, createdDeploymentArtifactsAfterDelete); } + return null; + } - // updatedGroup + private Either<Resource, ResponseFormat> updateGroupVersion(Resource updatedResource, Set<GroupDefinition> groupForAssociateWithMembers) { if (!groupForAssociateWithMembers.isEmpty()) { - List<GroupDefinition> groupsId = groupForAssociateWithMembers.stream().map(e -> e) - .collect(Collectors.toList()); + List<GroupDefinition> groupsId = groupForAssociateWithMembers.stream() + .collect(Collectors.toList()); Either<List<GroupDefinition>, ResponseFormat> updateVersionEither = groupBusinessLogic .updateGroups(updatedResource, groupsId, true); @@ -322,46 +322,131 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { } } - if (artifactsWithoutGroups != null && !artifactsWithoutGroups.isEmpty()) { - for (ArtifactTemplateInfo t : artifactsWithoutGroups) { - List<ArtifactTemplateInfo> arrtifacts = new ArrayList<>(); - arrtifacts.add(t); - Either<Resource, ResponseFormat> resStatus = createGroupDeploymentArtifactsFromCsar(csarInfo, updatedResource, - arrtifacts, createdNewArtifacts, createdDeplymentArtifactsAfterDelete, labelCounter, shouldLock, - inTransaction); - if (resStatus.isRight()) { - return resStatus; + return null; + } + + private IntStream toStream(OptionalInt optionalInt) { + if (optionalInt.isPresent()) { + return IntStream.of(optionalInt.getAsInt()); + } + return IntStream.empty(); + } + + private OptionalInt getNextInt(String artifactLabel) { + try(Scanner scanner = new Scanner(artifactLabel).useDelimiter(LABEL_COUNTER_DELIMITER)) { + if (scanner.hasNextInt()) { + return OptionalInt.of(scanner.nextInt()); + } + return OptionalInt.empty(); + } + } + + private boolean isLastCharacterInLabelADigit(String artifactLabel) { + return Character.isDigit(artifactLabel.charAt(artifactLabel.length()-1)); + } + + private Either<Resource, ResponseFormat> mapResult(Either<Resource, StorageOperationStatus> result, Resource resource) { + return result.right() + .map(status -> componentsUtils.getResponseFormatByResource( + componentsUtils.convertFromStorageResponse(status), resource)); + } + + + private void updateGroupMemebers(List<GroupDefinition> groups, Set<GroupDefinition> groupForAssociateWithMembers, List<ArtifactDefinition> createdNewArtifacts, List<ArtifactDefinition> createdDeploymentArtifactsAfterDelete) { + List<GroupDefinition> heatGroups = collectGroupsWithMembers(groups); + + for (GroupDefinition updatedGroupDef : groupForAssociateWithMembers) { + Map<String, String> members = new HashMap<>(); + Set<String> artifactsGroup = new HashSet<>(); + artifactsGroup.addAll(updatedGroupDef.getArtifacts()); + associateMembersToArtifacts(createdNewArtifacts, createdDeploymentArtifactsAfterDelete, heatGroups, + artifactsGroup, members); + + updatedGroupDef.setMembers(members); + } + } + + + /** + * @param groups + * @return + */ + private List<GroupDefinition> collectGroupsWithMembers(List<GroupDefinition> groups) { + return groups.stream() + .filter(e -> e.getMembers() != null) + .collect(Collectors.toList()); + } + + + /** + * Exclude deleted Artificats from Deployment Artifcats + * @param deletedArtifacts + * @param createdDeploymentArtifactsAfterDelete + */ + private void excludeDeletedArtifacts(List<ArtifactDefinition> deletedArtifacts, List<ArtifactDefinition> createdDeploymentArtifactsAfterDelete) { + for (ArtifactDefinition deletedArtifact : deletedArtifacts) { + ArtifactDefinition artToRemove = null; + for (ArtifactDefinition artFromResource : createdDeploymentArtifactsAfterDelete) { + if (deletedArtifact.getUniqueId().equalsIgnoreCase(artFromResource.getUniqueId())) { + artToRemove = artFromResource; + break; } } + if (artToRemove != null) { + createdDeploymentArtifactsAfterDelete.remove(artToRemove); + } } + } - Either<Resource, StorageOperationStatus> eitherGerResource = toscaOperationFacade - .getToscaElement(updatedResource.getUniqueId()); - if (eitherGerResource.isRight()) { - ResponseFormat responseFormat = componentsUtils.getResponseFormatByResource( - componentsUtils.convertFromStorageResponse(eitherGerResource.right().value()), updatedResource); - return Either.right(responseFormat); + private void deleteGroupsByType(List<GroupDefinition> groups, String groupType, Resource resource) { + if(groups != null){ + List<GroupDefinition> listToDelete = groups.stream() + .filter(g -> g.getType().equals(groupType)) + .collect(Collectors.toList()); + + groupBusinessLogic.deleteGroups(resource, listToDelete); + } + } + + + private List<ArtifactTemplateInfo> createNewArtifcats(Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroup, Map<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> groupArtifact) { + List<ArtifactTemplateInfo> newArtifactsGroup = new ArrayList<>(); + + for (Entry<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroupSetEntry : parsedGroup.entrySet()) { + ArtifactTemplateInfo parsedArtifactMaster = parsedGroupSetEntry.getKey(); + boolean isNewGroup = true; + for (Entry<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> groupListEntry : groupArtifact + .entrySet()) { + Map<ArtifactDefinition, List<ArtifactDefinition>> groupArtifacts = groupListEntry.getValue(); + Set<ArtifactDefinition> group = groupArtifacts.keySet(); + for (ArtifactDefinition artifactInfo : group) { + if (parsedArtifactMaster.getFileName().equalsIgnoreCase(artifactInfo.getArtifactName())) { + parsedArtifactMaster.setGroupName(groupListEntry.getKey().getName()); + isNewGroup = false; + } + } + } + if (isNewGroup) { + newArtifactsGroup.add(parsedArtifactMaster); + } } - return Either.left(eitherGerResource.left().value()); + return newArtifactsGroup; } private Set<ArtifactDefinition> findArtifactThatNotInGroupToDelete( Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroup, - List<ArtifactDefinition> createdDeplymentArtifactsAfterDelete) { + List<ArtifactDefinition> createdDeploymentArtifactsAfterDelete) { Set<ArtifactDefinition> artifactsToDelete = new HashSet<>(); for (Entry<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroupSetEntry : parsedGroup.entrySet()) { Set<ArtifactTemplateInfo> artifactsNames = parsedGroupSetEntry.getValue(); for (ArtifactTemplateInfo template : artifactsNames) { if(template.getType().equals(ArtifactTypeEnum.HEAT_ARTIFACT.getType())){ - Optional<ArtifactDefinition> op = createdDeplymentArtifactsAfterDelete.stream().filter(a -> a.getArtifactName().equalsIgnoreCase(template.getFileName())).findAny(); - if(op.isPresent()){ - if(!op.get().getArtifactType().equalsIgnoreCase(template.getType())){ - artifactsToDelete.add(op.get()); - } - + Optional<ArtifactDefinition> op = createdDeploymentArtifactsAfterDelete.stream().filter(a -> a.getArtifactName().equalsIgnoreCase(template.getFileName())).findAny(); + if (op.isPresent() && !op.get().getArtifactType().equalsIgnoreCase(template.getType())) { + artifactsToDelete.add(op.get()); } } } @@ -373,7 +458,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { private Either<Resource, ResponseFormat> createResourceArtifacts(CsarInfo csarInfo, Resource resource, Map<String, List<ArtifactTemplateInfo>> artifactsMap, - List<ArtifactDefinition> createdArtifacts, boolean shouldLock, boolean inTransaction) { + List<ArtifactDefinition> createdArtifacts) { Either<Resource, ResponseFormat> resStatus = Either.left(resource); @@ -382,7 +467,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { for (List<ArtifactTemplateInfo> groupTemplateList : arifactsCollection) { if (groupTemplateList != null) { resStatus = createGroupDeploymentArtifactsFromCsar(csarInfo, resource, groupTemplateList, - createdArtifacts, 0, shouldLock, inTransaction); + createdArtifacts, 0); if (resStatus.isRight()) { return resStatus; } @@ -396,7 +481,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { private Either<Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>>, ResponseFormat> createArtifactsTemplateCollection(CsarInfo csarInfo, Resource resource, List<ArtifactDefinition> createdNewArtifacts, boolean shouldLock, boolean inTransaction, - List<ArtifactDefinition> createdDeplymentArtifactsAfterDelete, int labelCounter, + List<ArtifactDefinition> createdDeploymentArtifactsAfterDelete, int labelCounter, Collection<List<ArtifactTemplateInfo>> parsedArifactsCollection) { Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroup = new HashMap<>(); @@ -417,8 +502,8 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { List<ArtifactTemplateInfo> arrtifacts = new ArrayList<>(); arrtifacts.add(parsedGroupTemplate); Either<Resource, ResponseFormat> resStatus = createGroupDeploymentArtifactsFromCsar(csarInfo, - resource, arrtifacts, createdNewArtifacts, createdDeplymentArtifactsAfterDelete, - labelCounter, shouldLock, inTransaction); + resource, arrtifacts, createdNewArtifacts, createdDeploymentArtifactsAfterDelete, + labelCounter); if (resStatus.isRight()) { return Either.right(resStatus.right().value()); } @@ -440,20 +525,20 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { JsonElement importStructureElement = jsonElement.get(Constants.IMPORT_STRUCTURE); if (importStructureElement == null || importStructureElement.isJsonNull()) { - log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME, artifactFileName); + log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME, artifactFileName); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); return Either .right(componentsUtils.getResponseFormat(ActionStatus.CSAR_INVALID_FORMAT, artifactFileName)); } - Map<String, List<Map<String, Object>>> artifactTemplateMap = new HashMap<>(); + Map<String, List<Map<String, Object>>> artifactTemplateMap; artifactTemplateMap = ComponentsUtils.parseJsonToObject(importStructureElement.toString(), HashMap.class); if (artifactTemplateMap.isEmpty()) { - log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME, artifactFileName); + log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME, artifactFileName); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); return Either .right(componentsUtils.getResponseFormat(ActionStatus.CSAR_INVALID_FORMAT, artifactFileName)); @@ -482,7 +567,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME, artifactFileName); log.debug("failed with exception.", e); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); return Either.right(componentsUtils.getResponseFormat(ActionStatus.CSAR_INVALID_FORMAT, artifactFileName)); } @@ -496,17 +581,17 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { Either<List<ArtifactTemplateInfo>, ResponseFormat> artifactTemplateInfoListPairStatus = createArtifactTemplateInfoModule( artifactsTypeKey, o); if (artifactTemplateInfoListPairStatus.isRight()) { - log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME, artifactFileName); + log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME, artifactFileName); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); return Either.right(artifactTemplateInfoListPairStatus.right().value()); } List<ArtifactTemplateInfo> artifactTemplateInfoList = artifactTemplateInfoListPairStatus.left().value(); if (artifactTemplateInfoList == null) { - log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME, artifactFileName); + log.debug(ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME, artifactFileName); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); return Either.right( componentsUtils.getResponseFormat(ActionStatus.CSAR_INVALID_FORMAT, artifactFileName)); @@ -542,14 +627,11 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { private Either<Resource, ResponseFormat> createGroupDeploymentArtifactsFromCsar(CsarInfo csarInfo, Resource resource, List<ArtifactTemplateInfo> artifactsTemplateList, - List<ArtifactDefinition> createdArtifacts, int labelCounter, boolean shouldLock, boolean inTransaction) { - Either<Resource, ResponseFormat> resStatus = Either.left(resource); + List<ArtifactDefinition> createdArtifacts, int labelCounter) { List<GroupDefinition> createdGroups = resource.getGroups(); List<GroupDefinition> heatGroups = null; - if (createdGroups != null && !createdGroups.isEmpty()) { - - heatGroups = createdGroups.stream().filter(e -> e.getMembers() != null).collect(Collectors.toList()); - + if (!CollectionUtils.isEmpty(createdGroups)) { + heatGroups = collectGroupsWithMembers(createdGroups); } List<GroupDefinition> needToCreate = new ArrayList<>(); for (ArtifactTemplateInfo groupTemplateInfo : artifactsTemplateList) { @@ -558,12 +640,14 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { Set<String> artifactsUUIDGroup = new HashSet<>(); log.debug("createDeploymentArtifactsFromCsar start"); - resStatus = createDeploymentArtifactFromCsar(csarInfo, ARTIFACTS_PATH, resource, artifactsGroup, - artifactsUUIDGroup, groupTemplateInfo, createdArtifacts, labelCounter, shouldLock, inTransaction); + Either<Resource, ResponseFormat> resStatus = createDeploymentArtifactFromCsar(csarInfo, ARTIFACTS_PATH, resource, artifactsGroup, + artifactsUUIDGroup, groupTemplateInfo, createdArtifacts, labelCounter); log.debug("createDeploymentArtifactsFromCsar end"); if (resStatus.isRight()) { return resStatus; } + Map<String, ArtifactDefinition> createdArtifactsMap = createdArtifacts.stream().collect(Collectors.toMap(artifact -> artifact.getArtifactLabel(), artifact -> artifact)); + resource.setDeploymentArtifacts(createdArtifactsMap); if (groupName != null && !groupName.isEmpty()) { Either<GroupDefinition, ResponseFormat> groupDefinitionEither = buildGroupDefinition(createdArtifacts, heatGroups, groupTemplateInfo, @@ -574,29 +658,16 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { needToCreate.add(groupDefinitionEither.left().value()); } } - - ComponentParametersView componentParametersView = new ComponentParametersView(); - componentParametersView.disableAll(); - componentParametersView.setIgnoreUsers(false); - componentParametersView.setIgnoreArtifacts(false); - componentParametersView.setIgnoreGroups(false); - - componentParametersView.setIgnoreComponentInstances(false); - - Either<Resource, StorageOperationStatus> component = toscaOperationFacade - .getToscaElement(resource.getUniqueId(), componentParametersView); - - if (component.isRight()) { - return Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)); - } + Map<String, ArtifactDefinition> createdArtifactsMap = createdArtifacts.stream().collect(Collectors.toMap(artifact -> artifact.getArtifactLabel(), artifact -> artifact)); + resource.setDeploymentArtifacts(createdArtifactsMap); Either<List<GroupDefinition>, ResponseFormat> createGroups = groupBusinessLogic - .addGroups(component.left().value(), needToCreate, false); + .addGroups(resource, needToCreate, false); if (createGroups.isRight()) { return Either.right(createGroups.right().value()); } - return Either.left(component.left().value()); + return Either.left(resource); } private Either<GroupDefinition, ResponseFormat> buildGroupDefinition(List<ArtifactDefinition> createdArtifacts, @@ -639,8 +710,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { private Either<Resource, ResponseFormat> createDeploymentArtifactFromCsar(CsarInfo csarInfo, String artifactPath, Resource resource, Set<String> artifactsGroup, Set<String> artifactsUUIDGroup, - ArtifactTemplateInfo artifactTemplateInfo, List<ArtifactDefinition> createdArtifacts, int labelCounter, - boolean shoudLock, boolean inTransaction) { + ArtifactTemplateInfo artifactTemplateInfo, List<ArtifactDefinition> createdArtifacts, int labelCounter) { Either<Resource, ResponseFormat> resStatus = Either.left(resource); String artifactUid = ""; @@ -669,14 +739,11 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { ArtifactTypeEnum artifactType = ArtifactTypeEnum.findType(newArtifact.getArtifactType()); if (artifactType == ArtifactTypeEnum.HEAT || artifactType == ArtifactTypeEnum.HEAT_NET || artifactType == ArtifactTypeEnum.HEAT_VOL) { - Either<ArtifactDefinition, ResponseFormat> createHeatEnvPlaceHolder = artifactsBusinessLogic - .createHeatEnvPlaceHolder(newArtifact, ArtifactsBusinessLogic.HEAT_VF_ENV_NAME, + ArtifactDefinition createHeatEnvPlaceHolder = artifactsBusinessLogic + .createHeatEnvPlaceHolder(createdArtifacts, newArtifact, ArtifactsBusinessLogic.HEAT_VF_ENV_NAME, resource.getUniqueId(), NodeTypeEnum.Resource, resource.getName(), csarInfo.getModifier(), resource, null); - if (createHeatEnvPlaceHolder.isRight()) { - return Either.right(createHeatEnvPlaceHolder.right().value()); - } - artifactEnvUid = createHeatEnvPlaceHolder.left().value().getUniqueId(); + artifactEnvUid = createHeatEnvPlaceHolder.getUniqueId(); } }else{ artifactUid = createdArtifact.getUniqueId(); @@ -693,8 +760,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { if (relatedArtifacts != null) { for (ArtifactTemplateInfo relatedArtifactTemplateInfo : relatedArtifacts) { resStatus = createDeploymentArtifactFromCsar(csarInfo, artifactPath, resource, artifactsGroup, - artifactsUUIDGroup, relatedArtifactTemplateInfo, createdArtifacts, labelCounter, shoudLock, - inTransaction); + artifactsUUIDGroup, relatedArtifactTemplateInfo, createdArtifacts, labelCounter); if (resStatus.isRight()) { return resStatus; } @@ -724,7 +790,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { log.debug(ARTIFACT_WITH_NAME_AND_TYPE_ALREADY_EXIST_WITH_TYPE, artifactFileName, artifactTemplateInfo.getType(), res.getArtifactType()); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); return Either.right(componentsUtils.getResponseFormat( ActionStatus.ARTIFACT_ALREADY_EXIST_IN_DIFFERENT_TYPE_IN_CSAR, artifactFileName, @@ -741,16 +807,16 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { int label) { int updatedlabel = label; final String artifactFileName = artifactTemplateInfo.getFileName(); - Either<ImmutablePair<String, byte[]>, ResponseFormat> artifactContententStatus = CsarValidationUtils - .getArtifactsContent(csarInfo.getCsarUUID(), csarInfo.getCsar(), artifactPath + artifactFileName, + Either<ImmutablePair<String, byte[]>, ResponseFormat> artifactContentStatus = CsarValidationUtils + .getArtifactContent(csarInfo.getCsarUUID(), csarInfo.getCsar(), artifactPath + artifactFileName, artifactFileName, componentsUtils); - if (artifactContententStatus.isRight()) { - return Either.right(artifactContententStatus.right().value()); + if (artifactContentStatus.isRight()) { + return Either.right(artifactContentStatus.right().value()); } updatedlabel += createdArtifacts.size(); Map<String, Object> json = ArtifactUtils.buildJsonForArtifact(artifactTemplateInfo, - artifactContententStatus.left().value().getValue(), updatedlabel, true); + artifactContentStatus.left().value().getValue(), updatedlabel, true); Either<Either<ArtifactDefinition, Operation>, ResponseFormat> uploadArtifactToService = createOrUpdateCsarArtifactFromJson( resource, csarInfo.getModifier(), json, @@ -789,17 +855,17 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { Either<ArtifactDefinition, ResponseFormat> resStatus = Either.left(currentInfo); if (artifactTemplateInfo.getEnv() != null && !artifactTemplateInfo.getEnv().isEmpty()) { - Either<ImmutablePair<String, byte[]>, ResponseFormat> artifactparamsStatus = CsarValidationUtils - .getArtifactsContent(csarInfo.getCsarUUID(), csarInfo.getCsar(), + Either<ImmutablePair<String, byte[]>, ResponseFormat> artifactParamsStatus = CsarValidationUtils + .getArtifactContent(csarInfo.getCsarUUID(), csarInfo.getCsar(), CsarUtils.ARTIFACTS_PATH + artifactTemplateInfo.getEnv(), artifactTemplateInfo.getEnv(), componentsUtils); - if (artifactparamsStatus.isRight()) { - resStatus = Either.right(artifactparamsStatus.right().value()); + if (artifactParamsStatus.isRight()) { + resStatus = Either.right(artifactParamsStatus.right().value()); return resStatus; } Either<List<HeatParameterDefinition>, ResponseFormat> propsStatus = extractHeatParameters( ArtifactTypeEnum.HEAT_ENV.getType(), artifactTemplateInfo.getEnv(), - artifactparamsStatus.left().value().getValue(), false); + artifactParamsStatus.left().value().getValue(), false); if (propsStatus.isLeft()) { List<HeatParameterDefinition> updatedHeatEnvParams = propsStatus.left().value(); @@ -811,44 +877,27 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { } } if (isUpdateEnv) { - ComponentParametersView parametersView = new ComponentParametersView(); - parametersView.disableAll(); - parametersView.setIgnoreComponentInstances(false); - parametersView.setIgnoreUsers(false); - parametersView.setIgnoreArtifacts(false); - parametersView.setIgnoreGroups(false); - - Either<Resource, StorageOperationStatus> eitherGerResource = toscaOperationFacade - .getToscaElement(updatedResource.getUniqueId(), parametersView); - - if (eitherGerResource.isRight()) { - ResponseFormat responseFormat = componentsUtils.getResponseFormatByResource( - componentsUtils.convertFromStorageResponse(eitherGerResource.right().value()), updatedResource); - - resStatus = Either.right(responseFormat); - return resStatus; - - } - - updatedResource = eitherGerResource.left().value(); Map<String, ArtifactDefinition> artifacts = updatedResource.getDeploymentArtifacts(); Optional<ArtifactDefinition> op = artifacts.values().stream().filter( p -> p.getGeneratedFromId() != null && p.getGeneratedFromId().equals(currentInfo.getUniqueId())) .findAny(); if (op.isPresent()) { ArtifactDefinition artifactInfoHeatEnv = op.get(); - Either<ArtifactDefinition, StorageOperationStatus> updateArifactOnResource = artifactToscaOperation - .updateArtifactOnResource(artifactInfoHeatEnv, updatedResource.getUniqueId(), - artifactInfoHeatEnv.getUniqueId(), null, null); - if (updateArifactOnResource.isRight()) { + artifactInfoHeatEnv.setHeatParamUpdated(true); + Either<ArtifactDefinition, StorageOperationStatus> updateArtifactOnResource = artifactToscaOperation + .updateArtifactOnResource(artifactInfoHeatEnv, updatedResource, + artifactInfoHeatEnv.getUniqueId(), null, null,true); + if (updateArtifactOnResource.isRight()) { log.debug("Failed to update heat env on CSAR flow for component {} artifact {} label {}", updatedResource.getUniqueId(), artifactInfoHeatEnv.getUniqueId(), artifactInfoHeatEnv.getArtifactLabel()); return Either.right(componentsUtils.getResponseFormat( - componentsUtils.convertFromStorageResponse(updateArifactOnResource.right().value()))); + componentsUtils.convertFromStorageResponse(updateArtifactOnResource.right().value()))); } - resStatus = Either.left(updateArifactOnResource.left().value()); + resource.getDeploymentArtifacts().put(updateArtifactOnResource.left().value().getArtifactLabel(), updateArtifactOnResource.left().value()); + resStatus = Either.left(updateArtifactOnResource.left().value()); } + } return resStatus; } @@ -908,43 +957,42 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { } } currentInfo.setListHeatParameters(currentHeatEnvParams); - Either<ArtifactDefinition, StorageOperationStatus> updateArifactOnResource = artifactToscaOperation - .updateArtifactOnResource(currentInfo, resource.getUniqueId(), currentInfo.getUniqueId(), - null, null); - if (updateArifactOnResource.isRight()) { + Either<ArtifactDefinition, StorageOperationStatus> updateArtifactOnResource = artifactToscaOperation + .updateArtifactOnResource(currentInfo, resource, currentInfo.getUniqueId(), + null, null, true); + if (updateArtifactOnResource.isRight()) { log.debug( - "Failed to update heat paratemers of heat on CSAR flow for component {} artifact {} label {}", + "Failed to update heat parameters of heat on CSAR flow for component {} artifact {} label {}", resource.getUniqueId(), currentInfo.getUniqueId(), currentInfo.getArtifactLabel()); return Either.right(componentsUtils.getResponseFormat( - componentsUtils.convertFromStorageResponse(updateArifactOnResource.right().value()))); + componentsUtils.convertFromStorageResponse(updateArtifactOnResource.right().value()))); } - resStatus = Either.left(updateArifactOnResource.left().value()); + resource.getDeploymentArtifacts().put(currentInfo.getArtifactLabel(), currentInfo); + resStatus = Either.left(updateArtifactOnResource.left().value()); } return resStatus; } - - - public Either<Either<ArtifactDefinition, Operation>, ResponseFormat> createOrUpdateCsarArtifactFromJson( Resource resource, User user, Map<String, Object> json, ArtifactOperationInfo operation) { String jsonStr = gson.toJson(json); - - String origMd5 = GeneralUtility.calculateMD5Base64EncodedByString(jsonStr); ArtifactDefinition artifactDefinitionFromJson = RepresentationUtils.convertJsonToArtifactDefinition(jsonStr, - ArtifactDefinition.class); - - String artifactUniqueId = artifactDefinitionFromJson == null ? null : artifactDefinitionFromJson.getUniqueId(); - Either<Either<ArtifactDefinition, Operation>, ResponseFormat> uploadArtifactToService = artifactsBusinessLogic - .validateAndHandleArtifact(resource.getUniqueId(), ComponentTypeEnum.RESOURCE, operation, - artifactUniqueId, artifactDefinitionFromJson, origMd5, jsonStr, null, null, user, - resource, false, true, false); - if (uploadArtifactToService.isRight()) { - return Either.right(uploadArtifactToService.right().value()); - } + ArtifactDefinition.class, false); - return Either.left(uploadArtifactToService.left().value()); + Either<ArtifactDefinition, Operation> result; + try { + result = artifactsBusinessLogic.handleLoadedArtifact( + resource, user, operation, false, true, ComponentTypeEnum.RESOURCE, artifactDefinitionFromJson); + } catch (ComponentException e) { + log.debug(FAILED_UPLOAD_ARTIFACT_TO_COMPONENT, ComponentTypeEnum.RESOURCE, resource.getName()); + return Either.right(componentsUtils.getResponseFormat(e)); + } catch (Exception e) { + ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR); + log.debug("Exception occurred when createOrUpdateCsarArtifactFromJson, error is:{}", e.getMessage(), e); + return Either.right(responseFormat); + } + return Either.left(result); } private void associateMembersToArtifacts(List<ArtifactDefinition> createdArtifacts, @@ -954,14 +1002,13 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { for (GroupDefinition heatGroup : heatGroups) { List<GroupProperty> grpoupProps = heatGroup.convertToGroupProperties(); if (grpoupProps != null) { - associatemembersToVFgroups(createdArtifacts, artifactsFromResource, grpoupProps, artifactsGroup, heatGroup, members); + associateMembersToVFgroups(createdArtifacts, artifactsFromResource, grpoupProps, artifactsGroup, heatGroup, members); } } - } } - private void associatemembersToVFgroups(List<ArtifactDefinition> createdArtifacts,List<ArtifactDefinition> artifactsFromResource, List<GroupProperty> grpoupProps, Set<String> artifactsGroup, GroupDefinition heatGroup, Map<String, String> members){ + private void associateMembersToVFgroups(List<ArtifactDefinition> createdArtifacts, List<ArtifactDefinition> artifactsFromResource, List<GroupProperty> grpoupProps, Set<String> artifactsGroup, GroupDefinition heatGroup, Map<String, String> members){ Optional<GroupProperty> op = grpoupProps.stream() .filter(p -> p.getName().equals(Constants.HEAT_FILE_PROPS)).findAny(); if (op.isPresent()) { @@ -974,22 +1021,16 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { for (String artifactId : artifactsGroup) { Optional<ArtifactDefinition> opArt = createdArtifacts.stream() .filter(p -> p.getUniqueId().equals(artifactId)).findAny(); - if (opArt.isPresent()) { - artifacts.add(opArt.get()); - } + opArt.ifPresent(artifacts::add); if (artifactsFromResource != null) { opArt = artifactsFromResource.stream().filter(p -> p.getUniqueId().equals(artifactId)) .findAny(); - if (opArt.isPresent()) { - artifacts.add(opArt.get()); - } + opArt.ifPresent(artifacts::add); } } Optional<ArtifactDefinition> resOp = artifacts.stream() .filter(p -> heatFileNAme.contains(p.getArtifactName())).findAny(); - if (resOp.isPresent()) { - members.putAll(heatGroup.getMembers()); - } + resOp.ifPresent(artifactDefinition -> members.putAll(heatGroup.getMembers())); } } @@ -1060,7 +1101,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { Map<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> groupArtifact, Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroup, Set<ArtifactDefinition> artifactsToDelete, Map<String, List<ArtifactDefinition>> groupToDelete, Set<ArtifactTemplateInfo> jsonMasterArtifacts, - List<ArtifactDefinition> createdDeplymentArtifacts) { + List<ArtifactDefinition> createdDeploymentArtifacts) { Map<GroupDefinition, MergedArtifactInfo> mergedgroup = new HashMap<>(); for (Entry<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> groupListEntry : groupArtifact .entrySet()) { @@ -1068,36 +1109,15 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { boolean isNeedToDeleteGroup = true; List<ArtifactDefinition> listToDelete = null; for (ArtifactDefinition maserArtifact : createdArtifactMap.keySet()) { - listToDelete = createdArtifactMap.get(maserArtifact); - for (ArtifactDefinition artToDelete : listToDelete) { - findArtifactToDelete(parsedGroup, artifactsToDelete, artToDelete, createdDeplymentArtifacts); - } + listToDelete = prepareArtifactsToDelete(parsedGroup, artifactsToDelete, createdDeploymentArtifacts, createdArtifactMap, maserArtifact); if (artifactsToDelete != null && !artifactsToDelete.isEmpty()) { GroupDefinition group = groupListEntry.getKey(); - for (ArtifactDefinition artifactDefinition : artifactsToDelete) { - if (CollectionUtils.isNotEmpty(group.getArtifacts()) - && group.getArtifacts().contains(artifactDefinition.getUniqueId())) { - group.getArtifacts().remove(artifactDefinition.getUniqueId()); - - } - if (CollectionUtils.isNotEmpty(group.getArtifactsUuid()) - && group.getArtifactsUuid().contains(artifactDefinition.getArtifactUUID())) { - group.getArtifactsUuid().remove(artifactDefinition.getArtifactUUID()); - - } - } + deleteArtifacts(artifactsToDelete, group); } for (ArtifactTemplateInfo jsonMasterArtifact : jsonMasterArtifacts) { - if (maserArtifact.getArtifactName().equalsIgnoreCase(jsonMasterArtifact.getFileName())) { - MergedArtifactInfo mergedGroup = new MergedArtifactInfo(); - mergedGroup.setJsonArtifactTemplate(jsonMasterArtifact); - mergedGroup.setCreatedArtifact(createdArtifactMap.get(maserArtifact)); - mergedgroup.put(groupListEntry.getKey(), mergedGroup); - isNeedToDeleteGroup = false; - - } + isNeedToDeleteGroup = isNeedToDeleteGroup(mergedgroup, groupListEntry, createdArtifactMap, isNeedToDeleteGroup, maserArtifact, jsonMasterArtifact); } } @@ -1109,14 +1129,50 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { return mergedgroup; } + private boolean isNeedToDeleteGroup(Map<GroupDefinition, MergedArtifactInfo> mergedgroup, Entry<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> groupListEntry, Map<ArtifactDefinition, List<ArtifactDefinition>> createdArtifactMap, boolean isNeedToDeleteGroup, ArtifactDefinition maserArtifact, ArtifactTemplateInfo jsonMasterArtifact) { + if (maserArtifact.getArtifactName().equalsIgnoreCase(jsonMasterArtifact.getFileName())) { + MergedArtifactInfo mergedGroup = new MergedArtifactInfo(); + mergedGroup.setJsonArtifactTemplate(jsonMasterArtifact); + mergedGroup.setCreatedArtifact(createdArtifactMap.get(maserArtifact)); + mergedgroup.put(groupListEntry.getKey(), mergedGroup); + isNeedToDeleteGroup = false; + + } + return isNeedToDeleteGroup; + } + + private List<ArtifactDefinition> prepareArtifactsToDelete(Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroup, Set<ArtifactDefinition> artifactsToDelete, List<ArtifactDefinition> createdDeploymentArtifacts, Map<ArtifactDefinition, List<ArtifactDefinition>> createdArtifactMap, ArtifactDefinition maserArtifact) { + List<ArtifactDefinition> listToDelete; + listToDelete = createdArtifactMap.get(maserArtifact); + for (ArtifactDefinition artToDelete : listToDelete) { + findArtifactToDelete(parsedGroup, artifactsToDelete, artToDelete, createdDeploymentArtifacts); + } + return listToDelete; + } + + private void deleteArtifacts(Set<ArtifactDefinition> artifactsToDelete, GroupDefinition group) { + for (ArtifactDefinition artifactDefinition : artifactsToDelete) { + if (CollectionUtils.isNotEmpty(group.getArtifacts()) + && group.getArtifacts().contains(artifactDefinition.getUniqueId())) { + group.getArtifacts().remove(artifactDefinition.getUniqueId()); + + } + if (CollectionUtils.isNotEmpty(group.getArtifactsUuid()) + && group.getArtifactsUuid().contains(artifactDefinition.getArtifactUUID())) { + group.getArtifactsUuid().remove(artifactDefinition.getArtifactUUID()); + + } + } + } + private void findArtifactToDelete(Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroup, Set<ArtifactDefinition> artifactsToDelete, ArtifactDefinition artifact, - List<ArtifactDefinition> createdDeplymentArtifacts) { + List<ArtifactDefinition> createdDeploymentArtifacts) { boolean isNeedToDeleteArtifact = true; String artifactType = artifact.getArtifactType(); ArtifactDefinition generatedFromArt = null; if (artifact.getGeneratedFromId() != null && !artifact.getGeneratedFromId().isEmpty()) { - Optional<ArtifactDefinition> op = createdDeplymentArtifacts.stream() + Optional<ArtifactDefinition> op = createdDeploymentArtifacts.stream() .filter(p -> p.getUniqueId().equals(artifact.getGeneratedFromId())).findAny(); if (op.isPresent()) { generatedFromArt = op.get(); @@ -1124,6 +1180,12 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { } + isNeedToDeleteArtifact(parsedGroup, artifactsToDelete, artifact, isNeedToDeleteArtifact, artifactType, generatedFromArt); + } + + private void isNeedToDeleteArtifact(Map<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroup, Set<ArtifactDefinition> + artifactsToDelete, ArtifactDefinition artifact, boolean isNeedToDeleteArtifact, String artifactType, ArtifactDefinition generatedFromArt) { + for (Entry<ArtifactTemplateInfo, Set<ArtifactTemplateInfo>> parsedGroupSetEntry : parsedGroup.entrySet()) { Set<ArtifactTemplateInfo> artifactsNames = parsedGroupSetEntry.getValue(); for (ArtifactTemplateInfo template : artifactsNames) { @@ -1152,7 +1214,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { } private Map<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> findMasterArtifactInGroup( - List<GroupDefinition> groups, Map<String, ArtifactDefinition> deplymentArtifact) { + List<GroupDefinition> groups, Map<String, ArtifactDefinition> deploymentArtifact) { Map<GroupDefinition, Map<ArtifactDefinition, List<ArtifactDefinition>>> groupArtifact = new HashMap<>(); for (GroupDefinition group : groups) { @@ -1161,7 +1223,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { List<String> artifactsList = group.getArtifacts(); if (artifactsList != null && !artifactsList.isEmpty()) { - ArtifactDefinition masterArtifact = ArtifactUtils.findMasterArtifact(deplymentArtifact, artifacts, + ArtifactDefinition masterArtifact = ArtifactUtils.findMasterArtifact(deploymentArtifact, artifacts, artifactsList); if (masterArtifact != null) { gupsMap.put(masterArtifact, artifacts); @@ -1246,7 +1308,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { private Either<Resource, ResponseFormat> createGroupDeploymentArtifactsFromCsar(CsarInfo csarInfo, Resource resource, List<ArtifactTemplateInfo> artifactsTemplateList, List<ArtifactDefinition> createdNewArtifacts, List<ArtifactDefinition> artifactsFromResource, - int labelCounter, boolean shouldLock, boolean inTransaction) { + int labelCounter) { Resource updatedResource = resource; @@ -1254,7 +1316,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { List<GroupDefinition> createdGroups = updatedResource.getGroups(); List<GroupDefinition> heatGroups = null; if (createdGroups != null && !createdGroups.isEmpty()) { - heatGroups = createdGroups.stream().filter(e -> e.getMembers() != null).collect(Collectors.toList()); + heatGroups = collectGroupsWithMembers(createdGroups); } List<GroupDefinition> needToAdd = new ArrayList<>(); @@ -1264,12 +1326,11 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { Set<String> artifactsUUIDGroup = new HashSet<>(); resStatus = createDeploymentArtifactsFromCsar(csarInfo, updatedResource, artifactsGroup, artifactsUUIDGroup, - groupTemplateInfo, createdNewArtifacts, artifactsFromResource, labelCounter, shouldLock, - inTransaction); + groupTemplateInfo, createdNewArtifacts, artifactsFromResource, labelCounter); if (resStatus.isRight()) { return resStatus; } - if (groupName != null && !groupName.isEmpty()) { + if (!StringUtils.isEmpty(groupName)) { Map<String, String> members = new HashMap<>(); associateMembersToArtifacts(createdNewArtifacts, artifactsFromResource, heatGroups, artifactsGroup, members); @@ -1332,8 +1393,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { private Either<Resource, ResponseFormat> createDeploymentArtifactsFromCsar(CsarInfo csarInfo, Resource resource, Set<String> artifactsGroup, Set<String> artifactsUUIDGroup, ArtifactTemplateInfo artifactTemplateInfo, - List<ArtifactDefinition> createdArtifacts, List<ArtifactDefinition> artifactsFromResource, int labelCounter, - boolean shoudLock, boolean inTransaction) { + List<ArtifactDefinition> createdArtifacts, List<ArtifactDefinition> artifactsFromResource, int labelCounter) { Either<Resource, ResponseFormat> resStatus = Either.left(resource); String artifactFileName = artifactTemplateInfo.getFileName(); String artifactUid = ""; @@ -1351,7 +1411,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { log.debug(ARTIFACT_WITH_NAME_AND_TYPE_ALREADY_EXIST_WITH_TYPE, artifactFileName, artifactTemplateInfo.getType(), artifactFromResource.getArtifactType()); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); return Either.right(componentsUtils.getResponseFormat( ActionStatus.ARTIFACT_ALREADY_EXIST_IN_DIFFERENT_TYPE_IN_CSAR, artifactFileName, @@ -1375,7 +1435,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { log.debug(ARTIFACT_WITH_NAME_AND_TYPE_ALREADY_EXIST_WITH_TYPE, artifactFileName, artifactTemplateInfo.getType(), createdArtifact.getArtifactType()); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); return Either.right(componentsUtils.getResponseFormat( ActionStatus.ARTIFACT_ALREADY_EXIST_IN_DIFFERENT_TYPE_IN_CSAR, artifactFileName, @@ -1403,14 +1463,11 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { ArtifactTypeEnum artifactType = ArtifactTypeEnum.findType(newArtifact.getArtifactType()); if (artifactType == ArtifactTypeEnum.HEAT || artifactType == ArtifactTypeEnum.HEAT_NET || artifactType == ArtifactTypeEnum.HEAT_VOL) { - Either<ArtifactDefinition, ResponseFormat> createHeatEnvPlaceHolder = artifactsBusinessLogic - .createHeatEnvPlaceHolder(newArtifact, ArtifactsBusinessLogic.HEAT_VF_ENV_NAME, + ArtifactDefinition createHeatEnvPlaceHolder = artifactsBusinessLogic + .createHeatEnvPlaceHolder(createdArtifacts, newArtifact, ArtifactsBusinessLogic.HEAT_VF_ENV_NAME, resource.getUniqueId(), NodeTypeEnum.Resource, resource.getName(), csarInfo.getModifier(), resource, null); - if (createHeatEnvPlaceHolder.isRight()) { - return Either.right(createHeatEnvPlaceHolder.right().value()); - } - artifactEnvUid = createHeatEnvPlaceHolder.left().value().getUniqueId(); + artifactEnvUid = createHeatEnvPlaceHolder.getUniqueId(); } } @@ -1424,8 +1481,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { if (relatedArtifacts != null) { for (ArtifactTemplateInfo relatedArtifactTemplateInfo : relatedArtifacts) { resStatus = createDeploymentArtifactsFromCsar(csarInfo, resource, artifactsGroup, artifactsUUIDGroup, - relatedArtifactTemplateInfo, createdArtifacts, artifactsFromResource, labelCounter, shoudLock, - inTransaction); + relatedArtifactTemplateInfo, createdArtifacts, artifactsFromResource, labelCounter); if (resStatus.isRight()) { return resStatus; } @@ -1436,11 +1492,11 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { private Either<Resource, ResponseFormat> associateAndDissociateArtifactsToGroup(CsarInfo csarInfo, Resource resource, List<ArtifactDefinition> createdNewArtifacts, int labelCounter, - boolean inTransaction, List<ArtifactDefinition> createdDeplymentArtifactsAfterDelete, + List<ArtifactDefinition> createdDeploymentArtifactsAfterDelete, Map<GroupDefinition, MergedArtifactInfo> mergedgroup, List<ArtifactDefinition> deletedArtifacts) { Map<GroupDefinition, List<ArtifactTemplateInfo>> artifactsToAssotiate = new HashMap<>(); Map<GroupDefinition, List<ImmutablePair<ArtifactDefinition, ArtifactTemplateInfo>>> artifactsToUpdateMap = new HashMap<>(); - Either<Resource, ResponseFormat> resEither = Either.left(resource); + Either<Resource, ResponseFormat> resEither; for (Entry<GroupDefinition, MergedArtifactInfo> entry : mergedgroup.entrySet()) { List<ArtifactDefinition> dissArtifactsInGroup = entry.getValue() .getListToDissotiateArtifactFromGroup(deletedArtifacts); @@ -1517,7 +1573,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { // in // resource boolean isCreate = true; - for (ArtifactDefinition createdArtifact : createdDeplymentArtifactsAfterDelete) { + for (ArtifactDefinition createdArtifact : createdDeploymentArtifactsAfterDelete) { if (artifactTemplate.getFileName().equalsIgnoreCase(createdArtifact.getArtifactName())) { arifactsUids.add(createdArtifact.getUniqueId()); arifactsUuids.add(createdArtifact.getArtifactUUID()); @@ -1525,10 +1581,10 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { String heatEnvId = checkAndGetHeatEnvId(createdArtifact); if (!heatEnvId.isEmpty()) { arifactsUids.add(heatEnvId); - Optional<ArtifactDefinition> op = createdDeplymentArtifactsAfterDelete.stream() + Optional<ArtifactDefinition> op = createdDeploymentArtifactsAfterDelete.stream() .filter(p -> p.getUniqueId().equals(heatEnvId)).findAny(); if (op.isPresent()) { - this.artifactToscaOperation.updateHeatEnvPlaceholder(op.get(), resource.getUniqueId(), + this.artifactToscaOperation.updateHeatEnvPlaceholder(op.get(), resource, resource.getComponentType().getNodeType()); } @@ -1566,14 +1622,11 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { ArtifactTypeEnum artifactType = ArtifactTypeEnum.findType(createdArtifact.getArtifactType()); if (artifactType == ArtifactTypeEnum.HEAT || artifactType == ArtifactTypeEnum.HEAT_NET || artifactType == ArtifactTypeEnum.HEAT_VOL) { - Either<ArtifactDefinition, ResponseFormat> createHeatEnvPlaceHolder = artifactsBusinessLogic - .createHeatEnvPlaceHolder(createdArtifact, ArtifactsBusinessLogic.HEAT_VF_ENV_NAME, + ArtifactDefinition createHeatEnvPlaceHolder = artifactsBusinessLogic + .createHeatEnvPlaceHolder(new ArrayList<>(), createdArtifact, ArtifactsBusinessLogic.HEAT_VF_ENV_NAME, resource.getUniqueId(), NodeTypeEnum.Resource, resource.getName(), csarInfo.getModifier(), resource, null); - if (createHeatEnvPlaceHolder.isRight()) { - return Either.right(createHeatEnvPlaceHolder.right().value()); - } - String heatEnvId = createHeatEnvPlaceHolder.left().value().getUniqueId(); + String heatEnvId = createHeatEnvPlaceHolder.getUniqueId(); arifactsUids.add(heatEnvId); } } @@ -1624,7 +1677,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { log.debug("Artifact with name {} and type {} already updated with type {}", artifactFileName, artifactTemplateInfo.getType(), updatedArtifact.getArtifactType()); BeEcompErrorManager.getInstance().logInternalDataError( - ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMATR_FILE_NAME1 + artifactFileName, + ARTIFACT_FILE_IS_NOT_IN_EXPECTED_FORMAT_FILE_NAME + artifactFileName, ARTIFACT_INTERNALS_ARE_INVALID, ErrorSeverity.ERROR); resStatus = Either.right(componentsUtils.getResponseFormat( ActionStatus.ARTIFACT_ALREADY_EXIST_IN_DIFFERENT_TYPE_IN_CSAR, artifactFileName, @@ -1638,7 +1691,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { } Either<ImmutablePair<String, byte[]>, ResponseFormat> artifactContententStatus = CsarValidationUtils - .getArtifactsContent(csarInfo.getCsarUUID(), csarInfo.getCsar(), + .getArtifactContent(csarInfo.getCsarUUID(), csarInfo.getCsar(), CsarUtils.ARTIFACTS_PATH + artifactFileName, artifactFileName, componentsUtils); if (artifactContententStatus.isRight()) { resStatus = Either.right(artifactContententStatus.right().value()); @@ -1658,22 +1711,24 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { resStatus = Either.right(uploadArtifactToService.right().value()); return resStatus; } + ArtifactDefinition previousInfo = uploadArtifactToService.left().value().left().value(); ArtifactDefinition currentInfo = uploadArtifactToService.left().value().left().value(); updatedArtifacts.add(currentInfo); Either<ArtifactDefinition, ResponseFormat> updateEnvEither = updateHeatParamsFromCsar(resource, csarInfo, artifactTemplateInfo, currentInfo, true); + if (updateEnvEither.isRight()) { log.debug("failed to update parameters to artifact {}", artifactFileName); resStatus = Either.right(updateEnvEither.right().value()); return resStatus; } + artifactsBusinessLogic.updateGroupForHeat(previousInfo, updateEnvEither.left().value(), resource); + updatedArtifacts.add(updateEnvEither.left().value()); resStatus = Either.left(currentInfo); - return resStatus; - } public Either<Resource, ResponseFormat> deleteVFModules(Resource resource, CsarInfo csarInfo, boolean shouldLock, boolean inTransaction) { @@ -1681,7 +1736,7 @@ public class CsarArtifactsAndGroupsBusinessLogic extends BaseBusinessLogic { List<GroupDefinition> groupsToDelete = updatedResource.getGroups(); if(groupsToDelete != null && !groupsToDelete.isEmpty()){ List<GroupDefinition> vfGroupsToDelete = groupsToDelete.stream().filter(g -> g.getType().equals(Constants.DEFAULT_GROUP_VF_MODULE)).collect(Collectors.toList()); - if(vfGroupsToDelete != null && !vfGroupsToDelete.isEmpty()){ + if(!vfGroupsToDelete.isEmpty()){ for(GroupDefinition gr : vfGroupsToDelete){ List<String> artifacts = gr.getArtifacts(); for (String artifactId : artifacts) { |