Onboard Package Handling
[sdc.git] / 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 5cf6f40..10f96e9 100644 (file)
 
 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<UploadFileResponseDto> 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<UploadFileResponseDto> 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) {