Improve test coverage
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / ArtifactsBusinessLogic.java
index 55c4353..71d55d3 100644 (file)
@@ -50,8 +50,8 @@ import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.openecomp.sdc.be.components.ArtifactsResolver;
 import org.openecomp.sdc.be.components.impl.ImportUtils.ResultStatusEnum;
@@ -88,6 +88,7 @@ import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
 import org.openecomp.sdc.be.info.ArtifactTemplateInfo;
 import org.openecomp.sdc.be.model.ArtifactDefinition;
+import org.openecomp.sdc.be.model.ArtifactTypeDefinition;
 import org.openecomp.sdc.be.model.Component;
 import org.openecomp.sdc.be.model.ComponentInstance;
 import org.openecomp.sdc.be.model.ComponentParametersView;
@@ -113,6 +114,7 @@ import org.openecomp.sdc.be.model.operations.api.IGroupTypeOperation;
 import org.openecomp.sdc.be.model.operations.api.IHeatParametersOperation;
 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.ArtifactTypeOperation;
 import org.openecomp.sdc.be.model.operations.impl.DaoStatusConverter;
 import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
@@ -169,6 +171,8 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
     private static final String COMMIT = "all changes committed";
     private static final String UPDATE_ARTIFACT = "Update Artifact";
     private static final String FOUND_DEPLOYMENT_ARTIFACT = "Found deployment artifact {}";
+    private static final String VALID_ARTIFACT_LABEL_NAME = "'A-Z', 'a-z', '0-9', '-', '@', '+' and space.";
+    private final ArtifactTypeOperation artifactTypeOperation;
     private Gson gson = new GsonBuilder().setPrettyPrinting().create();
     @javax.annotation.Resource
     private IInterfaceLifecycleOperation interfaceLifecycleOperation;
@@ -192,7 +196,8 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
                                   ArtifactsResolver artifactsResolver, IElementOperation elementDao, IGroupOperation groupOperation,
                                   IGroupInstanceOperation groupInstanceOperation, IGroupTypeOperation groupTypeOperation,
                                   InterfaceOperation interfaceOperation, InterfaceLifecycleOperation interfaceLifecycleTypeOperation,
-                                  ArtifactsOperations artifactToscaOperation) {
+                                  ArtifactsOperations artifactToscaOperation,
+                                  ArtifactTypeOperation artifactTypeOperation) {
         super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, interfaceOperation, interfaceLifecycleTypeOperation,
             artifactToscaOperation);
         this.artifactCassandraDao = artifactCassandraDao;
@@ -201,6 +206,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
         this.lifecycleBusinessLogic = lifecycleBusinessLogic;
         this.userBusinessLogic = userBusinessLogic;
         this.artifactsResolver = artifactsResolver;
+        this.artifactTypeOperation = artifactTypeOperation;
     }
 
     public static <R> Either<Boolean, R> ifTrue(boolean predicate, Supplier<Either<Boolean, R>> ifTrue) {
@@ -371,7 +377,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
                 return new ByResponseFormatComponentException(error);
             });
         } else {
-            return toscaExportUtils.exportComponent(parent).left().map(toscaRepresentation -> {
+            return toscaExportUtils.exportComponent(parent, checkIfSkipImports(parent.getModel())).left().map(toscaRepresentation -> {
                 log.debug("Tosca yaml exported for component {} ", parent.getUniqueId());
                 return toscaRepresentation.getMainYaml();
             }).right().map(toscaError -> {
@@ -381,6 +387,11 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
         }
     }
 
+    private boolean checkIfSkipImports(final String model) {
+        return null != model && !model.equalsIgnoreCase("ETSI SOL001 v2.5.1")
+            && !model.equalsIgnoreCase("AUTOMATION COMPOSITION");
+    }
+
     private Either<ArtifactDefinition, Operation> doAction(String componentId, ComponentTypeEnum componentType, ArtifactOperationInfo operation,
                                                            String artifactId, ArtifactDefinition artifactInfo, String origMd5, String originData,
                                                            String interfaceName, String operationName, AuditingActionEnum auditingAction, User user,
@@ -698,11 +709,10 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
             new ArtifactOperationInfo(false, false, ArtifactOperationEnum.DOWNLOAD), artifactId, null, null, null, null, null, parentId,
             containerComponentType);
         ArtifactDefinition artifactDefinition;
-        Either<ArtifactDefinition, Operation> insideValue = result;
-        if (insideValue.isLeft()) {
-            artifactDefinition = insideValue.left().value();
+        if (result.isLeft()) {
+            artifactDefinition = result.left().value();
         } else {
-            artifactDefinition = insideValue.right().value().getImplementationArtifact();
+            artifactDefinition = result.right().value().getImplementationArtifact();
         }
         // for tosca artifacts and heat env on VF level generated on download without saving
         if (artifactDefinition.getPayloadData() != null) {
@@ -1530,7 +1540,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
             artifactInfo.setArtifactDisplayName(displayName);
             if (!ValidationUtils.validateArtifactLabel(artifactLabel)) {
                 log.debug("Invalid format form Artifact label : {}", artifactLabel);
-                return Either.right(componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT));
+                return Either.right(componentsUtils.getResponseFormat(ActionStatus.INVALID_ARTIFACT_LABEL_NAME, VALID_ARTIFACT_LABEL_NAME));
             }
             artifactLabel = ValidationUtils.normalizeArtifactLabel(artifactLabel);
             if (artifactLabel.isEmpty()) {
@@ -2078,7 +2088,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
 
     private Either<ArtifactDefinition, ResponseFormat> validateOrSetArtifactGroupType(ArtifactDefinition artifactInfo,
                                                                                       ArtifactDefinition currentArtifact) {
-        if (Objects.nonNull(artifactInfo) && Objects.nonNull(currentArtifact)) {
+        if (null != artifactInfo && null != currentArtifact) {
             if (artifactInfo.getArtifactGroupType() == null) {
                 artifactInfo.setArtifactGroupType(currentArtifact.getArtifactGroupType());
             } else if (!currentArtifact.getArtifactGroupType().getType().equalsIgnoreCase(artifactInfo.getArtifactGroupType().getType())) {
@@ -2205,7 +2215,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
     }
 
     private Either<Boolean, ResponseFormat> validateAndServiceApiUrl(ArtifactDefinition artifactInfo) {
-        if (!ValidationUtils.validateStringNotEmpty(artifactInfo.getApiUrl())) {
+        if (StringUtils.isEmpty(artifactInfo.getApiUrl())) {
             log.debug("Artifact url cannot be empty.");
             return Either.right(componentsUtils.getResponseFormat(ActionStatus.MISSING_DATA, ARTIFACT_URL));
         }
@@ -2508,32 +2518,14 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
     }
 
     private Service validateServiceNameAndVersion(String serviceName, String serviceVersion) {
-        Either<List<Service>, StorageOperationStatus> serviceListBySystemName = toscaOperationFacade
-            .getBySystemName(ComponentTypeEnum.SERVICE, serviceName);
-        if (serviceListBySystemName.isRight()) {
+        final Either<Service, StorageOperationStatus> serviceBySystemNameAndVersion
+            = toscaOperationFacade.getBySystemNameAndVersion(ComponentTypeEnum.SERVICE, serviceName, serviceVersion);
+        if (serviceBySystemNameAndVersion.isRight()) {
             log.debug("Couldn't fetch any service with name {}", serviceName);
             throw new ByActionStatusComponentException(
-                componentsUtils.convertFromStorageResponse(serviceListBySystemName.right().value(), ComponentTypeEnum.SERVICE), serviceName);
+                componentsUtils.convertFromStorageResponse(serviceBySystemNameAndVersion.right().value(), ComponentTypeEnum.SERVICE), serviceName);
         }
-        List<Service> serviceList = serviceListBySystemName.left().value();
-        if (serviceList == null || serviceList.isEmpty()) {
-            log.debug("Couldn't fetch any service with name {}", serviceName);
-            throw new ByActionStatusComponentException(ActionStatus.SERVICE_NOT_FOUND, serviceName);
-        }
-        Service foundService = null;
-        for (Service service : serviceList) {
-            if (service.getVersion().equals(serviceVersion)) {
-                log.trace("Found service with version {}", serviceVersion);
-                foundService = service;
-                break;
-            }
-        }
-        if (foundService == null) {
-            log.debug("Couldn't find version {} for service {}", serviceVersion, serviceName);
-            throw new ByActionStatusComponentException(ActionStatus.COMPONENT_VERSION_NOT_FOUND, ComponentTypeEnum.SERVICE.getValue(),
-                serviceVersion);
-        }
-        return foundService;
+        return serviceBySystemNameAndVersion.left().value();
     }
 
     private Resource validateResourceNameAndVersion(String resourceName, String resourceVersion) {
@@ -2892,9 +2884,9 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
             List<HeatParameterDefinition> empltyHeatValues = new ArrayList<>();
             for (HeatParameterDefinition heatParameterDefinition : heatParameters) {
                 String heatValue = heatParameterDefinition.getCurrentValue();
-                if (!ValidationUtils.validateStringNotEmpty(heatValue)) {
+                if (StringUtils.isEmpty(heatValue)) {
                     heatValue = heatParameterDefinition.getDefaultValue();
-                    if (!ValidationUtils.validateStringNotEmpty(heatValue)) {
+                    if (StringUtils.isEmpty(heatValue)) {
                         empltyHeatValues.add(heatParameterDefinition);
                         continue;
                     }
@@ -3125,7 +3117,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
         json.put(Constants.ARTIFACT_GROUP_TYPE, artifactGroupType.getType());
         json.put(Constants.REQUIRED_ARTIFACTS, (updatedRequiredArtifacts == null || updatedRequiredArtifacts.isEmpty()) ? new ArrayList<>()
             : updatedRequiredArtifacts.stream().filter(
-                e -> e.getType().equals(ArtifactTypeEnum.HEAT_ARTIFACT.getType()) || e.getType().equals(ArtifactTypeEnum.HEAT_NESTED.getType()))
+                    e -> e.getType().equals(ArtifactTypeEnum.HEAT_ARTIFACT.getType()) || e.getType().equals(ArtifactTypeEnum.HEAT_NESTED.getType()))
                 .map(ArtifactTemplateInfo::getFileName).collect(Collectors.toList()));
         json.put(Constants.ARTIFACT_HEAT_PARAMS, (heatParameters == null || heatParameters.isEmpty()) ? new ArrayList<>() : heatParameters);
         return json;
@@ -3687,7 +3679,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
         operation.setImplementation(implementationArtifact);
         gotInterface.setOperationsMap(operationsMap);
         Either<List<InterfaceDefinition>, StorageOperationStatus> interfaceDefinitionStorageOperationStatusEither = interfaceOperation
-            .updateInterfaces(storedComponent.getUniqueId(), Collections.singletonList(gotInterface));
+            .updateInterfaces(storedComponent, Collections.singletonList(gotInterface));
         if (interfaceDefinitionStorageOperationStatusEither.isRight()) {
             StorageOperationStatus storageOperationStatus = interfaceDefinitionStorageOperationStatusEither.right().value();
             ActionStatus actionStatus = componentsUtils.convertFromStorageResponseForDataType(storageOperationStatus);
@@ -3752,7 +3744,6 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
                     errorWrapper.setInnerElement(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(status)));
                 }
                 if (errorWrapper.isEmpty()) {
-                    NodeTypeEnum parentType = convertParentType(componentType);
                     final List<ArtifactDefinition> existingDeploymentArtifacts = getDeploymentArtifacts(toscaComponentEither.left().value(), null);
                     for (ArtifactDefinition artifactDefinition : existingDeploymentArtifacts) {
                         if (artifactInfo.getArtifactName().equalsIgnoreCase(artifactDefinition.getArtifactName())) {
@@ -4040,7 +4031,6 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
         String componentId = component.getUniqueId();
         String artifactId = artifactDefinition.getUniqueId();
         Either<ArtifactDefinition, Operation> result;
-        Wrapper<ResponseFormat> errorWrapper = new Wrapper<>();
         //artifact validation
         artifactDefinition = validateArtifact(componentId, componentType, operation, artifactId, artifactDefinition, auditingAction, user, component,
             shouldLock, inTransaction);
@@ -4232,7 +4222,6 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic {
     }
 
     private Component checkoutParentComponent(ComponentTypeEnum componentType, String parentId, String userId) {
-        Component component = null;
         User modifier = userBusinessLogic.getUser(userId, false);
         LifecycleChangeInfoWithAction changeInfo = new LifecycleChangeInfoWithAction("External API checkout",
             LifecycleChanceActionEnum.UPDATE_FROM_EXTERNAL_API);