From ccc1f364baea63733e93c6f4eb26ea97eeb77960 Mon Sep 17 00:00:00 2001 From: aribeiro Date: Tue, 3 Sep 2019 08:37:55 +0000 Subject: Onboard Package Handling Retain the original onboarded package when it comes in zip/csar format. Issue-ID: SDC-2510 Change-Id: Ie293db25eca8872be26ffc8475b25ccace1aab6f Signed-off-by: aribeiro --- .../OrchestrationTemplateCandidateImpl.java | 114 +++++++++++++++------ 1 file changed, 85 insertions(+), 29 deletions(-) (limited to 'openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest') diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java index 5cf6f40c37..10f96e9d3b 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java @@ -19,8 +19,24 @@ package org.openecomp.sdcrests.vsp.rest.services; +import static org.openecomp.core.utilities.file.FileUtils.getFileExtension; +import static org.openecomp.core.utilities.file.FileUtils.getNetworkPackageName; +import static org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder.getErrorWithParameters; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.activation.DataHandler; +import javax.inject.Named; +import javax.ws.rs.core.Response; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.cxf.jaxrs.ext.multipart.Attachment; +import org.openecomp.core.utilities.orchestration.OnboardingTypesEnum; import org.openecomp.sdc.activitylog.ActivityLogManager; import org.openecomp.sdc.activitylog.ActivityLogManagerFactory; import org.openecomp.sdc.activitylog.dao.type.ActivityLogEntity; @@ -35,7 +51,10 @@ import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateMan import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateManagerFactory; import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager; import org.openecomp.sdc.vendorsoftwareproduct.VspManagerFactory; +import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails; import org.openecomp.sdc.vendorsoftwareproduct.security.SecurityManagerException; +import org.openecomp.sdc.vendorsoftwareproduct.types.OnboardPackage; +import org.openecomp.sdc.vendorsoftwareproduct.types.OnboardPackageInfo; import org.openecomp.sdc.vendorsoftwareproduct.types.OrchestrationTemplateActionResponse; import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse; import org.openecomp.sdc.vendorsoftwareproduct.types.ValidationResponse; @@ -53,20 +72,6 @@ import org.openecomp.sdcrests.vsp.rest.mapping.MapValidationResponseToDto; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; -import javax.inject.Named; -import javax.ws.rs.core.Response; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static org.openecomp.core.utilities.file.FileUtils.getFileExtension; -import static org.openecomp.core.utilities.file.FileUtils.getNetworkPackageName; -import static org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder.getErrorWithParameters; - @Named @Service("orchestrationTemplateCandidate") @Scope(value = "prototype") @@ -81,35 +86,86 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate ActivityLogManagerFactory.getInstance().createInterface(); @Override - public Response upload(String vspId, String versionId, Attachment fileToUpload, String user) { - PackageArchive archive = new PackageArchive(fileToUpload.getObject(byte[].class)); + public Response upload(final String vspId, final String versionId, + final Attachment fileToUpload, final String user) { + final byte[] fileToUploadBytes = fileToUpload.getObject(byte[].class); + String fileToUploadName = ""; + String fileToUploadExtension = ""; + final DataHandler dataHandler = fileToUpload.getDataHandler(); + if(dataHandler != null) { + final String filename = dataHandler.getName(); + fileToUploadName = FilenameUtils.removeExtension(filename); + fileToUploadExtension = FilenameUtils.getExtension(filename); + } + final PackageArchive archive = new PackageArchive(fileToUploadBytes); + final Optional validatePackageArchiveResponse = + validatePackageArchive(archive); + if (!validatePackageArchiveResponse.isPresent()) { + final VspDetails vspDetails = new VspDetails(vspId, new Version(versionId)); + return processOnboardPackage(fileToUpload, fileToUploadBytes, fileToUploadName, + fileToUploadExtension, archive, vspDetails); + } else { + return Response.ok(validatePackageArchiveResponse.get()).build(); + } + } + + private Optional validatePackageArchive(final PackageArchive archive) { UploadFileResponseDto uploadFileResponseDto; try { if (archive.isSigned() && !archive.isSignatureValid()) { - ErrorMessage errorMessage = new ErrorMessage(ErrorLevel.ERROR, - getErrorWithParameters(Messages.FAILED_TO_VERIFY_SIGNATURE.getErrorMessage(), "")); + final ErrorMessage errorMessage = new ErrorMessage(ErrorLevel.ERROR, + getErrorWithParameters(Messages.FAILED_TO_VERIFY_SIGNATURE.getErrorMessage(), "")); LOGGER.error(errorMessage.getMessage()); uploadFileResponseDto = buildUploadResponseWithError(errorMessage); //returning OK as SDC UI won't show error message if NOT OK error code. - return Response.ok(uploadFileResponseDto).build(); + return Optional.of(uploadFileResponseDto); } + } catch (final SecurityManagerException e) { + final ErrorMessage errorMessage = new ErrorMessage(ErrorLevel.ERROR, + getErrorWithParameters(e.getMessage(), "")); + LOGGER.error(errorMessage.getMessage(), e); + uploadFileResponseDto = buildUploadResponseWithError(errorMessage); + //returning OK as SDC UI won't show error message if NOT OK error code. + return Optional.of(uploadFileResponseDto); + } + return Optional.empty(); + } - String filename = archive.getArchiveFileName().orElse(fileToUpload.getContentDisposition().getFilename()); - UploadFileResponse uploadFileResponse = candidateManager - .upload(vspId, new Version(versionId), new ByteArrayInputStream(archive.getPackageFileContents()), - getFileExtension(filename), getNetworkPackageName(filename)); - + private Response processOnboardPackage(final Attachment fileToUpload, + final byte[] fileToUploadBytes, + final String fileToUploadName, + final String fileToUploadExtension, + final PackageArchive archive, + final VspDetails vspDetails) { + final String filename = archive.getArchiveFileName() + .orElse(fileToUpload.getContentDisposition().getFilename()); + UploadFileResponseDto uploadFileResponseDto; + try { + final String archiveFileExtension = getFileExtension(filename); + final OnboardPackageInfo onboardPackageInfo; + if (OnboardingTypesEnum.CSAR.toString().equalsIgnoreCase(archiveFileExtension)) { + final OnboardPackage onboardPackage = new OnboardPackage(getNetworkPackageName(filename), + archiveFileExtension, ByteBuffer.wrap(archive.getPackageFileContents())); + onboardPackageInfo = new OnboardPackageInfo(fileToUploadName, + fileToUploadExtension, ByteBuffer.wrap(fileToUploadBytes), onboardPackage); + } else { + onboardPackageInfo = new OnboardPackageInfo(fileToUploadName, + fileToUploadExtension, ByteBuffer.wrap(fileToUploadBytes)); + } + final UploadFileResponse uploadFileResponse = candidateManager + .upload(vspDetails, onboardPackageInfo); uploadFileResponseDto = new MapUploadFileResponseToUploadFileResponseDto() - .applyMapping(uploadFileResponse, UploadFileResponseDto.class); - } catch (SecurityManagerException e) { - ErrorMessage errorMessage = new ErrorMessage(ErrorLevel.ERROR, - getErrorWithParameters(e.getMessage(), "")); + .applyMapping(uploadFileResponse, UploadFileResponseDto.class); + + return Response.ok(uploadFileResponseDto).build(); + } catch (final SecurityManagerException e) { + final ErrorMessage errorMessage = new ErrorMessage(ErrorLevel.ERROR, + getErrorWithParameters(e.getMessage(), "")); LOGGER.error(errorMessage.getMessage(), e); uploadFileResponseDto = buildUploadResponseWithError(errorMessage); //returning OK as SDC UI won't show error message if NOT OK error code. return Response.ok(uploadFileResponseDto).build(); } - return Response.ok(uploadFileResponseDto).build(); } private UploadFileResponseDto buildUploadResponseWithError(ErrorMessage errorMessage) { -- cgit 1.2.3-korg