Catalog alignment
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / csar / CsarArtifactsAndGroupsBusinessLogic.java
index f94cd38..0192516 100644 (file)
@@ -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) {