From cee79dd87db512691b7f3fde339635a1ca8632e7 Mon Sep 17 00:00:00 2001 From: franciscovila Date: Tue, 26 Apr 2022 18:06:03 +0100 Subject: Support deletion of archived VFs in SDC BE Support deletion of archived VFs in SDC BE Issue-ID: SDC-3973 Signed-off-by: franciscovila Change-Id: I0bb18e627c026b794609c2a57806c7a4f925741b --- .../files/default/error-configuration.yaml | 8 +- .../be/components/impl/ResourceBusinessLogic.java | 993 +++++++++++---------- .../org/openecomp/sdc/be/impl/ComponentsUtils.java | 6 + .../sdc/be/servlets/ResourcesServlet.java | 69 +- .../components/impl/ResourceBusinessLogicTest.java | 98 +- .../sdc/be/components/lifecycle/CheckoutTest.java | 7 +- .../sdc/be/servlets/ResourceServletTest.java | 41 +- .../config/catalog-be/error-configuration.yaml | 16 + .../sdc/be/dao/janusgraph/JanusGraphDao.java | 36 + .../operations/ToscaOperationFacade.java | 519 ++++++----- .../operations/api/StorageOperationStatus.java | 2 +- .../operations/ToscaOperationFacadeTest.java | 187 +++- .../sdc/be/datatypes/enums/DeleteActionEnum.java | 27 + 13 files changed, 1145 insertions(+), 864 deletions(-) create mode 100644 common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/DeleteActionEnum.java diff --git a/catalog-be/src/main/docker/backend/chef-repo/cookbooks/sdc-catalog-be/files/default/error-configuration.yaml b/catalog-be/src/main/docker/backend/chef-repo/cookbooks/sdc-catalog-be/files/default/error-configuration.yaml index 9e7939d58b..b539bd0378 100644 --- a/catalog-be/src/main/docker/backend/chef-repo/cookbooks/sdc-catalog-be/files/default/error-configuration.yaml +++ b/catalog-be/src/main/docker/backend/chef-repo/cookbooks/sdc-catalog-be/files/default/error-configuration.yaml @@ -2635,7 +2635,7 @@ errors: messageId: "SVC4163" } - #---------SVC4164----------------------------- + #---------SVC4692----------------------------- # %1 - Component name COMPONENT_NOT_ARCHIVED: { code: 403, @@ -2643,13 +2643,14 @@ errors: messageId: "SVC4692" } - #---------SVC4165----------------------------- + #---------SVC4693----------------------------- # %1 - List of services COMPONENT_IN_USE_BY_ANOTHER_COMPONENT: { code: 403, message: "Component is in use by '%1'", messageId: "SVC4693" } + #---------SVC4164----------------------------- # %1 - componentType # %2 - component name @@ -2657,4 +2658,5 @@ errors: code: 409, message: "System deployed '%1' cannot be deleted '%2'", messageId: "SVC4164" - } \ No newline at end of file + } + diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java index f4952b6c0d..e11dbb3b67 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogic.java @@ -19,35 +19,8 @@ */ package org.openecomp.sdc.be.components.impl; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; -import static java.util.stream.Collectors.toSet; -import static org.apache.commons.collections.CollectionUtils.isNotEmpty; -import static org.apache.commons.collections.MapUtils.isEmpty; -import static org.apache.commons.collections.MapUtils.isNotEmpty; -import static org.openecomp.sdc.be.components.impl.ImportUtils.findFirstToscaStringElement; -import static org.openecomp.sdc.be.components.impl.ImportUtils.getPropertyJsonStringValue; -import static org.openecomp.sdc.be.tosca.CsarUtils.VF_NODE_TYPE_ARTIFACTS_PATH_PATTERN; -import static org.openecomp.sdc.common.api.Constants.DEFAULT_GROUP_VF_MODULE; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.function.Function; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - +import com.google.common.annotations.VisibleForTesting; +import fj.data.Either; import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; @@ -158,6 +131,7 @@ import org.openecomp.sdc.be.model.operations.api.IGroupTypeOperation; import org.openecomp.sdc.be.model.operations.api.IInterfaceLifecycleOperation; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation; +import org.openecomp.sdc.be.model.operations.impl.ModelOperation; import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder; import org.openecomp.sdc.be.model.operations.utils.ComponentValidationUtils; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; @@ -188,9 +162,34 @@ import org.springframework.context.annotation.Lazy; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; -import com.google.common.annotations.VisibleForTesting; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; +import java.util.regex.Pattern; +import java.util.stream.Collectors; -import fj.data.Either; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; +import static java.util.stream.Collectors.toSet; +import static org.apache.commons.collections.CollectionUtils.isNotEmpty; +import static org.apache.commons.collections.MapUtils.isEmpty; +import static org.apache.commons.collections.MapUtils.isNotEmpty; +import static org.openecomp.sdc.be.components.impl.ImportUtils.findFirstToscaStringElement; +import static org.openecomp.sdc.be.components.impl.ImportUtils.getPropertyJsonStringValue; +import static org.openecomp.sdc.be.tosca.CsarUtils.VF_NODE_TYPE_ARTIFACTS_PATH_PATTERN; +import static org.openecomp.sdc.common.api.Constants.DEFAULT_GROUP_VF_MODULE; @org.springframework.stereotype.Component("resourceBusinessLogic") public class ResourceBusinessLogic extends ComponentBusinessLogic { @@ -226,6 +225,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private LifecycleBusinessLogic lifecycleBusinessLogic; private final DataTypeBusinessLogic dataTypeBusinessLogic; private final PolicyTypeBusinessLogic policyTypeBusinessLogic; + private final ModelOperation modelOperation; @Autowired private ICapabilityTypeOperation capabilityTypeOperation; @@ -258,10 +258,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final ComponentProjectCodeValidator componentProjectCodeValidator, final ComponentDescriptionValidator componentDescriptionValidator, final PolicyBusinessLogic policyBusinessLogic, final ModelBusinessLogic modelBusinessLogic, - final DataTypeBusinessLogic dataTypeBusinessLogic, final PolicyTypeBusinessLogic policyTypeBusinessLogic) { + final DataTypeBusinessLogic dataTypeBusinessLogic, final PolicyTypeBusinessLogic policyTypeBusinessLogic, + final ModelOperation modelOperation) { super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic, interfaceOperation, - interfaceLifecycleTypeOperation, artifactsBusinessLogic, artifactToscaOperation, componentContactIdValidator, componentNameValidator, - componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator); + interfaceLifecycleTypeOperation, artifactsBusinessLogic, artifactToscaOperation, componentContactIdValidator, componentNameValidator, + componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator); this.componentInstanceBusinessLogic = componentInstanceBusinessLogic; this.resourceImportManager = resourceImportManager; this.inputsBusinessLogic = inputsBusinessLogic; @@ -277,6 +278,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { this.modelBusinessLogic = modelBusinessLogic; this.dataTypeBusinessLogic = dataTypeBusinessLogic; this.policyTypeBusinessLogic = policyTypeBusinessLogic; + this.modelOperation = modelOperation; } static Either rollbackWithEither(final JanusGraphDao janusGraphDao, final ActionStatus actionStatus, @@ -386,7 +388,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { String userId) { validateUserExists(userId); Either dataModelResponse = toscaOperationFacade - .validateComponentNameUniqueness(resourceName, resourceTypeEnum, ComponentTypeEnum.RESOURCE); + .validateComponentNameUniqueness(resourceName, resourceTypeEnum, ComponentTypeEnum.RESOURCE); // DE242223 janusGraphDao.commit(); if (dataModelResponse.isLeft()) { @@ -396,7 +398,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { return Either.left(result); } ResponseFormat responseFormat = componentsUtils - .getResponseFormat(componentsUtils.convertFromStorageResponse(dataModelResponse.right().value())); + .getResponseFormat(componentsUtils.convertFromStorageResponse(dataModelResponse.right().value())); return Either.right(responseFormat); } @@ -405,7 +407,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { validateResourceBeforeCreate(resource, user, false); String csarUUID = payloadName == null ? resource.getCsarUUID() : payloadName; loggerSupportability.log(LoggerSupportabilityActions.CREATE_RESOURCE, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, - "Starting to create resource from CSAR by user {} ", user.getUserId()); + "Starting to create resource from CSAR by user {} ", user.getUserId()); if (StringUtils.isNotEmpty(csarUUID)) { csarBusinessLogic.validateCsarBeforeCreate(resource, auditingAction, user, csarUUID); log.debug("CsarUUID is {} - going to create resource from CSAR", csarUUID); @@ -444,7 +446,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { updatedResource = updateResourceMetadata(resourceUniqueId, resource, oldResource, user, false); } else { updatedResource = updateResourceFromCsar(oldResource, resource, user, AuditingActionEnum.UPDATE_RESOURCE_METADATA, false, - csarUIPayload, csarUUID); + csarUIPayload, csarUUID); } } else { log.debug("Failed to update resource {}, csarUUID or payload name is missing", resource.getSystemName()); @@ -468,16 +470,16 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { // name Either resourceLinkedToCsarRes = toscaOperationFacade - .getLatestComponentByCsarOrName(ComponentTypeEnum.RESOURCE, csarUUID, resource.getSystemName()); + .getLatestComponentByCsarOrName(ComponentTypeEnum.RESOURCE, csarUUID, resource.getSystemName()); if (resourceLinkedToCsarRes.isRight()) { if (StorageOperationStatus.NOT_FOUND != resourceLinkedToCsarRes.right().value()) { log.debug("Failed to find previous resource by CSAR {} and system name {}", csarUUID, resource.getSystemName()); throw new StorageException(resourceLinkedToCsarRes.right().value()); } } else if (!resourceLinkedToCsarRes.left().value().getUniqueId().equals(oldResource.getUniqueId()) && !resourceLinkedToCsarRes.left().value() - .getName().equals(oldResource.getName())) { + .getName().equals(oldResource.getName())) { ResponseFormat errorResponse = componentsUtils - .getResponseFormat(ActionStatus.VSP_ALREADY_EXISTS, csarUUID, resourceLinkedToCsarRes.left().value().getName()); + .getResponseFormat(ActionStatus.VSP_ALREADY_EXISTS, csarUUID, resourceLinkedToCsarRes.left().value().getName()); componentsUtils.auditResource(errorResponse, user, resource, AuditingActionEnum.UPDATE_RESOURCE_METADATA); throw new ByActionStatusComponentException(ActionStatus.VSP_ALREADY_EXISTS, csarUUID, resourceLinkedToCsarRes.left().value().getName()); } @@ -494,9 +496,9 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { String oldCsarUUID = oldResource.getCsarUUID(); if (oldCsarUUID != null && !oldCsarUUID.isEmpty() && !csarUUID.equals(oldCsarUUID)) { log.debug("Failed to update resource with UniqueId {} using Csar {}, since the resource is linked to a different VSP {}", - resourceUniqueId, csarUUID, oldCsarUUID); + resourceUniqueId, csarUUID, oldCsarUUID); ResponseFormat errorResponse = componentsUtils - .getResponseFormat(ActionStatus.RESOURCE_LINKED_TO_DIFFERENT_VSP, resource.getName(), csarUUID, oldCsarUUID); + .getResponseFormat(ActionStatus.RESOURCE_LINKED_TO_DIFFERENT_VSP, resource.getName(), csarUUID, oldCsarUUID); componentsUtils.auditResource(errorResponse, user, resource, AuditingActionEnum.UPDATE_RESOURCE_METADATA); throw new ByActionStatusComponentException(ActionStatus.RESOURCE_LINKED_TO_DIFFERENT_VSP, resource.getName(), csarUUID, oldCsarUUID); } @@ -529,16 +531,16 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { lockComponent(lockedResourceId, oldResource, "update Resource From Csar"); Map nodeTypesInfo = csarInfo.extractTypesInfo(); Either>>, ResponseFormat> findNodeTypesArtifactsToHandleRes = findNodeTypesArtifactsToHandle( - nodeTypesInfo, csarInfo, oldResource); + nodeTypesInfo, csarInfo, oldResource); if (findNodeTypesArtifactsToHandleRes.isRight()) { log.debug("failed to find node types for update with artifacts during import csar {}. ", csarInfo.getCsarUUID()); throw new ByResponseFormatComponentException(findNodeTypesArtifactsToHandleRes.right().value()); } Map>> nodeTypesArtifactsToHandle = findNodeTypesArtifactsToHandleRes.left() - .value(); + .value(); try { updatedResource = updateResourceFromYaml(oldResource, newResource, updateResource, createdArtifacts, csarInfo.getMainTemplateName(), - csarInfo.getMainTemplateContent(), csarInfo, nodeTypesInfo, nodeTypesArtifactsToHandle, null, false); + csarInfo.getMainTemplateContent(), csarInfo, nodeTypesInfo, nodeTypesArtifactsToHandle, null, false); } catch (ComponentException | StorageException e) { rollback(inTransaction, newResource, createdArtifacts, null); throw e; @@ -552,9 +554,9 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private void validateLifecycleState(Resource oldResource, User user) { if (LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT == oldResource.getLifecycleState() && !oldResource.getLastUpdaterUserId() - .equals(user.getUserId())) { + .equals(user.getUserId())) { log.debug("#validateLifecycleState - Current user is not last updater, last updater userId: {}, current user userId: {}", - oldResource.getLastUpdaterUserId(), user.getUserId()); + oldResource.getLastUpdaterUserId(), user.getUserId()); throw new ByActionStatusComponentException(ActionStatus.RESTRICTED_OPERATION); } } @@ -570,44 +572,44 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { ParsedToscaYamlInfo uploadComponentInstanceInfoMap; try { uploadComponentInstanceInfoMap = csarBusinessLogic - .getParsedToscaYamlInfo(yamlFileContent, yamlFileName, nodeTypesInfo, csarInfo, nodeName, oldResource); + .getParsedToscaYamlInfo(yamlFileContent, yamlFileName, nodeTypesInfo, csarInfo, nodeName, oldResource); Map instances = uploadComponentInstanceInfoMap.getInstances(); if (MapUtils.isEmpty(instances) && newResource.getResourceType() != ResourceTypeEnum.PNF) { throw new ByActionStatusComponentException(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlFileName); } preparedResource = updateExistingResourceByImport(newResource, oldResource, csarInfo.getModifier(), inTransaction, shouldLock, - isNested).left; + isNested).left; log.trace("YAML topology file found in CSAR, file name: {}, contents: {}", yamlFileName, yamlFileContent); handleResourceGenericType(preparedResource, yamlFileContent, uploadComponentInstanceInfoMap, - uploadComponentInstanceInfoMap.getSubstitutionMappingNodeType()); + uploadComponentInstanceInfoMap.getSubstitutionMappingNodeType()); handleNodeTypes(yamlFileName, preparedResource, yamlFileContent, shouldLock, nodeTypesArtifactsToHandle, createdArtifacts, nodeTypesInfo, - csarInfo, nodeName, newResource.getModel()); + csarInfo, nodeName, newResource.getModel()); preparedResource = createInputsOnResource(preparedResource, uploadComponentInstanceInfoMap.getInputs()); Map existingNodeTypesByResourceNames = new HashMap<>(); final Map instancesToCreate = getInstancesToCreate(uploadComponentInstanceInfoMap, - newResource.getModel()); + newResource.getModel()); preparedResource = createResourceInstances(yamlFileName, preparedResource, oldResource, instancesToCreate, csarInfo.getCreatedNodes(), - existingNodeTypesByResourceNames); + existingNodeTypesByResourceNames); preparedResource = createResourceInstancesRelations(csarInfo.getModifier(), yamlFileName, preparedResource, oldResource, - instancesToCreate, - existingNodeTypesByResourceNames); + instancesToCreate, + existingNodeTypesByResourceNames); } catch (ComponentException e) { ResponseFormat responseFormat = - e.getResponseFormat() == null ? componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()) : e.getResponseFormat(); + e.getResponseFormat() == null ? componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()) : e.getResponseFormat(); log.debug("#updateResourceFromYaml - failed to update newResource from yaml {} .The error is {}", yamlFileName, responseFormat); componentsUtils - .auditResource(responseFormat, csarInfo.getModifier(), preparedResource == null ? oldResource : preparedResource, actionEnum); + .auditResource(responseFormat, csarInfo.getModifier(), preparedResource == null ? oldResource : preparedResource, actionEnum); throw e; } catch (StorageException e) { ResponseFormat responseFormat = componentsUtils - .getResponseFormat(componentsUtils.convertFromStorageResponse(e.getStorageOperationStatus())); + .getResponseFormat(componentsUtils.convertFromStorageResponse(e.getStorageOperationStatus())); log.debug("#updateResourceFromYaml - failed to update newResource from yaml {} .The error is {}", yamlFileName, responseFormat); componentsUtils - .auditResource(responseFormat, csarInfo.getModifier(), preparedResource == null ? oldResource : preparedResource, actionEnum); + .auditResource(responseFormat, csarInfo.getModifier(), preparedResource == null ? oldResource : preparedResource, actionEnum); throw e; } Either, ResponseFormat> validateUpdateVfGroupNamesRes = groupBusinessLogic - .validateUpdateVfGroupNames(uploadComponentInstanceInfoMap.getGroups(), preparedResource.getSystemName()); + .validateUpdateVfGroupNames(uploadComponentInstanceInfoMap.getGroups(), preparedResource.getSystemName()); if (validateUpdateVfGroupNamesRes.isRight()) { throw new ByResponseFormatComponentException(validateUpdateVfGroupNamesRes.right().value()); } @@ -623,7 +625,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { preparedResource = updateGroupsOnResource(preparedResource, groups); NodeTypeInfoToUpdateArtifacts nodeTypeInfoToUpdateArtifacts = new NodeTypeInfoToUpdateArtifacts(nodeName, nodeTypesArtifactsToHandle); Either updateArtifactsEither = createOrUpdateArtifacts(ArtifactOperationEnum.UPDATE, createdArtifacts, yamlFileName, - csarInfo, preparedResource, nodeTypeInfoToUpdateArtifacts, inTransaction, shouldLock); + csarInfo, preparedResource, nodeTypeInfoToUpdateArtifacts, inTransaction, shouldLock); if (updateArtifactsEither.isRight()) { log.debug("failed to update artifacts {}", updateArtifactsEither.right().value()); throw new ByResponseFormatComponentException(updateArtifactsEither.right().value()); @@ -649,7 +651,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Map createdNewArtifacts = preparedResource.getDeploymentArtifacts(); if (DEFAULT_GROUP_VF_MODULE.equals(group.getType())) { List volumePropList = group.getProperties().stream().filter(p -> "volume_group".equals(p.getName())) - .collect(Collectors.toList()); + .collect(Collectors.toList()); if (!volumePropList.isEmpty()) { PropertyDataDefinition volumeProp = volumePropList.get(0); if (volumeProp != null) { @@ -669,14 +671,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { log.debug("Failed to update groups name : oldResource or preparedResource is null"); } else if (CollectionUtils.isNotEmpty(oldResource.getGroups()) && CollectionUtils.isNotEmpty(preparedResource.getGroups())) { Map oldGroups = oldResource.getGroups().stream() - .collect(toMap(GroupDataDefinition::getInvariantName, GroupDataDefinition::getName)); + .collect(toMap(GroupDataDefinition::getInvariantName, GroupDataDefinition::getName)); List updatedGroups = preparedResource.getGroups().stream() - .filter(group -> oldGroups.containsKey(group.getInvariantName()) && !group.getName().equals(oldGroups.get(group.getInvariantName()))) - .collect(toList()); + .filter(group -> oldGroups.containsKey(group.getInvariantName()) && !group.getName().equals(oldGroups.get(group.getInvariantName()))) + .collect(toList()); if (CollectionUtils.isNotEmpty(updatedGroups)) { if (isTopologyChanged) { updatedGroups.stream().filter(group -> !group.isVspOriginated()) - .forEach(group -> group.setName(oldGroups.get(group.getInvariantName()))); + .forEach(group -> group.setName(oldGroups.get(group.getInvariantName()))); } else { updatedGroups.forEach(group -> group.setName(oldGroups.get(group.getInvariantName()))); } @@ -691,10 +693,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } else { if (CollectionUtils.isNotEmpty(oldResource.getComponentInstances())) { Map oldInstances = oldResource.getComponentInstances().stream() - .collect(toMap(ComponentInstance::getInvariantName, ComponentInstance::getName)); + .collect(toMap(ComponentInstance::getInvariantName, ComponentInstance::getName)); List updatedInstances = preparedResource.getComponentInstances().stream() - .filter(i -> oldInstances.containsKey(i.getInvariantName()) && !i.getName().equals(oldInstances.get(i.getInvariantName()))) - .collect(toList()); + .filter(i -> oldInstances.containsKey(i.getInvariantName()) && !i.getName().equals(oldInstances.get(i.getInvariantName()))) + .collect(toList()); if (CollectionUtils.isNotEmpty(updatedInstances)) { if (isTopologyChanged) { updatedInstances.stream().filter(i -> !i.isCreatedFromCsar()).forEach(i -> i.setName(oldInstances.get(i.getInvariantName()))); @@ -704,7 +706,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } } componentInstanceBusinessLogic.updateComponentInstance(ComponentTypeEnum.RESOURCE_PARAM_NAME, null, preparedResource.getUniqueId(), - csarInfo.getModifier().getUserId(), preparedResource.getComponentInstances(), false); + csarInfo.getModifier().getUserId(), preparedResource.getComponentInstances(), false); } } @@ -715,18 +717,18 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { String nodeName = nodeTypeInfoToUpdateArtifacts.getNodeName(); Resource resource = preparedResource; Map>> nodeTypesArtifactsToHandle = nodeTypeInfoToUpdateArtifacts - .getNodeTypesArtifactsToHandle(); + .getNodeTypesArtifactsToHandle(); if (preparedResource.getResourceType() == ResourceTypeEnum.CVFC) { if (nodeName != null && nodeTypesArtifactsToHandle.get(nodeName) != null && !nodeTypesArtifactsToHandle.get(nodeName).isEmpty()) { Either, ResponseFormat> handleNodeTypeArtifactsRes = handleNodeTypeArtifacts(preparedResource, - nodeTypesArtifactsToHandle.get(nodeName), createdArtifacts, csarInfo.getModifier(), inTransaction, true); + nodeTypesArtifactsToHandle.get(nodeName), createdArtifacts, csarInfo.getModifier(), inTransaction, true); if (handleNodeTypeArtifactsRes.isRight()) { return Either.right(handleNodeTypeArtifactsRes.right().value()); } } } else { Either createdCsarArtifactsEither = handleVfCsarArtifacts(preparedResource, csarInfo, createdArtifacts, - new ArtifactOperationInfo(false, false, operation), shouldLock, inTransaction); + new ArtifactOperationInfo(false, false, operation), shouldLock, inTransaction); log.trace("************* Finished to add artifacts from yaml {}", yamlFileName); if (createdCsarArtifactsEither.isRight()) { return createdCsarArtifactsEither; @@ -749,15 +751,15 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final ParsedToscaYamlInfo parsedToscaYamlInfo, final String substitutionMappingNodeType) { if (processSubstitutableAsNodeType(resource, parsedToscaYamlInfo)) { final Map substitutableAsNodeType = getSubstitutableAsNodeTypeFromTemplate( - (Map) new Yaml().load(topologyTemplateYaml), substitutionMappingNodeType); + (Map) new Yaml().load(topologyTemplateYaml), substitutionMappingNodeType); final Resource genericResource = fetchAndSetDerivedFromGenericType(resource, - (String) substitutableAsNodeType.get(TypeUtils.ToscaTagNamesEnum.DERIVED_FROM.getElementName())); + (String) substitutableAsNodeType.get(TypeUtils.ToscaTagNamesEnum.DERIVED_FROM.getElementName())); generatePropertiesFromGenericType(resource, genericResource); generatePropertiesFromNodeType(resource, substitutableAsNodeType); final String resourceId = resource.getUniqueId(); resource.getProperties().forEach(propertyDefinition -> propertyDefinition.setUniqueId( - UniqueIdBuilder.buildPropertyUniqueId(resourceId, propertyDefinition.getName()))); + UniqueIdBuilder.buildPropertyUniqueId(resourceId, propertyDefinition.getName()))); createResourcePropertiesOnGraph(resource); return genericResource; } @@ -765,19 +767,19 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } private Either>>, ResponseFormat> findNodeTypesArtifactsToHandle( - final Map nodeTypesInfo, final CsarInfo csarInfo, final Resource oldResource) { + final Map nodeTypesInfo, final CsarInfo csarInfo, final Resource oldResource) { final Map>> nodeTypesArtifactsToHandle = new HashMap<>(); Either>>, ResponseFormat> nodeTypesArtifactsToHandleRes = Either - .left(nodeTypesArtifactsToHandle); + .left(nodeTypesArtifactsToHandle); try { final Map> extractedVfcsArtifacts = CsarUtils.extractVfcsArtifactsFromCsar(csarInfo.getCsar()); final Map> extractedVfcToscaNames = extractVfcToscaNames(nodeTypesInfo, oldResource.getName(), - csarInfo); + csarInfo); log.debug("Going to fetch node types for resource with name {} during import csar with UUID {}. ", oldResource.getName(), - csarInfo.getCsarUUID()); + csarInfo.getCsarUUID()); extractedVfcToscaNames.forEach( - (namespace, vfcToscaNames) -> findAddNodeTypeArtifactsToHandle(csarInfo, nodeTypesArtifactsToHandle, oldResource, - extractedVfcsArtifacts, namespace, vfcToscaNames)); + (namespace, vfcToscaNames) -> findAddNodeTypeArtifactsToHandle(csarInfo, nodeTypesArtifactsToHandle, oldResource, + extractedVfcsArtifacts, namespace, vfcToscaNames)); } catch (Exception e) { final ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR); nodeTypesArtifactsToHandleRes = Either.right(responseFormat); @@ -807,8 +809,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { List artifactsToDelete = new ArrayList<>(); // delete all informational artifacts artifactsToDelete.addAll( - curNodeType.getArtifacts().values().stream().filter(a -> a.getArtifactGroupType() == ArtifactGroupTypeEnum.INFORMATIONAL) - .collect(toList())); + curNodeType.getArtifacts().values().stream().filter(a -> a.getArtifactGroupType() == ArtifactGroupTypeEnum.INFORMATIONAL) + .collect(toList())); // delete all deployment artifacts artifactsToDelete.addAll(curNodeType.getDeploymentArtifacts().values()); if (!artifactsToDelete.isEmpty()) { @@ -825,12 +827,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (status != null && status != StorageOperationStatus.NOT_FOUND) { log.debug("Error occurred during fetching node type with tosca name {}, error: {}", currVfcToscaName, status); ResponseFormat responseFormat = componentsUtils - .getResponseFormat(componentsUtils.convertFromStorageResponse(status), csarInfo.getCsarUUID()); + .getResponseFormat(componentsUtils.convertFromStorageResponse(status), csarInfo.getCsarUUID()); componentsUtils.auditResource(responseFormat, csarInfo.getModifier(), resource, AuditingActionEnum.CREATE_RESOURCE); throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(status), csarInfo.getCsarUUID()); } else if (StringUtils.isNotEmpty(currVfcToscaName)) { return (Resource) toscaOperationFacade.getLatestByToscaResourceName(currVfcToscaName, resource.getModel()).left() - .on(st -> findVfcResource(csarInfo, resource, previousVfcToscaName, null, st)); + .on(st -> findVfcResource(csarInfo, resource, previousVfcToscaName, null, st)); } return null; } @@ -842,7 +844,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { List artifactsToUpdate = new ArrayList<>(); List artifactsToDelete = new ArrayList<>(); processExistingNodeTypeArtifacts(extractedArtifacts, artifactsToUpload, artifactsToUpdate, artifactsToDelete, - collectExistingArtifacts(curNodeType)); + collectExistingArtifacts(curNodeType)); return putFoundArtifacts(artifactsToUpload, artifactsToUpdate, artifactsToDelete); } catch (Exception e) { log.debug("Exception occurred when findNodeTypeArtifactsToHandle, error is:{}", e.getMessage(), e); @@ -881,7 +883,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private void processNodeTypeArtifact(List artifactsToUpload, List artifactsToUpdate, Map existingArtifacts, ArtifactDefinition currNewArtifact) { Optional foundArtifact = existingArtifacts.values().stream() - .filter(a -> a.getArtifactName().equals(currNewArtifact.getArtifactName())).findFirst(); + .filter(a -> a.getArtifactName().equals(currNewArtifact.getArtifactName())).findFirst(); if (foundArtifact.isPresent()) { if (foundArtifact.get().getArtifactType().equals(currNewArtifact.getArtifactType())) { updateFoundArtifact(artifactsToUpdate, currNewArtifact, foundArtifact.get()); @@ -890,7 +892,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } else { log.debug("Can't upload two artifact with the same name {}.", currNewArtifact.getArtifactName()); throw new ByActionStatusComponentException(ActionStatus.ARTIFACT_ALREADY_EXIST_IN_DIFFERENT_TYPE_IN_CSAR, - currNewArtifact.getArtifactName(), currNewArtifact.getArtifactType(), foundArtifact.get().getArtifactType()); + currNewArtifact.getArtifactName(), currNewArtifact.getArtifactType(), foundArtifact.get().getArtifactType()); } } } @@ -915,8 +917,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } if (MapUtils.isNotEmpty(curNodeType.getArtifacts())) { existingArtifacts.putAll( - curNodeType.getArtifacts().entrySet().stream().filter(e -> e.getValue().getArtifactGroupType() == ArtifactGroupTypeEnum.INFORMATIONAL) - .collect(toMap(Map.Entry::getKey, Map.Entry::getValue))); + curNodeType.getArtifacts().entrySet().stream().filter(e -> e.getValue().getArtifactGroupType() == ArtifactGroupTypeEnum.INFORMATIONAL) + .collect(toMap(Map.Entry::getKey, Map.Entry::getValue))); } return existingArtifacts; } @@ -933,14 +935,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Either checkoutResourceRes; try { if (!resource.getComponentMetadataDefinition().getMetadataDataDefinition().getState() - .equals(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT.name())) { + .equals(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT.name())) { log.debug("************* Going to change life cycle state of resource {} to not certified checked out. ", resource.getName()); Either checkoutRes = lifecycleBusinessLogic - .changeComponentState(resource.getComponentType(), resource.getUniqueId(), user, LifeCycleTransitionEnum.CHECKOUT, - new LifecycleChangeInfoWithAction(CERTIFICATION_ON_IMPORT, LifecycleChanceActionEnum.CREATE_FROM_CSAR), inTransaction, true); + .changeComponentState(resource.getComponentType(), resource.getUniqueId(), user, LifeCycleTransitionEnum.CHECKOUT, + new LifecycleChangeInfoWithAction(CERTIFICATION_ON_IMPORT, LifecycleChanceActionEnum.CREATE_FROM_CSAR), inTransaction, true); if (checkoutRes.isRight()) { log.debug("Could not change state of component {} with uid {} to checked out. Status is {}. ", - resource.getComponentType().getNodeType(), resource.getUniqueId(), checkoutRes.right().value().getStatus()); + resource.getComponentType().getNodeType(), resource.getUniqueId(), checkoutRes.right().value().getStatus()); checkoutResourceRes = Either.right(checkoutRes.right().value()); } else { checkoutResourceRes = Either.left((Resource) checkoutRes.left().value()); @@ -986,8 +988,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (curArtifactsToHandle != null && !curArtifactsToHandle.isEmpty()) { log.debug("************* Going to {} artifact to vfc {}", curOperation.name(), nodeTypeResource.getName()); handleNodeTypeArtifactsRequestRes = artifactsBusinessLogic - .handleArtifactsRequestForInnerVfcComponent(curArtifactsToHandle, nodeTypeResource, user, createdArtifacts, - new ArtifactOperationInfo(false, ignoreLifecycleState, curOperation), false, inTransaction); + .handleArtifactsRequestForInnerVfcComponent(curArtifactsToHandle, nodeTypeResource, user, createdArtifacts, + new ArtifactOperationInfo(false, ignoreLifecycleState, curOperation), false, inTransaction); if (ArtifactOperationEnum.isCreateOrLink(curOperation)) { createdArtifacts.addAll(handleNodeTypeArtifactsRequestRes); } @@ -1010,7 +1012,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (!nodes.isEmpty()) { for (Entry nodeType : nodes.entrySet()) { final ImmutablePair toscaResourceName = buildNestedToscaResourceName(ResourceTypeEnum.VFC.name(), vfResourceName, - nodeType.getKey()); + nodeType.getKey()); vfcToscaNames.put(nodeType.getKey(), toscaResourceName); } } @@ -1031,7 +1033,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private void extractNodeTypes(Map nodes, Map mappedToscaTemplate) { Either, ResultStatusEnum> eitherNodeTypes = ImportUtils - .findFirstToscaMapElement(mappedToscaTemplate, TypeUtils.ToscaTagNamesEnum.NODE_TYPES); + .findFirstToscaMapElement(mappedToscaTemplate, TypeUtils.ToscaTagNamesEnum.NODE_TYPES); if (eitherNodeTypes.isLeft()) { nodes.putAll(eitherNodeTypes.left().value()); } @@ -1040,8 +1042,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { public Resource createResourceFromCsar(Resource resource, User user, Map csarUIPayload, String csarUUID) { log.trace("************* created successfully from YAML, resource TOSCA "); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, StatusCode.STARTED, "Starting to create Resource From Csar by user {}", - user.getUserId()); + .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, StatusCode.STARTED, "Starting to create Resource From Csar by user {}", + user.getUserId()); CsarInfo csarInfo = csarBusinessLogic.getCsarInfo(resource, null, user, csarUIPayload, csarUUID); Map nodeTypesInfo = csarInfo.extractTypesInfo(); final String model = resource.getModel(); @@ -1058,22 +1060,22 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { policyTypeBusinessLogic.createPolicyTypeFromYaml(new Yaml().dump(policyTypesToCreate), model, true); } } - + Either>>, ResponseFormat> findNodeTypesArtifactsToHandleRes = findNodeTypesArtifactsToHandle( - nodeTypesInfo, csarInfo, resource); + nodeTypesInfo, csarInfo, resource); if (findNodeTypesArtifactsToHandleRes.isRight()) { log.debug("failed to find node types for update with artifacts during import csar {}. ", csarInfo.getCsarUUID()); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "error: {}", findNodeTypesArtifactsToHandleRes.right().value()); + .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, + "error: {}", findNodeTypesArtifactsToHandleRes.right().value()); throw new ByResponseFormatComponentException(findNodeTypesArtifactsToHandleRes.right().value()); } Resource vfResource = createResourceFromYaml(resource, csarInfo.getMainTemplateContent(), csarInfo.getMainTemplateName(), nodeTypesInfo, - csarInfo, findNodeTypesArtifactsToHandleRes.left().value(), true, false, null); + csarInfo, findNodeTypesArtifactsToHandleRes.left().value(), true, false, null); log.trace("*************VF Resource created successfully from YAML, resource TOSCA name: {}", vfResource.getToscaResourceName()); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, StatusCode.COMPLETE, "Ended create Resource From Csar by user {}", - user.getUserId()); + .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, StatusCode.COMPLETE, "Ended create Resource From Csar by user {}", + user.getUserId()); return vfResource; } @@ -1097,27 +1099,27 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Resource createdResource; try { ParsedToscaYamlInfo parsedToscaYamlInfo = csarBusinessLogic - .getParsedToscaYamlInfo(topologyTemplateYaml, yamlName, nodeTypesInfo, csarInfo, nodeName, resource); + .getParsedToscaYamlInfo(topologyTemplateYaml, yamlName, nodeTypesInfo, csarInfo, nodeName, resource); if (MapUtils.isEmpty(parsedToscaYamlInfo.getInstances()) && resource.getResourceType() != ResourceTypeEnum.PNF) { throw new ByActionStatusComponentException(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlName); } log.debug("#createResourceFromYaml - Going to create resource {} and RIs ", resource.getName()); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, ""); + .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, ""); createdResource = createResourceAndRIsFromYaml(yamlName, resource, parsedToscaYamlInfo, AuditingActionEnum.IMPORT_RESOURCE, false, - createdArtifacts, topologyTemplateYaml, nodeTypesInfo, csarInfo, nodeTypesArtifactsToCreate, shouldLock, inTransaction, nodeName); + createdArtifacts, topologyTemplateYaml, nodeTypesInfo, csarInfo, nodeTypesArtifactsToCreate, shouldLock, inTransaction, nodeName); log.debug("#createResourceFromYaml - The resource {} has been created ", resource.getName()); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.COMPLETE, - "The resource has been created: {}", resource.getName()); + .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.COMPLETE, + "The resource has been created: {}", resource.getName()); } catch (ComponentException e) { ResponseFormat responseFormat = - e.getResponseFormat() == null ? componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()) : e.getResponseFormat(); + e.getResponseFormat() == null ? componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()) : e.getResponseFormat(); componentsUtils.auditResource(responseFormat, csarInfo.getModifier(), resource, AuditingActionEnum.IMPORT_RESOURCE); throw e; } catch (StorageException e) { ResponseFormat responseFormat = componentsUtils - .getResponseFormat(componentsUtils.convertFromStorageResponse(e.getStorageOperationStatus())); + .getResponseFormat(componentsUtils.convertFromStorageResponse(e.getStorageOperationStatus())); componentsUtils.auditResource(responseFormat, csarInfo.getModifier(), resource, AuditingActionEnum.IMPORT_RESOURCE); throw e; } @@ -1138,7 +1140,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { mapToConvert.put(TypeUtils.ToscaTagNamesEnum.TOSCA_VERSION.getElementName(), toscaVersion.left().value()); final Map nodeTypes = getNodeTypesFromTemplate(mappedToscaTemplate, substitutableAsNodeType); createNodeTypes(yamlName, resource, needLock, nodeTypesArtifactsToHandle, nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, mapToConvert, - nodeTypes); + nodeTypes); return csarInfo.getCreatedNodes(); } @@ -1200,17 +1202,17 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { while (nodesNameValueIter.hasNext()) { Entry nodeType = nodesNameValueIter.next(); Map> nodeTypeArtifactsToHandle = - nodeTypesArtifactsToHandle == null || nodeTypesArtifactsToHandle.isEmpty() ? null : nodeTypesArtifactsToHandle.get(nodeType.getKey()); + nodeTypesArtifactsToHandle == null || nodeTypesArtifactsToHandle.isEmpty() ? null : nodeTypesArtifactsToHandle.get(nodeType.getKey()); if (nodeTypesInfo.containsKey(nodeType.getKey())) { log.trace("************* Going to handle nested vfc {}", nodeType.getKey()); vfcCreated = handleNestedVfc(resource, nodeTypesArtifactsToHandle, nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, - nodeType.getKey()); + nodeType.getKey()); log.trace("************* Finished to handle nested vfc {}", nodeType.getKey()); } else if (csarInfo.getCreatedNodesToscaResourceNames() != null && !csarInfo.getCreatedNodesToscaResourceNames() - .containsKey(nodeType.getKey())) { + .containsKey(nodeType.getKey())) { log.trace("************* Going to create node {}", nodeType.getKey()); ImmutablePair resourceCreated = createNodeTypeResourceFromYaml(yamlName, nodeType, csarInfo.getModifier(), - mapToConvert, resource, needLock, nodeTypeArtifactsToHandle, nodeTypesNewCreatedArtifacts, true, csarInfo, true); + mapToConvert, resource, needLock, nodeTypeArtifactsToHandle, nodeTypesNewCreatedArtifacts, true, csarInfo, true); log.debug("************* Finished to create node {}", nodeType.getKey()); vfcCreated = resourceCreated.getLeft(); csarInfo.getCreatedNodesToscaResourceNames().put(nodeType.getKey(), vfcCreated.getToscaResourceName()); @@ -1229,7 +1231,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Map nestedVfcJsonMap = nodesInfo.get(nodeName).getMappedToscaTemplate(); log.debug("************* Going to create node types from yaml {}", yamlName); createResourcesFromYamlNodeTypesList(yamlName, resource, nestedVfcJsonMap, false, nodesArtifactsToHandle, createdArtifacts, - Collections.emptyMap(), csarInfo, resource.getModel()); + Collections.emptyMap(), csarInfo, resource.getModel()); log.debug("************* Finished to create node types from yaml {}", yamlName); if (nestedVfcJsonMap.containsKey(TypeUtils.ToscaTagNamesEnum.TOPOLOGY_TEMPLATE.getElementName())) { log.debug("************* Going to handle complex VFC from yaml {}", yamlName); @@ -1245,28 +1247,28 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Resource oldComplexVfc = null; Resource newComplexVfc = buildValidComplexVfc(resource, csarInfo, nodeName, nodesInfo); Either oldComplexVfcRes = toscaOperationFacade - .getFullLatestComponentByToscaResourceName(newComplexVfc.getToscaResourceName()); + .getFullLatestComponentByToscaResourceName(newComplexVfc.getToscaResourceName()); if (oldComplexVfcRes.isRight() && oldComplexVfcRes.right().value() == StorageOperationStatus.NOT_FOUND) { oldComplexVfcRes = toscaOperationFacade.getFullLatestComponentByToscaResourceName( - buildNestedToscaResourceName(ResourceTypeEnum.CVFC.name(), csarInfo.getVfResourceName(), nodeName).getRight()); + buildNestedToscaResourceName(ResourceTypeEnum.CVFC.name(), csarInfo.getVfResourceName(), nodeName).getRight()); } if (oldComplexVfcRes.isRight() && oldComplexVfcRes.right().value() != StorageOperationStatus.NOT_FOUND) { log.debug("Failed to fetch previous complex VFC by tosca resource name {}. Status is {}. ", newComplexVfc.getToscaResourceName(), - oldComplexVfcRes.right().value()); + oldComplexVfcRes.right().value()); throw new ByActionStatusComponentException(ActionStatus.GENERAL_ERROR); } else if (oldComplexVfcRes.isLeft()) { log.debug(VALIDATE_DERIVED_BEFORE_UPDATE); final Either eitherValidation = validateNestedDerivedFromDuringUpdate(oldComplexVfcRes.left().value(), - newComplexVfc, ValidationUtils.hasBeenCertified(oldComplexVfcRes.left().value().getVersion())); + newComplexVfc, ValidationUtils.hasBeenCertified(oldComplexVfcRes.left().value().getVersion())); if (eitherValidation.isLeft()) { oldComplexVfc = oldComplexVfcRes.left().value(); } } newComplexVfc = handleComplexVfc(nodesArtifactsToHandle, createdArtifacts, nodesInfo, csarInfo, nodeName, yamlName, oldComplexVfc, - newComplexVfc); + newComplexVfc); csarInfo.getCreatedNodesToscaResourceNames().put(nodeName, newComplexVfc.getToscaResourceName()); final LifecycleChangeInfoWithAction lifecycleChangeInfo = new LifecycleChangeInfoWithAction(CERTIFICATION_ON_IMPORT, - LifecycleChanceActionEnum.CREATE_FROM_CSAR); + LifecycleChanceActionEnum.CREATE_FROM_CSAR); log.debug("Going to certify cvfc {}. ", newComplexVfc.getName()); final Resource result = propagateStateToCertified(csarInfo.getModifier(), newComplexVfc, lifecycleChangeInfo, true, false, true); csarInfo.getCreatedNodes().put(nodeName, result); @@ -1284,10 +1286,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { CsarInfo.markNestedVfc(mappedToscaTemplate, newNodeTypesInfo); if (oldComplexVfc == null) { handleComplexVfcRes = createResourceFromYaml(newComplexVfc, yamlContent, yamlName, newNodeTypesInfo, csarInfo, nodesArtifactsToHandle, - false, true, nodeName); + false, true, nodeName); } else { handleComplexVfcRes = updateResourceFromYaml(oldComplexVfc, newComplexVfc, AuditingActionEnum.UPDATE_RESOURCE_METADATA, createdArtifacts, - yamlContent, yamlName, csarInfo, newNodeTypesInfo, nodesArtifactsToHandle, nodeName, true); + yamlContent, yamlName, csarInfo, newNodeTypesInfo, nodesArtifactsToHandle, nodeName, true); } return handleComplexVfcRes; } @@ -1320,7 +1322,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final String singleVfcYaml = buildNodeTypeYaml(nodeNameValue, mapToConvert, resourceMetaData.getResourceType(), csarInfo); user = validateUser(user, "CheckIn Resource", resourceVf, AuditingActionEnum.CHECKIN_RESOURCE, true); return createResourceFromNodeType(singleVfcYaml, resourceMetaData, user, true, needLock, nodeTypeArtifactsToHandle, - nodeTypesNewCreatedArtifacts, forceCertificationAllowed, csarInfo, nodeNameValue.getKey(), isNested); + nodeTypesNewCreatedArtifacts, forceCertificationAllowed, csarInfo, nodeNameValue.getKey(), isNested); } private String buildNodeTypeYaml(final Entry nodeNameValue, final Map mapToConvert, final String nodeResourceType, @@ -1333,7 +1335,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final Yaml yaml = new Yaml(options); final Map node = new HashMap<>(); node.put(buildNestedToscaResourceName(nodeResourceType, csarInfo.getVfResourceName(), nodeNameValue.getKey()).getLeft(), - nodeNameValue.getValue()); + nodeNameValue.getValue()); mapToConvert.put(TypeUtils.ToscaTagNamesEnum.NODE_TYPES.getElementName(), node); return yaml.dumpAsMap(mapToConvert); } @@ -1350,11 +1352,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { boolean forceCertificationAllowed, CsarInfo csarInfo, String nodeName, boolean isNested) { LifecycleChangeInfoWithAction lifecycleChangeInfo = new LifecycleChangeInfoWithAction(CERTIFICATION_ON_IMPORT, - LifecycleChanceActionEnum.CREATE_FROM_CSAR); + LifecycleChanceActionEnum.CREATE_FROM_CSAR); Function validator = resource -> validateResourceCreationFromNodeType(resource, creator); return resourceImportManager - .importCertifiedResource(nodeTypeYaml, resourceMetaData, creator, validator, lifecycleChangeInfo, isInTransaction, true, needLock, - nodeTypeArtifactsToHandle, nodeTypesNewCreatedArtifacts, forceCertificationAllowed, csarInfo, nodeName, isNested); + .importCertifiedResource(nodeTypeYaml, resourceMetaData, creator, validator, lifecycleChangeInfo, isInTransaction, true, needLock, + nodeTypeArtifactsToHandle, nodeTypesNewCreatedArtifacts, forceCertificationAllowed, csarInfo, nodeName, isNested); } /** @@ -1389,7 +1391,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final String namePrefix = nodeName.replace(actualName, ""); String resourceType = namePrefix.substring(nodeTypeNamePrefix.length()); log.debug("initial namePrefix:{} resourceType {}. nodeName {} , actualName {} prefix {}", namePrefix, resourceType, nodeName, actualName, - nodeTypeNamePrefix); + nodeTypeNamePrefix); // if we import from csar, the node_type name can be // org.openecomp.resource.abstract.node_name - in this case we always @@ -1496,30 +1498,30 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { try { log.trace("************* createResourceFromYaml before full create resource {}", yamlName); loggerSupportability.log(LoggerSupportabilityActions.CREATE_INPUTS, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, - "Starting to add inputs from yaml: {}", yamlName); + "Starting to add inputs from yaml: {}", yamlName); if (processSubstitutableAsNodeType(resource, parsedToscaYamlInfo)) { final Map substitutableAsNodeType = getSubstitutableAsNodeTypeFromTemplate( - (Map) new Yaml().load(topologyTemplateYaml), parsedToscaYamlInfo.getSubstitutionMappingNodeType()); + (Map) new Yaml().load(topologyTemplateYaml), parsedToscaYamlInfo.getSubstitutionMappingNodeType()); resource.setToscaResourceName(parsedToscaYamlInfo.getSubstitutionMappingNodeType()); final Resource genericResource = fetchAndSetDerivedFromGenericType(resource, - (String) substitutableAsNodeType.get(TypeUtils.ToscaTagNamesEnum.DERIVED_FROM.getElementName())); + (String) substitutableAsNodeType.get(TypeUtils.ToscaTagNamesEnum.DERIVED_FROM.getElementName())); resource = createResourceTransaction(resource, csarInfo.getModifier(), isNormative); generatePropertiesFromGenericType(resource, genericResource); generatePropertiesFromNodeType(resource, substitutableAsNodeType); final String resourceId = resource.getUniqueId(); resource.getProperties().forEach(propertyDefinition -> propertyDefinition.setUniqueId( - UniqueIdBuilder.buildPropertyUniqueId(resourceId, propertyDefinition.getName()))); + UniqueIdBuilder.buildPropertyUniqueId(resourceId, propertyDefinition.getName()))); createResourcePropertiesOnGraph(resource); final Map instancesToCreate = getInstancesToCreate(parsedToscaYamlInfo, resource.getModel()); log.trace("************* Going to create nodes, RI's and Relations from yaml {}", yamlName); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, - "Start create nodes, RI and Relations from yaml: {}", yamlName); + .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, + "Start create nodes, RI and Relations from yaml: {}", yamlName); resource = createRIAndRelationsFromYaml(yamlName, resource, instancesToCreate, topologyTemplateYaml, - nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, nodeTypesArtifactsToCreate, nodeName, - parsedToscaYamlInfo.getSubstitutionMappingNodeType()); + nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, nodeTypesArtifactsToCreate, nodeName, + parsedToscaYamlInfo.getSubstitutionMappingNodeType()); } else { final Resource genericResource = fetchAndSetDerivedFromGenericType(resource, null); resource = createResourceTransaction(resource, csarInfo.getModifier(), isNormative); @@ -1533,7 +1535,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { log.trace("************* Finish to add inputs from yaml {}", yamlName); loggerSupportability.log(LoggerSupportabilityActions.CREATE_INPUTS, resource.getComponentMetadataForSupportLog(), StatusCode.COMPLETE, - "Finish to add inputs from yaml: {}", yamlName); + "Finish to add inputs from yaml: {}", yamlName); if (resource.getResourceType() == ResourceTypeEnum.PNF) { log.trace("************* Adding generic properties to PNF"); resource = (Resource) propertyBusinessLogic.copyPropertyToComponent(resource, genericResource.getProperties()); @@ -1541,23 +1543,23 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { softwareInformationBusinessLogic.setSoftwareInformation(resource, csarInfo); log.trace("************* Removing non-mano software information file from PNF"); if (csarInfo.getSoftwareInformationPath().isPresent() && !softwareInformationBusinessLogic.removeSoftwareInformationFile( - csarInfo)) { + csarInfo)) { log.warn(EcompLoggerErrorCode.BUSINESS_PROCESS_ERROR, ResourceBusinessLogic.class.getName(), "catalog-be", - "Could not remove the software information file."); + "Could not remove the software information file."); } } final Map instancesToCreate = getInstancesToCreate(parsedToscaYamlInfo); log.trace("************* Going to create nodes, RI's and Relations from yaml {}", yamlName); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, - "Start create nodes, RI and Relations from yaml: {}", yamlName); + .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, + "Start create nodes, RI and Relations from yaml: {}", yamlName); resource = createRIAndRelationsFromYaml(yamlName, resource, instancesToCreate, topologyTemplateYaml, - nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, nodeTypesArtifactsToCreate, nodeName, null); + nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, nodeTypesArtifactsToCreate, nodeName, null); } log.trace("************* Finished to create nodes, RI and Relation from yaml {}", yamlName); loggerSupportability.log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.COMPLETE, - "Finished to create nodes, RI and Relation from yaml: {}", yamlName); + "Finished to create nodes, RI and Relation from yaml: {}", yamlName); // validate update vf module group names Optional> asdGroups = checkAndCreateAsdTypeVfModules(parsedToscaYamlInfo.getInstances()); Map parsedGroups = parsedToscaYamlInfo.getGroups(); @@ -1565,7 +1567,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { parsedGroups.putAll(asdGroups.get()); } final Either, ResponseFormat> validateUpdateVfGroupNamesRes = groupBusinessLogic - .validateUpdateVfGroupNames(parsedGroups, resource.getSystemName()); + .validateUpdateVfGroupNames(parsedGroups, resource.getSystemName()); if (validateUpdateVfGroupNamesRes.isRight()) { rollback(inTransaction, resource, createdArtifacts, nodeTypesNewCreatedArtifacts); throw new ByResponseFormatComponentException(validateUpdateVfGroupNamesRes.right().value()); @@ -1574,7 +1576,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final Map groups; log.trace("************* Going to add groups from yaml {}", yamlName); loggerSupportability.log(LoggerSupportabilityActions.CREATE_GROUPS, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, - "Start to add groups from yaml: {}", yamlName); + "Start to add groups from yaml: {}", yamlName); if (!validateUpdateVfGroupNamesRes.left().value().isEmpty()) { groups = validateUpdateVfGroupNamesRes.left().value(); } else { @@ -1584,16 +1586,16 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (createGroupsOnResource.isRight()) { rollback(inTransaction, resource, createdArtifacts, nodeTypesNewCreatedArtifacts); loggerSupportability.log(LoggerSupportabilityActions.CREATE_GROUPS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR while adding groups from yaml: {}", yamlName); + "ERROR while adding groups from yaml: {}", yamlName); throw new ByResponseFormatComponentException(createGroupsOnResource.right().value()); } resource = createGroupsOnResource.left().value(); log.trace("************* Finished to add groups from yaml {}", yamlName); loggerSupportability.log(LoggerSupportabilityActions.CREATE_GROUPS, resource.getComponentMetadataForSupportLog(), StatusCode.COMPLETE, - "Finished to add groups from yaml: {}", yamlName); + "Finished to add groups from yaml: {}", yamlName); log.trace("************* Going to add artifacts from yaml {}", yamlName); loggerSupportability.log(LoggerSupportabilityActions.CREATE_ARTIFACTS, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, - "Started to add artifacts from yaml: {}", yamlName); + "Started to add artifacts from yaml: {}", yamlName); log.trace("************* Starting to add policies from yaml {}", yamlName); Map policies = parsedToscaYamlInfo.getPolicies(); if (MapUtils.isNotEmpty(policies)) { @@ -1601,34 +1603,34 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } log.trace("************* Finished to add policies from yaml {}", yamlName); final NodeTypeInfoToUpdateArtifacts nodeTypeInfoToUpdateArtifacts = new NodeTypeInfoToUpdateArtifacts(nodeName, - nodeTypesArtifactsToCreate); + nodeTypesArtifactsToCreate); final Either createArtifactsEither = createOrUpdateArtifacts(ArtifactOperationEnum.CREATE, createdArtifacts, - yamlName, csarInfo, resource, nodeTypeInfoToUpdateArtifacts, inTransaction, shouldLock); + yamlName, csarInfo, resource, nodeTypeInfoToUpdateArtifacts, inTransaction, shouldLock); if (createArtifactsEither.isRight()) { rollback(inTransaction, resource, createdArtifacts, nodeTypesNewCreatedArtifacts); loggerSupportability.log(LoggerSupportabilityActions.CREATE_ARTIFACTS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "error happened {}", createArtifactsEither.right().value()); + "error happened {}", createArtifactsEither.right().value()); throw new ByResponseFormatComponentException(createArtifactsEither.right().value()); } loggerSupportability.log(LoggerSupportabilityActions.CREATE_ARTIFACTS, resource.getComponentMetadataForSupportLog(), StatusCode.COMPLETE, - "Finished to add artifacts from yaml: " + resource.getToscaResourceName()); + "Finished to add artifacts from yaml: " + resource.getToscaResourceName()); final ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.CREATED); componentsUtils.auditResource(responseFormat, csarInfo.getModifier(), resource, actionEnum); ASDCKpiApi.countCreatedResourcesKPI(); return resource; } catch (final BusinessLogicException e) { log.error(EcompLoggerErrorCode.BUSINESS_PROCESS_ERROR, ResourceBusinessLogic.class.getName(), - "An error has occurred during resource and resource instance creation", e); + "An error has occurred during resource and resource instance creation", e); rollback(inTransaction, resource, createdArtifacts, nodeTypesNewCreatedArtifacts); throw new ByResponseFormatComponentException(e.getResponseFormat()); } catch (final ComponentException e) { log.error(EcompLoggerErrorCode.SCHEMA_ERROR, ResourceBusinessLogic.class.getName(), - "An error has occurred during resource and resource instance creation", e); + "An error has occurred during resource and resource instance creation", e); rollback(inTransaction, resource, createdArtifacts, nodeTypesNewCreatedArtifacts); throw new ByResponseFormatComponentException(e.getResponseFormat()); } catch (final Exception e) { log.error(EcompLoggerErrorCode.BUSINESS_PROCESS_ERROR, ResourceBusinessLogic.class.getName(), - "An error has occurred during resource and resource instance creation", e); + "An error has occurred during resource and resource instance creation", e); rollback(inTransaction, resource, createdArtifacts, nodeTypesNewCreatedArtifacts); throw new ByActionStatusComponentException(ActionStatus.GENERAL_ERROR); } finally { @@ -1647,7 +1649,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { for (Map.Entry instance : instances.entrySet()) { if (isNotEmpty(instance.getValue().getArtifacts()) || instance.getValue().getArtifacts() != null) { Map artifactsMap = instance.getValue().getArtifacts() - .get(ToscaTagNamesEnum.ARTIFACTS.getElementName()); + .get(ToscaTagNamesEnum.ARTIFACTS.getElementName()); if (isNotEmpty(artifactsMap) || artifactsMap != null) { for (Map.Entry artifact : artifactsMap.entrySet()) { if (artifact.getValue().getType().equals(Constants.ASD_DEPLOYMENT_ITEM)) { @@ -1704,7 +1706,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private boolean processSubstitutableAsNodeType(final Resource resource, final ParsedToscaYamlInfo parsedToscaYamlInfo) { return !resource.getResourceType().isAtomicType() && StringUtils.isNotEmpty(resource.getModel()) - && parsedToscaYamlInfo.getSubstitutionMappingNodeType() != null; + && parsedToscaYamlInfo.getSubstitutionMappingNodeType() != null; } private Map getInstancesToCreate(final ParsedToscaYamlInfo parsedToscaYamlInfo) { @@ -1716,8 +1718,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { return parsedToscaYamlInfo.getInstances(); } return parsedToscaYamlInfo.getInstances().entrySet().stream() - .filter(entry -> !parsedToscaYamlInfo.getSubstitutionMappingNodeType().equals(entry.getValue().getType())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + .filter(entry -> !parsedToscaYamlInfo.getSubstitutionMappingNodeType().equals(entry.getValue().getType())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } private void rollback(boolean inTransaction, Resource resource, List createdArtifacts, @@ -1758,7 +1760,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { List inputs = resource.getInputs(); if (MapUtils.isNotEmpty(groups)) { groups.values().stream().filter(g -> isNotEmpty(g.getProperties())).flatMap(g -> g.getProperties().stream()) - .forEach(p -> handleGetInputs(p, inputs)); + .forEach(p -> handleGetInputs(p, inputs)); } } @@ -1772,7 +1774,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (inputs == null || inputs.isEmpty()) { log.debug("Failed to add property {} to group. Inputs list is empty ", property); rollbackWithException(ActionStatus.INPUTS_NOT_FOUND, - property.getGetInputValues().stream().map(GetInputValueDataDefinition::getInputName).collect(toList()).toString()); + property.getGetInputValues().stream().map(GetInputValueDataDefinition::getInputName).collect(toList()).toString()); } ListIterator getInputValuesIter = property.getGetInputValues().listIterator(); while (getInputValuesIter.hasNext()) { @@ -1866,7 +1868,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { List groupsToDelete) { for (GroupDefinition group : groupsFromResource) { Optional op = groupsAsList.stream().filter(p -> p.getInvariantName().equalsIgnoreCase(group.getInvariantName())) - .findAny(); + .findAny(); if (op.isEmpty() && (group.getArtifacts() == null || group.getArtifacts().isEmpty())) { groupsToDelete.add(group); } @@ -1877,7 +1879,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { List groupsToUpdate, List groupsToCreate) { for (GroupDefinition group : groupsAsList) { Optional op = groupsFromResource.stream().filter(p -> p.getInvariantName().equalsIgnoreCase(group.getInvariantName())) - .findAny(); + .findAny(); if (op.isPresent()) { GroupDefinition groupToUpdate = op.get(); groupToUpdate.setMembers(group.getMembers()); @@ -1896,7 +1898,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Either, ResponseFormat> createInputs = inputsBusinessLogic.createInputsInGraph(inputs, resource); if (createInputs.isRight()) { loggerSupportability.log(LoggerSupportabilityActions.CREATE_INPUTS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "failed to add inputs from yaml: {}", createInputs.right().value()); + "failed to add inputs from yaml: {}", createInputs.right().value()); throw new ByResponseFormatComponentException(createInputs.right().value()); } resource.setInputs(createInputs.left().value()); @@ -1927,13 +1929,13 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final List resourceProperties = resource.getProperties(); for (PropertyDefinition propertyDefinition : resourceProperties) { final Either addPropertyEither = toscaOperationFacade - .addPropertyToComponent(propertyDefinition.getName(), propertyDefinition, resource); + .addPropertyToComponent(propertyDefinition.getName(), propertyDefinition, resource); if (addPropertyEither.isRight()) { final String error = String.format("failed to add properties from yaml: {}", addPropertyEither.right().value()); loggerSupportability.log(LoggerSupportabilityActions.CREATE_PROPERTIES, resource.getComponentMetadataForSupportLog(), - StatusCode.ERROR, - error); + StatusCode.ERROR, + error); throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(addPropertyEither.right().value()), error); } } @@ -1969,22 +1971,22 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (CollectionUtils.isEmpty(componentInstances)) { String membersAstString = String.join(",", compInstancesNames); log.debug("The members: {}, in group: {}, cannot be found in component {}. There are no component instances.", membersAstString, - groupName, component.getNormalizedName()); + groupName, component.getNormalizedName()); throw new ByActionStatusComponentException(ActionStatus.GROUP_INVALID_COMPONENT_INSTANCE, membersAstString, groupName, - component.getNormalizedName(), getComponentTypeForResponse(component)); + component.getNormalizedName(), getComponentTypeForResponse(component)); } // Find all component instances with the member names Map memberNames = componentInstances.stream().collect(toMap(ComponentInstance::getName, ComponentInstance::getUniqueId)); memberNames.putAll(groups.keySet().stream().collect(toMap(g -> g, g -> ""))); Map relevantInstances = memberNames.entrySet().stream().filter(n -> compInstancesNames.contains(n.getKey())) - .collect(toMap(Entry::getKey, Entry::getValue)); + .collect(toMap(Entry::getKey, Entry::getValue)); if (relevantInstances.size() != compInstancesNames.size()) { List foundMembers = new ArrayList<>(relevantInstances.keySet()); foundMembers.forEach(compInstancesNames::remove); String membersAstString = String.join(",", compInstancesNames); log.debug("The members: {}, in group: {}, cannot be found in component: {}", membersAstString, groupName, component.getNormalizedName()); throw new ByActionStatusComponentException(ActionStatus.GROUP_INVALID_COMPONENT_INSTANCE, membersAstString, groupName, - component.getNormalizedName(), getComponentTypeForResponse(component)); + component.getNormalizedName(), getComponentTypeForResponse(component)); } updatedGroupDefinition.setMembers(relevantInstances); } @@ -2040,12 +2042,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { // are groups List currGroupFilteredMembers = currGroupMembers.stream(). - // Keep Only Elements of type group and not Resource Instances - filter(allGroups::containsKey). - // Add Filtered Elements to main Set - peek(allGroupMembers::add). - // Collect results - collect(toList()); + // Keep Only Elements of type group and not Resource Instances + filter(allGroups::containsKey). + // Add Filtered Elements to main Set + peek(allGroupMembers::add). + // Collect results + collect(toList()); // Recursively call the method for all the filtered group members for (String innerGroupName : currGroupFilteredMembers) { fillAllGroupMemebersRecursivly(innerGroupName, allGroups, allGroupMembers); @@ -2065,10 +2067,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (!stop) { final Set allMembers = allGroups.get(groupName).getMembers().keySet(); Set membersOfTypeGroup = allMembers.stream(). - // Filter In Only Group members - filter(allGroups::containsKey). - // Collect - collect(toSet()); + // Filter In Only Group members + filter(allGroups::containsKey). + // Collect + collect(toSet()); stop = allGroupMembers.containsAll(membersOfTypeGroup); } return stop; @@ -2082,16 +2084,16 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { String nodeName, final String substitutableAsNodeType) { log.debug("************* Going to create all nodes {}", yamlName); handleNodeTypes(yamlName, resource, topologyTemplateYaml, false, nodeTypesArtifactsToCreate, nodeTypesNewCreatedArtifacts, nodeTypesInfo, - csarInfo, nodeName, substitutableAsNodeType); + csarInfo, nodeName, substitutableAsNodeType); log.debug("************* Finished to create all nodes {}", yamlName); log.debug("************* Going to create all resource instances {}", yamlName); Map existingNodeTypesByResourceNames = new HashMap<>(); resource = createResourceInstances(yamlName, resource, null, uploadComponentInstanceInfoMap, csarInfo.getCreatedNodes(), - existingNodeTypesByResourceNames); + existingNodeTypesByResourceNames); log.debug("************* Finished to create all resource instances {}", yamlName); log.debug("************* Going to create all relations {}", yamlName); resource = createResourceInstancesRelations(csarInfo.getModifier(), yamlName, resource, null, uploadComponentInstanceInfoMap, - existingNodeTypesByResourceNames); + existingNodeTypesByResourceNames); log.debug("************* Finished to create all relations {}", yamlName); log.debug("************* Going to create positions {}", yamlName); compositionBusinessLogic.setPositionsForComponentInstances(resource, csarInfo.getModifier().getUserId()); @@ -2119,7 +2121,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { for (Entry nodeTypeEntry : nodeTypesInfo.entrySet()) { if (nodeTypeEntry.getValue().isNested() && !nodeTypeAlreadyExists(nodeTypeEntry.getKey(), resource.getModel())) { handleNestedVfc(resource, nodeTypesArtifactsToHandle, nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, - nodeTypeEntry.getKey()); + nodeTypeEntry.getKey()); log.trace("************* finished to create node {}", nodeTypeEntry.getKey()); } } @@ -2131,15 +2133,15 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { mappedToscaTemplate = (Map) new Yaml().load(topologyTemplateYaml); } createResourcesFromYamlNodeTypesList(yamlName, resource, mappedToscaTemplate, needLock, nodeTypesArtifactsToHandle, - nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, substitutableAsNodeType); + nodeTypesNewCreatedArtifacts, nodeTypesInfo, csarInfo, substitutableAsNodeType); } catch (ComponentException e) { ResponseFormat responseFormat = - e.getResponseFormat() != null ? e.getResponseFormat() : componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()); + e.getResponseFormat() != null ? e.getResponseFormat() : componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()); componentsUtils.auditResource(responseFormat, csarInfo.getModifier(), resource, AuditingActionEnum.IMPORT_RESOURCE); throw e; } catch (StorageException e) { ResponseFormat responseFormat = componentsUtils - .getResponseFormat(componentsUtils.convertFromStorageResponse(e.getStorageOperationStatus())); + .getResponseFormat(componentsUtils.convertFromStorageResponse(e.getStorageOperationStatus())); componentsUtils.auditResource(responseFormat, csarInfo.getModifier(), resource, AuditingActionEnum.IMPORT_RESOURCE); throw e; } @@ -2170,31 +2172,31 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } // Specific Behavior for license artifacts createOrUpdateSingleNonMetaArtifact(resource, csarInfo, CsarUtils.ARTIFACTS_PATH + Constants.VENDOR_LICENSE_MODEL, - Constants.VENDOR_LICENSE_MODEL, ArtifactTypeEnum.VENDOR_LICENSE.getType(), ArtifactGroupTypeEnum.DEPLOYMENT, - Constants.VENDOR_LICENSE_LABEL, Constants.VENDOR_LICENSE_DISPLAY_NAME, Constants.VENDOR_LICENSE_DESCRIPTION, vendorLicenseModelId, - artifactOperation, null, true, shouldLock, inTransaction); + Constants.VENDOR_LICENSE_MODEL, ArtifactTypeEnum.VENDOR_LICENSE.getType(), ArtifactGroupTypeEnum.DEPLOYMENT, + Constants.VENDOR_LICENSE_LABEL, Constants.VENDOR_LICENSE_DISPLAY_NAME, Constants.VENDOR_LICENSE_DESCRIPTION, vendorLicenseModelId, + artifactOperation, null, true, shouldLock, inTransaction); createOrUpdateSingleNonMetaArtifact(resource, csarInfo, CsarUtils.ARTIFACTS_PATH + Constants.VF_LICENSE_MODEL, Constants.VF_LICENSE_MODEL, - ArtifactTypeEnum.VF_LICENSE.getType(), ArtifactGroupTypeEnum.DEPLOYMENT, Constants.VF_LICENSE_LABEL, - Constants.VF_LICENSE_DISPLAY_NAME, Constants.VF_LICENSE_DESCRIPTION, vfLicenseModelId, artifactOperation, null, true, shouldLock, - inTransaction); + ArtifactTypeEnum.VF_LICENSE.getType(), ArtifactGroupTypeEnum.DEPLOYMENT, Constants.VF_LICENSE_LABEL, + Constants.VF_LICENSE_DISPLAY_NAME, Constants.VF_LICENSE_DESCRIPTION, vfLicenseModelId, artifactOperation, null, true, shouldLock, + inTransaction); Either eitherCreateResult = createOrUpdateNonMetaArtifacts(csarInfo, resource, createdArtifacts, shouldLock, - inTransaction, artifactOperation); + inTransaction, artifactOperation); if (eitherCreateResult.isRight()) { return Either.right(eitherCreateResult.right().value()); } Either, ResponseFormat> artifacsMetaCsarStatus = CsarValidationUtils - .getArtifactsMeta(csarInfo.getCsar(), csarInfo.getCsarUUID(), componentsUtils); + .getArtifactsMeta(csarInfo.getCsar(), csarInfo.getCsarUUID(), componentsUtils); if (artifacsMetaCsarStatus.isLeft()) { String artifactsFileName = artifacsMetaCsarStatus.left().value().getKey(); String artifactsContents = artifacsMetaCsarStatus.left().value().getValue(); Either createArtifactsFromCsar; if (artifactOperation.isCreateOrLink()) { createArtifactsFromCsar = csarArtifactsAndGroupsBusinessLogic - .createResourceArtifactsFromCsar(csarInfo, resource, artifactsContents, artifactsFileName, createdArtifacts); + .createResourceArtifactsFromCsar(csarInfo, resource, artifactsContents, artifactsFileName, createdArtifacts); } else { Either result = csarArtifactsAndGroupsBusinessLogic - .updateResourceArtifactsFromCsar(csarInfo, resource, artifactsContents, artifactsFileName, createdArtifacts, shouldLock, - inTransaction); + .updateResourceArtifactsFromCsar(csarInfo, resource, artifactsContents, artifactsFileName, createdArtifacts, shouldLock, + inTransaction); if ((result.left().value() instanceof Resource) && result.isLeft()) { Resource service1 = (Resource) result.left().value(); createArtifactsFromCsar = Either.left(service1); @@ -2227,7 +2229,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (operation.isUpdate() || operation.isDelete()) { if (isArtifactDeletionRequired(artifactId, artifactFileBytes, isFromCsar)) { Either handleDelete = artifactsBusinessLogic - .handleDelete(resource.getUniqueId(), artifactId, csarInfo.getModifier(), resource, shouldLock, inTransaction); + .handleDelete(resource.getUniqueId(), artifactId, csarInfo.getModifier(), resource, shouldLock, inTransaction); if (handleDelete.isRight()) { result = Either.right(handleDelete.right().value()); } else { @@ -2247,14 +2249,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } if (artifactFileBytes != null) { Map vendorLicenseModelJson = ArtifactUtils - .buildJsonForUpdateArtifact(artifactId, artifactFileName, artifactType, artifactGroupType, artifactLabel, artifactDisplayName, - artifactDescription, artifactFileBytes, null, isFromCsar); + .buildJsonForUpdateArtifact(artifactId, artifactFileName, artifactType, artifactGroupType, artifactLabel, artifactDisplayName, + artifactDescription, artifactFileBytes, null, isFromCsar); Either, ResponseFormat> eitherNonMetaArtifacts = csarArtifactsAndGroupsBusinessLogic - .createOrUpdateCsarArtifactFromJson(resource, csarInfo.getModifier(), vendorLicenseModelJson, operation); + .createOrUpdateCsarArtifactFromJson(resource, csarInfo.getModifier(), vendorLicenseModelJson, operation); addNonMetaCreatedArtifactsToSupportRollback(operation, createdArtifacts, eitherNonMetaArtifacts); if (eitherNonMetaArtifacts.isRight()) { BeEcompErrorManager.getInstance().logInternalFlowError("UploadLicenseArtifact", - "Failed to upload license artifact: " + artifactFileName + "With csar uuid: " + csarInfo.getCsarUUID(), ErrorSeverity.WARNING); + "Failed to upload license artifact: " + artifactFileName + "With csar uuid: " + csarInfo.getCsarUUID(), ErrorSeverity.WARNING); return Either.right(eitherNonMetaArtifacts.right().value()); } ArtifactDefinition artifactDefinition = eitherNonMetaArtifacts.left().value().left().value(); @@ -2294,8 +2296,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Either, String> artifactPathAndNameList = getValidArtifactNames(csarInfo, collectedWarningMessages); if (artifactPathAndNameList.isRight()) { return Either.right( - getComponentsUtils().getResponseFormatByArtifactId(ActionStatus.ARTIFACT_NAME_INVALID, artifactPathAndNameList.right().value(), - VALID_CHARACTERS_ARTIFACT_NAME)); + getComponentsUtils().getResponseFormatByArtifactId(ActionStatus.ARTIFACT_NAME_INVALID, artifactPathAndNameList.right().value(), + VALID_CHARACTERS_ARTIFACT_NAME)); } EnumMap> vfCsarArtifactsToHandle = null; if (artifactOperation.isCreateOrLink()) { @@ -2303,7 +2305,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { vfCsarArtifactsToHandle.put(artifactOperation.getArtifactOperationEnum(), artifactPathAndNameList.left().value()); } else { Either>, ResponseFormat> findVfCsarArtifactsToHandleRes = findVfCsarArtifactsToHandle( - resource, artifactPathAndNameList.left().value(), csarInfo.getModifier()); + resource, artifactPathAndNameList.left().value(), csarInfo.getModifier()); if (findVfCsarArtifactsToHandleRes.isRight()) { resStatus = Either.right(findVfCsarArtifactsToHandleRes.right().value()); } @@ -2332,21 +2334,21 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { EnumMap> vfCsarArtifactsToHandle) { for (Entry> currArtifactOperationPair : vfCsarArtifactsToHandle.entrySet()) { Optional optionalCreateInDBError = - // Stream of artifacts to be created - currArtifactOperationPair.getValue().stream() - // create each artifact - .map(e -> createOrUpdateSingleNonMetaArtifact(resource, csarInfo, e.getPath(), e.getArtifactName(), e.getArtifactType(), - e.getArtifactGroupType(), e.getArtifactLabel(), e.getDisplayName(), CsarUtils.ARTIFACT_CREATED_FROM_CSAR, - e.getArtifactUniqueId(), new ArtifactOperationInfo(false, false, currArtifactOperationPair.getKey()), createdArtifacts, - e.isFromCsar(), shouldLock, inTransaction)) - // filter in only error - .filter(Either::isRight). - // Convert the error from either to - - // ResponseFormat - map(e -> e.right().value()). - // Check if an error occurred - findAny(); + // Stream of artifacts to be created + currArtifactOperationPair.getValue().stream() + // create each artifact + .map(e -> createOrUpdateSingleNonMetaArtifact(resource, csarInfo, e.getPath(), e.getArtifactName(), e.getArtifactType(), + e.getArtifactGroupType(), e.getArtifactLabel(), e.getDisplayName(), CsarUtils.ARTIFACT_CREATED_FROM_CSAR, + e.getArtifactUniqueId(), new ArtifactOperationInfo(false, false, currArtifactOperationPair.getKey()), createdArtifacts, + e.isFromCsar(), shouldLock, inTransaction)) + // filter in only error + .filter(Either::isRight). + // Convert the error from either to + + // ResponseFormat + map(e -> e.right().value()). + // Check if an error occurred + findAny(); // Error found on artifact Creation if (optionalCreateInDBError.isPresent()) { resStatus = Either.right(optionalCreateInDBError.get()); @@ -2359,18 +2361,18 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private Either, String> getValidArtifactNames(CsarInfo csarInfo, Map>> collectedWarningMessages) { List artifactPathAndNameList = - // Stream of file paths contained in csar - csarInfo.getCsar().entrySet().stream() - // Filter in only VF artifact path location - .filter(e -> Pattern.compile(VF_NODE_TYPE_ARTIFACTS_PATH_PATTERN).matcher(e.getKey()).matches()) - // Validate and add warnings - .map(e -> CsarUtils.validateNonMetaArtifact(e.getKey(), e.getValue(), collectedWarningMessages)) - // Filter in Non Warnings - .filter(Either::isLeft) - // Convert from Either to NonMetaArtifactInfo - .map(e -> e.left().value()) - // collect to List - .collect(toList()); + // Stream of file paths contained in csar + csarInfo.getCsar().entrySet().stream() + // Filter in only VF artifact path location + .filter(e -> Pattern.compile(VF_NODE_TYPE_ARTIFACTS_PATH_PATTERN).matcher(e.getKey()).matches()) + // Validate and add warnings + .map(e -> CsarUtils.validateNonMetaArtifact(e.getKey(), e.getValue(), collectedWarningMessages)) + // Filter in Non Warnings + .filter(Either::isLeft) + // Convert from Either to NonMetaArtifactInfo + .map(e -> e.left().value()) + // collect to List + .collect(toList()); Pattern englishNumbersAndUnderScoresOnly = Pattern.compile(CsarUtils.VALID_ENGLISH_ARTIFACT_NAME); for (NonMetaArtifactInfo nonMetaArtifactInfo : artifactPathAndNameList) { if (!englishNumbersAndUnderScoresOnly.matcher(nonMetaArtifactInfo.getDisplayName()).matches()) { @@ -2392,10 +2394,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { existingArtifacts.addAll(resource.getArtifacts().values()); } existingArtifacts = existingArtifacts.stream() - // filter MANDATORY artifacts, LICENSE artifacts and artifacts + // filter MANDATORY artifacts, LICENSE artifacts and artifacts - // was created from HEAT.meta - .filter(this::isNonMetaArtifact).collect(toList()); + // was created from HEAT.meta + .filter(this::isNonMetaArtifact).collect(toList()); List artifactsToIgnore = new ArrayList<>(); // collect IDs of Artifacts of VF which belongs to any group if (resource.getGroups() != null) { @@ -2406,8 +2408,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { }); } existingArtifacts = existingArtifacts.stream() - // filter artifacts which belongs to any group - .filter(a -> !artifactsToIgnore.contains(a.getUniqueId())).collect(toList()); + // filter artifacts which belongs to any group + .filter(a -> !artifactsToIgnore.contains(a.getUniqueId())).collect(toList()); return organizeVfCsarArtifactsByArtifactOperation(artifactPathAndNameList, existingArtifacts, resource, user); } @@ -2417,7 +2419,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private boolean isValidArtifactType(ArtifactDefinition artifact) { return artifact.getArtifactType() != null && ArtifactTypeEnum.parse(artifact.getArtifactType()) != ArtifactTypeEnum.VENDOR_LICENSE - && ArtifactTypeEnum.parse(artifact.getArtifactType()) != ArtifactTypeEnum.VF_LICENSE; + && ArtifactTypeEnum.parse(artifact.getArtifactType()) != ArtifactTypeEnum.VF_LICENSE; } private Resource createResourceInstancesRelations(User user, String yamlName, Resource resource, Resource oldResource, @@ -2425,17 +2427,17 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Map existingNodeTypesByResourceNames) { log.debug("#createResourceInstancesRelations - Going to create relations "); loggerSupportability.log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, - "Start to create relations"); + "Start to create relations"); List componentInstancesList = resource.getComponentInstances(); if (isEmpty(uploadResInstancesMap) || CollectionUtils.isEmpty(componentInstancesList) && - resource.getResourceType() != ResourceTypeEnum.PNF) { // PNF can have no resource instances { + resource.getResourceType() != ResourceTypeEnum.PNF) { // PNF can have no resource instances { log.debug("#createResourceInstancesRelations - No instances found in the resource {} is empty, yaml template file name {}, ", - resource.getUniqueId(), yamlName); + resource.getUniqueId(), yamlName); loggerSupportability.log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "No instances found in the resource: {}, is empty, yaml template file name: {}", resource.getName(), yamlName); + "No instances found in the resource: {}, is empty, yaml template file name: {}", resource.getName(), yamlName); BeEcompErrorManager.getInstance() - .logInternalDataError("createResourceInstancesRelations", "No instances found in a resource or nn yaml template. ", - ErrorSeverity.ERROR); + .logInternalDataError("createResourceInstancesRelations", "No instances found in a resource or nn yaml template. ", + ErrorSeverity.ERROR); throw new ByActionStatusComponentException(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlName); } Map> instProperties = new HashMap<>(); @@ -2448,12 +2450,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Map> instInputs = new HashMap<>(); Resource finalResource = resource; uploadResInstancesMap.values().forEach( - i -> processComponentInstance(yamlName, finalResource, componentInstancesList, - componentsUtils.getAllDataTypes(applicationDataTypeCache, resource.getModel()), instProperties, instCapabilities, - instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes, existingNodeTypesByResourceNames, instInputs, i)); + i -> processComponentInstance(yamlName, finalResource, componentInstancesList, + componentsUtils.getAllDataTypes(applicationDataTypeCache, resource.getModel()), instProperties, instCapabilities, + instRequirements, instDeploymentArtifacts, instArtifacts, instAttributes, existingNodeTypesByResourceNames, instInputs, i)); resource.getComponentInstances().stream().filter(i -> !i.isCreatedFromCsar()).forEach( - i -> processUiComponentInstance(oldResource, i, instCapabilities, instRequirements, instDeploymentArtifacts, instArtifacts, - instProperties, instInputs, instAttributes)); + i -> processUiComponentInstance(oldResource, i, instCapabilities, instRequirements, instDeploymentArtifacts, instArtifacts, + instProperties, instInputs, instAttributes)); associateComponentInstancePropertiesToComponent(yamlName, resource, instProperties); associateComponentInstanceInputsToComponent(yamlName, resource, instInputs); associateDeploymentArtifactsToInstances(user, yamlName, resource, instDeploymentArtifacts); @@ -2465,14 +2467,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { handleSubstitutionMappings(resource, uploadResInstancesMap); log.debug("************* in create relations, getResource start"); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.COMPLETE, "create relations"); + .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.COMPLETE, "create relations"); Either eitherGetResource = toscaOperationFacade.getToscaFullElement(resource.getUniqueId()); log.debug("************* in create relations, getResource end"); if (eitherGetResource.isRight()) { loggerSupportability.log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR while create relations"); + "ERROR while create relations"); throw new ByResponseFormatComponentException( - componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(eitherGetResource.right().value()), resource)); + componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(eitherGetResource.right().value()), resource)); } return eitherGetResource.left().value(); } @@ -2500,18 +2502,18 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { instArtifacts.put(instance.getUniqueId(), foundInstance.get().getArtifacts()); } if (MapUtils.isNotEmpty(oldResource.getComponentInstancesProperties()) && CollectionUtils - .isNotEmpty(oldResource.getComponentInstancesProperties().get(foundInstance.get().getUniqueId()))) { + .isNotEmpty(oldResource.getComponentInstancesProperties().get(foundInstance.get().getUniqueId()))) { instProperties.put(instance.getUniqueId(), oldResource.getComponentInstancesProperties().get(foundInstance.get().getUniqueId())); } if (MapUtils.isNotEmpty(oldResource.getComponentInstancesInputs()) && CollectionUtils - .isNotEmpty(oldResource.getComponentInstancesInputs().get(foundInstance.get().getUniqueId()))) { + .isNotEmpty(oldResource.getComponentInstancesInputs().get(foundInstance.get().getUniqueId()))) { instInputs.put(instance.getUniqueId(), oldResource.getComponentInstancesInputs().get(foundInstance.get().getUniqueId())); } if (MapUtils.isNotEmpty(oldResource.getComponentInstancesAttributes()) && CollectionUtils - .isNotEmpty(oldResource.getComponentInstancesAttributes().get(foundInstance.get().getUniqueId()))) { + .isNotEmpty(oldResource.getComponentInstancesAttributes().get(foundInstance.get().getUniqueId()))) { instAttributes.put(instance.getUniqueId(), - oldResource.getComponentInstancesAttributes().get(foundInstance.get().getUniqueId()).stream().map(AttributeDefinition::new) - .collect(toList())); + oldResource.getComponentInstancesAttributes().get(foundInstance.get().getUniqueId()).stream().map(AttributeDefinition::new) + .collect(toList())); } } } @@ -2525,7 +2527,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private void associateResourceInstances(String yamlName, Resource resource, List relations) { Either, StorageOperationStatus> relationsEither = toscaOperationFacade - .associateResourceInstances(resource, resource.getUniqueId(), relations); + .associateResourceInstances(resource, resource.getUniqueId(), relations); if (relationsEither.isRight() && relationsEither.right().value() != StorageOperationStatus.NOT_FOUND) { StorageOperationStatus status = relationsEither.right().value(); log.debug("failed to associate instances of resource {} status is {}", resource.getUniqueId(), status); @@ -2578,7 +2580,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Map> instInputs) { if (MapUtils.isNotEmpty(instInputs)) { Either>, StorageOperationStatus> addInputToInst = toscaOperationFacade - .associateComponentInstanceInputsToComponent(instInputs, resource.getUniqueId()); + .associateComponentInstanceInputsToComponent(instInputs, resource.getUniqueId()); if (addInputToInst.isRight()) { StorageOperationStatus addInputToInstError = addInputToInst.right().value(); log.debug("failed to associate inputs value of resource {} status is {}", resource.getUniqueId(), addInputToInstError); @@ -2600,11 +2602,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private void associateComponentInstancePropertiesToComponent(String yamlName, Resource resource, Map> instProperties) { Either>, StorageOperationStatus> addPropToInst = toscaOperationFacade - .associateComponentInstancePropertiesToComponent(instProperties, resource.getUniqueId()); + .associateComponentInstancePropertiesToComponent(instProperties, resource.getUniqueId()); if (addPropToInst.isRight()) { loggerSupportability.log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR while associate compnent insatnce properties of resource: {} status is: {}", resource.getName(), - addPropToInst.right().value()); + "ERROR while associate compnent insatnce properties of resource: {} status is: {}", resource.getName(), + addPropToInst.right().value()); StorageOperationStatus storageOperationStatus = addPropToInst.right().value(); log.debug("failed to associate properties of resource {} status is {}", resource.getUniqueId(), storageOperationStatus); throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(storageOperationStatus), yamlName); @@ -2630,7 +2632,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } if (getResourceRes != null && getResourceRes.isRight()) { ResponseFormat responseFormat = componentsUtils - .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(getResourceRes.right().value()), resource); + .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(getResourceRes.right().value()), resource); throw new ByResponseFormatComponentException(responseFormat); } @@ -2650,8 +2652,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (currentCompInstance == null) { log.debug(COMPONENT_INSTANCE_WITH_NAME_IN_RESOURCE, uploadComponentInstanceInfo.getName(), resource.getUniqueId()); BeEcompErrorManager.getInstance() - .logInternalDataError(COMPONENT_INSTANCE_WITH_NAME + uploadComponentInstanceInfo.getName() + IN_RESOURCE, resource.getUniqueId(), - ErrorSeverity.ERROR); + .logInternalDataError(COMPONENT_INSTANCE_WITH_NAME + uploadComponentInstanceInfo.getName() + IN_RESOURCE, resource.getUniqueId(), + ErrorSeverity.ERROR); throw new ByActionStatusComponentException(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlName); } ResponseFormat addRelationToRiRes = addRelationToRI(yamlName, resource, entry.getValue(), relations); @@ -2680,12 +2682,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Map> instInputs, UploadComponentInstanceInfo uploadComponentInstanceInfo) { Optional currentCompInstanceOpt = componentInstancesList.stream() - .filter(i -> i.getName().equals(uploadComponentInstanceInfo.getName())).findFirst(); + .filter(i -> i.getName().equals(uploadComponentInstanceInfo.getName())).findFirst(); if (currentCompInstanceOpt.isEmpty()) { log.debug(COMPONENT_INSTANCE_WITH_NAME_IN_RESOURCE, uploadComponentInstanceInfo.getName(), resource.getUniqueId()); BeEcompErrorManager.getInstance() - .logInternalDataError(COMPONENT_INSTANCE_WITH_NAME + uploadComponentInstanceInfo.getName() + IN_RESOURCE, resource.getUniqueId(), - ErrorSeverity.ERROR); + .logInternalDataError(COMPONENT_INSTANCE_WITH_NAME + uploadComponentInstanceInfo.getName() + IN_RESOURCE, resource.getUniqueId(), + ErrorSeverity.ERROR); throw new ByActionStatusComponentException(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlName); } ComponentInstance currentCompInstance = currentCompInstanceOpt.get(); @@ -2708,7 +2710,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } if (originResource.getResourceType() != ResourceTypeEnum.CVFC) { ResponseFormat addPropertiesValueToRiRes = addPropertyValuesToRi(uploadComponentInstanceInfo, resource, originResource, - currentCompInstance, instProperties, allDataTypes); + currentCompInstance, instProperties, allDataTypes); if (addPropertiesValueToRiRes.getStatus() != 200) { throw new ByResponseFormatComponentException(addPropertiesValueToRiRes); } @@ -2721,12 +2723,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Resource originResource; if (!originCompMap.containsKey(currentCompInstance.getComponentUid())) { Either getOriginResourceRes = toscaOperationFacade - .getToscaFullElement(currentCompInstance.getComponentUid()); + .getToscaFullElement(currentCompInstance.getComponentUid()); if (getOriginResourceRes.isRight()) { log.debug("failed to fetch resource with uniqueId {} and tosca component name {} status is {}", currentCompInstance.getComponentUid(), - currentCompInstance.getToscaComponentName(), getOriginResourceRes); + currentCompInstance.getToscaComponentName(), getOriginResourceRes); throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(getOriginResourceRes.right().value()), - currentCompInstance.getComponentUid()); + currentCompInstance.getComponentUid()); } originResource = getOriginResourceRes.left().value(); originCompMap.put(originResource.getUniqueId(), originResource); @@ -2757,7 +2759,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Map> newPropertiesMap, Map allDataTypes) { originCapabilities.values().stream().flatMap(Collection::stream).filter(c -> newPropertiesMap.containsKey(c.getName())) - .forEach(c -> updatePropertyValues(c.getProperties(), newPropertiesMap.get(c.getName()), allDataTypes)); + .forEach(c -> updatePropertyValues(c.getProperties(), newPropertiesMap.get(c.getName()), allDataTypes)); } private void addCapabilitiesProperties(Map> newPropertiesMap, List capabilities) { @@ -2805,17 +2807,17 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { StorageOperationStatus status = toscaOperationFacade.deleteAllCalculatedCapabilitiesRequirements(resource.getUniqueId()); if (status != StorageOperationStatus.OK && status != StorageOperationStatus.NOT_FOUND) { log.debug("Failed to delete all calculated capabilities and requirements of resource {} upon update. Status is {}", - resource.getUniqueId(), status); + resource.getUniqueId(), status); updateRes = Either.right(status); } if (updateRes == null) { fillUpdatedInstCapabilitiesRequirements(resource.getComponentInstances(), uploadResInstancesMap, updatedInstCapabilities, - updatedInstRequirements); + updatedInstRequirements); status = toscaOperationFacade.associateOrAddCalculatedCapReq(updatedInstCapabilities, updatedInstRequirements, resource); if (status != StorageOperationStatus.OK && status != StorageOperationStatus.NOT_FOUND) { log.debug( - "Failed to associate capabilities and requirementss of resource {}, updated according to a substitution mapping. Status is {}", - resource.getUniqueId(), status); + "Failed to associate capabilities and requirementss of resource {}, updated according to a substitution mapping. Status is {}", + resource.getUniqueId(), status); updateRes = Either.right(status); } } @@ -2837,11 +2839,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { }); final StorageOperationStatus status = toscaOperationFacade.updateCalculatedCapabilitiesRequirements(updatedInstCapabilities, - updatedInstRequirements, resource); + updatedInstRequirements, resource); if (status != StorageOperationStatus.OK) { log.debug( - "Failed to update capabilities and requirements of resource {}. Status is {}", - resource.getUniqueId(), status); + "Failed to update capabilities and requirements of resource {}. Status is {}", + resource.getUniqueId(), status); updateRes = Either.right(status); } @@ -2868,13 +2870,13 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (isNotEmpty(requirementsNamesToUpdate)) { for (Map.Entry> requirements : instance.getRequirements().entrySet()) { updatedRequirements.put(requirements.getKey(), requirements.getValue().stream().filter( - r -> requirementsNamesToUpdate.containsKey(r.getName()) && !updatedReqNames.contains(requirementsNamesToUpdate.get(r.getName()))) - .map(r -> { - r.setParentName(r.getName()); - r.setName(requirementsNamesToUpdate.get(r.getName())); - updatedReqNames.add(r.getName()); - return r; - }).collect(toList())); + r -> requirementsNamesToUpdate.containsKey(r.getName()) && !updatedReqNames.contains(requirementsNamesToUpdate.get(r.getName()))) + .map(r -> { + r.setParentName(r.getName()); + r.setName(requirementsNamesToUpdate.get(r.getName())); + updatedReqNames.add(r.getName()); + return r; + }).collect(toList())); } } if (isNotEmpty(updatedRequirements)) { @@ -2883,22 +2885,22 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } private void setExternalRequirements( - final Map>> updatedInstRequirements, - final ComponentInstance instance, final Map requirementsNamesToUpdate) { + final Map>> updatedInstRequirements, + final ComponentInstance instance, final Map requirementsNamesToUpdate) { final Map> updatedRequirements = new HashMap<>(); final Set updatedReqNames = new HashSet<>(); if (isNotEmpty(requirementsNamesToUpdate)) { for (Map.Entry> requirements : instance.getRequirements().entrySet()) { updatedRequirements.put(requirements.getKey(), - requirements.getValue().stream() - .filter(r -> requirementsNamesToUpdate.containsKey(r.getName()) - && !updatedReqNames.contains(requirementsNamesToUpdate.get(r.getName()))) - .map(r -> { - r.setExternal(true); - r.setExternalName(requirementsNamesToUpdate.get(r.getName())); - updatedReqNames.add(r.getName()); - return r; - }).collect(toList())); + requirements.getValue().stream() + .filter(r -> requirementsNamesToUpdate.containsKey(r.getName()) + && !updatedReqNames.contains(requirementsNamesToUpdate.get(r.getName()))) + .map(r -> { + r.setExternal(true); + r.setExternalName(requirementsNamesToUpdate.get(r.getName())); + updatedReqNames.add(r.getName()); + return r; + }).collect(toList())); } } if (isNotEmpty(updatedRequirements)) { @@ -2907,22 +2909,22 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } private void setExternalCapabilities( - final Map>> updatedInstCapabilties, - final ComponentInstance instance, Map capabilitiesNamesToUpdate) { + final Map>> updatedInstCapabilties, + final ComponentInstance instance, Map capabilitiesNamesToUpdate) { final Map> updatedCapabilities = new HashMap<>(); final Set updatedCapNames = new HashSet<>(); if (isNotEmpty(capabilitiesNamesToUpdate)) { for (Map.Entry> requirements : instance.getCapabilities().entrySet()) { updatedCapabilities.put(requirements.getKey(), - requirements.getValue().stream() - .filter(c -> capabilitiesNamesToUpdate.containsKey(c.getName()) - && !updatedCapNames.contains(capabilitiesNamesToUpdate.get(c.getName()))) - .map(c -> { - c.setExternal(true); - c.setExternalName(capabilitiesNamesToUpdate.get(c.getName())); - updatedCapNames.add(c.getName()); - return c; - }).collect(toList())); + requirements.getValue().stream() + .filter(c -> capabilitiesNamesToUpdate.containsKey(c.getName()) + && !updatedCapNames.contains(capabilitiesNamesToUpdate.get(c.getName()))) + .map(c -> { + c.setExternal(true); + c.setExternalName(capabilitiesNamesToUpdate.get(c.getName())); + updatedCapNames.add(c.getName()); + return c; + }).collect(toList())); } } if (isNotEmpty(updatedCapabilities)) { @@ -2937,13 +2939,13 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (isNotEmpty(capabilitiesNamesToUpdate)) { for (Map.Entry> requirements : instance.getCapabilities().entrySet()) { updatedCapabilities.put(requirements.getKey(), requirements.getValue().stream().filter( - c -> capabilitiesNamesToUpdate.containsKey(c.getName()) && !updatedCapNames.contains(capabilitiesNamesToUpdate.get(c.getName()))) - .map(c -> { - c.setParentName(c.getName()); - c.setName(capabilitiesNamesToUpdate.get(c.getName())); - updatedCapNames.add(c.getName()); - return c; - }).collect(toList())); + c -> capabilitiesNamesToUpdate.containsKey(c.getName()) && !updatedCapNames.contains(capabilitiesNamesToUpdate.get(c.getName()))) + .map(c -> { + c.setParentName(c.getName()); + c.setName(capabilitiesNamesToUpdate.get(c.getName())); + updatedCapNames.add(c.getName()); + return c; + }).collect(toList())); } } if (isNotEmpty(updatedCapabilities)) { @@ -2964,8 +2966,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (currentCompInstance == null) { log.debug(COMPONENT_INSTANCE_WITH_NAME_IN_RESOURCE, nodesInfoValue.getName(), resource.getUniqueId()); BeEcompErrorManager.getInstance() - .logInternalDataError(COMPONENT_INSTANCE_WITH_NAME + nodesInfoValue.getName() + IN_RESOURCE, resource.getUniqueId(), - ErrorSeverity.ERROR); + .logInternalDataError(COMPONENT_INSTANCE_WITH_NAME + nodesInfoValue.getName() + IN_RESOURCE, resource.getUniqueId(), + ErrorSeverity.ERROR); return componentsUtils.getResponseFormat(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlName); } String resourceInstanceId = currentCompInstance.getUniqueId(); @@ -2976,19 +2978,19 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { for (UploadReqInfo uploadRegInfo : uploadRegInfoList) { log.debug("Going to create relation {}", uploadRegInfo.getName()); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, - "Started to create relations on instance: {}", uploadRegInfo.getName()); + .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.STARTED, + "Started to create relations on instance: {}", uploadRegInfo.getName()); String regName = uploadRegInfo.getName(); RequirementCapabilityRelDef regCapRelDef = new RequirementCapabilityRelDef(); regCapRelDef.setFromNode(resourceInstanceId); log.debug("try to find available requirement {} ", regName); Either eitherReqStatus = findAviableRequiremen(regName, yamlName, nodesInfoValue, - currentCompInstance, uploadRegInfo.getCapabilityName()); + currentCompInstance, uploadRegInfo.getCapabilityName()); if (eitherReqStatus.isRight()) { log.debug("failed to find available requirement {} status is {}", regName, eitherReqStatus.right().value()); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR while search available requirement {} status is: {}", regName, eitherReqStatus.right().value()); + .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, + "ERROR while search available requirement {} status is: {}", regName, eitherReqStatus.right().value()); return eitherReqStatus.right().value(); } RequirementDefinition validReq = eitherReqStatus.left().value(); @@ -3013,11 +3015,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (currentCapCompInstance == null) { log.debug("The component instance with name {} not found on resource {} ", uploadRegInfo.getNode(), resource.getUniqueId()); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR component instance with name: {} not found on resource: {}", uploadRegInfo.getNode(), resource.getUniqueId()); + .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, + "ERROR component instance with name: {} not found on resource: {}", uploadRegInfo.getNode(), resource.getUniqueId()); BeEcompErrorManager.getInstance() - .logInternalDataError(COMPONENT_INSTANCE_WITH_NAME + uploadRegInfo.getNode() + IN_RESOURCE, resource.getUniqueId(), - ErrorSeverity.ERROR); + .logInternalDataError(COMPONENT_INSTANCE_WITH_NAME + uploadRegInfo.getNode() + IN_RESOURCE, resource.getUniqueId(), + ErrorSeverity.ERROR); return componentsUtils.getResponseFormat(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlName); } regCapRelDef.setToNode(currentCapCompInstance.getUniqueId()); @@ -3025,14 +3027,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { CapabilityDefinition aviableCapForRel = findAvailableCapabilityByTypeOrName(validReq, currentCapCompInstance, uploadRegInfo); if (aviableCapForRel == null) { log.debug("aviable capability was not found. req name is {} component instance is {}", validReq.getName(), - currentCapCompInstance.getUniqueId()); - loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR available capability was not found. req name is: {} component instance is: {}", validReq.getName(), currentCapCompInstance.getUniqueId()); + loggerSupportability + .log(LoggerSupportabilityActions.CREATE_RELATIONS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, + "ERROR available capability was not found. req name is: {} component instance is: {}", validReq.getName(), + currentCapCompInstance.getUniqueId()); BeEcompErrorManager.getInstance().logInternalDataError( - "aviable capability was not found. req name is " + validReq.getName() + " component instance is " + currentCapCompInstance - .getUniqueId(), resource.getUniqueId(), ErrorSeverity.ERROR); + "aviable capability was not found. req name is " + validReq.getName() + " component instance is " + currentCapCompInstance + .getUniqueId(), resource.getUniqueId(), ErrorSeverity.ERROR); return componentsUtils.getResponseFormat(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE, yamlName); } reqAndRelationshipPair.setCapability(aviableCapForRel.getName()); @@ -3061,7 +3063,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (CollectionUtils.isEmpty(originResource.getInputs())) { log.debug("failed to find properties "); loggerSupportability.log(LoggerSupportabilityActions.CREATE_INPUTS, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR while try to find properties"); + "ERROR while try to find properties"); throw new ByActionStatusComponentException(ActionStatus.PROPERTY_NOT_FOUND); } originResource.getInputs().forEach(p -> addInput(currPropertiesMap, p)); @@ -3080,7 +3082,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { String propName = propertyInfo.getName(); if (!currPropertiesMap.containsKey(propName)) { loggerSupportability.log(LoggerSupportabilityActions.PROPERTY, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR failed to find property: {}", propName); + "ERROR failed to find property: {}", propName); log.debug("failed to find property {} ", propName); throw new ByActionStatusComponentException(ActionStatus.PROPERTY_NOT_FOUND, propName); } @@ -3107,16 +3109,16 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { List inputs = resource.getInputs(); if (CollectionUtils.isEmpty(inputs)) { loggerSupportability.log(LoggerSupportabilityActions.PROPERTY, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR Failed to add property: " + propName + " to resource instance: {}. Inputs list is empty ", - currentCompInstance.getUniqueId()); + "ERROR Failed to add property: " + propName + " to resource instance: {}. Inputs list is empty ", + currentCompInstance.getUniqueId()); log.debug("Failed to add property {} to resource instance {}. Inputs list is empty ", property, - currentCompInstance.getUniqueId()); + currentCompInstance.getUniqueId()); throw new ByActionStatusComponentException(ActionStatus.INVALID_CONTENT); } Optional optional = inputs.stream().filter(p -> p.getName().equals(getInput.getInputName())).findAny(); if (optional.isEmpty()) { loggerSupportability.log(LoggerSupportabilityActions.PROPERTY, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR Failed to find input: " + getInput.getInputName()); + "ERROR Failed to find input: " + getInput.getInputName()); log.debug("Failed to find input {} ", getInput.getInputName()); // @@TODO error message throw new ByActionStatusComponentException(ActionStatus.INVALID_CONTENT); @@ -3165,7 +3167,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { List listFromMap = originResource.getProperties(); if ((propMap != null && !propMap.isEmpty()) && (listFromMap == null || listFromMap.isEmpty())) { loggerSupportability.log(LoggerSupportabilityActions.PROPERTY, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR Failed to find properties"); + "ERROR Failed to find properties"); log.debug("failed to find properties"); return componentsUtils.getResponseFormat(ActionStatus.PROPERTY_NOT_FOUND); } @@ -3186,7 +3188,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (!currPropertiesMap.containsKey(propName)) { log.debug("failed to find property {} ", propName); loggerSupportability.log(LoggerSupportabilityActions.PROPERTY, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR Failed to find property: {}", propName); + "ERROR Failed to find property: {}", propName); return componentsUtils.getResponseFormat(ActionStatus.PROPERTY_NOT_FOUND, propName); } PropertyDefinition curPropertyDef = currPropertiesMap.get(propName); @@ -3213,10 +3215,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (inputs == null || inputs.isEmpty()) { log.debug("Failed to add property {} to instance. Inputs list is empty ", property); loggerSupportability - .log(LoggerSupportabilityActions.PROPERTY, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "Failed to add property: {} to instance. Inputs list is empty", propName); + .log(LoggerSupportabilityActions.PROPERTY, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, + "Failed to add property: {} to instance. Inputs list is empty", propName); rollbackWithException(ActionStatus.INPUTS_NOT_FOUND, - property.getGetInputValues().stream().map(GetInputValueDataDefinition::getInputName).collect(toList()).toString()); + property.getGetInputValues().stream().map(GetInputValueDataDefinition::getInputName).collect(toList()).toString()); } Either inputEither = findInputByName(inputs, getInput); if (inputEither.isRight()) { @@ -3259,7 +3261,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private CapabilityDefinition findAvailableCapabilityByTypeOrName(RequirementDefinition validReq, ComponentInstance currentCapCompInstance, UploadReqInfo uploadReqInfo) { if (null == uploadReqInfo.getCapabilityName() || validReq.getCapability() - .equals(uploadReqInfo.getCapabilityName())) {// get + .equals(uploadReqInfo.getCapabilityName())) {// get // by @@ -3279,7 +3281,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { return null; } Optional capByName = capMap.get(validReq.getCapability()).stream() - .filter(p -> p.getName().equals(uploadReqInfo.getCapabilityName())).findAny(); + .filter(p -> p.getName().equals(uploadReqInfo.getCapabilityName())).findAny(); if (capByName.isEmpty()) { return null; } @@ -3380,8 +3382,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } if (validRegDef == null) { ResponseFormat responseFormat = componentsUtils - .getResponseFormat(ActionStatus.INVALID_NODE_TEMPLATE, yamlName, uploadComponentInstanceInfo.getName(), - uploadComponentInstanceInfo.getType()); + .getResponseFormat(ActionStatus.INVALID_NODE_TEMPLATE, yamlName, uploadComponentInstanceInfo.getName(), + uploadComponentInstanceInfo.getType()); return Either.right(responseFormat); } return Either.left(validRegDef); @@ -3401,12 +3403,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } Map resourcesInstancesMap = new HashMap<>(); uploadResInstancesMap.values().forEach( - i -> createAndAddResourceInstance(i, yamlName, resource, nodeNamespaceMap, existingNodeTypesByResourceNames, resourcesInstancesMap)); + i -> createAndAddResourceInstance(i, yamlName, resource, nodeNamespaceMap, existingNodeTypesByResourceNames, resourcesInstancesMap)); if (oldResource != null && oldResource.getResourceType() != ResourceTypeEnum.CVFC && oldResource.getComponentInstances() != null) { Map existingNodeTypesByUids = existingNodeTypesByResourceNames.values().stream() - .collect(toMap(Resource::getUniqueId, r -> r)); + .collect(toMap(Resource::getUniqueId, r -> r)); oldResource.getComponentInstances().stream().filter(i -> !i.isCreatedFromCsar()) - .forEach(uiInst -> resourcesInstancesMap.put(uiInst, getOriginResource(existingNodeTypesByUids, uiInst))); + .forEach(uiInst -> resourcesInstancesMap.put(uiInst, getOriginResource(existingNodeTypesByUids, uiInst))); } if (isNotEmpty(resourcesInstancesMap)) { try { @@ -3415,14 +3417,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (exp.getStorageOperationStatus() != null && exp.getStorageOperationStatus() != StorageOperationStatus.OK) { log.debug("Failed to add component instances to container component {}", resource.getName()); ResponseFormat responseFormat = componentsUtils - .getResponseFormat(componentsUtils.convertFromStorageResponse(exp.getStorageOperationStatus())); + .getResponseFormat(componentsUtils.convertFromStorageResponse(exp.getStorageOperationStatus())); eitherResource = Either.right(responseFormat); throw new ByResponseFormatComponentException(eitherResource.right().value()); } } } if (CollectionUtils.isEmpty(resource.getComponentInstances()) && - resource.getResourceType() != ResourceTypeEnum.PNF) { // PNF can have no resource instances + resource.getResourceType() != ResourceTypeEnum.PNF) { // PNF can have no resource instances log.debug("Error when create resource instance from csar. ComponentInstances list empty"); BeEcompErrorManager.getInstance().logBeDaoSystemError("Error when create resource instance from csar. ComponentInstances list empty"); throw new ByResponseFormatComponentException(componentsUtils.getResponseFormat(ActionStatus.NOT_TOPOLOGY_TOSCA_TEMPLATE)); @@ -3452,23 +3454,23 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { UploadNodeFilterInfo uploadNodeFilterInfo = uploadComponentInstanceInfo.getUploadNodeFilterInfo(); if (uploadNodeFilterInfo != null) { componentInstance - .setNodeFilter(new CINodeFilterUtils().getNodeFilterDataDefinition(uploadNodeFilterInfo, componentInstance.getUniqueId())); + .setNodeFilter(new CINodeFilterUtils().getNodeFilterDataDefinition(uploadNodeFilterInfo, componentInstance.getUniqueId())); } ComponentTypeEnum containerComponentType = resource.getComponentType(); NodeTypeEnum containerNodeType = containerComponentType.getNodeType(); if (containerNodeType == NodeTypeEnum.Resource && isNotEmpty(uploadComponentInstanceInfo.getCapabilities()) && isNotEmpty( - refResource.getCapabilities())) { + refResource.getCapabilities())) { setCapabilityNamesTypes(refResource.getCapabilities(), uploadComponentInstanceInfo.getCapabilities()); Map> validComponentInstanceCapabilities = getValidComponentInstanceCapabilities( - refResource.getUniqueId(), refResource.getCapabilities(), uploadComponentInstanceInfo.getCapabilities()); + refResource.getUniqueId(), refResource.getCapabilities(), uploadComponentInstanceInfo.getCapabilities()); componentInstance.setCapabilities(validComponentInstanceCapabilities); } if (isNotEmpty(uploadComponentInstanceInfo.getArtifacts())) { Map> artifacts = uploadComponentInstanceInfo.getArtifacts(); Map toscaArtifacts = new HashMap<>(); Map> arts = artifacts.entrySet().stream() - .filter(e -> e.getKey().contains(TypeUtils.ToscaTagNamesEnum.ARTIFACTS.getElementName())) - .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); + .filter(e -> e.getKey().contains(TypeUtils.ToscaTagNamesEnum.ARTIFACTS.getElementName())) + .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); Map artifact = arts.get(TypeUtils.ToscaTagNamesEnum.ARTIFACTS.getElementName()); for (Map.Entry entry : artifact.entrySet()) { ToscaArtifactDataDefinition to = new ToscaArtifactDataDefinition(); @@ -3488,9 +3490,9 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } if (!existingnodeTypeMap.containsKey(uploadComponentInstanceInfo.getType())) { log.debug("createResourceInstances - not found lates version for resource instance with name {} and type {}", - uploadComponentInstanceInfo.getName(), uploadComponentInstanceInfo.getType()); + uploadComponentInstanceInfo.getName(), uploadComponentInstanceInfo.getType()); throw new ByActionStatusComponentException(ActionStatus.INVALID_NODE_TEMPLATE, yamlName, uploadComponentInstanceInfo.getName(), - uploadComponentInstanceInfo.getType()); + uploadComponentInstanceInfo.getType()); } Resource origResource = existingnodeTypeMap.get(uploadComponentInstanceInfo.getType()); componentInstance.setName(uploadComponentInstanceInfo.getName()); @@ -3521,18 +3523,18 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private Resource validateResourceInstanceBeforeCreate(String yamlName, UploadComponentInstanceInfo uploadComponentInstanceInfo, Map nodeNamespaceMap, Resource resource) { log.debug("validateResourceInstanceBeforeCreate - going to validate resource instance with name {} and type {} before create", - uploadComponentInstanceInfo.getName(), uploadComponentInstanceInfo.getType()); + uploadComponentInstanceInfo.getName(), uploadComponentInstanceInfo.getType()); Resource refResource; if (nodeNamespaceMap.containsKey(uploadComponentInstanceInfo.getType())) { refResource = nodeNamespaceMap.get(uploadComponentInstanceInfo.getType()); } else { Either findResourceEither = StringUtils.isEmpty(resource.getModel()) ? - toscaOperationFacade.getByToscaResourceNameMatchingVendorRelease(uploadComponentInstanceInfo.getType(), - ((ResourceMetadataDataDefinition) resource.getComponentMetadataDefinition().getMetadataDataDefinition()).getVendorRelease()): - toscaOperationFacade.getLatestByToscaResourceNameAndModel(uploadComponentInstanceInfo.getType(), resource.getModel()); + toscaOperationFacade.getByToscaResourceNameMatchingVendorRelease(uploadComponentInstanceInfo.getType(), + ((ResourceMetadataDataDefinition) resource.getComponentMetadataDefinition().getMetadataDataDefinition()).getVendorRelease()): + toscaOperationFacade.getLatestByToscaResourceNameAndModel(uploadComponentInstanceInfo.getType(), resource.getModel()); if (findResourceEither.isRight()) { log.debug("validateResourceInstanceBeforeCreate - not found latest version for resource instance with name {} and type {}", - uploadComponentInstanceInfo.getName(), uploadComponentInstanceInfo.getType()); + uploadComponentInstanceInfo.getName(), uploadComponentInstanceInfo.getType()); throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(findResourceEither.right().value())); } refResource = findResourceEither.left().value(); @@ -3541,15 +3543,15 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { String componentState = refResource.getComponentMetadataDefinition().getMetadataDataDefinition().getState(); if (componentState.equals(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT.name())) { log.debug( - "validateResourceInstanceBeforeCreate - component instance of component {} can not be created because the component is in an illegal state {}.", - refResource.getName(), componentState); + "validateResourceInstanceBeforeCreate - component instance of component {} can not be created because the component is in an illegal state {}.", + refResource.getName(), componentState); throw new ByActionStatusComponentException(ActionStatus.ILLEGAL_COMPONENT_STATE, refResource.getComponentType().getValue(), - refResource.getName(), componentState); + refResource.getName(), componentState); } if (!ModelConverter.isAtomicComponent(refResource) && refResource.getResourceType() != ResourceTypeEnum.CVFC) { log.debug("validateResourceInstanceBeforeCreate - ref resource type is {} ", refResource.getResourceType()); throw new ByActionStatusComponentException(ActionStatus.INVALID_NODE_TEMPLATE, yamlName, uploadComponentInstanceInfo.getName(), - uploadComponentInstanceInfo.getType()); + uploadComponentInstanceInfo.getType()); } return refResource; } @@ -3559,7 +3561,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { boolean failed = false; try { if (resource.getLifecycleState() != LifecycleStateEnum.CERTIFIED && forceCertificationAllowed && lifecycleBusinessLogic - .isFirstCertification(resource.getVersion())) { + .isFirstCertification(resource.getVersion())) { nodeForceCertification(resource, user, lifecycleChangeInfo, inTransaction, needLock); } if (resource.getLifecycleState() == LifecycleStateEnum.CERTIFIED) { @@ -3586,7 +3588,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private Resource nodeFullCertification(String uniqueId, User user, LifecycleChangeInfoWithAction lifecycleChangeInfo, boolean inTransaction, boolean needLock) { Either resourceResponse = lifecycleBusinessLogic - .changeState(uniqueId, user, LifeCycleTransitionEnum.CERTIFY, lifecycleChangeInfo, inTransaction, needLock); + .changeState(uniqueId, user, LifeCycleTransitionEnum.CERTIFY, lifecycleChangeInfo, inTransaction, needLock); if (resourceResponse.isRight()) { throw new ByResponseFormatComponentException(resourceResponse.right().value()); } @@ -3607,15 +3609,15 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final boolean isNestedResource = isNestedResourceUpdate(csarInfo, nodeName); final String resourceName = resource.getToscaResourceName(); final Either latestByToscaName = toscaOperationFacade - .getLatestByToscaResourceNameAndModel(resourceName, resource.getModel()); + .getLatestByToscaResourceNameAndModel(resourceName, resource.getModel()); if (latestByToscaName.isLeft() && Objects.nonNull(latestByToscaName.left().value())) { final Resource foundResource = latestByToscaName.left().value(); // we don't allow updating names of top level types if (!isNestedResource && !StringUtils.equals(resource.getName(), foundResource.getName())) { BeEcompErrorManager.getInstance() - .logBeComponentMissingError("Create / Update resource by import", ComponentTypeEnum.RESOURCE.getValue(), resource.getName()); + .logBeComponentMissingError("Create / Update resource by import", ComponentTypeEnum.RESOURCE.getValue(), resource.getName()); log.debug("resource already exist new name={} old name={} same type={}", resource.getName(), foundResource.getName(), - resource.getToscaResourceName()); + resource.getToscaResourceName()); final ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESOURCE_ALREADY_EXISTS); componentsUtils.auditResource(responseFormat, user, resource, AuditingActionEnum.IMPORT_RESOURCE); throwComponentException(responseFormat); @@ -3631,7 +3633,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { StorageOperationStatus status = latestByToscaName.right().value(); log.debug("failed to get latest version of resource {}. status={}", resource.getName(), status); ResponseFormat responseFormat = componentsUtils - .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(latestByToscaName.right().value()), resource); + .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(latestByToscaName.right().value()), resource); componentsUtils.auditResource(responseFormat, user, resource, AuditingActionEnum.IMPORT_RESOURCE); throwComponentException(responseFormat); } @@ -3647,12 +3649,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final CsarInfo csarInfo, final boolean isNested, final String nodeName) { final Either latestByToscaName = toscaOperationFacade.getLatestByToscaResourceName( - buildNestedToscaResourceName(resource.getResourceType().name(), csarInfo.getVfResourceName(), nodeName).getRight(), resource.getModel()); + buildNestedToscaResourceName(resource.getResourceType().name(), csarInfo.getVfResourceName(), nodeName).getRight(), resource.getModel()); if (latestByToscaName.isLeft()) { final Resource nestedResource = (Resource) latestByToscaName.left().value(); log.debug(VALIDATE_DERIVED_BEFORE_UPDATE); final Either eitherValidation = validateNestedDerivedFromDuringUpdate(nestedResource, resource, - ValidationUtils.hasBeenCertified(nestedResource.getVersion())); + ValidationUtils.hasBeenCertified(nestedResource.getVersion())); if (eitherValidation.isRight()) { return createResourceByImport(resource, user, isNormative, isInTransaction, csarInfo); } @@ -3686,7 +3688,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { boolean inTransaction, boolean needLock, boolean isNested) { String lockedResourceId = oldResource.getUniqueId(); log.debug("found resource: name={}, id={}, version={}, state={}", oldResource.getName(), lockedResourceId, oldResource.getVersion(), - oldResource.getLifecycleState()); + oldResource.getLifecycleState()); ImmutablePair resourcePair = null; try { lockComponent(lockedResourceId, oldResource, needLock, "Update Resource by Import"); @@ -3747,7 +3749,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Either overrideResource = toscaOperationFacade.overrideComponent(newResource, oldResource); if (overrideResource.isRight()) { ResponseFormat responseFormat = componentsUtils - .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(overrideResource.right().value()), newResource); + .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(overrideResource.right().value()), newResource); componentsUtils.auditResource(responseFormat, user, newResource, AuditingActionEnum.IMPORT_RESOURCE); throwComponentException(responseFormat); } @@ -3755,7 +3757,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { log.debug("Resource updated successfully!!!"); ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK); componentsUtils.auditResource(responseFormat, user, newResource, AuditingActionEnum.IMPORT_RESOURCE, - ResourceVersionInfo.newBuilder().state(oldResource.getLifecycleState().name()).version(oldResource.getVersion()).build()); + ResourceVersionInfo.newBuilder().state(oldResource.getLifecycleState().name()).version(oldResource.getVersion()).build()); resourcePair = new ImmutablePair<>(overrideResource.left().value(), ActionStatus.OK); return resourcePair; } finally { @@ -3811,19 +3813,19 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { newResource.setGroups(groupForUpdate); } if (newResource.getResourceType().isAtomicType() && !newResource.getName().equals("Root") - && newResource.getResourceType() != ResourceTypeEnum.CVFC) { + && newResource.getResourceType() != ResourceTypeEnum.CVFC) { ResourceTypeEnum updatedResourceType = newResource.getResourceType(); Optional derivedFromResourceOptional = getParentComponent(newResource); if (derivedFromResourceOptional.isPresent() && derivedFromResourceOptional.get().getComponentType() == ComponentTypeEnum.RESOURCE) { Resource parentResource = (Resource) derivedFromResourceOptional.get(); if (!(parentResource.isAbstract() && (ResourceTypeEnum.VFC == parentResource.getResourceType() - || ResourceTypeEnum.ABSTRACT == parentResource.getResourceType())) && parentResource.getResourceType() != updatedResourceType - && oldResource.getResourceType() != updatedResourceType) { + || ResourceTypeEnum.ABSTRACT == parentResource.getResourceType())) && parentResource.getResourceType() != updatedResourceType + && oldResource.getResourceType() != updatedResourceType) { BeEcompErrorManager.getInstance().logInternalDataError("mergeOldResourceMetadataWithNew", - "resource type of the resource does not match to derived from resource type", ErrorSeverity.ERROR); + "resource type of the resource does not match to derived from resource type", ErrorSeverity.ERROR); log.debug( - "#mergeOldResourceMetadataWithNew - resource type {} of the resource {} does not match to derived from resource type {}", - newResource.getResourceType(), newResource.getToscaResourceName(), parentResource.getResourceType()); + "#mergeOldResourceMetadataWithNew - resource type {} of the resource {} does not match to derived from resource type {}", + newResource.getResourceType(), newResource.getToscaResourceName(), parentResource.getResourceType()); throw new ByActionStatusComponentException(ActionStatus.INVALID_RESOURCE_TYPE); } } @@ -3836,10 +3838,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } String toscaResourceNameDerivedFrom = newResource.getDerivedFrom().get(0); Either latestByToscaResourceName = toscaOperationFacade - .getLatestByToscaResourceName(toscaResourceNameDerivedFrom, newResource.getModel()); + .getLatestByToscaResourceName(toscaResourceNameDerivedFrom, newResource.getModel()); if (latestByToscaResourceName.isRight()) { BeEcompErrorManager.getInstance() - .logInternalDataError("mergeOldResourceMetadataWithNew", "derived from resource not found", ErrorSeverity.ERROR); + .logInternalDataError("mergeOldResourceMetadataWithNew", "derived from resource not found", ErrorSeverity.ERROR); log.debug("#mergeOldResourceMetadataWithNew - derived from resource {} not found", toscaResourceNameDerivedFrom); throw new ByActionStatusComponentException(ActionStatus.RESOURCE_NOT_FOUND, toscaResourceNameDerivedFrom); } @@ -3850,8 +3852,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (!ComponentValidationUtils.canWorkOnResource(oldResource, user.getUserId())) { // checkout return lifecycleBusinessLogic - .changeState(oldResource.getUniqueId(), user, LifeCycleTransitionEnum.CHECKOUT, new LifecycleChangeInfoWithAction("update by import"), - inTransaction, needLock).left().on(response -> failOnChangeState(response, user, oldResource, newResource)); + .changeState(oldResource.getUniqueId(), user, LifeCycleTransitionEnum.CHECKOUT, new LifecycleChangeInfoWithAction("update by import"), + inTransaction, needLock).left().on(response -> failOnChangeState(response, user, oldResource, newResource)); } return oldResource; } @@ -3859,7 +3861,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private Resource failOnChangeState(ResponseFormat response, User user, Resource oldResource, Resource newResource) { log.info("resource {} cannot be updated. reason={}", oldResource.getUniqueId(), response.getFormattedMessage()); componentsUtils.auditResource(response, user, newResource, AuditingActionEnum.IMPORT_RESOURCE, - ResourceVersionInfo.newBuilder().state(oldResource.getLifecycleState().name()).version(oldResource.getVersion()).build()); + ResourceVersionInfo.newBuilder().state(oldResource.getLifecycleState().name()).version(oldResource.getVersion()).build()); throw new ByResponseFormatComponentException(response); } @@ -3880,7 +3882,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { resourceSystemName = resource.getSystemName(); } resource - .setToscaResourceName(CommonBeUtils.generateToscaResourceName(resource.getResourceType().name().toLowerCase(), resourceSystemName)); + .setToscaResourceName(CommonBeUtils.generateToscaResourceName(resource.getResourceType().name().toLowerCase(), resourceSystemName)); } // Generate invariant UUID - must be here and not in operation since it @@ -3915,7 +3917,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (eitherCapTypeFound.isRight()) { if (eitherCapTypeFound.right().value() == StorageOperationStatus.NOT_FOUND) { BeEcompErrorManager.getInstance() - .logBeGraphObjectMissingError("Create Resource - validateLifecycleTypesCreate", "Interface", intType); + .logBeGraphObjectMissingError("Create Resource - validateLifecycleTypesCreate", "Interface", intType); log.debug("Lifecycle Type: {} is required by resource: {} but does not exist in the DB", intType, resource.getName()); BeEcompErrorManager.getInstance().logBeDaoSystemError("Create Resource - validateLifecycleTypesCreate"); log.debug("request to data model failed with error: {}", eitherCapTypeFound.right().value().name()); @@ -3936,7 +3938,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { log.debug("validate capability Types Exist - capabilities section"); for (Entry> typeEntry : resource.getCapabilities().entrySet()) { eitherResult = validateCapabilityTypeExists(user, capabilityTypeOperation, resource, actionEnum, eitherResult, typeEntry, - inTransaction); + inTransaction); if (eitherResult.isRight()) { return Either.right(eitherResult.right().value()); } @@ -3946,7 +3948,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { log.debug("validate capability Types Exist - requirements section"); for (String type : resource.getRequirements().keySet()) { eitherResult = validateCapabilityTypeExists(user, capabilityTypeOperation, resource, resource.getRequirements().get(type), actionEnum, - eitherResult, type, inTransaction); + eitherResult, type, inTransaction); if (eitherResult.isRight()) { return Either.right(eitherResult.right().value()); } @@ -3985,11 +3987,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Either eitherResult, Entry> typeEntry, boolean inTransaction) { Either eitherCapTypeFound = capabilityTypeOperation - .getCapabilityType(UniqueIdBuilder.buildCapabilityTypeUid(resource.getModel(), typeEntry.getKey()), inTransaction); + .getCapabilityType(UniqueIdBuilder.buildCapabilityTypeUid(resource.getModel(), typeEntry.getKey()), inTransaction); if (eitherCapTypeFound.isRight()) { if (eitherCapTypeFound.right().value() == StorageOperationStatus.NOT_FOUND) { BeEcompErrorManager.getInstance() - .logBeGraphObjectMissingError(CREATE_RESOURCE_VALIDATE_CAPABILITY_TYPES, "Capability Type", typeEntry.getKey()); + .logBeGraphObjectMissingError(CREATE_RESOURCE_VALIDATE_CAPABILITY_TYPES, "Capability Type", typeEntry.getKey()); log.debug("Capability Type: {} is required by resource: {} but does not exist in the DB", typeEntry.getKey(), resource.getName()); BeEcompErrorManager.getInstance().logBeDaoSystemError(CREATE_RESOURCE_VALIDATE_CAPABILITY_TYPES); } @@ -4068,12 +4070,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { ASDCKpiApi.countCreatedResourcesKPI(); } catch (ComponentException e) { ResponseFormat responseFormat = - e.getResponseFormat() == null ? componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()) : e.getResponseFormat(); + e.getResponseFormat() == null ? componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams()) : e.getResponseFormat(); componentsUtils.auditResource(responseFormat, user, resource, actionEnum); throw e; } catch (StorageException e) { ResponseFormat responseFormat = componentsUtils - .getResponseFormat(componentsUtils.convertFromStorageResponse(e.getStorageOperationStatus())); + .getResponseFormat(componentsUtils.convertFromStorageResponse(e.getStorageOperationStatus())); componentsUtils.auditResource(responseFormat, user, resource, actionEnum); throw e; } finally { @@ -4090,20 +4092,20 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { final ResourceTypeEnum resourceType = resource.getResourceType(); final ComponentTypeEnum componentType = resource.getComponentType(); final Either eitherValidation = toscaOperationFacade - .validateComponentNameAndModelExists(resourceName, modelName, resourceType, componentType); + .validateComponentNameAndModelExists(resourceName, modelName, resourceType, componentType); if (eitherValidation.isRight()) { loggerSupportability.log(LoggerSupportabilityActions.VALIDATE_NAME, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "ERROR while validate component name {} Status is: {}", resource.getName(), eitherValidation.right().value()); + "ERROR while validate component name {} Status is: {}", resource.getName(), eitherValidation.right().value()); log.debug("Failed to validate component name {}. Status is {}. ", resource.getName(), eitherValidation.right().value()); throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(eitherValidation.right().value())); } if (eitherValidation.left().value()) { log.debug("resource with name: {}, already exists", resource.getName()); loggerSupportability - .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, - "resource with name: {} already exists", resource.getName()); + .log(LoggerSupportabilityActions.CREATE_RESOURCE_FROM_YAML, resource.getComponentMetadataForSupportLog(), StatusCode.ERROR, + "resource with name: {} already exists", resource.getName()); throw new ByActionStatusComponentException(ActionStatus.COMPONENT_NAME_ALREADY_EXIST, ComponentTypeEnum.RESOURCE.getValue(), - resource.getName()); + resource.getName()); } log.debug("send resource {} to dao for create", resource.getName()); createArtifactsPlaceHolderData(resource, user); @@ -4145,7 +4147,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { artifactMap = new HashMap<>(); } Map deploymentResourceArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration() - .getDeploymentResourceArtifacts(); + .getDeploymentResourceArtifacts(); if (deploymentResourceArtifacts != null) { Map finalArtifactMap = artifactMap; deploymentResourceArtifacts.forEach((k, v) -> processDeploymentResourceArtifacts(user, resource, finalArtifactMap, k, v)); @@ -4166,7 +4168,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } if (artifactsBusinessLogic != null) { ArtifactDefinition artifactDefinition = artifactsBusinessLogic - .createArtifactPlaceHolderInfo(resource.getUniqueId(), k, (Map) v, user, ArtifactGroupTypeEnum.DEPLOYMENT); + .createArtifactPlaceHolderInfo(resource.getUniqueId(), k, (Map) v, user, ArtifactGroupTypeEnum.DEPLOYMENT); if (artifactDefinition != null && !artifactMap.containsKey(artifactDefinition.getArtifactLabel())) { artifactMap.put(artifactDefinition.getArtifactLabel(), artifactDefinition); } @@ -4183,7 +4185,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { List exludeResourceCategory = ConfigurationManager.getConfigurationManager().getConfiguration().getExcludeResourceCategory(); List exludeResourceType = ConfigurationManager.getConfigurationManager().getConfiguration().getExcludeResourceType(); Map informationalResourceArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration() - .getInformationalResourceArtifacts(); + .getInformationalResourceArtifacts(); List categories = resource.getCategories(); boolean isCreateArtifact = true; if (exludeResourceCategory != null) { @@ -4199,8 +4201,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { for (String informationalResourceArtifactName : keys) { Map artifactInfoMap = (Map) informationalResourceArtifacts.get(informationalResourceArtifactName); ArtifactDefinition artifactDefinition = artifactsBusinessLogic - .createArtifactPlaceHolderInfo(resourceUniqueId, informationalResourceArtifactName, artifactInfoMap, user, - ArtifactGroupTypeEnum.INFORMATIONAL); + .createArtifactPlaceHolderInfo(resourceUniqueId, informationalResourceArtifactName, artifactInfoMap, user, + ArtifactGroupTypeEnum.INFORMATIONAL); artifactMap.put(artifactDefinition.getArtifactLabel(), artifactDefinition); } } @@ -4225,7 +4227,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Resource resource = resourceStatus.left().value(); if (isComponentSystemDeployed(resource)) { throw new ByActionStatusComponentException(ActionStatus.CANNOT_DELETE_SYSTEM_DEPLOYED_RESOURCES, ComponentTypeEnum.RESOURCE.getValue(), - resource.getName()); + resource.getName()); } StorageOperationStatus result = StorageOperationStatus.OK; lockComponent(resourceId, resource, "Mark resource to delete"); @@ -4252,6 +4254,45 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { return resource.getComponentMetadataDefinition().getMetadataDataDefinition().isNormative(); } + /** + * Deletes every version of the provided resource + * + * @param resourceId the resource identifier + * @param user the user that performs the deletion + * @return + * @throws ComponentException if there is any error in the deletion of the resource operation + */ + public void deleteResourceAllVersions(String resourceId, User user) { + validateUserExists(user); + Either resourceStatus = toscaOperationFacade.getToscaElement(resourceId); + if (resourceStatus.isRight()) { + log.debug("Failed to get resource {}", resourceId); + componentException(resourceStatus.right().value()); + } + Resource resource = resourceStatus.left().value(); + if (Boolean.FALSE.equals(resource.isArchived())) { + log.debug("The resource, {}, requested for delete has not been archived.", resourceId); + throw new ComponentException(ActionStatus.COMPONENT_NOT_ARCHIVED, resourceId); + } + try { + String model = resource.getModel(); + final Optional modelOptional = modelOperation.findModelByName(model); + List deletedResourceList = toscaOperationFacade.deleteComponent(resource.getInvariantUUID(), NodeTypeEnum.Resource, true); + if (log.isDebugEnabled()) { + deletedResourceList.forEach(deletedR -> log.debug("Component {} was deleted.", deletedR)); + } + if (modelOptional.isPresent() && modelOptional.get().getModelType() == ModelTypeEnum.NORMATIVE_EXTENSION) { + modelOperation.deleteModel(modelOptional.get(), true); + } + toscaOperationFacade.commitAndCheck(resource.getUniqueId()); + updateCatalog(resource, ChangeTypeEnum.DELETE); + } catch (ComponentException exception) { + log.debug("Failed to delete resource, {} ", resourceId); + janusGraphDao.rollback(); + throw exception; + } + } + public ResponseFormat deleteResourceByNameAndVersion(String resourceName, String version, User user) { ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.NO_CONTENT); validateUserExists(user); @@ -4260,11 +4301,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { boolean failed = false; try { Either resourceStatus = toscaOperationFacade - .getComponentByNameAndVersion(ComponentTypeEnum.RESOURCE, resourceName, version); + .getComponentByNameAndVersion(ComponentTypeEnum.RESOURCE, resourceName, version); if (resourceStatus.isRight()) { log.debug("failed to get resource {} version {}", resourceName, version); return componentsUtils - .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(resourceStatus.right().value()), resourceName); + .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(resourceStatus.right().value()), resourceName); } resource = resourceStatus.left().value(); } finally { @@ -4302,11 +4343,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (storageStatus.isRight()) { log.debug("failed to get resource by id {}", resourceId); return Either.right( - componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus.right().value()), resourceId)); + componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus.right().value()), resourceId)); } if (storageStatus.left().value() == null) { return Either.right(componentsUtils - .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND), resourceId)); + .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND), resourceId)); } return Either.left(storageStatus.left().value()); } @@ -4314,11 +4355,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { public Either getResourceByNameAndVersion(String resourceName, String resourceVersion, String userId) { validateUserExists(userId); Either getResource = toscaOperationFacade - .getComponentByNameAndVersion(ComponentTypeEnum.RESOURCE, resourceName, resourceVersion); + .getComponentByNameAndVersion(ComponentTypeEnum.RESOURCE, resourceName, resourceVersion); if (getResource.isRight()) { log.debug("failed to get resource by name {} and version {}", resourceName, resourceVersion); return Either.right( - componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(getResource.right().value()), resourceName)); + componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(getResource.right().value()), resourceName)); } return Either.left(getResource.left().value()); } @@ -4342,7 +4383,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { Either storageStatus = toscaOperationFacade.getToscaElement(resourceIdToUpdate); if (storageStatus.isRight()) { throw new ByResponseFormatComponentException( - componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus.right().value()), "")); + componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus.right().value()), "")); } currentResource = storageStatus.left().value(); } @@ -4356,7 +4397,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { StorageOperationStatus lockResult = graphLockOperation.lockComponent(resourceIdToUpdate, NodeTypeEnum.Resource); if (lockResult != StorageOperationStatus.OK) { BeEcompErrorManager.getInstance() - .logBeFailedLockObjectError("Upload Artifact - lock ", NodeTypeEnum.Resource.getName(), resourceIdToUpdate); + .logBeFailedLockObjectError("Upload Artifact - lock ", NodeTypeEnum.Resource.getName(), resourceIdToUpdate); log.debug("Failed to lock resource: {}, error - {}", resourceIdToUpdate, lockResult); ResponseFormat responseFormat = componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(lockResult)); throw new ByResponseFormatComponentException(responseFormat); @@ -4380,7 +4421,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { newResource.setDerivedFrom(null); } Either dataModelResponse = updateResourceMetadata(resourceIdToUpdate, newResource, user, currentResource, false, - true); + true); if (dataModelResponse.isRight()) { log.debug("failed to update resource metadata!!!"); throw new ByResponseFormatComponentException(dataModelResponse.right().value()); @@ -4412,7 +4453,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { newResource.setHighestVersion(currentResource.isHighestVersion()); newResource.setCreationDate(currentResource.getCreationDate()); Either processUpdateOfDerivedFrom = processUpdateOfDerivedFrom(currentResource, newResource, user.getUserId(), - inTransaction); + inTransaction); if (processUpdateOfDerivedFrom.isRight()) { log.debug("Couldn't update derived from for resource {}", resourceIdToUpdate); return Either.right(processUpdateOfDerivedFrom.right().value()); @@ -4422,15 +4463,15 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { for (GroupDefinition group : newResource.getGroups()) { if (DEFAULT_GROUP_VF_MODULE.equals(group.getType())) { groupBusinessLogic - .validateAndUpdateGroupMetadata(newResource.getComponentMetadataDefinition().getMetadataDataDefinition().getUniqueId(), user, - newResource.getComponentType(), group, true, false); + .validateAndUpdateGroupMetadata(newResource.getComponentMetadataDefinition().getMetadataDataDefinition().getUniqueId(), user, + newResource.getComponentType(), group, true, false); } } } Either dataModelResponse = toscaOperationFacade.updateToscaElement(newResource); if (dataModelResponse.isRight()) { ResponseFormat responseFormat = componentsUtils - .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(dataModelResponse.right().value()), newResource); + .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(dataModelResponse.right().value()), newResource); return Either.right(responseFormat); } else if (dataModelResponse.left().value() == null) { log.debug("No response from updateResource"); @@ -4442,7 +4483,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private void updateVfModuleGroupsNames(Resource currentResource, Resource newResource) { if (currentResource.getGroups() != null && !currentResource.getName().equals(newResource.getName())) { List updatedGroups = currentResource.getGroups().stream() - .map(group -> getUpdatedGroup(group, currentResource.getName(), newResource.getName())).collect(toList()); + .map(group -> getUpdatedGroup(group, currentResource.getName(), newResource.getName())).collect(toList()); newResource.setGroups(updatedGroups); } } @@ -4616,7 +4657,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { // instances that were created without the "Cvfc" suffix return currentResource.getResourceType() == ResourceTypeEnum.CVFC && resourceNameUpdated - .equals(addCvfcSuffixToResourceName(resourceNameCurrent)); + .equals(addCvfcSuffixToResourceName(resourceNameCurrent)); } private String addCvfcSuffixToResourceName(String resourceName) { @@ -4692,7 +4733,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { validateDerivedFromExist(null, updateInfoResource, null); } else { Either validateDerivedFromExtending = validateDerivedFromExtending(null, currentResource, updateInfoResource, - null); + null); if (validateDerivedFromExtending.isRight() || !validateDerivedFromExtending.left().value()) { log.debug("Derived from cannot be updated if it doesnt inherits directly or extends inheritance"); return validateDerivedFromExtending; @@ -4730,7 +4771,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { validateDerivedFromExist(null, updateInfoResource, null); } else { Either validateDerivedFromExtending = validateDerivedFromExtending(null, currentResource, updateInfoResource, - null); + null); if (validateDerivedFromExtending.isRight() || !validateDerivedFromExtending.left().value()) { log.debug("Derived from cannot be updated if it doesnt inherits directly or extends inheritance"); return validateDerivedFromExtending; @@ -4751,7 +4792,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { BeEcompErrorManager.getInstance().logBeDaoSystemError("Create Resource - validateDerivedFromExist"); log.debug("request to data model failed with error: {}", storageStatus); ResponseFormat responseFormat = componentsUtils - .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus), resource); + .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus), resource); log.trace("audit before sending response"); componentsUtils.auditResource(responseFormat, user, resource, actionEnum); throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(storageStatus)); @@ -4769,12 +4810,12 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { String currentTemplateName = currentResource.getDerivedFrom().get(0); String updatedTemplateName = updateInfoResource.getDerivedFrom().get(0); Either dataModelResponse = toscaOperationFacade - .validateToscaResourceNameExtends(currentTemplateName, updatedTemplateName, currentResource.getModel()); + .validateToscaResourceNameExtends(currentTemplateName, updatedTemplateName, currentResource.getModel()); if (dataModelResponse.isRight()) { StorageOperationStatus storageStatus = dataModelResponse.right().value(); BeEcompErrorManager.getInstance().logBeDaoSystemError("Create/Update Resource - validateDerivingFromExtendingType"); ResponseFormat responseFormat = componentsUtils - .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus), currentResource); + .getResponseFormatByResource(componentsUtils.convertFromStorageResponse(storageStatus), currentResource); log.trace("audit before sending response"); componentsUtils.auditResource(responseFormat, user, currentResource, actionEnum); return Either.right(responseFormat); @@ -4791,7 +4832,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { public void validateDerivedFromNotEmpty(User user, Resource resource, AuditingActionEnum actionEnum) { log.debug("validate resource derivedFrom field"); if ((resource.getDerivedFrom() == null) || (resource.getDerivedFrom().isEmpty()) || (resource.getDerivedFrom().get(0)) == null || (resource - .getDerivedFrom().get(0).trim().isEmpty())) { + .getDerivedFrom().get(0).trim().isEmpty())) { log.info("derived from (template) field is missing for the resource"); ResponseFormat responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_DERIVED_FROM_TEMPLATE); componentsUtils.auditResource(responseFormat, user, resource, actionEnum); @@ -4801,11 +4842,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { private void validateResourceNameUniqueness(Resource resource) { Either resourceOperationResponse = toscaOperationFacade - .validateComponentNameExists(resource.getName(), resource.getResourceType(), resource.getComponentType()); + .validateComponentNameExists(resource.getName(), resource.getResourceType(), resource.getComponentType()); if (resourceOperationResponse.isLeft() && resourceOperationResponse.left().value()) { log.debug("resource with name: {}, already exists", resource.getName()); throw new ByActionStatusComponentException(ActionStatus.COMPONENT_NAME_ALREADY_EXIST, ComponentTypeEnum.RESOURCE.getValue(), - resource.getName()); + resource.getName()); } else if (resourceOperationResponse.isRight()) { log.debug("error while validateResourceNameExists for resource: {}", resource.getName()); throw new StorageException(resourceOperationResponse.right().value()); @@ -4817,7 +4858,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (CollectionUtils.isEmpty(categories)) { log.debug(CATEGORY_IS_EMPTY); ResponseFormat responseFormat = componentsUtils - .getResponseFormat(ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.RESOURCE.getValue()); + .getResponseFormat(ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.RESOURCE.getValue()); componentsUtils.auditResource(responseFormat, user, resource, actionEnum); throw new ByActionStatusComponentException(ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.RESOURCE.getValue()); } @@ -4839,14 +4880,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (!ValidationUtils.validateStringNotEmpty(category.getName())) { log.debug(CATEGORY_IS_EMPTY); ResponseFormat responseFormat = componentsUtils - .getResponseFormat(ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.RESOURCE.getValue()); + .getResponseFormat(ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.RESOURCE.getValue()); componentsUtils.auditResource(responseFormat, user, resource, actionEnum); throw new ByActionStatusComponentException(ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.RESOURCE.getValue()); } if (!ValidationUtils.validateStringNotEmpty(subcategory.getName())) { log.debug(CATEGORY_IS_EMPTY); ResponseFormat responseFormat = componentsUtils - .getResponseFormat(ActionStatus.COMPONENT_MISSING_SUBCATEGORY, ComponentTypeEnum.RESOURCE.getValue()); + .getResponseFormat(ActionStatus.COMPONENT_MISSING_SUBCATEGORY, ComponentTypeEnum.RESOURCE.getValue()); componentsUtils.auditResource(responseFormat, user, resource, actionEnum); throw new ByActionStatusComponentException(ActionStatus.COMPONENT_MISSING_SUBCATEGORY, ComponentTypeEnum.RESOURCE.getValue()); } @@ -4873,10 +4914,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { return; // explisite output even if failOnInvalidCategory throw an exception } Optional foundSubcategory = foundCategory.get().getSubcategories().stream() - .filter(subcat -> subcat.getName().equals(subcategory.getName())).findFirst(); + .filter(subcat -> subcat.getName().equals(subcategory.getName())).findFirst(); if (foundSubcategory.isEmpty()) { log.debug("SubCategory {} is not part of resource category group. Resource subcategory valid values are {}", subcategory, - foundCategory.get().getSubcategories()); + foundCategory.get().getSubcategories()); failOnInvalidCategory(user, resource, actionEnum); } } @@ -4906,7 +4947,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (!ValidationUtils.validateVendorReleaseLength(vendorRelease)) { log.info("vendor release exceds limit."); ResponseFormat errorResponse = componentsUtils - .getResponseFormat(ActionStatus.VENDOR_RELEASE_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_RELEASE_MAX_LENGTH); + .getResponseFormat(ActionStatus.VENDOR_RELEASE_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_RELEASE_MAX_LENGTH); componentsUtils.auditResource(errorResponse, user, resource, actionEnum); throw new ByActionStatusComponentException(ActionStatus.VENDOR_RELEASE_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_RELEASE_MAX_LENGTH); } @@ -4935,7 +4976,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (!ValidationUtils.validateVendorNameLength(vendorName)) { log.info("vendor name exceds limit."); ResponseFormat errorResponse = componentsUtils - .getResponseFormat(ActionStatus.VENDOR_NAME_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_NAME_MAX_LENGTH); + .getResponseFormat(ActionStatus.VENDOR_NAME_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_NAME_MAX_LENGTH); componentsUtils.auditResource(errorResponse, user, resource, actionEnum); throw new ByActionStatusComponentException(ActionStatus.VENDOR_NAME_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_NAME_MAX_LENGTH); } @@ -4954,10 +4995,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (!ValidationUtils.validateResourceVendorModelNumberLength(resourceVendorModelNumber)) { log.info("resource vendor model number exceeds limit."); ResponseFormat errorResponse = componentsUtils.getResponseFormat(ActionStatus.RESOURCE_VENDOR_MODEL_NUMBER_EXCEEDS_LIMIT, - "" + ValidationUtils.RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH); + "" + ValidationUtils.RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH); componentsUtils.auditResource(errorResponse, user, resource, actionEnum); throw new ByActionStatusComponentException(ActionStatus.RESOURCE_VENDOR_MODEL_NUMBER_EXCEEDS_LIMIT, - "" + ValidationUtils.RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH); + "" + ValidationUtils.RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH); } // resource vendor model number is currently validated as vendor @@ -5019,10 +5060,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { if (implementation != null) { String uniqueId = implementation.getUniqueId(); log.debug("Removing interface artifact definition {}, operation {}, interfaceType {}", uniqueId, - operationEntry.getKey(), interfaceType); + operationEntry.getKey(), interfaceType); // only thing that transacts and locks here Either deleteArtifactByInterface = artifactsBusinessLogic - .deleteArtifactByInterface(resourceId, userId, uniqueId, true); + .deleteArtifactByInterface(resourceId, userId, uniqueId, true); if (deleteArtifactByInterface.isRight()) { log.debug("Couldn't remove artifact definition with id {}", uniqueId); if (!inTransaction) { @@ -5041,14 +5082,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } log.debug("2. Removing properties"); Either, StorageOperationStatus> findPropertiesOfNode = propertyOperation - .deleteAllPropertiesAssociatedToNode(NodeTypeEnum.Resource, resourceId); + .deleteAllPropertiesAssociatedToNode(NodeTypeEnum.Resource, resourceId); if (findPropertiesOfNode.isRight() && findPropertiesOfNode.right().value() != StorageOperationStatus.OK) { log.debug("Failed to remove all properties of resource"); if (!inTransaction) { janusGraphDao.rollback(); } return Either - .right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(findPropertiesOfNode.right().value()))); + .right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(findPropertiesOfNode.right().value()))); } } else { log.debug("Derived from wasn't changed during update"); @@ -5105,7 +5146,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { ResponseFormat responseFormat; if (type.equals(ToscaPropertyType.LIST.getType()) || type.equals(ToscaPropertyType.MAP.getType())) { throw new ByActionStatusComponentException(ActionStatus.INVALID_COMPLEX_DEFAULT_VALUE, property.getName(), type, innerType, - property.getDefaultValue()); + property.getDefaultValue()); } throw new ByActionStatusComponentException(ActionStatus.INVALID_DEFAULT_VALUE, property.getName(), type, property.getDefaultValue()); } @@ -5148,7 +5189,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } // get resource from csar uuid Either either = toscaOperationFacade - .getLatestComponentByCsarOrName(ComponentTypeEnum.RESOURCE, csarUuid, ""); + .getLatestComponentByCsarOrName(ComponentTypeEnum.RESOURCE, csarUuid, ""); if (either.isRight()) { ResponseFormat resp = componentsUtils.getResponseFormat(ActionStatus.RESOURCE_FROM_CSAR_NOT_FOUND, csarUuid); return Either.right(resp); @@ -5214,7 +5255,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { UploadCapInfo uploadedCapability) { List validProperties = new ArrayList<>(); Map defaultProperties = defaultCapability.getProperties().stream() - .collect(toMap(PropertyDefinition::getName, Function.identity())); + .collect(toMap(PropertyDefinition::getName, Function.identity())); List uploadedProperties = uploadedCapability.getProperties(); for (UploadPropInfo property : uploadedProperties) { String propertyName = property.getName().toLowerCase(); @@ -5240,11 +5281,11 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } private Either>, ResponseFormat> organizeVfCsarArtifactsByArtifactOperation( - List artifactPathAndNameList, List existingArtifactsToHandle, Resource resource, User user) { + List artifactPathAndNameList, List existingArtifactsToHandle, Resource resource, User user) { EnumMap> nodeTypeArtifactsToHandle = new EnumMap<>(ArtifactOperationEnum.class); Wrapper responseWrapper = new Wrapper<>(); Either>, ResponseFormat> nodeTypeArtifactsToHandleRes = Either - .left(nodeTypeArtifactsToHandle); + .left(nodeTypeArtifactsToHandle); try { // add all found Csar artifacts to list to upload List artifactsToUpload = new ArrayList<>(artifactPathAndNameList); @@ -5254,7 +5295,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { ArtifactDefinition foundArtifact; if (!existingArtifactsToHandle.isEmpty()) { foundArtifact = existingArtifactsToHandle.stream().filter(a -> a.getArtifactName().equals(currNewArtifact.getArtifactName())) - .findFirst().orElse(null); + .findFirst().orElse(null); if (foundArtifact != null) { if (foundArtifact.getArtifactType().equals(currNewArtifact.getArtifactType())) { if (!foundArtifact.getArtifactChecksum().equals(currNewArtifact.getArtifactChecksum())) { @@ -5281,14 +5322,14 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } else { log.debug("Can't upload two artifact with the same name {}.", currNewArtifact.getArtifactName()); ResponseFormat responseFormat = ResponseFormatManager.getInstance() - .getResponseFormat(ActionStatus.ARTIFACT_ALREADY_EXIST_IN_DIFFERENT_TYPE_IN_CSAR, currNewArtifact.getArtifactName(), - currNewArtifact.getArtifactType(), foundArtifact.getArtifactType()); + .getResponseFormat(ActionStatus.ARTIFACT_ALREADY_EXIST_IN_DIFFERENT_TYPE_IN_CSAR, currNewArtifact.getArtifactName(), + currNewArtifact.getArtifactType(), foundArtifact.getArtifactType()); AuditingActionEnum auditingAction = artifactsBusinessLogic - .detectAuditingType(new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE), - foundArtifact.getArtifactChecksum()); + .detectAuditingType(new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE), + foundArtifact.getArtifactChecksum()); artifactsBusinessLogic - .handleAuditing(auditingAction, resource, resource.getUniqueId(), user, null, null, foundArtifact.getUniqueId(), - responseFormat, resource.getComponentType(), null); + .handleAuditing(auditingAction, resource, resource.getUniqueId(), user, null, null, foundArtifact.getUniqueId(), + responseFormat, resource.getComponentType(), null); responseWrapper.setInnerElement(responseFormat); break; } @@ -5299,10 +5340,10 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { for (ArtifactDefinition currArtifact : existingArtifactsToHandle) { if (currArtifact.getIsFromCsar()) { artifactsToDelete.add(new NonMetaArtifactInfo(currArtifact.getArtifactName(), null, currArtifact.getArtifactType(), - currArtifact.getArtifactGroupType(), null, currArtifact.getUniqueId(), currArtifact.getIsFromCsar())); + currArtifact.getArtifactGroupType(), null, currArtifact.getUniqueId(), currArtifact.getIsFromCsar())); } else { artifactsToUpdate.add(new NonMetaArtifactInfo(currArtifact.getArtifactName(), null, currArtifact.getArtifactType(), - currArtifact.getArtifactGroupType(), null, currArtifact.getUniqueId(), currArtifact.getIsFromCsar())); + currArtifact.getArtifactGroupType(), null, currArtifact.getUniqueId(), currArtifact.getIsFromCsar())); } } } @@ -5343,8 +5384,8 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { try { final String nodeTypeNamePrefix = getNodeTypeNamePrefix(nodeTypeFullName); log.debug("####### buildNestedToscaResourceName nodeResourceType {}, vfResourceName {}, " - + "nodeTypeFullName {}, actualType {}, vfResourceName {} ", nodeResourceType, vfResourceName, nodeTypeFullName, actualType, - vfResourceName); + + "nodeTypeFullName {}, actualType {}, vfResourceName {} ", nodeResourceType, vfResourceName, nodeTypeFullName, actualType, + vfResourceName); final StringBuilder toscaResourceName = new StringBuilder(nodeTypeNamePrefix); if (!nodeTypeFullName.contains(nodeTypeNamePrefix)) { nameWithouNamespacePrefix = nodeTypeFullName; @@ -5362,16 +5403,16 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { toscaResourceName.append(nodeResourceType.toLowerCase()).append('.').append(ValidationUtils.convertToSystemName(actualVfName)); } else { toscaResourceName.append(actualType.toLowerCase()).append('.').append(ValidationUtils.convertToSystemName(actualVfName)).append('.') - .append(Constants.ABSTRACT); + .append(Constants.ABSTRACT); } final StringBuilder previousToscaResourceName = new StringBuilder(toscaResourceName); final String[] actualNames = actualName.split("\\."); if (actualNames.length < 3) { return new ImmutablePair<>(toscaResourceName.append(actualName.toLowerCase()).toString(), - previousToscaResourceName.append(actualName).toString()); + previousToscaResourceName.append(actualName).toString()); } return new ImmutablePair<>(toscaResourceName.append(actualName.toLowerCase()).toString(), - previousToscaResourceName.append(actualName.substring(actualNames[1].length() + 1).toLowerCase()).toString()); + previousToscaResourceName.append(actualName.substring(actualNames[1].length() + 1).toLowerCase()).toString()); } catch (final Exception e) { log.debug("Exception occured when buildNestedToscaResourceName, error is:{}", e.getMessage(), e); throw new ByActionStatusComponentException(ActionStatus.INVALID_TOSCA_TEMPLATE, vfResourceName); @@ -5408,7 +5449,7 @@ public class ResourceBusinessLogic extends ComponentBusinessLogic { } log.debug("failed to get resource by id {} with filters {}", resourceId, dataParamsToReturn); return Either.right( - componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(resourceResultEither.right().value()), "")); + componentsUtils.getResponseFormatByResource(componentsUtils.convertFromStorageResponse(resourceResultEither.right().value()), "")); } Resource resource = resourceResultEither.left().value(); if (dataParamsToReturn.contains(ComponentFieldsEnum.INPUTS.getValue())) { diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/impl/ComponentsUtils.java b/catalog-be/src/main/java/org/openecomp/sdc/be/impl/ComponentsUtils.java index 5c2faccd77..c1f45fe7ad 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/impl/ComponentsUtils.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/impl/ComponentsUtils.java @@ -764,6 +764,12 @@ public class ComponentsUtils { case COMPONENT_IS_ARCHIVED: responseEnum = ActionStatus.COMPONENT_IS_ARCHIVED; break; + case COMPONENT_NOT_ARCHIVED: + responseEnum = ActionStatus.COMPONENT_NOT_ARCHIVED; + break; + case COMPONENT_IS_IN_USE: + responseEnum = ActionStatus.COMPONENT_IN_USE_BY_ANOTHER_COMPONENT; + break; case DECLARED_INPUT_USED_BY_OPERATION: responseEnum = ActionStatus.DECLARED_INPUT_USED_BY_OPERATION; break; diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ResourcesServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ResourcesServlet.java index 81d0f32a3f..8109521252 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ResourcesServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ResourcesServlet.java @@ -31,26 +31,6 @@ import io.swagger.v3.oas.annotations.servers.Server; import io.swagger.v3.oas.annotations.servers.Servers; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tags; -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.Map; -import javax.inject.Inject; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.http.HttpStatus; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataParam; @@ -67,6 +47,7 @@ import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.datamodel.api.HighestFilterEnum; import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.DeleteActionEnum; import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.impl.ServletUtils; @@ -89,6 +70,27 @@ import org.openecomp.sdc.common.zip.exception.ZipException; import org.openecomp.sdc.exception.ResponseFormat; import org.springframework.stereotype.Controller; +import javax.inject.Inject; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; + @Loggable(prepend = true, value = Loggable.DEBUG, trim = false) @Path("/v1/catalog") @Tags({@Tag(name = "SDCE-2 APIs")}) @@ -218,7 +220,12 @@ public class ResourcesServlet extends AbstractValidationsServlet { @DELETE @Path("/resources/{resourceId}") @PermissionAllowed(AafPermission.PermNames.INTERNAL_ALL_VALUE) - public Response deleteResource(@PathParam("resourceId") final String resourceId, @Context final HttpServletRequest request) { + public Response deleteResource(@PathParam("resourceId") final String resourceId, + @Parameter(description = "Optional parameter to determine the delete action: " + + "DELETE, which will permanently delete the Resource from the system or " + + "MARK_AS_DELETE, which will logically mark the Resource as deleted. Default action is to MARK_AS_DELETE") + @QueryParam("deleteAction") final DeleteActionEnum deleteAction, + @Context final HttpServletRequest request) { String url = request.getMethod() + " " + request.getRequestURI(); log.debug(START_HANDLE_REQUEST_OF, url); // get modifier id @@ -227,21 +234,25 @@ public class ResourcesServlet extends AbstractValidationsServlet { modifier.setUserId(userId); log.debug(MODIFIER_ID_IS, userId); loggerSupportability.log(LoggerSupportabilityActions.DELETE_RESOURCE, StatusCode.STARTED, "Starting to delete Resource by user {}", userId); - Response response; try { String resourceIdLower = resourceId.toLowerCase(); - ResponseFormat actionResponse = resourceBusinessLogic.deleteResource(resourceIdLower, modifier); + ResponseFormat actionResponse; + if (DeleteActionEnum.DELETE.equals(deleteAction)) { + resourceBusinessLogic.deleteResourceAllVersions(resourceId, modifier); + actionResponse = componentsUtils.getResponseFormat(ActionStatus.NO_CONTENT); + } else { + actionResponse = resourceBusinessLogic.deleteResource(resourceIdLower, modifier); + } if (actionResponse.getStatus() != HttpStatus.SC_NO_CONTENT) { log.debug("failed to delete resource"); - response = buildErrorResponse(actionResponse); - return response; + return buildErrorResponse(actionResponse); } - response = buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT), null); + loggerSupportability.log(LoggerSupportabilityActions.DELETE_RESOURCE, StatusCode.COMPLETE, "Ended delete Resource by user {}", userId); - return response; - } catch (JSONException e) { + return buildOkResponse(getComponentsUtils().getResponseFormat(ActionStatus.NO_CONTENT), null); + } catch (Exception e) { BeEcompErrorManager.getInstance().logBeRestApiGeneralError("Delete Resource"); - log.debug("delete resource failed with exception", e); + log.debug("delete resource failed with exception ", e); throw e; } } diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogicTest.java index 0018ed003d..20e2114815 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ResourceBusinessLogicTest.java @@ -20,38 +20,7 @@ package org.openecomp.sdc.be.components.impl; -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyList; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.when; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Method; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.servlet.ServletContext; - +import fj.data.Either; import org.apache.commons.lang3.tuple.ImmutablePair; import org.junit.Assert; import org.junit.Before; @@ -121,6 +90,7 @@ import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeTemplateOperatio import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeTypeOperation; import org.openecomp.sdc.be.model.jsonjanusgraph.operations.TopologyTemplateOperation; import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade; +import org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception.OperationException; import org.openecomp.sdc.be.model.operations.StorageException; import org.openecomp.sdc.be.model.operations.api.ICapabilityTypeOperation; import org.openecomp.sdc.be.model.operations.api.IElementOperation; @@ -133,6 +103,7 @@ import org.openecomp.sdc.be.model.operations.impl.ArtifactTypeOperation; import org.openecomp.sdc.be.model.operations.impl.CsarOperation; import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation; import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation; +import org.openecomp.sdc.be.model.operations.impl.ModelOperation; import org.openecomp.sdc.be.model.operations.impl.PolicyTypeOperation; import org.openecomp.sdc.be.model.operations.impl.PropertyOperation; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; @@ -154,7 +125,37 @@ import org.openecomp.sdc.common.zip.exception.ZipException; import org.openecomp.sdc.exception.ResponseFormat; import org.springframework.web.context.WebApplicationContext; -import fj.data.Either; +import javax.servlet.ServletContext; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Method; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.when; public class ResourceBusinessLogicTest { @@ -218,6 +219,7 @@ public class ResourceBusinessLogicTest { private final ArtifactTypeOperation artifactTypeOperation = Mockito.mock(ArtifactTypeOperation.class); private final DataTypeBusinessLogic dataTypeBusinessLogic = Mockito.mock(DataTypeBusinessLogic.class); private final PolicyTypeBusinessLogic policyTypeBusinessLogic = Mockito.mock(PolicyTypeBusinessLogic.class); + private final ModelOperation modelOperation = Mockito.mock(ModelOperation.class); private YamlTemplateParsingHandler yamlTemplateParsingHandler = Mockito.mock(YamlTemplateParsingHandler.class); @InjectMocks @@ -325,7 +327,7 @@ public class ResourceBusinessLogicTest { csarArtifactsAndGroupsBusinessLogic, mergeInstanceUtils, uiComponentDataConverter, csarBusinessLogic, artifactToscaOperation, propertyBusinessLogic, componentContactIdValidator, componentNameValidator, componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, - componentDescriptionValidator, policyBusinessLogic, modelBusinessLogic, dataTypeBusinessLogic, policyTypeBusinessLogic); + componentDescriptionValidator, policyBusinessLogic, modelBusinessLogic, dataTypeBusinessLogic, policyTypeBusinessLogic, modelOperation); bl.setElementDao(mockElementDao); bl.setUserAdmin(mockUserAdmin); bl.setCapabilityTypeOperation(capabilityTypeOperation); @@ -2506,4 +2508,32 @@ public class ResourceBusinessLogicTest { assertTrue(result.isRight()); assertTrue(result.right().value() instanceof ByActionStatusComponentException); } + + @Test + public void testDeleteResource_NotFound() { + Mockito.when(toscaOperationFacade.getToscaElement(Mockito.anyString())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); + ResponseFormat respFormat = componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND), ""); + ResponseFormat actualResponseFormat = bl.deleteResource("1", user); + assertEquals(respFormat.getStatus(), actualResponseFormat.getStatus()); + } + + @Test + public void testDeleteResource_NotArchived() { + Mockito.when(toscaOperationFacade.getToscaElement(Mockito.anyString())).thenReturn(Either.left(resourceResponse)); + ComponentException actualComponentException = assertThrows(ComponentException.class, () -> bl.deleteResourceAllVersions(resourceResponse.getUniqueId(), user)); + assertEquals(ActionStatus.COMPONENT_NOT_ARCHIVED, actualComponentException.getActionStatus()); + assertEquals("my-resource_name with space:0.1", actualComponentException.getParams()[0]); + } + + @Test + public void testDeleteResource_IsInUse() { + Resource resourceObject = createResourceObject(true); + Mockito.when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(Either.left(resourceObject)); + resourceObject.setArchived(true); + OperationException oe = new OperationException(ActionStatus.COMPONENT_IN_USE_BY_ANOTHER_COMPONENT, "resource_name"); + Mockito.when(toscaOperationFacade.deleteComponent(resourceObject.getInvariantUUID(), NodeTypeEnum.Resource, true)).thenThrow(oe); + OperationException actualOperationException = assertThrows(OperationException.class, () -> bl.deleteResourceAllVersions(resourceResponse.getUniqueId(), user)); + assertEquals(ActionStatus.COMPONENT_IN_USE_BY_ANOTHER_COMPONENT, actualOperationException.getActionStatus()); + assertEquals("resource_name", actualOperationException.getParams()[0]); + } } diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java index b1e17b8864..765be0a779 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java @@ -23,7 +23,6 @@ package org.openecomp.sdc.be.components.lifecycle; import fj.data.Either; import org.junit.Before; import org.junit.Test; -import org.mockito.InjectMocks; import org.mockito.Mockito; import org.openecomp.sdc.be.components.csar.CsarArtifactsAndGroupsBusinessLogic; import org.openecomp.sdc.be.components.csar.CsarBusinessLogic; @@ -49,6 +48,7 @@ import org.openecomp.sdc.be.model.Component; import org.openecomp.sdc.be.model.LifecycleStateEnum; import org.openecomp.sdc.be.model.Resource; import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.model.operations.impl.ModelOperation; import org.openecomp.sdc.be.user.Role; import org.openecomp.sdc.exception.ResponseFormat; @@ -74,7 +74,8 @@ public class CheckoutTest extends LifecycleTestBase { private final ModelBusinessLogic modelBusinessLogic = Mockito.mock(ModelBusinessLogic.class); private final DataTypeBusinessLogic dataTypeBusinessLogic = Mockito.mock(DataTypeBusinessLogic.class); private final PolicyTypeBusinessLogic policyTypeBusinessLogic = Mockito.mock(PolicyTypeBusinessLogic.class); - @InjectMocks + private final ModelOperation modelOperation = Mockito.mock(ModelOperation.class); + ResourceBusinessLogic bl = new ResourceBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation, artifactsBusinessLogic, componentInstanceBusinessLogic, resourceImportManager, inputsBusinessLogic, outputsBusinessLogic,compositionBusinessLogic, @@ -82,7 +83,7 @@ public class CheckoutTest extends LifecycleTestBase { uiComponentDataConverter, csarBusinessLogic, artifactToscaOperation, propertyBusinessLogic, componentContactIdValidator, componentNameValidator, componentTagsValidator, componentValidator, componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator ,policyBusinessLogic, modelBusinessLogic, - dataTypeBusinessLogic, policyTypeBusinessLogic); + dataTypeBusinessLogic, policyTypeBusinessLogic, modelOperation); @Before public void setup() { diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ResourceServletTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ResourceServletTest.java index 36612eb8e7..4daff86110 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ResourceServletTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ResourceServletTest.java @@ -22,29 +22,9 @@ package org.openecomp.sdc.be.servlets; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.when; - import com.google.gson.Gson; import com.google.gson.GsonBuilder; import fj.data.Either; -import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.ws.rs.client.Entity; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.text.StrSubstitutor; @@ -89,6 +69,27 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.web.context.WebApplicationContext; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.when; + class ResourceServletTest extends JerseyTest { private final HttpServletRequest request = Mockito.mock(HttpServletRequest.class); diff --git a/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml b/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml index aeab3018b8..a93b52c5ba 100644 --- a/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml +++ b/catalog-be/src/test/resources/config/catalog-be/error-configuration.yaml @@ -2319,4 +2319,20 @@ errors: code: 400, message: "The Model '%1' is not allowed for the imported Vendor Software Product. Allowed Models: '%2'", messageId: "SVC4156" + } + + #---------SVC4692----------------------------- + # %1 - Component name + COMPONENT_NOT_ARCHIVED: { + code: 403, + message: "Component '%1' is not archived", + messageId: "SVC4692" + } + + #---------SVC4693----------------------------- + # %1 - List of services + COMPONENT_IN_USE_BY_ANOTHER_COMPONENT: { + code: 403, + message: "Component is in use by '%1'", + messageId: "SVC4693" } \ No newline at end of file diff --git a/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java b/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java index 449a4968e8..ed69992715 100644 --- a/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java +++ b/catalog-dao/src/main/java/org/openecomp/sdc/be/dao/janusgraph/JanusGraphDao.java @@ -24,6 +24,8 @@ import static org.apache.commons.collections.CollectionUtils.isEmpty; import fj.data.Either; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -49,6 +51,7 @@ import org.janusgraph.core.JanusGraphVertex; import org.janusgraph.core.JanusGraphVertexQuery; import org.janusgraph.core.PropertyKey; import org.janusgraph.graphdb.query.JanusGraphPredicate; +import org.openecomp.sdc.be.dao.api.exception.JanusGraphException; import org.openecomp.sdc.be.dao.jsongraph.GraphVertex; import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum; import org.openecomp.sdc.be.dao.jsongraph.types.EdgePropertyEnum; @@ -604,6 +607,39 @@ public class JanusGraphDao { } } + + /** + * Finds the vertices that have the given invariant id and any additional property provided. + * + * @param invariantUuid the invariant uuid + * @param additionalPropertiesToMatch any additional property to match along with the {@link GraphPropertyEnum#INVARIANT_UUID} + * @return the list of vertex that has the given invariant uuid + * @throws JanusGraphException if the find operation was returned an error status + */ + public List findAllVertexByInvariantUuid(final String invariantUuid, + final Map additionalPropertiesToMatch) { + final Map propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class); + if (MapUtils.isNotEmpty(additionalPropertiesToMatch)) { + propertiesToMatch.putAll(additionalPropertiesToMatch); + } + propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUuid); + final Either, JanusGraphOperationStatus> vertexEither = + getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata); + if (vertexEither.isRight()) { + final JanusGraphOperationStatus status = vertexEither.right().value(); + if (status == JanusGraphOperationStatus.NOT_FOUND) { + return Collections.emptyList(); + } + final String errorMsg = String.format("Couldn't fetch vertex with invariantUUId '%s'. Status was '%s'", invariantUuid, status); + throw new JanusGraphException(status, errorMsg); + } + final List vertices = vertexEither.left().value(); + if (vertices == null || vertices.isEmpty()) { + return Collections.emptyList(); + } + return vertices; + } + private boolean vertexValidForModel(final JanusGraphVertex vertex, final String model, final boolean includeNormativeExtensions) { final String vertexLabel = (String)vertex.property(GraphPropertyEnum.LABEL.getProperty()).value(); final VertexTypeEnum vertexType = VertexTypeEnum.getByName(vertexLabel); diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacade.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacade.java index 0546a91369..9c34b4caaf 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacade.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacade.java @@ -55,6 +55,7 @@ import org.apache.tinkerpop.gremlin.structure.Edge; import org.janusgraph.graphdb.query.JanusGraphPredicate; import org.openecomp.sdc.be.config.Configuration; import org.openecomp.sdc.be.config.ConfigurationManager; +import org.openecomp.sdc.be.dao.api.exception.JanusGraphException; import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphDao; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; import org.openecomp.sdc.be.dao.jsongraph.GraphVertex; @@ -129,6 +130,7 @@ import org.openecomp.sdc.be.model.utils.GroupUtils; import org.openecomp.sdc.be.resources.data.ComponentMetadataData; import org.openecomp.sdc.common.jsongraph.util.CommonUtility; import org.openecomp.sdc.common.jsongraph.util.CommonUtility.LogLevelEnum; +import org.openecomp.sdc.common.log.enums.EcompLoggerErrorCode; import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.common.util.ValidationUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -171,12 +173,12 @@ public class ToscaOperationFacade { return Optional.empty(); } List capabilityDefinitionList = componentCapabilities.values().stream().flatMap(Collection::stream) - .collect(Collectors.toList()); + .collect(Collectors.toList()); if (CollectionUtils.isEmpty(capabilityDefinitionList)) { return Optional.empty(); } return capabilityDefinitionList.stream().filter(capabilityDefinition -> capabilityDefinition.getUniqueId().equals(propertyParentUniqueId)) - .findAny(); + .findAny(); } public Either getToscaFullElement(String componentId) { @@ -233,7 +235,7 @@ public class ToscaOperationFacade { props.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name()); props.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true); Either, JanusGraphOperationStatus> getVertexEither = janusGraphDao - .getByCriteria(ModelConverter.getVertexType(component), props); + .getByCriteria(ModelConverter.getVertexType(component), props); if (getVertexEither.isRight()) { log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, component.getUniqueId(), getVertexEither.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getVertexEither.right().value())); @@ -302,7 +304,7 @@ public class ToscaOperationFacade { return StorageOperationStatus.OK; } else { Either getResponse = janusGraphDao - .getVertexById(componentToDelete.getUniqueId(), JsonParseFlagEnum.ParseAll); + .getVertexById(componentToDelete.getUniqueId(), JsonParseFlagEnum.ParseAll); if (getResponse.isRight()) { log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, componentToDelete.getUniqueId(), getResponse.right().value()); return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getResponse.right().value()); @@ -374,7 +376,7 @@ public class ToscaOperationFacade { propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true); propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); final Either, JanusGraphOperationStatus> highestResources = janusGraphDao - .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, parseFlag, model); + .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, parseFlag, model); if (highestResources.isRight()) { final JanusGraphOperationStatus status = highestResources.right().value(); log.debug("failed to find resource with name {}. status={} ", nodeName, status); @@ -414,7 +416,7 @@ public class ToscaOperationFacade { Map properties = new EnumMap<>(GraphPropertyEnum.class); properties.put(GraphPropertyEnum.CSAR_UUID, csarUUID); Either, JanusGraphOperationStatus> resources = janusGraphDao - .getByCriteria(null, properties, JsonParseFlagEnum.ParseMetadata); + .getByCriteria(null, properties, JsonParseFlagEnum.ParseMetadata); if (resources.isRight()) { if (resources.right().value() == JanusGraphOperationStatus.NOT_FOUND) { return StorageOperationStatus.OK; @@ -456,7 +458,7 @@ public class ToscaOperationFacade { public Either getByToscaResourceNameMatchingVendorRelease(final String toscaResourceName, final String vendorVersion) { return getByToscaResourceNameMatchingVendorRelease(toscaResourceName, VertexTypeEnum.NODE_TYPE, JsonParseFlagEnum.ParseMetadata, - vendorVersion); + vendorVersion); } public Either getByToscaResourceNameMatchingVendorRelease(String toscaResourceName, VertexTypeEnum vertexType, @@ -466,13 +468,13 @@ public class ToscaOperationFacade { props.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name()); Map> predicateCriteria = getVendorVersionPredicate(vendorRelease); Either, JanusGraphOperationStatus> getLatestRes = janusGraphDao - .getByCriteria(vertexType, props, null, predicateCriteria, parseFlag, null); + .getByCriteria(vertexType, props, null, predicateCriteria, parseFlag, null); if (getLatestRes.isRight() || CollectionUtils.isEmpty(getLatestRes.left().value())) { getLatestRes = janusGraphDao.getByCriteria(vertexType, props, parseFlag); } return getLatestRes.right().map(status -> { CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch {} with name {}. status={} ", vertexType, toscaResourceName, status); + .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch {} with name {}. status={} ", vertexType, toscaResourceName, status); return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status); }).left().bind(resources -> { double version = 0.0; @@ -505,7 +507,7 @@ public class ToscaOperationFacade { hasNotProperties.put(GraphPropertyEnum.IS_DELETED, true); Either, JanusGraphOperationStatus> getResourceRes = janusGraphDao - .getByCriteria(VertexTypeEnum.NODE_TYPE, hasProperties, hasNotProperties, JsonParseFlagEnum.ParseAll, model); + .getByCriteria(VertexTypeEnum.NODE_TYPE, hasProperties, hasNotProperties, JsonParseFlagEnum.ParseAll, model); if (getResourceRes.isRight()) { JanusGraphOperationStatus status = getResourceRes.right().value(); log.debug("failed to find resource with toscaResourceName {}, version {}. Status is {} ", toscaResourceName, version, status); @@ -541,12 +543,12 @@ public class ToscaOperationFacade { public List getResourceModelElementVertices(final Resource resource) { final Either vertex = - janusGraphDao.getVertexById(resource.getUniqueId(), JsonParseFlagEnum.NoParse); + janusGraphDao.getVertexById(resource.getUniqueId(), JsonParseFlagEnum.NoParse); if (vertex.isRight() || Objects.isNull(vertex.left().value())) { return Collections.emptyList(); } final Either, JanusGraphOperationStatus> nodeModelVertices = - janusGraphDao.getParentVertices(vertex.left().value(), EdgeLabelEnum.MODEL_ELEMENT, JsonParseFlagEnum.NoParse); + janusGraphDao.getParentVertices(vertex.left().value(), EdgeLabelEnum.MODEL_ELEMENT, JsonParseFlagEnum.NoParse); if (nodeModelVertices.isRight() || nodeModelVertices.left().value() == null) { return Collections.emptyList(); } @@ -576,7 +578,7 @@ public class ToscaOperationFacade { Either, JanusGraphOperationStatus> getLatestRes = janusGraphDao.getByCriteria(vertexType, props, parseFlag); return getLatestRes.right().map(status -> { CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch {} with name {}. status={} ", vertexType, toscaResourceName, status); + .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch {} with name {}. status={} ", vertexType, toscaResourceName, status); return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status); }).left().bind(resources -> { double version = 0.0; @@ -618,7 +620,7 @@ public class ToscaOperationFacade { if (getLatestRes.isRight()) { JanusGraphOperationStatus status = getLatestRes.right().value(); CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch {} with name {}. status={} ", vertexType, toscaResourceName, status); + .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch {} with name {}. status={} ", vertexType, toscaResourceName, status); result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status)); } if (result == null) { @@ -676,7 +678,7 @@ public class ToscaOperationFacade { public Either, StorageOperationStatus> associateResourceInstances(Component component, String componentId, List relations) { Either, StorageOperationStatus> reqAndCapListEither = nodeTemplateOperation - .associateResourceInstances(component, componentId, relations); + .associateResourceInstances(component, componentId, relations); if (component != null) { updateInstancesCapAndReqOnComponentFromDB(component); } @@ -687,7 +689,7 @@ public class ToscaOperationFacade { Map properties = new EnumMap<>(GraphPropertyEnum.class); properties.put(GraphPropertyEnum.TOSCA_RESOURCE_NAME, name); Either, JanusGraphOperationStatus> resources = janusGraphDao - .getByCriteria(null, properties, JsonParseFlagEnum.ParseMetadata); + .getByCriteria(null, properties, JsonParseFlagEnum.ParseMetadata); if (resources.isRight() && resources.right().value() != JanusGraphOperationStatus.NOT_FOUND) { log.debug("failed to get resources from graph with property name: {}", name); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(resources.right().value())); @@ -712,14 +714,14 @@ public class ToscaOperationFacade { public Either overrideComponent(Resource newComponent, Resource oldComponent) { copyArtifactsToNewComponent(newComponent, oldComponent); Either componentVEither = janusGraphDao - .getVertexById(oldComponent.getUniqueId(), JsonParseFlagEnum.NoParse); + .getVertexById(oldComponent.getUniqueId(), JsonParseFlagEnum.NoParse); if (componentVEither.isRight()) { log.debug("Failed to fetch component {} error {}", oldComponent.getUniqueId(), componentVEither.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(componentVEither.right().value())); } GraphVertex componentv = componentVEither.left().value(); Either parentVertexEither = janusGraphDao - .getParentVertex(componentv, EdgeLabelEnum.VERSION, JsonParseFlagEnum.NoParse); + .getParentVertex(componentv, EdgeLabelEnum.VERSION, JsonParseFlagEnum.NoParse); if (parentVertexEither.isRight() && parentVertexEither.right().value() != JanusGraphOperationStatus.NOT_FOUND) { log.debug("Failed to fetch parent version for component {} error {}", oldComponent.getUniqueId(), parentVertexEither.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(parentVertexEither.right().value())); @@ -736,7 +738,7 @@ public class ToscaOperationFacade { } Resource newElement = createToscaComponent.left().value(); Either newVersionEither = janusGraphDao - .getVertexById(newElement.getUniqueId(), JsonParseFlagEnum.NoParse); + .getVertexById(newElement.getUniqueId(), JsonParseFlagEnum.NoParse); if (newVersionEither.isRight()) { log.debug("Failed to fetch new tosca element component {} error {}", newComponent.getUniqueId(), newVersionEither.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(newVersionEither.right().value())); @@ -744,10 +746,10 @@ public class ToscaOperationFacade { if (parentVertexEither.isLeft()) { GraphVertex previousVersionV = parentVertexEither.left().value(); JanusGraphOperationStatus createEdge = janusGraphDao - .createEdge(previousVersionV, newVersionEither.left().value(), EdgeLabelEnum.VERSION, null); + .createEdge(previousVersionV, newVersionEither.left().value(), EdgeLabelEnum.VERSION, null); if (createEdge != JanusGraphOperationStatus.OK) { log.debug("Failed to associate to previous version {} new version {} error {}", previousVersionV.getUniqueId(), - newVersionEither.right().value(), createEdge); + newVersionEither.right().value(), createEdge); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(createEdge)); } } @@ -817,7 +819,7 @@ public class ToscaOperationFacade { propertiesToMatch.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true); propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); Either, JanusGraphOperationStatus> highestResources = janusGraphDao - .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, parseFlag, model); + .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, parseFlag, model); if (highestResources.isRight()) { JanusGraphOperationStatus status = highestResources.right().value(); log.debug("failed to find resource with name {}. status={} ", nodeName, status); @@ -856,7 +858,7 @@ public class ToscaOperationFacade { } propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); Either, JanusGraphOperationStatus> getComponentsRes = janusGraphDao - .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll); + .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll); if (getComponentsRes.isRight()) { JanusGraphOperationStatus status = getComponentsRes.right().value(); log.debug("Failed to fetch the component with system name {}. Status is {} ", systemName, status); @@ -868,7 +870,7 @@ public class ToscaOperationFacade { getComponentRes = getToscaElementByOperation(componentVertex); if (getComponentRes.isRight()) { log.debug("Failed to get the component {}. Status is {} ", componentVertex.getJsonMetadataField(JsonPresentationFields.NAME), - getComponentRes.right().value()); + getComponentRes.right().value()); result = Either.right(getComponentRes.right().value()); break; } @@ -900,7 +902,7 @@ public class ToscaOperationFacade { hasProperties.put(GraphPropertyEnum.COMPONENT_TYPE, componentType.name()); } Either, JanusGraphOperationStatus> getResourceRes = janusGraphDao - .getByCriteria(null, hasProperties, hasNotProperties, parseFlag); + .getByCriteria(null, hasProperties, hasNotProperties, parseFlag); if (getResourceRes.isRight()) { JanusGraphOperationStatus status = getResourceRes.right().value(); log.debug("failed to find resource with name {}, version {}. Status is {} ", name, version, status); @@ -923,7 +925,7 @@ public class ToscaOperationFacade { } Map> predicateCriteria = getVendorVersionPredicate(vendorRelease); Either, JanusGraphOperationStatus> getResourceRes = janusGraphDao.getByCriteria(null, hasProperties, hasNotProperties, - predicateCriteria, parseFlag, modelName); + predicateCriteria, parseFlag, modelName); if (getResourceRes.isRight()) { JanusGraphOperationStatus status = getResourceRes.right().value(); log.debug("failed to find resource with name {}, version {}. Status is {} ", name, predicateCriteria, status); @@ -935,8 +937,8 @@ public class ToscaOperationFacade { public Either, StorageOperationStatus> getCatalogOrArchiveComponents(boolean isCatalog, List excludeTypes) { List excludedResourceTypes = Optional.ofNullable(excludeTypes).orElse(Collections.emptyList()).stream() - .filter(type -> !type.equals(OriginTypeEnum.SERVICE)).map(type -> ResourceTypeEnum.getTypeByName(type.name())) - .collect(Collectors.toList()); + .filter(type -> !type.equals(OriginTypeEnum.SERVICE)).map(type -> ResourceTypeEnum.getTypeByName(type.name())) + .collect(Collectors.toList()); return topologyTemplateOperation.getElementCatalogData(isCatalog, excludedResourceTypes); } @@ -948,8 +950,8 @@ public class ToscaOperationFacade { Either, StorageOperationStatus> catalogDataResult; List toscaElements = new ArrayList<>(); List excludedResourceTypes = Optional.ofNullable(excludeTypes).orElse(Collections.emptyList()).stream() - .filter(type -> !type.equals(OriginTypeEnum.SERVICE)).map(type -> ResourceTypeEnum.getTypeByName(type.name())) - .collect(Collectors.toList()); + .filter(type -> !type.equals(OriginTypeEnum.SERVICE)).map(type -> ResourceTypeEnum.getTypeByName(type.name())) + .collect(Collectors.toList()); switch (componentType) { case RESOURCE: catalogDataResult = nodeTypeOperation.getElementCatalogData(ComponentTypeEnum.RESOURCE, excludedResourceTypes, isHighestVersions); @@ -1001,11 +1003,15 @@ public class ToscaOperationFacade { } public List deleteService(String invariantUUID, final boolean inTransaction) { - List allServiceVerticesToDelete = getVerticesForAllVersions(invariantUUID, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE); + return deleteComponent(invariantUUID, NodeTypeEnum.Service, inTransaction); + } + + public List deleteComponent(String invariantUUID, NodeTypeEnum componentType, final boolean inTransaction) { + final List allServiceVerticesToDelete = findVertexListByInvariantUuid(invariantUUID); List affectedComponentIds = new ArrayList<>(); try { - checkNotUsed( allServiceVerticesToDelete); - lockAllVerticesByNodeType(allServiceVerticesToDelete, NodeTypeEnum.Service); + checkNotUsed(allServiceVerticesToDelete); + lockAllVerticesByNodeType(allServiceVerticesToDelete, componentType); for (GraphVertex elementV : allServiceVerticesToDelete) { Either deleteToscaElement = deleteToscaElement(elementV); if (deleteToscaElement.isRight()) { @@ -1024,7 +1030,7 @@ public class ToscaOperationFacade { } throw exception; } finally { - unlockAllVerticesByNodeType(allServiceVerticesToDelete, NodeTypeEnum.Service); + unlockAllVerticesByNodeType(allServiceVerticesToDelete, componentType); } return affectedComponentIds; } @@ -1045,22 +1051,13 @@ public class ToscaOperationFacade { } } - private List getVerticesForAllVersions(String invariantUUID, ToscaElementTypeEnum componentType){ - Either, StorageOperationStatus> allComponents = - getComponentListByInvariantUuid(invariantUUID, null); - if (allComponents.isRight()) { - throwStorageException(allComponents.right().value()); - } - List allComponentVertices = new ArrayList<>(); - for (Component component : allComponents.left().value()) { - Either componentGraphVertex = topologyTemplateOperation - .getComponentByLabelAndId(component.getUniqueId(), componentType, JsonParseFlagEnum.ParseAll); - if (componentGraphVertex.isRight()) { - throwStorageException(componentGraphVertex.right().value()); - } - allComponentVertices.add(componentGraphVertex.left().value()); + public List findVertexListByInvariantUuid(final String invariantUuid) { + try { + return janusGraphDao.findAllVertexByInvariantUuid(invariantUuid, Collections.emptyMap()); + } catch (final JanusGraphException e) { + log.error(EcompLoggerErrorCode.DATA_ERROR, this.getClass().getName(), e.getMessage()); + throw new StorageException(e.getStatus()); } - return allComponentVertices; } public void commitAndCheck(String componentId) { @@ -1120,7 +1117,7 @@ public class ToscaOperationFacade { Either deleteToscaElement = deleteToscaElement(elementV); if (deleteToscaElement.isRight()) { log.debug("Failed to delete marked element UniqueID {}, Name {}, error {}", elementV.getUniqueId(), - elementV.getMetadataProperties().get(GraphPropertyEnum.NAME), deleteToscaElement.right().value()); + elementV.getMetadataProperties().get(GraphPropertyEnum.NAME), deleteToscaElement.right().value()); continue; } deleted.add(elementV.getUniqueId()); @@ -1187,19 +1184,19 @@ public class ToscaOperationFacade { } String nextComponentInstanceCounter = getNextComponentInstanceCounter(containerComponent, nameToFindForCounter); Either, StorageOperationStatus> addResult = nodeTemplateOperation - .addComponentInstanceToTopologyTemplate(ModelConverter.convertToToscaElement(containerComponent), - ModelConverter.convertToToscaElement(origComponent), nextComponentInstanceCounter, componentInstance, allowDeleted, user); + .addComponentInstanceToTopologyTemplate(ModelConverter.convertToToscaElement(containerComponent), + ModelConverter.convertToToscaElement(origComponent), nextComponentInstanceCounter, componentInstance, allowDeleted, user); if (addResult.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to add the component instance {} to container component {}. ", - componentInstance.getName(), containerComponent.getName()); + componentInstance.getName(), containerComponent.getName()); result = Either.right(addResult.right().value()); } if (result == null) { updateContainerComponentRes = topologyTemplateOperation.getToscaElement(containerComponent.getUniqueId()); if (updateContainerComponentRes.isRight()) { CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch updated topology template {} with updated component instance {}. ", - containerComponent.getName(), componentInstance.getName()); + .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch updated topology template {} with updated component instance {}. ", + containerComponent.getName(), componentInstance.getName()); result = Either.right(updateContainerComponentRes.right().value()); } } @@ -1207,8 +1204,8 @@ public class ToscaOperationFacade { Component updatedComponent = ModelConverter.convertFromToscaElement(updateContainerComponentRes.left().value()); String createdInstanceId = addResult.left().value().getRight(); CommonUtility - .addRecordToLog(log, LogLevelEnum.TRACE, "The component instance {} has been added to container component {}. ", createdInstanceId, - updatedComponent.getName()); + .addRecordToLog(log, LogLevelEnum.TRACE, "The component instance {} has been added to container component {}. ", createdInstanceId, + updatedComponent.getName()); result = Either.left(new ImmutablePair<>(updatedComponent, createdInstanceId)); } return result; @@ -1218,7 +1215,7 @@ public class ToscaOperationFacade { boolean allowDeleted, boolean isUpdateCsar) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Going to add component instances to component {}", containerComponent.getUniqueId()); Either metadataVertex = janusGraphDao - .getVertexById(containerComponent.getUniqueId(), JsonParseFlagEnum.ParseAll); + .getVertexById(containerComponent.getUniqueId(), JsonParseFlagEnum.ParseAll); if (metadataVertex.isRight()) { JanusGraphOperationStatus status = metadataVertex.right().value(); if (status == JanusGraphOperationStatus.NOT_FOUND) { @@ -1227,33 +1224,33 @@ public class ToscaOperationFacade { throw new StorageException(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(status)); } Map compnentInstancesMap = nodeTemplateOperation - .associateComponentInstancesToComponent(containerComponent, resourcesInstancesMap, metadataVertex.left().value(), allowDeleted, - isUpdateCsar); + .associateComponentInstancesToComponent(containerComponent, resourcesInstancesMap, metadataVertex.left().value(), allowDeleted, + isUpdateCsar); containerComponent.setComponentInstances(ModelConverter.getComponentInstancesFromMapObject(compnentInstancesMap, containerComponent)); } public Either, StorageOperationStatus> updateComponentInstanceMetadataOfTopologyTemplate( - Component containerComponent, Component origComponent, ComponentInstance componentInstance) { + Component containerComponent, Component origComponent, ComponentInstance componentInstance) { Either, StorageOperationStatus> result = null; CommonUtility.addRecordToLog(log, LogLevelEnum.TRACE, - "Going to update the metadata of the component instance {} belonging to container component {}. ", componentInstance.getName(), - containerComponent.getName()); + "Going to update the metadata of the component instance {} belonging to container component {}. ", componentInstance.getName(), + containerComponent.getName()); componentInstance.setIcon(origComponent.getIcon()); Either, StorageOperationStatus> updateResult = nodeTemplateOperation - .updateComponentInstanceMetadataOfTopologyTemplate(ModelConverter.convertToToscaElement(containerComponent), - ModelConverter.convertToToscaElement(origComponent), componentInstance); + .updateComponentInstanceMetadataOfTopologyTemplate(ModelConverter.convertToToscaElement(containerComponent), + ModelConverter.convertToToscaElement(origComponent), componentInstance); if (updateResult.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, - "Failed to update the metadata of the component instance {} belonging to container component {}. ", componentInstance.getName(), - containerComponent.getName()); + "Failed to update the metadata of the component instance {} belonging to container component {}. ", componentInstance.getName(), + containerComponent.getName()); result = Either.right(updateResult.right().value()); } if (result == null) { Component updatedComponent = ModelConverter.convertFromToscaElement(updateResult.left().value().getLeft()); String createdInstanceId = updateResult.left().value().getRight(); CommonUtility - .addRecordToLog(log, LogLevelEnum.TRACE, "The metadata of the component instance {} has been updated to container component {}. ", - createdInstanceId, updatedComponent.getName()); + .addRecordToLog(log, LogLevelEnum.TRACE, "The metadata of the component instance {} has been updated to container component {}. ", + createdInstanceId, updatedComponent.getName()); result = Either.left(new ImmutablePair<>(updatedComponent, createdInstanceId)); } return result; @@ -1267,18 +1264,18 @@ public class ToscaOperationFacade { ComponentParametersView filter) { Either result = null; CommonUtility.addRecordToLog(log, LogLevelEnum.TRACE, "Going to update the metadata belonging to container component {}. ", - containerComponent.getName()); + containerComponent.getName()); Either updateResult = nodeTemplateOperation - .updateComponentInstanceMetadataOfTopologyTemplate(ModelConverter.convertToToscaElement(containerComponent), filter); + .updateComponentInstanceMetadataOfTopologyTemplate(ModelConverter.convertToToscaElement(containerComponent), filter); if (updateResult.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to update the metadata belonging to container component {}. ", - containerComponent.getName()); + containerComponent.getName()); result = Either.right(updateResult.right().value()); } if (result == null) { Component updatedComponent = ModelConverter.convertFromToscaElement(updateResult.left().value()); CommonUtility - .addRecordToLog(log, LogLevelEnum.TRACE, "The metadata has been updated to container component {}. ", updatedComponent.getName()); + .addRecordToLog(log, LogLevelEnum.TRACE, "The metadata has been updated to container component {}. ", updatedComponent.getName()); result = Either.left(updatedComponent); } return result; @@ -1289,19 +1286,19 @@ public class ToscaOperationFacade { String resourceInstanceId) { Either, StorageOperationStatus> result = null; CommonUtility.addRecordToLog(log, LogLevelEnum.TRACE, "Going to delete the component instance {} belonging to container component {}. ", - resourceInstanceId, containerComponent.getName()); + resourceInstanceId, containerComponent.getName()); Either, StorageOperationStatus> updateResult = nodeTemplateOperation - .deleteComponentInstanceFromTopologyTemplate(ModelConverter.convertToToscaElement(containerComponent), resourceInstanceId); + .deleteComponentInstanceFromTopologyTemplate(ModelConverter.convertToToscaElement(containerComponent), resourceInstanceId); if (updateResult.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to delete the component instance {} belonging to container component {}. ", - resourceInstanceId, containerComponent.getName()); + resourceInstanceId, containerComponent.getName()); result = Either.right(updateResult.right().value()); } if (result == null) { Component updatedComponent = ModelConverter.convertFromToscaElement(updateResult.left().value().getLeft()); String deletedInstanceId = updateResult.left().value().getRight(); CommonUtility.addRecordToLog(log, LogLevelEnum.TRACE, "The component instance {} has been deleted from container component {}. ", - deletedInstanceId, updatedComponent.getName()); + deletedInstanceId, updatedComponent.getName()); result = Either.left(new ImmutablePair<>(updatedComponent, deletedInstanceId)); } return result; @@ -1324,11 +1321,11 @@ public class ToscaOperationFacade { */ private Integer getMaxCounterFromNamesAndIds(Component containerComponent, String normalizedName) { List countersInNames = containerComponent.getComponentInstances().stream() - .filter(ci -> ci.getNormalizedName() != null && ci.getNormalizedName().startsWith(normalizedName)) - .map(ci -> ci.getNormalizedName().split(normalizedName)[1]).collect(Collectors.toList()); + .filter(ci -> ci.getNormalizedName() != null && ci.getNormalizedName().startsWith(normalizedName)) + .map(ci -> ci.getNormalizedName().split(normalizedName)[1]).collect(Collectors.toList()); List countersInIds = containerComponent.getComponentInstances().stream() - .filter(ci -> ci.getUniqueId() != null && ci.getUniqueId().contains(normalizedName)).map(ci -> ci.getUniqueId().split(normalizedName)[1]) - .collect(Collectors.toList()); + .filter(ci -> ci.getUniqueId() != null && ci.getUniqueId().contains(normalizedName)).map(ci -> ci.getUniqueId().split(normalizedName)[1]) + .collect(Collectors.toList()); List namesAndIdsList = new ArrayList<>(countersInNames); namesAndIdsList.addAll(countersInIds); return getMaxInteger(namesAndIdsList); @@ -1363,7 +1360,7 @@ public class ToscaOperationFacade { } GraphVertex vertex = getVertexEither.left().value(); Map inputsMap = inputs.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> new PropertyDataDefinition(e.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, e -> new PropertyDataDefinition(e.getValue()))); StorageOperationStatus status = topologyTemplateOperation.associateInputsToComponent(vertex, inputsMap, componentId); if (StorageOperationStatus.OK == status) { log.debug(COMPONENT_CREATED_SUCCESSFULLY); @@ -1384,9 +1381,9 @@ public class ToscaOperationFacade { } GraphVertex vertex = getVertexEither.left().value(); Map inputsMap = inputs.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> new PropertyDefinition(e.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, e -> new PropertyDefinition(e.getValue()))); StorageOperationStatus status = topologyTemplateOperation - .addToscaDataToToscaElement(vertex, EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, inputsMap, JsonPresentationFields.NAME); + .addToscaDataToToscaElement(vertex, EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, inputsMap, JsonPresentationFields.NAME); if (StorageOperationStatus.OK == status) { log.debug(COMPONENT_CREATED_SUCCESSFULLY); List inputsResList = null; @@ -1406,9 +1403,9 @@ public class ToscaOperationFacade { } GraphVertex vertex = getVertexEither.left().value(); Map outputsMap = outputs.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> new AttributeDefinition(e.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, e -> new AttributeDefinition(e.getValue()))); StorageOperationStatus status = topologyTemplateOperation - .addToscaDataToToscaElement(vertex, EdgeLabelEnum.OUTPUTS, VertexTypeEnum.OUTPUTS, outputsMap, JsonPresentationFields.NAME); + .addToscaDataToToscaElement(vertex, EdgeLabelEnum.OUTPUTS, VertexTypeEnum.OUTPUTS, outputsMap, JsonPresentationFields.NAME); if (StorageOperationStatus.OK == status) { log.debug(COMPONENT_CREATED_SUCCESSFULLY); List outputsResList = null; @@ -1432,7 +1429,7 @@ public class ToscaOperationFacade { log.trace("#addDataTypesToComponent - enter, componentId={}", componentId); /* get component vertex */ Either getVertexEither = janusGraphDao - .getVertexById(componentId, JsonParseFlagEnum.NoParse); + .getVertexById(componentId, JsonParseFlagEnum.NoParse); if (getVertexEither.isRight()) { /* not found / error */ log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, componentId, getVertexEither.right().value()); @@ -1442,12 +1439,12 @@ public class ToscaOperationFacade { log.trace("#addDataTypesToComponent - get vertex ok"); // convert DataTypeDefinition to DataTypeDataDefinition Map dataTypeDataMap = dataTypes.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> convertDataTypeToDataTypeData(e.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, e -> convertDataTypeToDataTypeData(e.getValue()))); // add datatype(s) to the Component. // if child vertex does not exist, it will be created. StorageOperationStatus status = topologyTemplateOperation - .addToscaDataToToscaElement(vertex, EdgeLabelEnum.DATA_TYPES, VertexTypeEnum.DATA_TYPES, dataTypeDataMap, JsonPresentationFields.NAME); + .addToscaDataToToscaElement(vertex, EdgeLabelEnum.DATA_TYPES, VertexTypeEnum.DATA_TYPES, dataTypeDataMap, JsonPresentationFields.NAME); if (StorageOperationStatus.OK == status) { log.debug(COMPONENT_CREATED_SUCCESSFULLY); List inputsResList = null; @@ -1464,7 +1461,7 @@ public class ToscaOperationFacade { DataTypeDataDefinition dataTypeData = new DataTypeDataDefinition(dataType); if (CollectionUtils.isNotEmpty(dataType.getProperties())) { List propertyDataList = dataType.getProperties().stream().map(PropertyDataDefinition::new) - .collect(Collectors.toList()); + .collect(Collectors.toList()); dataTypeData.setPropertiesData(propertyDataList); } // if "derivedFrom" data_type exists, copy the name to "derivedFromName" @@ -1472,7 +1469,7 @@ public class ToscaOperationFacade { // if names are different, log it if (!StringUtils.equals(dataTypeData.getDerivedFromName(), dataType.getDerivedFrom().getName())) { log.debug("#convertDataTypeToDataTypeData - derivedFromName(={}) overwritten by derivedFrom.name(={})", dataType.getDerivedFromName(), - dataType.getDerivedFrom().getName()); + dataType.getDerivedFrom().getName()); } dataTypeData.setDerivedFromName(dataType.getDerivedFrom().getName()); } @@ -1509,7 +1506,7 @@ public class ToscaOperationFacade { GraphVertex vertex = getVertexEither.left().value(); List inputsAsDataDef = inputs.stream().map(PropertyDataDefinition::new).collect(Collectors.toList()); StorageOperationStatus status = topologyTemplateOperation - .updateToscaDataOfToscaElement(vertex, EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, inputsAsDataDef, JsonPresentationFields.NAME); + .updateToscaDataOfToscaElement(vertex, EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, inputsAsDataDef, JsonPresentationFields.NAME); if (StorageOperationStatus.OK == status) { log.debug(COMPONENT_CREATED_SUCCESSFULLY); List inputsResList = null; @@ -1523,7 +1520,7 @@ public class ToscaOperationFacade { // region - ComponentInstance public Either>, StorageOperationStatus> associateComponentInstancePropertiesToComponent( - Map> instProperties, String componentId) { + Map> instProperties, String componentId) { Either getVertexEither = janusGraphDao.getVertexById(componentId, JsonParseFlagEnum.NoParse); if (getVertexEither.isRight()) { log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, componentId, getVertexEither.right().value()); @@ -1536,7 +1533,7 @@ public class ToscaOperationFacade { for (Entry> entry : instProperties.entrySet()) { propertiesMap = new MapPropertiesDataDefinition(); propertiesMap.setMapToscaDataDefinition( - entry.getValue().stream().map(PropertyDataDefinition::new).collect(Collectors.toMap(PropertyDataDefinition::getName, e -> e))); + entry.getValue().stream().map(PropertyDataDefinition::new).collect(Collectors.toMap(PropertyDataDefinition::getName, e -> e))); instPropsMap.put(entry.getKey(), propertiesMap); } } @@ -1552,7 +1549,7 @@ public class ToscaOperationFacade { * saves the instInputs as the updated instance inputs of the component container in DB */ public Either>, StorageOperationStatus> updateComponentInstanceInputsToComponent( - Map> instInputs, String componentId) { + Map> instInputs, String componentId) { if (instInputs == null || instInputs.isEmpty()) { return Either.left(instInputs); } @@ -1562,11 +1559,11 @@ public class ToscaOperationFacade { List pathKeysPerInst = new ArrayList<>(); pathKeysPerInst.add(inputsPerIntance.getKey()); status = topologyTemplateOperation - .updateToscaDataDeepElementsOfToscaElement(componentId, EdgeLabelEnum.INST_INPUTS, VertexTypeEnum.INST_INPUTS, toscaDataListPerInst, - pathKeysPerInst, JsonPresentationFields.NAME); + .updateToscaDataDeepElementsOfToscaElement(componentId, EdgeLabelEnum.INST_INPUTS, VertexTypeEnum.INST_INPUTS, toscaDataListPerInst, + pathKeysPerInst, JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { log.debug("Failed to update component instance inputs for instance {} in component {} edge type {} error {}", - inputsPerIntance.getKey(), componentId, EdgeLabelEnum.INST_INPUTS, status); + inputsPerIntance.getKey(), componentId, EdgeLabelEnum.INST_INPUTS, status); return Either.right(status); } } @@ -1577,7 +1574,7 @@ public class ToscaOperationFacade { * saves the instProps as the updated instance properties of the component container in DB */ public Either>, StorageOperationStatus> updateComponentInstancePropsToComponent( - Map> instProps, String componentId) { + Map> instProps, String componentId) { if (instProps == null || instProps.isEmpty()) { return Either.left(instProps); } @@ -1587,11 +1584,11 @@ public class ToscaOperationFacade { List pathKeysPerInst = new ArrayList<>(); pathKeysPerInst.add(propsPerIntance.getKey()); status = topologyTemplateOperation - .updateToscaDataDeepElementsOfToscaElement(componentId, EdgeLabelEnum.INST_PROPERTIES, VertexTypeEnum.INST_PROPERTIES, - toscaDataListPerInst, pathKeysPerInst, JsonPresentationFields.NAME); + .updateToscaDataDeepElementsOfToscaElement(componentId, EdgeLabelEnum.INST_PROPERTIES, VertexTypeEnum.INST_PROPERTIES, + toscaDataListPerInst, pathKeysPerInst, JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { log.debug("Failed to update component instance inputs for instance {} in component {} edge type {} error {}", - propsPerIntance.getKey(), componentId, EdgeLabelEnum.INST_PROPERTIES, status); + propsPerIntance.getKey(), componentId, EdgeLabelEnum.INST_PROPERTIES, status); return Either.right(status); } } @@ -1599,7 +1596,7 @@ public class ToscaOperationFacade { } public Either>, StorageOperationStatus> associateComponentInstanceInputsToComponent( - Map> instInputs, String componentId) { + Map> instInputs, String componentId) { Either getVertexEither = janusGraphDao.getVertexById(componentId, JsonParseFlagEnum.NoParse); if (getVertexEither.isRight()) { log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, componentId, getVertexEither.right().value()); @@ -1612,7 +1609,7 @@ public class ToscaOperationFacade { for (Entry> entry : instInputs.entrySet()) { propertiesMap = new MapPropertiesDataDefinition(); propertiesMap.setMapToscaDataDefinition( - entry.getValue().stream().map(PropertyDataDefinition::new).collect(Collectors.toMap(PropertyDataDefinition::getName, e -> e))); + entry.getValue().stream().map(PropertyDataDefinition::new).collect(Collectors.toMap(PropertyDataDefinition::getName, e -> e))); instPropsMap.put(entry.getKey(), propertiesMap); } } @@ -1625,7 +1622,7 @@ public class ToscaOperationFacade { } public Either>, StorageOperationStatus> addComponentInstanceInputsToComponent( - Component containerComponent, Map> instProperties) { + Component containerComponent, Map> instProperties) { requireNonNull(instProperties); StorageOperationStatus status; for (Entry> entry : instProperties.entrySet()) { @@ -1635,7 +1632,7 @@ public class ToscaOperationFacade { for (ComponentInstanceInput property : props) { List componentInstancesInputs = containerComponent.getComponentInstancesInputs().get(componentInstanceId); Optional instanceProperty = componentInstancesInputs.stream() - .filter(p -> p.getName().equals(property.getName())).findAny(); + .filter(p -> p.getName().equals(property.getName())).findAny(); if (instanceProperty.isPresent()) { status = updateComponentInstanceInput(containerComponent, componentInstanceId, property); } else { @@ -1654,7 +1651,7 @@ public class ToscaOperationFacade { } public Either>, StorageOperationStatus> addComponentInstanceOutputsToComponent( - Component containerComponent, Map> instProperties) { + Component containerComponent, Map> instProperties) { requireNonNull(instProperties); StorageOperationStatus status; for (final Entry> entry : instProperties.entrySet()) { @@ -1663,9 +1660,9 @@ public class ToscaOperationFacade { if (!isEmpty(props)) { for (final ComponentInstanceOutput property : props) { final List componentInstancesInputs = containerComponent.getComponentInstancesOutputs() - .get(componentInstanceId); + .get(componentInstanceId); final Optional instanceProperty = componentInstancesInputs.stream() - .filter(p -> p.getName().equals(property.getName())).findAny(); + .filter(p -> p.getName().equals(property.getName())).findAny(); if (instanceProperty.isPresent()) { status = updateComponentInstanceOutput(containerComponent, componentInstanceId, property); } else { @@ -1684,13 +1681,13 @@ public class ToscaOperationFacade { } public Either>, StorageOperationStatus> addComponentInstancePropertiesToComponent( - Component containerComponent, Map> instProperties) { + Component containerComponent, Map> instProperties) { requireNonNull(instProperties); for (Entry> entry : instProperties.entrySet()) { List props = entry.getValue(); String componentInstanceId = entry.getKey(); List originalComponentInstProps = containerComponent.getComponentInstancesProperties() - .get(componentInstanceId); + .get(componentInstanceId); Map> containerComponentCapabilities = containerComponent.getCapabilities(); if (isEmpty(props)) { continue; @@ -1701,7 +1698,7 @@ public class ToscaOperationFacade { Optional capPropDefinition = getPropertyCapability(propertyParentUniqueId, containerComponent); if (capPropDefinition.isPresent() && MapUtils.isNotEmpty(containerComponentCapabilities)) { status = populateAndUpdateInstanceCapProperty(containerComponent, componentInstanceId, containerComponentCapabilities, property, - capPropDefinition.get()); + capPropDefinition.get()); } if (status == null) { status = updateOrAddComponentInstanceProperty(containerComponent, componentInstanceId, originalComponentInstProps, property); @@ -1715,7 +1712,7 @@ public class ToscaOperationFacade { } public Either>, StorageOperationStatus> addComponentInstanceAttributesToComponent( - final Component containerComponent, final Map> instProperties) { + final Component containerComponent, final Map> instProperties) { requireNonNull(instProperties); for (final Entry> entry : instProperties.entrySet()) { final List props = entry.getValue(); @@ -1724,10 +1721,10 @@ public class ToscaOperationFacade { } final String componentInstanceId = entry.getKey(); final List originalComponentInstProps = containerComponent.getComponentInstancesAttributes() - .get(componentInstanceId); + .get(componentInstanceId); for (final ComponentInstanceAttribute property : props) { final StorageOperationStatus status = updateOrAddComponentInstanceAttribute(containerComponent, componentInstanceId, - originalComponentInstProps, property); + originalComponentInstProps, property); if (status != StorageOperationStatus.OK) { return Either.right(status); } @@ -1745,7 +1742,7 @@ public class ToscaOperationFacade { return null; } Optional capDefToGetProp = capabilityDefinitions.stream() - .filter(cap -> cap.getUniqueId().equals(capabilityDefinition.getUniqueId()) && cap.getPath().size() == 1).findAny(); + .filter(cap -> cap.getUniqueId().equals(capabilityDefinition.getUniqueId()) && cap.getPath().size() == 1).findAny(); if (capDefToGetProp.isPresent()) { return updateInstanceCapabilityProperty(containerComponent, componentInstanceId, property, capDefToGetProp.get()); } @@ -1758,7 +1755,7 @@ public class ToscaOperationFacade { StorageOperationStatus status; // check if the property already exists or not Optional instanceProperty = originalComponentInstProps.stream() - .filter(p -> p.getUniqueId().equals(property.getUniqueId())).findAny(); + .filter(p -> p.getUniqueId().equals(property.getUniqueId())).findAny(); if (instanceProperty.isPresent()) { status = updateComponentInstanceProperty(containerComponent, componentInstanceId, property); } else { @@ -1776,7 +1773,7 @@ public class ToscaOperationFacade { StorageOperationStatus status; // check if the property already exists or not Optional instanceProperty = originalComponentInstProps.stream() - .filter(p -> p.getUniqueId().equals(property.getUniqueId())).findAny(); + .filter(p -> p.getUniqueId().equals(property.getUniqueId())).findAny(); if (instanceProperty.isPresent()) { status = updateComponentInstanceAttribute(containerComponent, componentInstanceId, property); } else { @@ -1808,7 +1805,7 @@ public class ToscaOperationFacade { StorageOperationStatus status; StringBuilder sb = new StringBuilder(componentInstanceId); sb.append(ModelConverter.CAP_PROP_DELIM).append(propOwner).append(ModelConverter.CAP_PROP_DELIM).append(capabilityDefinition.getType()) - .append(ModelConverter.CAP_PROP_DELIM).append(capabilityDefinition.getName()); + .append(ModelConverter.CAP_PROP_DELIM).append(capabilityDefinition.getName()); String capKey = sb.toString(); status = updateComponentInstanceCapabiltyProperty(containerComponent, componentInstanceId, capKey, property); if (status != StorageOperationStatus.OK) { @@ -1839,7 +1836,7 @@ public class ToscaOperationFacade { GraphVertex vertex = getVertexEither.left().value(); if (MapUtils.isNotEmpty(capabilities)) { Either associateElementToData = topologyTemplateOperation - .associateElementToData(vertex, VertexTypeEnum.CAPABILITIES, EdgeLabelEnum.CAPABILITIES, capabilities); + .associateElementToData(vertex, VertexTypeEnum.CAPABILITIES, EdgeLabelEnum.CAPABILITIES, capabilities); if (associateElementToData.isRight()) { return associateElementToData.right().value(); } @@ -1856,7 +1853,7 @@ public class ToscaOperationFacade { GraphVertex vertex = getVertexEither.left().value(); if (MapUtils.isNotEmpty(requirements)) { Either associateElementToData = topologyTemplateOperation - .associateElementToData(vertex, VertexTypeEnum.REQUIREMENTS, EdgeLabelEnum.REQUIREMENTS, requirements); + .associateElementToData(vertex, VertexTypeEnum.REQUIREMENTS, EdgeLabelEnum.REQUIREMENTS, requirements); if (associateElementToData.isRight()) { return associateElementToData.right().value(); } @@ -1867,7 +1864,7 @@ public class ToscaOperationFacade { public StorageOperationStatus associateDeploymentArtifactsToInstances(Map> instDeploymentArtifacts, Component component, User user) { Either getVertexEither = janusGraphDao - .getVertexById(component.getUniqueId(), JsonParseFlagEnum.NoParse); + .getVertexById(component.getUniqueId(), JsonParseFlagEnum.NoParse); if (getVertexEither.isRight()) { log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, component.getUniqueId(), getVertexEither.right().value()); return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getVertexEither.right().value()); @@ -1879,9 +1876,9 @@ public class ToscaOperationFacade { for (Entry> entry : instDeploymentArtifacts.entrySet()) { Map artList = entry.getValue(); Map artifacts = artList.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue()))); artifactsMap = nodeTemplateOperation - .prepareInstDeploymentArtifactPerInstance(artifacts, entry.getKey(), user, NodeTemplateOperation.HEAT_VF_ENV_NAME); + .prepareInstDeploymentArtifactPerInstance(artifacts, entry.getKey(), user, NodeTemplateOperation.HEAT_VF_ENV_NAME); instArtMap.put(entry.getKey(), artifactsMap); } } @@ -1891,7 +1888,7 @@ public class ToscaOperationFacade { public StorageOperationStatus associateArtifactsToInstances(Map> instArtifacts, Component component) { Either getVertexEither = janusGraphDao - .getVertexById(component.getUniqueId(), JsonParseFlagEnum.NoParse); + .getVertexById(component.getUniqueId(), JsonParseFlagEnum.NoParse); if (getVertexEither.isRight()) { log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, component.getUniqueId(), getVertexEither.right().value()); return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getVertexEither.right().value()); @@ -1903,7 +1900,7 @@ public class ToscaOperationFacade { for (Entry> entry : instArtifacts.entrySet()) { Map artList = entry.getValue(); Map artifacts = artList.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue()))); artifactsMap = new MapArtifactDataDefinition(artifacts); instArtMap.put(entry.getKey(), artifactsMap); } @@ -1915,7 +1912,7 @@ public class ToscaOperationFacade { public StorageOperationStatus associateInstAttributeToComponentToInstances(Map> instArttributes, Component component) { Either getVertexEither = janusGraphDao - .getVertexById(component.getUniqueId(), JsonParseFlagEnum.NoParse); + .getVertexById(component.getUniqueId(), JsonParseFlagEnum.NoParse); if (getVertexEither.isRight()) { log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, component.getUniqueId(), getVertexEither.right().value()); return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getVertexEither.right().value()); @@ -1928,7 +1925,7 @@ public class ToscaOperationFacade { final List value = entry.getValue(); attributesMap = new MapAttributesDataDefinition(); attributesMap.setMapToscaDataDefinition( - value.stream().map(AttributeDefinition::new).collect(Collectors.toMap(AttributeDefinition::getName, e -> e))); + value.stream().map(AttributeDefinition::new).collect(Collectors.toMap(AttributeDefinition::getName, e -> e))); instAttr.put(entry.getKey(), attributesMap); } } @@ -1950,7 +1947,7 @@ public class ToscaOperationFacade { Map>> instReg, Component component) { Either getVertexEither = janusGraphDao - .getVertexById(component.getUniqueId(), JsonParseFlagEnum.NoParse); + .getVertexById(component.getUniqueId(), JsonParseFlagEnum.NoParse); if (getVertexEither.isRight()) { log.debug(COULDNT_FETCH_COMPONENT_WITH_AND_UNIQUE_ID_ERROR, component.getUniqueId(), getVertexEither.right().value()); return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getVertexEither.right().value()); @@ -1965,13 +1962,13 @@ public class ToscaOperationFacade { Map mapToscaDataDefinition = new HashMap<>(); for (Entry> instCapability : caps.entrySet()) { mapToscaDataDefinition.put(instCapability.getKey(), new ListCapabilityDataDefinition( - instCapability.getValue().stream().map(CapabilityDataDefinition::new).collect(Collectors.toList()))); + instCapability.getValue().stream().map(CapabilityDataDefinition::new).collect(Collectors.toList()))); } ComponentInstanceDataDefinition componentInstance = new ComponentInstanceDataDefinition(entry.getKey()); MapListCapabilityDataDefinition capMap = nodeTemplateOperation - .prepareCalculatedCapabiltyForNodeType(mapToscaDataDefinition, componentInstance); + .prepareCalculatedCapabiltyForNodeType(mapToscaDataDefinition, componentInstance); MapCapabilityProperty mapCapabilityProperty = ModelConverter - .convertToMapOfMapCapabiltyProperties(caps, componentInstance.getUniqueId(), true); + .convertToMapOfMapCapabiltyProperties(caps, componentInstance.getUniqueId(), true); calcCapabilty.put(entry.getKey().getUniqueId(), capMap); calculatedCapabilitiesProperties.put(entry.getKey().getUniqueId(), mapCapabilityProperty); } @@ -1982,24 +1979,24 @@ public class ToscaOperationFacade { Map mapToscaDataDefinition = new HashMap<>(); for (Entry> instReq : req.entrySet()) { mapToscaDataDefinition.put(instReq.getKey(), new ListRequirementDataDefinition( - instReq.getValue().stream().map(RequirementDataDefinition::new).collect(Collectors.toList()))); + instReq.getValue().stream().map(RequirementDataDefinition::new).collect(Collectors.toList()))); } MapListRequirementDataDefinition reqMap = nodeTemplateOperation - .prepareCalculatedRequirementForNodeType(mapToscaDataDefinition, new ComponentInstanceDataDefinition(entry.getKey())); + .prepareCalculatedRequirementForNodeType(mapToscaDataDefinition, new ComponentInstanceDataDefinition(entry.getKey())); String componentInstanceId = entry.getKey().getUniqueId(); calcRequirements.put(componentInstanceId, reqMap); } } StorageOperationStatus storageOperationStatus = topologyTemplateOperation - .associateOrAddCalcCapReqToComponent(vertex, calcRequirements, calcCapabilty, calculatedCapabilitiesProperties); + .associateOrAddCalcCapReqToComponent(vertex, calcRequirements, calcCapabilty, calculatedCapabilitiesProperties); updateInstancesCapAndReqOnComponentFromDB(component); return storageOperationStatus; } public StorageOperationStatus updateCalculatedCapabilitiesRequirements( - final Map>> instCapabilties, - final Map>> instReg, - final Component component) { + final Map>> instCapabilties, + final Map>> instReg, + final Component component) { StorageOperationStatus storageOperationStatus = StorageOperationStatus.OK; if (instCapabilties != null) { for (Entry>> entry : instCapabilties.entrySet()) { @@ -2017,7 +2014,7 @@ public class ToscaOperationFacade { for (List requirementList : req.values()) { for (RequirementDefinition requirement : requirementList) { storageOperationStatus = nodeTemplateOperation.updateComponentInstanceRequirement(component.getUniqueId(), - entry.getKey().getUniqueId(), requirement); + entry.getKey().getUniqueId(), requirement); if (storageOperationStatus != StorageOperationStatus.OK) { return storageOperationStatus; } @@ -2074,14 +2071,14 @@ public class ToscaOperationFacade { Map hasNotProps = new EnumMap<>(GraphPropertyEnum.class); fillPropsMap(hasProps, hasNotProps, internalComponentType, componentTypeEnum, isAbstract, vertexType, modelName); Either, JanusGraphOperationStatus> getRes = janusGraphDao - .getByCriteria(vertexType, hasProps, hasNotProps, JsonParseFlagEnum.ParseMetadata, modelName, includeNormativeExtensionModels); + .getByCriteria(vertexType, hasProps, hasNotProps, JsonParseFlagEnum.ParseMetadata, modelName, includeNormativeExtensionModels); if (getRes.isRight() && !JanusGraphOperationStatus.NOT_FOUND.equals(getRes.right().value())) { return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getRes.right().value())); } // region -> Fetch non checked-out services if (internalComponentType != null && internalComponentType.toLowerCase().trim().equals(SERVICE) && VertexTypeEnum.NODE_TYPE == vertexType) { Either, StorageOperationStatus> result = getLatestVersionNonCheckoutServicesMetadataOnly( - new EnumMap<>(GraphPropertyEnum.class), new EnumMap<>(GraphPropertyEnum.class), modelName); + new EnumMap<>(GraphPropertyEnum.class), new EnumMap<>(GraphPropertyEnum.class), modelName); if (result.isRight()) { log.debug("Failed to fetch services for"); return Either.right(result.right().value()); @@ -2098,7 +2095,7 @@ public class ToscaOperationFacade { if (getRes.isLeft()) { for (GraphVertex vertexComponent : getRes.left().value()) { Either componentRes = topologyTemplateOperation - .getLightComponent(vertexComponent, componentTypeEnum, params); + .getLightComponent(vertexComponent, componentTypeEnum, params); if (componentRes.isRight()) { log.debug("Failed to fetch light element for {} error {}", vertexComponent.getUniqueId(), componentRes.right().value()); return Either.right(componentRes.right().value()); @@ -2126,15 +2123,15 @@ public class ToscaOperationFacade { propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); propertiesNotToMatch.put(GraphPropertyEnum.IS_ARCHIVED, true); //US382674, US382683 Either, JanusGraphOperationStatus> getRes = janusGraphDao - .getByCriteria(null, hasProperties, propertiesNotToMatch, parseFlag); + .getByCriteria(null, hasProperties, propertiesNotToMatch, parseFlag); if (getRes.isRight()) { result = Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getRes.right().value())); } else { List latestVersionList = getRes.left().value().stream().map(ModelConverter::convertToComponentMetadata) - .collect(Collectors.toList()); + .collect(Collectors.toList()); ComponentMetadataData latestVersion = latestVersionList.size() == 1 ? latestVersionList.get(0) : latestVersionList.stream().max( - (c1, c2) -> Double.compare(Double.parseDouble(c1.getMetadataDataDefinition().getVersion()), - Double.parseDouble(c2.getMetadataDataDefinition().getVersion()))).get(); + (c1, c2) -> Double.compare(Double.parseDouble(c1.getMetadataDataDefinition().getVersion()), + Double.parseDouble(c2.getMetadataDataDefinition().getVersion()))).get(); result = Either.left(latestVersion); } return result; @@ -2172,7 +2169,7 @@ public class ToscaOperationFacade { componentParametersView.setIgnoreRequirements(false); } Either getToscaElementRes = nodeTemplateOperation.getToscaElementOperation(componentTypeEnum) - .getLightComponent(componentUid, componentTypeEnum, componentParametersView); + .getLightComponent(componentUid, componentTypeEnum, componentParametersView); if (getToscaElementRes.isRight()) { log.debug("Failed to fetch resource for error is {}", getToscaElementRes.right().value()); return Either.right(getToscaElementRes.right().value()); @@ -2199,7 +2196,7 @@ public class ToscaOperationFacade { private Either, StorageOperationStatus> getComponentUids(boolean isAbstract, ComponentTypeEnum componentTypeEnum, String internalComponentType) { Either, StorageOperationStatus> getToscaElementsRes = getLatestVersionNotAbstractMetadataOnly(isAbstract, componentTypeEnum, - internalComponentType, null, false); + internalComponentType, null, false); if (getToscaElementsRes.isRight()) { return Either.right(getToscaElementsRes.right().value()); } @@ -2234,7 +2231,7 @@ public class ToscaOperationFacade { ComponentTypeEnum componentType) { String normalizedName = ValidationUtils.normaliseComponentName(name); Either, JanusGraphOperationStatus> vertexEither = janusGraphDao - .getByCriteria(getVertexTypeEnum(resourceType), propertiesToMatch(normalizedName, componentType), JsonParseFlagEnum.NoParse); + .getByCriteria(getVertexTypeEnum(resourceType), propertiesToMatch(normalizedName, componentType), JsonParseFlagEnum.NoParse); if (vertexEither.isRight() && vertexEither.right().value() != JanusGraphOperationStatus.NOT_FOUND) { log.debug("failed to get vertex from graph with property normalizedName: {}", normalizedName); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(vertexEither.right().value())); @@ -2257,14 +2254,14 @@ public class ToscaOperationFacade { final ComponentTypeEnum componentType) { final String normalizedName = ValidationUtils.normaliseComponentName(resourceName); final Either, JanusGraphOperationStatus> vertexEither = janusGraphDao - .getByCriteria(getVertexTypeEnum(resourceType), propertiesToMatch(normalizedName, componentType), null, null, JsonParseFlagEnum.NoParse, - modelName); + .getByCriteria(getVertexTypeEnum(resourceType), propertiesToMatch(normalizedName, componentType), null, null, JsonParseFlagEnum.NoParse, + modelName); if (vertexEither.isRight() && vertexEither.right().value() != JanusGraphOperationStatus.NOT_FOUND) { log.debug("failed to get vertex from graph with property normalizedName: {} and model: {}", normalizedName, modelName); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(vertexEither.right().value())); } return Either.left(CollectionUtils.isEmpty(vertexEither.isLeft() ? vertexEither.left().value().stream() - .collect(Collectors.toList()) : null)); + .collect(Collectors.toList()) : null)); } private VertexTypeEnum getVertexTypeEnum(final ResourceTypeEnum resourceType) { @@ -2339,7 +2336,7 @@ public class ToscaOperationFacade { internalVertexTypes.add(VertexTypeEnum.NODE_TYPE); } if (ComponentTypeEnum.SERVICE == componentTypeEnum || SERVICE.equalsIgnoreCase(internalComponentType) || VF.equalsIgnoreCase( - internalComponentType)) { + internalComponentType)) { internalVertexTypes.add(VertexTypeEnum.TOPOLOGY_TEMPLATE); } return internalVertexTypes; @@ -2354,7 +2351,7 @@ public class ToscaOperationFacade { List result = new ArrayList<>(); for (VertexTypeEnum vertexType : internalVertexTypes) { Either, StorageOperationStatus> listByVertexType = getLatestVersionNotAbstractToscaElementsMetadataOnly(isAbstract, - componentTypeEnum, internalComponentType, vertexType, modelName, includeNormativeExtensionModels); + componentTypeEnum, internalComponentType, vertexType, modelName, includeNormativeExtensionModels); if (listByVertexType.isRight()) { return listByVertexType; } @@ -2380,7 +2377,7 @@ public class ToscaOperationFacade { Map propertiesNotToMatch = new EnumMap<>(GraphPropertyEnum.class); propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); Either, JanusGraphOperationStatus> vertexEither = janusGraphDao - .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll); + .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll); if (vertexEither.isRight()) { return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(vertexEither.right().value())); } @@ -2402,7 +2399,7 @@ public class ToscaOperationFacade { propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); propertiesNotToMatch.put(GraphPropertyEnum.IS_ARCHIVED, true); //US382674, US382683 Either, JanusGraphOperationStatus> vertexEither = janusGraphDao - .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll); + .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll); if (vertexEither.isRight()) { log.debug("Couldn't fetch metadata for component with uuid {}, error: {}", componentUuid, vertexEither.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(vertexEither.right().value())); @@ -2454,7 +2451,7 @@ public class ToscaOperationFacade { return Either.right(StorageOperationStatus.NOT_FOUND); } Component component = latestVersionList.size() == 1 ? latestVersionList.get(0) - : latestVersionList.stream().max((c1, c2) -> Double.compare(Double.parseDouble(c1.getVersion()), Double.parseDouble(c2.getVersion()))) + : latestVersionList.stream().max((c1, c2) -> Double.compare(Double.parseDouble(c1.getVersion()), Double.parseDouble(c2.getVersion()))) .get(); return Either.left(component); } @@ -2471,7 +2468,7 @@ public class ToscaOperationFacade { propertiesToMatch.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.RESOURCE.name()); propertiesNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); Either, JanusGraphOperationStatus> getResourcesRes = janusGraphDao - .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll); + .getByCriteria(null, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll); if (getResourcesRes.isRight()) { log.debug("Failed to fetch all certified resources. Status is {}", getResourcesRes.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getResourcesRes.right().value())); @@ -2497,7 +2494,7 @@ public class ToscaOperationFacade { hasProperties.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true); hasNotProperties.put(GraphPropertyEnum.IS_DELETED, true); Either, JanusGraphOperationStatus> getResourceRes = janusGraphDao - .getByCriteria(null, hasProperties, hasNotProperties, parseFlag, model); + .getByCriteria(null, hasProperties, hasNotProperties, parseFlag, model); if (getResourceRes.isRight()) { JanusGraphOperationStatus status = getResourceRes.right().value(); log.debug("failed to find resource with name {}, version {}. Status is {} ", name, version, status); @@ -2525,7 +2522,7 @@ public class ToscaOperationFacade { GraphVertex resourceMetadataData = null; List resourceMetadataDataList = null; Either, JanusGraphOperationStatus> byCsar = janusGraphDao - .getByCriteria(null, props, propsHasNot, JsonParseFlagEnum.ParseMetadata); + .getByCriteria(null, props, propsHasNot, JsonParseFlagEnum.ParseMetadata); if (byCsar.isRight()) { if (JanusGraphOperationStatus.NOT_FOUND == byCsar.right().value()) { // Fix Defect DE256036 @@ -2536,16 +2533,16 @@ public class ToscaOperationFacade { props.put(GraphPropertyEnum.IS_HIGHEST_VERSION, true); props.put(GraphPropertyEnum.SYSTEM_NAME, systemName); Either, JanusGraphOperationStatus> bySystemname = janusGraphDao - .getByCriteria(null, props, JsonParseFlagEnum.ParseMetadata); + .getByCriteria(null, props, JsonParseFlagEnum.ParseMetadata); if (bySystemname.isRight()) { log.debug("getLatestResourceByCsarOrName - Failed to find by system name {} error {} ", systemName, - bySystemname.right().value()); + bySystemname.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(bySystemname.right().value())); } if (bySystemname.left().value().size() > 2) { log.debug( - "getLatestResourceByCsarOrName - getByCriteria(by system name) must return only 2 latest version, but was returned - {}", - bySystemname.left().value().size()); + "getLatestResourceByCsarOrName - getByCriteria(by system name) must return only 2 latest version, but was returned - {}", + bySystemname.left().value().size()); return Either.right(StorageOperationStatus.GENERAL_ERROR); } resourceMetadataDataList = bySystemname.left().value(); @@ -2566,7 +2563,7 @@ public class ToscaOperationFacade { final Object csarUuid = resourceMetadataData.getJsonMetadataField(JsonPresentationFields.CSAR_UUID); if (csarUuid != null && !csarUuid.equals(csarUUID)) { log.debug("getLatestResourceByCsarOrName - same system name {} but different csarUUID. exist {} and new {} ", systemName, - csarUuid, csarUUID); + csarUuid, csarUUID); // correct error will be returned from create flow. with all // correct audit records!!!!! @@ -2578,7 +2575,7 @@ public class ToscaOperationFacade { resourceMetadataDataList = byCsar.left().value(); if (resourceMetadataDataList.size() > 2) { log.debug("getLatestResourceByCsarOrName - getByCriteria(by csar) must return only 2 latest version, but was returned - {}", - byCsar.left().value().size()); + byCsar.left().value().size()); return Either.right(StorageOperationStatus.GENERAL_ERROR); } if (resourceMetadataDataList.size() == 1) { @@ -2607,7 +2604,7 @@ public class ToscaOperationFacade { Either latestByToscaResourceName = getLatestByToscaResourceName(currentTemplateNameChecked, model); if (latestByToscaResourceName.isRight()) { return latestByToscaResourceName.right().value() == StorageOperationStatus.NOT_FOUND ? Either.left(false) - : Either.right(latestByToscaResourceName.right().value()); + : Either.right(latestByToscaResourceName.right().value()); } Resource value = latestByToscaResourceName.left().value(); if (value.getDerivedFrom() != null) { @@ -2617,7 +2614,7 @@ public class ToscaOperationFacade { } } return (currentTemplateNameChecked != null && currentTemplateNameChecked.equalsIgnoreCase(templateNameCurrent)) ? Either.left(true) - : Either.left(false); + : Either.left(false); } public Either, StorageOperationStatus> fetchMetaDataByResourceType(String resourceType, ComponentParametersView filterBy) { @@ -2627,7 +2624,7 @@ public class ToscaOperationFacade { Map propsHasNotToMatch = new EnumMap<>(GraphPropertyEnum.class); propsHasNotToMatch.put(GraphPropertyEnum.IS_DELETED, true); Either, JanusGraphOperationStatus> resourcesByTypeEither = janusGraphDao - .getByCriteria(null, props, propsHasNotToMatch, JsonParseFlagEnum.ParseMetadata); + .getByCriteria(null, props, propsHasNotToMatch, JsonParseFlagEnum.ParseMetadata); if (resourcesByTypeEither.isRight()) { return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(resourcesByTypeEither.right().value())); } @@ -2645,7 +2642,7 @@ public class ToscaOperationFacade { public Either updateDistributionStatus(Service service, User user, DistributionStatusEnum distributionStatus) { Either updateDistributionStatus = topologyTemplateOperation - .updateDistributionStatus(service.getUniqueId(), user, distributionStatus); + .updateDistributionStatus(service.getUniqueId(), user, distributionStatus); if (updateDistributionStatus.isRight()) { return Either.right(updateDistributionStatus.right().value()); } @@ -2705,7 +2702,7 @@ public class ToscaOperationFacade { for (DistributionStatusEnum state : distStatus) { propertiesToMatch.put(GraphPropertyEnum.DISTRIBUTION_STATUS, state.name()); Either, StorageOperationStatus> fetchServicesByCriteria = fetchServicesByCriteria(servicesAll, propertiesToMatch, - propertiesNotToMatch, null); + propertiesNotToMatch, null); if (fetchServicesByCriteria.isRight()) { return fetchServicesByCriteria; } else { @@ -2723,21 +2720,21 @@ public class ToscaOperationFacade { Map propertiesNotToMatch, String modelName) { Either, JanusGraphOperationStatus> getRes = janusGraphDao - .getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll, modelName); + .getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, propertiesToMatch, propertiesNotToMatch, JsonParseFlagEnum.ParseAll, modelName); if (getRes.isRight()) { if (getRes.right().value() != JanusGraphOperationStatus.NOT_FOUND) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, - "Failed to fetch certified services by match properties {} not match properties {} . Status is {}. ", propertiesToMatch, - propertiesNotToMatch, getRes.right().value()); + "Failed to fetch certified services by match properties {} not match properties {} . Status is {}. ", propertiesToMatch, + propertiesNotToMatch, getRes.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(getRes.right().value())); } } else { for (final GraphVertex vertex : getRes.left().value()) { Either getServiceRes = topologyTemplateOperation - .getLightComponent(vertex, ComponentTypeEnum.SERVICE, new ComponentParametersView(true)); + .getLightComponent(vertex, ComponentTypeEnum.SERVICE, new ComponentParametersView(true)); if (getServiceRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to fetch certified service {}. Status is {}. ", - vertex.getJsonMetadataField(JsonPresentationFields.NAME), getServiceRes.right().value()); + vertex.getJsonMetadataField(JsonPresentationFields.NAME), getServiceRes.right().value()); return Either.right(getServiceRes.right().value()); } else { servicesAll.add(ModelConverter.convertFromToscaElement(getServiceRes.left().value())); @@ -2754,7 +2751,7 @@ public class ToscaOperationFacade { public StorageOperationStatus addDeploymentArtifactsToInstance(String componentId, ComponentInstance componentInstance, Map finalDeploymentArtifacts) { Map instDeplArtifacts = finalDeploymentArtifacts.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue()))); return nodeTemplateOperation.addDeploymentArtifactsToInstance(componentId, componentInstance.getUniqueId(), instDeplArtifacts); } @@ -2763,7 +2760,7 @@ public class ToscaOperationFacade { StorageOperationStatus status = StorageOperationStatus.OK; if (MapUtils.isNotEmpty(artifacts)) { Map instDeplArtifacts = artifacts.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue()))); + .collect(Collectors.toMap(Map.Entry::getKey, e -> new ArtifactDataDefinition(e.getValue()))); status = nodeTemplateOperation.addInformationalArtifactsToInstance(componentId, componentInstance.getUniqueId(), instDeplArtifacts); } return status; @@ -2781,11 +2778,11 @@ public class ToscaOperationFacade { Component component) { newPropertyDefinition.setName(propertyName); StorageOperationStatus status = getToscaElementOperation(component) - .addToscaDataToToscaElement(component.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, newPropertyDefinition, - JsonPresentationFields.NAME); + .addToscaDataToToscaElement(component.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, newPropertyDefinition, + JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to add the property {} to the component {}. Status is {}. ", propertyName, - component.getName(), status); + component.getName(), status); return Either.right(status); } ComponentParametersView filter = new ComponentParametersView(true); @@ -2794,21 +2791,21 @@ public class ToscaOperationFacade { Either getUpdatedComponentRes = getToscaElement(component.getUniqueId(), filter); if (getUpdatedComponentRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to get updated component {}. Status is {}. ", component.getUniqueId(), - getUpdatedComponentRes.right().value()); + getUpdatedComponentRes.right().value()); return Either.right(status); } PropertyDefinition newProperty = null; List properties = (getUpdatedComponentRes.left().value()).getProperties(); if (CollectionUtils.isNotEmpty(properties)) { Optional propertyOptional = properties.stream().filter(propertyEntry -> propertyEntry.getName().equals(propertyName)) - .findAny(); + .findAny(); if (propertyOptional.isPresent()) { newProperty = propertyOptional.get(); } } if (newProperty == null) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to find recently added property {} on the component {}. Status is {}. ", - propertyName, component.getUniqueId(), StorageOperationStatus.NOT_FOUND); + propertyName, component.getUniqueId(), StorageOperationStatus.NOT_FOUND); return Either.right(StorageOperationStatus.NOT_FOUND); } return Either.left(newProperty); @@ -2818,11 +2815,11 @@ public class ToscaOperationFacade { Component component) { newInputDefinition.setName(inputName); StorageOperationStatus status = getToscaElementOperation(component) - .addToscaDataToToscaElement(component.getUniqueId(), EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, newInputDefinition, - JsonPresentationFields.NAME); + .addToscaDataToToscaElement(component.getUniqueId(), EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, newInputDefinition, + JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to add the input {} to the component {}. Status is {}. ", inputName, - component.getName(), status); + component.getName(), status); return Either.right(status); } ComponentParametersView filter = new ComponentParametersView(true); @@ -2831,7 +2828,7 @@ public class ToscaOperationFacade { Either getUpdatedComponentRes = getToscaElement(component.getUniqueId(), filter); if (getUpdatedComponentRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to get updated component {}. Status is {}. ", component.getUniqueId(), - getUpdatedComponentRes.right().value()); + getUpdatedComponentRes.right().value()); return Either.right(status); } InputDefinition newInput = null; @@ -2844,8 +2841,8 @@ public class ToscaOperationFacade { } if (newInput == null) { CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to find recently added input {} " + "on the component {}. Status is {}. ", inputs, - component.getUniqueId(), StorageOperationStatus.NOT_FOUND); + .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to find recently added input {} " + "on the component {}. Status is {}. ", inputs, + component.getUniqueId(), StorageOperationStatus.NOT_FOUND); return Either.right(StorageOperationStatus.NOT_FOUND); } return Either.left(newInput); @@ -2853,24 +2850,24 @@ public class ToscaOperationFacade { public StorageOperationStatus deletePropertyOfComponent(Component component, String propertyName) { return getToscaElementOperation(component) - .deleteToscaDataElement(component.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, propertyName, - JsonPresentationFields.NAME); + .deleteToscaDataElement(component.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, propertyName, + JsonPresentationFields.NAME); } public StorageOperationStatus deleteAttributeOfResource(Component component, String attributeName) { return getToscaElementOperation(component) - .deleteToscaDataElement(component.getUniqueId(), EdgeLabelEnum.ATTRIBUTES, VertexTypeEnum.ATTRIBUTES, attributeName, - JsonPresentationFields.NAME); + .deleteToscaDataElement(component.getUniqueId(), EdgeLabelEnum.ATTRIBUTES, VertexTypeEnum.ATTRIBUTES, attributeName, + JsonPresentationFields.NAME); } public StorageOperationStatus deleteInputOfResource(Component resource, String inputName) { return getToscaElementOperation(resource) - .deleteToscaDataElement(resource.getUniqueId(), EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, inputName, JsonPresentationFields.NAME); + .deleteToscaDataElement(resource.getUniqueId(), EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, inputName, JsonPresentationFields.NAME); } public StorageOperationStatus deleteOutputOfResource(final Component resource, final String outputName) { return getToscaElementOperation(resource) - .deleteToscaDataElement(resource.getUniqueId(), EdgeLabelEnum.OUTPUTS, VertexTypeEnum.OUTPUTS, outputName, JsonPresentationFields.NAME); + .deleteToscaDataElement(resource.getUniqueId(), EdgeLabelEnum.OUTPUTS, VertexTypeEnum.OUTPUTS, outputName, JsonPresentationFields.NAME); } /** @@ -2882,8 +2879,8 @@ public class ToscaOperationFacade { */ public StorageOperationStatus deleteDataTypeOfComponent(Component component, String dataTypeName) { return getToscaElementOperation(component) - .deleteToscaDataElement(component.getUniqueId(), EdgeLabelEnum.DATA_TYPES, VertexTypeEnum.DATA_TYPES, dataTypeName, - JsonPresentationFields.NAME); + .deleteToscaDataElement(component.getUniqueId(), EdgeLabelEnum.DATA_TYPES, VertexTypeEnum.DATA_TYPES, dataTypeName, + JsonPresentationFields.NAME); } public Either updatePropertyOfComponent(Component component, @@ -2891,12 +2888,12 @@ public class ToscaOperationFacade { Either getUpdatedComponentRes = null; Either result = null; StorageOperationStatus status = getToscaElementOperation(component) - .updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, newPropertyDefinition, - JsonPresentationFields.NAME); + .updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.PROPERTIES, VertexTypeEnum.PROPERTIES, newPropertyDefinition, + JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_ADD_THE_PROPERTY_TO_THE_RESOURCE_STATUS_IS, newPropertyDefinition.getName(), - component.getName(), status); + .addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_ADD_THE_PROPERTY_TO_THE_RESOURCE_STATUS_IS, newPropertyDefinition.getName(), + component.getName(), status); result = Either.right(status); } if (result == null) { @@ -2905,18 +2902,18 @@ public class ToscaOperationFacade { getUpdatedComponentRes = getToscaElement(component.getUniqueId(), filter); if (getUpdatedComponentRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_GET_UPDATED_RESOURCE_STATUS_IS, component.getUniqueId(), - getUpdatedComponentRes.right().value()); + getUpdatedComponentRes.right().value()); result = Either.right(status); } } if (result == null) { Optional newProperty = (getUpdatedComponentRes.left().value()).getProperties().stream() - .filter(p -> p.getName().equals(newPropertyDefinition.getName())).findAny(); + .filter(p -> p.getName().equals(newPropertyDefinition.getName())).findAny(); if (newProperty.isPresent()) { result = Either.left(newProperty.get()); } else { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_FIND_RECENTLY_ADDED_PROPERTY_ON_THE_RESOURCE_STATUS_IS, - newPropertyDefinition.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); + newPropertyDefinition.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); result = Either.right(StorageOperationStatus.NOT_FOUND); } } @@ -2928,12 +2925,12 @@ public class ToscaOperationFacade { Either getUpdatedComponentRes = null; Either result = null; StorageOperationStatus status = getToscaElementOperation(component) - .updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.ATTRIBUTES, VertexTypeEnum.ATTRIBUTES, newPropertyDefinition, - JsonPresentationFields.NAME); + .updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.ATTRIBUTES, VertexTypeEnum.ATTRIBUTES, newPropertyDefinition, + JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_ADD_THE_PROPERTY_TO_THE_RESOURCE_STATUS_IS, newPropertyDefinition.getName(), - component.getName(), status); + .addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_ADD_THE_PROPERTY_TO_THE_RESOURCE_STATUS_IS, newPropertyDefinition.getName(), + component.getName(), status); result = Either.right(status); } if (result == null) { @@ -2942,18 +2939,18 @@ public class ToscaOperationFacade { getUpdatedComponentRes = getToscaElement(component.getUniqueId(), filter); if (getUpdatedComponentRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_GET_UPDATED_RESOURCE_STATUS_IS, component.getUniqueId(), - getUpdatedComponentRes.right().value()); + getUpdatedComponentRes.right().value()); result = Either.right(status); } } if (result == null) { Optional newProperty = (getUpdatedComponentRes.left().value()).getAttributes().stream() - .filter(p -> p.getName().equals(newPropertyDefinition.getName())).findAny(); + .filter(p -> p.getName().equals(newPropertyDefinition.getName())).findAny(); if (newProperty.isPresent()) { result = Either.left(newProperty.get()); } else { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_FIND_RECENTLY_ADDED_PROPERTY_ON_THE_RESOURCE_STATUS_IS, - newPropertyDefinition.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); + newPropertyDefinition.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); result = Either.right(StorageOperationStatus.NOT_FOUND); } } @@ -2969,11 +2966,11 @@ public class ToscaOperationFacade { newAttributeDef.setOwnerId(component.getUniqueId()); } StorageOperationStatus status = getToscaElementOperation(component) - .addToscaDataToToscaElement(component.getUniqueId(), EdgeLabelEnum.ATTRIBUTES, VertexTypeEnum.ATTRIBUTES, newAttributeDef, - JsonPresentationFields.NAME); + .addToscaDataToToscaElement(component.getUniqueId(), EdgeLabelEnum.ATTRIBUTES, VertexTypeEnum.ATTRIBUTES, newAttributeDef, + JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_ADD_THE_PROPERTY_TO_THE_RESOURCE_STATUS_IS, newAttributeDef.getName(), - component.getName(), status); + component.getName(), status); result = Either.right(status); } if (result == null) { @@ -2982,18 +2979,18 @@ public class ToscaOperationFacade { getUpdatedComponentRes = getToscaElement(component.getUniqueId(), filter); if (getUpdatedComponentRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_GET_UPDATED_RESOURCE_STATUS_IS, component.getUniqueId(), - getUpdatedComponentRes.right().value()); + getUpdatedComponentRes.right().value()); result = Either.right(status); } } if (result == null) { Optional newAttribute = ((Resource) getUpdatedComponentRes.left().value()).getAttributes().stream() - .filter(p -> p.getName().equals(newAttributeDef.getName())).findAny(); + .filter(p -> p.getName().equals(newAttributeDef.getName())).findAny(); if (newAttribute.isPresent()) { result = Either.left(newAttribute.get()); } else { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_FIND_RECENTLY_ADDED_PROPERTY_ON_THE_RESOURCE_STATUS_IS, - newAttributeDef.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); + newAttributeDef.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); result = Either.right(StorageOperationStatus.NOT_FOUND); } } @@ -3004,11 +3001,11 @@ public class ToscaOperationFacade { Either getUpdatedComponentRes = null; Either result = null; StorageOperationStatus status = getToscaElementOperation(component) - .updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.ATTRIBUTES, VertexTypeEnum.ATTRIBUTES, newAttributeDef, - JsonPresentationFields.NAME); + .updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.ATTRIBUTES, VertexTypeEnum.ATTRIBUTES, newAttributeDef, + JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_ADD_THE_PROPERTY_TO_THE_RESOURCE_STATUS_IS, newAttributeDef.getName(), - component.getName(), status); + component.getName(), status); result = Either.right(status); } if (result == null) { @@ -3017,18 +3014,18 @@ public class ToscaOperationFacade { getUpdatedComponentRes = getToscaElement(component.getUniqueId(), filter); if (getUpdatedComponentRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_GET_UPDATED_RESOURCE_STATUS_IS, component.getUniqueId(), - getUpdatedComponentRes.right().value()); + getUpdatedComponentRes.right().value()); result = Either.right(status); } } if (result == null) { Optional newProperty = ((Resource) getUpdatedComponentRes.left().value()).getAttributes().stream() - .filter(p -> p.getName().equals(newAttributeDef.getName())).findAny(); + .filter(p -> p.getName().equals(newAttributeDef.getName())).findAny(); if (newProperty.isPresent()) { result = Either.left(newProperty.get()); } else { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_FIND_RECENTLY_ADDED_PROPERTY_ON_THE_RESOURCE_STATUS_IS, - newAttributeDef.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); + newAttributeDef.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); result = Either.right(StorageOperationStatus.NOT_FOUND); } } @@ -3039,11 +3036,11 @@ public class ToscaOperationFacade { Either getUpdatedComponentRes = null; Either result = null; StorageOperationStatus status = getToscaElementOperation(component) - .updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, newInputDefinition, - JsonPresentationFields.NAME); + .updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.INPUTS, VertexTypeEnum.INPUTS, newInputDefinition, + JsonPresentationFields.NAME); if (status != StorageOperationStatus.OK) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to update the input {} to the component {}. Status is {}. ", - newInputDefinition.getName(), component.getName(), status); + newInputDefinition.getName(), component.getName(), status); result = Either.right(status); } if (result == null) { @@ -3052,18 +3049,18 @@ public class ToscaOperationFacade { getUpdatedComponentRes = getToscaElement(component.getUniqueId(), filter); if (getUpdatedComponentRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_GET_UPDATED_RESOURCE_STATUS_IS, component.getUniqueId(), - getUpdatedComponentRes.right().value()); + getUpdatedComponentRes.right().value()); result = Either.right(status); } } if (result == null) { Optional updatedInput = getUpdatedComponentRes.left().value().getInputs().stream() - .filter(p -> p.getName().equals(newInputDefinition.getName())).findAny(); + .filter(p -> p.getName().equals(newInputDefinition.getName())).findAny(); if (updatedInput.isPresent()) { result = Either.left(updatedInput.get()); } else { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to find recently updated inputs {} on the resource {}. Status is {}. ", - newInputDefinition.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); + newInputDefinition.getName(), component.getUniqueId(), StorageOperationStatus.NOT_FOUND); result = Either.right(StorageOperationStatus.NOT_FOUND); } } @@ -3083,19 +3080,19 @@ public class ToscaOperationFacade { String componentInstanceId) { String uniqueId = componentInstance.getUniqueId(); StorageOperationStatus status = nodeTemplateOperation - .deleteToscaDataDeepElementsBlockOfToscaElement(containerComponent.getUniqueId(), EdgeLabelEnum.INST_GROUPS, VertexTypeEnum.INST_GROUPS, - uniqueId); + .deleteToscaDataDeepElementsBlockOfToscaElement(containerComponent.getUniqueId(), EdgeLabelEnum.INST_GROUPS, VertexTypeEnum.INST_GROUPS, + uniqueId); if (status != StorageOperationStatus.OK && status != StorageOperationStatus.NOT_FOUND) { CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to delete group instances for container {}. error {] ", componentInstanceId, status); + .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to delete group instances for container {}. error {] ", componentInstanceId, status); return Either.right(status); } if (componentInstance.getGroupInstances() != null) { status = addGroupInstancesToComponentInstance(containerComponent, componentInstance, componentInstance.getGroupInstances()); if (status != StorageOperationStatus.OK && status != StorageOperationStatus.NOT_FOUND) { CommonUtility - .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to add group instances for container {}. error {] ", componentInstanceId, - status); + .addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to add group instances for container {}. error {] ", componentInstanceId, + status); return Either.right(status); } } @@ -3199,25 +3196,25 @@ public class ToscaOperationFacade { public StorageOperationStatus deleteComponentInstanceInputsFromTopologyTemplate(Component containerComponent, List inputsToDelete) { return topologyTemplateOperation.deleteToscaDataElements(containerComponent.getUniqueId(), EdgeLabelEnum.INPUTS, - inputsToDelete.stream().map(PropertyDataDefinition::getName).collect(Collectors.toList())); + inputsToDelete.stream().map(PropertyDataDefinition::getName).collect(Collectors.toList())); } public StorageOperationStatus deleteComponentInstanceOutputsFromTopologyTemplate(final Component containerComponent, final List outputsToDelete) { return topologyTemplateOperation.deleteToscaDataElements(containerComponent.getUniqueId(), EdgeLabelEnum.OUTPUTS, - outputsToDelete.stream().map(AttributeDataDefinition::getName).collect(Collectors.toList())); + outputsToDelete.stream().map(AttributeDataDefinition::getName).collect(Collectors.toList())); } public StorageOperationStatus updateComponentInstanceCapabiltyProperty(Component containerComponent, String componentInstanceUniqueId, String capabilityPropertyKey, ComponentInstanceProperty property) { return nodeTemplateOperation - .updateComponentInstanceCapabilityProperty(containerComponent, componentInstanceUniqueId, capabilityPropertyKey, property); + .updateComponentInstanceCapabilityProperty(containerComponent, componentInstanceUniqueId, capabilityPropertyKey, property); } public StorageOperationStatus updateComponentInstanceCapabilityProperties(Component containerComponent, String componentInstanceUniqueId) { return convertComponentInstanceProperties(containerComponent, componentInstanceUniqueId).map(instanceCapProps -> topologyTemplateOperation - .updateComponentInstanceCapabilityProperties(containerComponent, componentInstanceUniqueId, instanceCapProps)) - .orElse(StorageOperationStatus.NOT_FOUND); + .updateComponentInstanceCapabilityProperties(containerComponent, componentInstanceUniqueId, instanceCapProps)) + .orElse(StorageOperationStatus.NOT_FOUND); } public StorageOperationStatus updateComponentInstanceRequirement(String containerComponentId, String componentInstanceUniqueId, @@ -3250,15 +3247,15 @@ public class ToscaOperationFacade { final ToscaElementOperation toscaElementOperation = getToscaElementOperation(component); if (match) { status = toscaElementOperation.updateToscaDataOfToscaElement(component.getUniqueId(), EdgeLabelEnum.INTERFACE_ARTIFACTS, - VertexTypeEnum.INTERFACE_ARTIFACTS, interfaceDefinition, JsonPresentationFields.TYPE); + VertexTypeEnum.INTERFACE_ARTIFACTS, interfaceDefinition, JsonPresentationFields.TYPE); } else { status = toscaElementOperation.addToscaDataToToscaElement(component.getUniqueId(), EdgeLabelEnum.INTERFACE_ARTIFACTS, - VertexTypeEnum.INTERFACE_ARTIFACTS, interfaceDefinition, JsonPresentationFields.TYPE); + VertexTypeEnum.INTERFACE_ARTIFACTS, interfaceDefinition, JsonPresentationFields.TYPE); } if (status != StorageOperationStatus.OK) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to add the interface {} to the component {}. Status is {}. ", - interfaceName, component.getName(), status); + interfaceName, component.getName(), status); return Either.right(status); } final ComponentParametersView filter = new ComponentParametersView(true); @@ -3267,7 +3264,7 @@ public class ToscaOperationFacade { final Either getUpdatedComponentRes = getToscaElement(component.getUniqueId(), filter); if (getUpdatedComponentRes.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to get updated component {}. Status is {}. ", - component.getUniqueId(), getUpdatedComponentRes.right().value()); + component.getUniqueId(), getUpdatedComponentRes.right().value()); return Either.right(getUpdatedComponentRes.right().value()); } InterfaceDefinition newInterfaceDefinition = null; @@ -3280,7 +3277,7 @@ public class ToscaOperationFacade { } if (newInterfaceDefinition == null) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to find recently added interface {} on the component {}. Status is {}. ", - interfaceName, component.getUniqueId(), StorageOperationStatus.NOT_FOUND); + interfaceName, component.getUniqueId(), StorageOperationStatus.NOT_FOUND); return Either.right(StorageOperationStatus.NOT_FOUND); } return Either.left(newInterfaceDefinition); @@ -3293,14 +3290,14 @@ public class ToscaOperationFacade { public StorageOperationStatus deleteAllCalculatedCapabilitiesRequirements(String topologyTemplateId) { StorageOperationStatus status = topologyTemplateOperation - .removeToscaData(topologyTemplateId, EdgeLabelEnum.CALCULATED_CAPABILITIES, VertexTypeEnum.CALCULATED_CAPABILITIES); + .removeToscaData(topologyTemplateId, EdgeLabelEnum.CALCULATED_CAPABILITIES, VertexTypeEnum.CALCULATED_CAPABILITIES); if (status == StorageOperationStatus.OK) { status = topologyTemplateOperation - .removeToscaData(topologyTemplateId, EdgeLabelEnum.CALCULATED_REQUIREMENTS, VertexTypeEnum.CALCULATED_REQUIREMENTS); + .removeToscaData(topologyTemplateId, EdgeLabelEnum.CALCULATED_REQUIREMENTS, VertexTypeEnum.CALCULATED_REQUIREMENTS); } if (status == StorageOperationStatus.OK) { status = topologyTemplateOperation - .removeToscaData(topologyTemplateId, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, VertexTypeEnum.CALCULATED_CAP_PROPERTIES); + .removeToscaData(topologyTemplateId, EdgeLabelEnum.CALCULATED_CAP_PROPERTIES, VertexTypeEnum.CALCULATED_CAP_PROPERTIES); } return status; } @@ -3315,10 +3312,10 @@ public class ToscaOperationFacade { GraphVertex nodeTypeV = getVertexEither.left().value(); ToscaElement toscaElementToUpdate = ModelConverter.convertToToscaElement(clonedResource); Either shouldUpdateDerivedVersion = nodeTypeOperation - .shouldUpdateDerivedVersion(toscaElementToUpdate, nodeTypeV); + .shouldUpdateDerivedVersion(toscaElementToUpdate, nodeTypeV); if (shouldUpdateDerivedVersion.isRight() && StorageOperationStatus.OK != shouldUpdateDerivedVersion.right().value()) { log.debug("Failed to update derived version for node type {} derived {}, error: {}", componentId, clonedResource.getDerivedFrom().get(0), - shouldUpdateDerivedVersion.right().value()); + shouldUpdateDerivedVersion.right().value()); return Either.right(shouldUpdateDerivedVersion.right().value()); } if (shouldUpdateDerivedVersion.isLeft()) { @@ -3363,7 +3360,7 @@ public class ToscaOperationFacade { private Optional convertComponentInstanceProperties(Component component, String instanceId) { return component.fetchInstanceById(instanceId) - .map(ci -> ModelConverter.convertToMapOfMapCapabilityProperties(ci.getCapabilities(), instanceId, ci.getOriginType().isAtomicType())); + .map(ci -> ModelConverter.convertToMapOfMapCapabilityProperties(ci.getCapabilities(), instanceId, ci.getOriginType().isAtomicType())); } public Either associatePolicyToComponent(String componentId, PolicyDefinition policyDefinition, @@ -3382,7 +3379,7 @@ public class ToscaOperationFacade { } if (result == null) { StorageOperationStatus status = topologyTemplateOperation - .addPolicyToToscaElement(getVertexEither.left().value(), policyDefinition, counter); + .addPolicyToToscaElement(getVertexEither.left().value(), policyDefinition, counter); if (status != StorageOperationStatus.OK) { return Either.right(status); } @@ -3396,8 +3393,8 @@ public class ToscaOperationFacade { public StorageOperationStatus associatePoliciesToComponent(String componentId, List policies) { log.debug("#associatePoliciesToComponent - associating policies for component {}.", componentId); return janusGraphDao.getVertexById(componentId, JsonParseFlagEnum.ParseMetadata) - .either(containerVertex -> topologyTemplateOperation.addPoliciesToToscaElement(containerVertex, policies), - DaoStatusConverter::convertJanusGraphStatusToStorageStatus); + .either(containerVertex -> topologyTemplateOperation.addPoliciesToToscaElement(containerVertex, policies), + DaoStatusConverter::convertJanusGraphStatusToStorageStatus); } public Either updatePolicyOfComponent(String componentId, PolicyDefinition policyDefinition, @@ -3425,8 +3422,8 @@ public class ToscaOperationFacade { public StorageOperationStatus updatePoliciesOfComponent(String componentId, List policyDefinition) { log.debug("#updatePoliciesOfComponent - updating policies for component {}", componentId); return janusGraphDao.getVertexById(componentId, JsonParseFlagEnum.NoParse).right() - .map(DaoStatusConverter::convertJanusGraphStatusToStorageStatus) - .either(containerVertex -> topologyTemplateOperation.updatePoliciesOfToscaElement(containerVertex, policyDefinition), err -> err); + .map(DaoStatusConverter::convertJanusGraphStatusToStorageStatus) + .either(containerVertex -> topologyTemplateOperation.updatePoliciesOfToscaElement(containerVertex, policyDefinition), err -> err); } public StorageOperationStatus removePolicyFromComponent(String componentId, String policyId) { @@ -3478,7 +3475,7 @@ public class ToscaOperationFacade { private TopologyTemplate getTopologyTemplate(String componentId) { return (TopologyTemplate) topologyTemplateOperation.getToscaElement(componentId, getFilterComponentWithCapProperties()).left() - .on(this::throwStorageException); + .on(this::throwStorageException); } private ComponentParametersView getFilterComponentWithCapProperties() { @@ -3493,7 +3490,7 @@ public class ToscaOperationFacade { public Either isComponentInUse(String componentId) { final List forbiddenEdgeLabelEnums = Arrays - .asList(EdgeLabelEnum.INSTANCE_OF, EdgeLabelEnum.PROXY_OF, EdgeLabelEnum.ALLOTTED_OF); + .asList(EdgeLabelEnum.INSTANCE_OF, EdgeLabelEnum.PROXY_OF, EdgeLabelEnum.ALLOTTED_OF); Either vertexById = janusGraphDao.getVertexById(componentId); if (vertexById.isLeft()) { for (EdgeLabelEnum edgeLabelEnum : forbiddenEdgeLabelEnums) { @@ -3514,10 +3511,10 @@ public class ToscaOperationFacade { } propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, componentInvariantUuid); Either, JanusGraphOperationStatus> vertexEither = janusGraphDao - .getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata); + .getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata); if (vertexEither.isRight()) { log.debug("Couldn't fetch metadata for component with type {} and invariantUUId {}, error: {}", componentInvariantUuid, - vertexEither.right().value()); + vertexEither.right().value()); return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(vertexEither.right().value())); } List vertexList = vertexEither.isLeft() ? vertexEither.left().value() : null; @@ -3544,7 +3541,7 @@ public class ToscaOperationFacade { if (vertexById.isLeft()) { for (EdgeLabelEnum edgeLabelEnum : relationEdgeLabelEnums) { Either parentVertexEither = janusGraphDao - .getParentVertex(vertexById.left().value(), edgeLabelEnum, JsonParseFlagEnum.ParseJson); + .getParentVertex(vertexById.left().value(), edgeLabelEnum, JsonParseFlagEnum.ParseJson); if (parentVertexEither.isLeft()) { Either componentEither = getToscaElement(parentVertexEither.left().value().getUniqueId()); if (componentEither.isLeft()) { diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/StorageOperationStatus.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/StorageOperationStatus.java index 491603081f..321fbfdee6 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/StorageOperationStatus.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/api/StorageOperationStatus.java @@ -65,7 +65,7 @@ public enum StorageOperationStatus { INVALID_PROPERTY, COMPONENT_IS_ARCHIVED, COMPONENT_NOT_ARCHIVED, - COMPONENT_IN_USE_BY_ANOTHER_COMPONENT, + COMPONENT_IS_IN_USE, DECLARED_INPUT_USED_BY_OPERATION; // @formatter:on diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacadeTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacadeTest.java index 625ec39837..d7b6c60539 100644 --- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacadeTest.java +++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaOperationFacadeTest.java @@ -73,6 +73,7 @@ import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import org.openecomp.sdc.be.config.ComponentType; import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.dao.api.exception.JanusGraphException; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; import org.openecomp.sdc.be.dao.jsongraph.GraphVertex; import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphDao; @@ -440,12 +441,8 @@ public class ToscaOperationFacadeTest { List inUseBy = new ArrayList<>(); inUseBy.add(usingService); - when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)). - thenReturn(Either.left(allResourcesToDelete)); - doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock).getToscaElement(eq(service1), any(ComponentParametersView.class)); - when(topologyTemplateOperationMock. - getComponentByLabelAndId(serviceUid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)). - thenReturn(Either.left(service1)); + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUUID, Collections.emptyMap())). + thenReturn(allResourcesToDelete); when(janusGraphDaoMock.getParentVertices(any(GraphVertex.class), any(), eq(JsonParseFlagEnum.ParseAll))). thenReturn(Either.left(inUseBy)).thenReturn(Either.left(inUseBy)); final OperationException actualException = assertThrows(OperationException.class, () -> testInstance.deleteService(invariantUUID, true)); @@ -468,12 +465,8 @@ public class ToscaOperationFacadeTest { List affectedComponentIds = new ArrayList<>(); affectedComponentIds.add(service1.getUniqueId()); - when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)). - thenReturn(Either.left(allResourcesToDelete)); - doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock).getToscaElement(eq(service1), any(ComponentParametersView.class)); - when(topologyTemplateOperationMock. - getComponentByLabelAndId(serviceUid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)). - thenReturn(Either.left(service1)); + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUUID, Collections.emptyMap())). + thenReturn(allResourcesToDelete); when(janusGraphDaoMock.getParentVertices(eq(service1), any(), eq(JsonParseFlagEnum.ParseAll))). thenReturn(Either.right(JanusGraphOperationStatus.OK)); when(graphLockOperationMock.lockComponent(service1.getUniqueId(), NodeTypeEnum.Service)). @@ -504,18 +497,8 @@ public class ToscaOperationFacadeTest { Map propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class); propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID); - when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)). - thenReturn(Either.left(allResourcesToDelete)); - doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock). - getToscaElement(eq(service), any(ComponentParametersView.class)); - doReturn(Either.left(toscaElement2)).when(topologyTemplateOperationMock). - getToscaElement(eq(serviceV2), any(ComponentParametersView.class)); - when(topologyTemplateOperationMock. - getComponentByLabelAndId(serviceUid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)). - thenReturn(Either.left(service)); - when(topologyTemplateOperationMock. - getComponentByLabelAndId(service2Uid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)). - thenReturn(Either.left(serviceV2)); + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUUID, Collections.emptyMap())). + thenReturn(allResourcesToDelete); when(janusGraphDaoMock.getParentVertices(any(GraphVertex.class), any(), eq(JsonParseFlagEnum.ParseAll))). thenReturn(Either.right(JanusGraphOperationStatus.OK)); when(graphLockOperationMock.lockComponent(service.getUniqueId(), NodeTypeEnum.Service)). @@ -537,31 +520,38 @@ public class ToscaOperationFacadeTest { toscaElement.setUniqueId(serviceUid); List allResourcesToDelete = new ArrayList<>(); allResourcesToDelete.add(service); - Map propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class); - propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID); - when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)). - thenReturn(Either.left(allResourcesToDelete)); - doReturn(Either.left(toscaElement)).when(topologyTemplateOperationMock).getToscaElement(eq(service), any(ComponentParametersView.class)); - when(topologyTemplateOperationMock.getComponentByLabelAndId(serviceUid, ToscaElementTypeEnum.TOPOLOGY_TEMPLATE, JsonParseFlagEnum.ParseAll)). - thenReturn(Either.left(service)); + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUUID, Collections.emptyMap())). + thenReturn(allResourcesToDelete); when(janusGraphDaoMock.getParentVertices(eq(service), any(), eq(JsonParseFlagEnum.ParseAll))). thenReturn(Either.right(JanusGraphOperationStatus.OK)); when(graphLockOperationMock.lockComponent(service.getUniqueId(), NodeTypeEnum.Service)). thenReturn(StorageOperationStatus.OK); when(topologyTemplateOperationMock.deleteToscaElement(service)) .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); - assertThrows(StorageException.class, () -> testInstance.deleteService(invariantUUID, true)); + StorageException actualException = assertThrows(StorageException.class, () -> testInstance.deleteService(invariantUUID, false)); + assertEquals(StorageOperationStatus.NOT_FOUND, actualException.getStorageOperationStatus()); + assertEquals(0, actualException.getParams().length); } @Test public void testDeleteService_NotFound() { String invariantUUID = "12345"; - Map propertiesToMatch = new EnumMap<>(GraphPropertyEnum.class); - propertiesToMatch.put(GraphPropertyEnum.INVARIANT_UUID, invariantUUID); - when(janusGraphDaoMock.getByCriteria(null, propertiesToMatch, JsonParseFlagEnum.ParseMetadata)). - thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)); - assertThrows(StorageException.class, () -> testInstance.deleteService(invariantUUID, true)); + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUUID, Collections.emptyMap())). + thenReturn(Collections.emptyList()); + assertEquals(0, testInstance.deleteService(invariantUUID, true).size()); + } + + @Test + public void testDeleteService_GeneralErrorInJanusGraphDao() { + String invariantUUID = "12345"; + JanusGraphException janusException = new JanusGraphException(JanusGraphOperationStatus.GENERAL_ERROR, "General error"); + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUUID, Collections.emptyMap())). + thenThrow(janusException); + + StorageException actualException = assertThrows(StorageException.class, () -> testInstance.deleteService(invariantUUID, false)); + assertEquals(StorageOperationStatus.GENERAL_ERROR, actualException.getStorageOperationStatus()); + assertEquals(0, actualException.getParams().length); } @Test @@ -1213,6 +1203,129 @@ public class ToscaOperationFacadeTest { .deleteToscaDataElement(anyString(), eq(EdgeLabelEnum.OUTPUTS), eq(VertexTypeEnum.OUTPUTS), anyString(), eq(JsonPresentationFields.NAME)); } + @Test + public void testDeleteResource_ResourceInUse() { + GraphVertex graphVertex = getTopologyTemplateVertex(); + String invariantUuid = "1"; + graphVertex.setUniqueId(invariantUuid); + GraphVertex usingComponent = getTopologyTemplateVertex(); + usingComponent.setUniqueId("2"); + Map metadataJson = new HashMap<>(); + metadataJson.put("COMPONENT_TYPE", "SERVICE"); + metadataJson.put("NAME", "serviceName"); + usingComponent.setMetadataJson(metadataJson); + List inUseBy = new ArrayList<>(); + inUseBy.add(usingComponent); + Map metadata = new HashMap<>(); + metadata.put("ex1", new Object()); + graphVertex.setMetadataJson(metadata); + ToscaElement toscaElement = getToscaElementForTest(); + toscaElement.setUniqueId(invariantUuid); + List allResourcesToDelete = new ArrayList<>(); + allResourcesToDelete.add(graphVertex); + + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUuid, Collections.emptyMap())). + thenReturn(allResourcesToDelete); + when(janusGraphDaoMock.getParentVertices(any(GraphVertex.class), any(), eq(JsonParseFlagEnum.ParseAll))).thenReturn(Either.left(inUseBy)); + + final OperationException actualException = assertThrows(OperationException.class, () -> testInstance.deleteComponent(invariantUuid, NodeTypeEnum.Resource, true)); + assertEquals(actualException.getActionStatus(), ActionStatus.COMPONENT_IN_USE_BY_ANOTHER_COMPONENT); + } + + @Test + public void testDeleteResource_WithTwoVersions() { + GraphVertex graphVertex = getTopologyTemplateVertex(); + String invariantUuid = "1"; + graphVertex.setUniqueId(invariantUuid); + Map metadata1 = new HashMap<>(); + metadata1.put("ex1", new Object()); + graphVertex.setMetadataJson(metadata1); + ToscaElement toscaElement1 = getToscaElementForTest(); + toscaElement1.setUniqueId(invariantUuid); + ToscaElement toscaElement2 = getToscaElementForTest(); + toscaElement2.setUniqueId("2"); + GraphVertex graphVertex2 = getTopologyTemplateVertex(); + graphVertex2.setUniqueId("2"); + Map metadata2 = new HashMap<>(); + metadata2.put("ex2", new Object()); + graphVertex.setMetadataJson(metadata2); + List parentVertices = new ArrayList<>(); + parentVertices.add(graphVertex2); + List affectedComponentIds = new ArrayList<>(); + affectedComponentIds.add(graphVertex.getUniqueId()); + affectedComponentIds.add(graphVertex2.getUniqueId()); + + when(graphLockOperationMock.lockComponent(graphVertex.getUniqueId(), NodeTypeEnum.Resource)). + thenReturn(StorageOperationStatus.OK); + when(graphLockOperationMock.lockComponent(graphVertex2.getUniqueId(), NodeTypeEnum.Resource)). + thenReturn(StorageOperationStatus.OK); + when(topologyTemplateOperationMock.deleteToscaElement(graphVertex)).thenReturn(Either.left(toscaElement1)); + when(topologyTemplateOperationMock.deleteToscaElement(graphVertex2)).thenReturn(Either.left(toscaElement2)); + List allResourcesToDelete = new ArrayList<>(); + allResourcesToDelete.add(graphVertex); + allResourcesToDelete.add(graphVertex2); + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUuid, Collections.emptyMap())). + thenReturn(allResourcesToDelete); + when(janusGraphDaoMock.getParentVertices(any(GraphVertex.class), any(), any())).thenReturn(Either.right(JanusGraphOperationStatus.OK)); + assertEquals(affectedComponentIds, testInstance.deleteComponent(invariantUuid, NodeTypeEnum.Resource, false)); + } + + @Test + public void testDeleteResource_WithOneVersion() { + GraphVertex graphVertex = getTopologyTemplateVertex(); + graphVertex.setUniqueId("1"); + Map metadata = new HashMap<>(); + metadata.put("ex1", new Object()); + graphVertex.setMetadataJson(metadata); + ToscaElement toscaElement = getToscaElementForTest(); + List affectedComponentIds = new ArrayList<>(); + affectedComponentIds.add(graphVertex.getUniqueId()); + when(graphLockOperationMock.lockComponent(graphVertex.getUniqueId(), NodeTypeEnum.Resource)). + thenReturn(StorageOperationStatus.OK); + when(topologyTemplateOperationMock.deleteToscaElement(graphVertex)).thenReturn(Either.left(toscaElement)); + List allResourcesToDelete = new ArrayList<>(); + allResourcesToDelete.add(graphVertex); + when(janusGraphDaoMock.findAllVertexByInvariantUuid(graphVertex.getUniqueId(), Collections.emptyMap())). + thenReturn(allResourcesToDelete); + when(janusGraphDaoMock.getParentVertices(any(GraphVertex.class), any(), any())).thenReturn(Either.right(JanusGraphOperationStatus.OK)); + assertEquals(affectedComponentIds, testInstance.deleteComponent("1", NodeTypeEnum.Resource, true)); + } + + @Test + public void testDeleteResource_FailDelete() { + Map metadataProperties = new HashMap<>(); + metadataProperties.put(GraphPropertyEnum.NAME, "graphVertex"); + GraphVertex graphVertex = getTopologyTemplateVertex(); + String invariantUUID = "1"; + graphVertex.setUniqueId(invariantUUID); + graphVertex.setMetadataProperties(metadataProperties); + ToscaElement toscaElement1 = getToscaElementForTest(); + toscaElement1.setUniqueId(invariantUUID); + List affectedComponentIds = new ArrayList<>(); + affectedComponentIds.add(graphVertex.getUniqueId()); + List allResourcesToDelete = new ArrayList<>(); + allResourcesToDelete.add(graphVertex); + + when(janusGraphDaoMock.findAllVertexByInvariantUuid(graphVertex.getUniqueId(), Collections.emptyMap())). + thenReturn(allResourcesToDelete); + when(graphLockOperationMock.lockComponent(graphVertex.getUniqueId(), NodeTypeEnum.Resource)). + thenReturn(StorageOperationStatus.OK); + when(topologyTemplateOperationMock.deleteToscaElement(graphVertex)) + .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); + when(janusGraphDaoMock.getParentVertices(any(GraphVertex.class), any(), any())).thenReturn(Either.right(JanusGraphOperationStatus.OK)); + StorageException actualException = assertThrows(StorageException.class, () -> testInstance.deleteComponent(invariantUUID, NodeTypeEnum.Resource, false)); + assertEquals(StorageOperationStatus.NOT_FOUND, actualException.getStorageOperationStatus()); + assertEquals(0, actualException.getParams().length); + } + + @Test + public void testDeleteResource_NotFound() { + String invariantUUID = "12345"; + when(janusGraphDaoMock.findAllVertexByInvariantUuid(invariantUUID, Collections.emptyMap())). + thenReturn(Collections.emptyList()); + assertEquals(0, testInstance.deleteComponent(invariantUUID, NodeTypeEnum.Resource, true).size()); + } + private StorageOperationStatus associateRequirementsToServiceWithStatus(StorageOperationStatus status) { Map requirementsMap = new HashedMap(); String componentId = "componentid"; diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/DeleteActionEnum.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/DeleteActionEnum.java new file mode 100644 index 0000000000..0f0cac6c87 --- /dev/null +++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/enums/DeleteActionEnum.java @@ -0,0 +1,27 @@ +/*- + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openecomp.sdc.be.datatypes.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum DeleteActionEnum { + MARK_AS_DELETE("MARK_AS_DELETE"), + DELETE("DELETE"); + + private final String value; +} -- cgit 1.2.3-korg