Create new VSP, onboard from TOSCA file - UI
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / main / java / org / openecomp / sdc / vendorsoftwareproduct / impl / orchestration / BaseOrchestrationTemplateHandler.java
1 package org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration;
2
3 import org.apache.commons.collections4.MapUtils;
4 import org.openecomp.core.utilities.file.FileContentHandler;
5 import org.openecomp.core.utilities.file.FileUtils;
6 import org.openecomp.core.utilities.orchestration.OnboardingTypesEnum;
7 import org.openecomp.sdc.common.errors.Messages;
8 import org.openecomp.sdc.common.utils.SdcCommon;
9 import org.openecomp.sdc.datatypes.error.ErrorLevel;
10 import org.openecomp.sdc.datatypes.error.ErrorMessage;
11 import org.openecomp.sdc.logging.api.Logger;
12 import org.openecomp.sdc.logging.api.LoggerFactory;
13 import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
14 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
15 import org.openecomp.sdc.vendorsoftwareproduct.services.filedatastructuremodule.CandidateService;
16 import org.openecomp.sdc.vendorsoftwareproduct.types.UploadFileResponse;
17 import org.openecomp.sdc.versioning.dao.types.Version;
18
19 import java.io.InputStream;
20 import java.util.Optional;
21 import static org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder.getErrorWithParameters;
22 public abstract class BaseOrchestrationTemplateHandler implements OrchestrationTemplateFileHandler {
23     protected static final Logger logger =
24             LoggerFactory.getLogger(BaseOrchestrationTemplateHandler.class);
25     protected static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
26
27     @Override
28     public UploadFileResponse upload(String vspId, Version version, InputStream fileToUpload, String user,
29                                      CandidateService candidateService, VspDetails vspDetails) {
30         UploadFileResponse uploadFileResponse = new UploadFileResponse();
31         uploadFileResponse.setOnboardingType(getHandlerType());
32         if (isNotEmptyFileToUpload(fileToUpload, uploadFileResponse, candidateService)) {
33             return uploadFileResponse;
34         }
35
36         byte[] uploadedFileData = FileUtils.toByteArray(fileToUpload);
37         if (isInvalidRawZipData(uploadFileResponse, uploadedFileData, candidateService)) {
38             return uploadFileResponse;
39         }
40
41         Optional<FileContentHandler> optionalContentMap =
42                 getFileContentMap(uploadFileResponse, uploadedFileData);
43         if (!optionalContentMap.isPresent()) {
44             logger.error(getErrorWithParameters(Messages.FILE_CONTENT_MAP.getErrorMessage(), getHandlerType().toString()));
45             uploadFileResponse
46                     .addStructureError(
47                             SdcCommon.UPLOAD_FILE,
48                             new ErrorMessage(ErrorLevel.ERROR,
49                                     getErrorWithParameters(Messages.FILE_CONTENT_MAP.getErrorMessage(), getHandlerType().toString())));
50
51             mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
52             return uploadFileResponse;
53         }
54
55         if (!MapUtils.isEmpty(uploadFileResponse.getErrors())) {
56
57             mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
58             return uploadFileResponse;
59         }
60         if (updateCandidateData(vspId, user, candidateService, vspDetails, uploadFileResponse,
61                 uploadedFileData, optionalContentMap))
62             return uploadFileResponse;
63
64         mdcDataDebugMessage.debugExitMessage("VSP id", vspId);
65         return uploadFileResponse;
66
67     }
68
69     protected abstract boolean updateCandidateData(String vspId, String user, CandidateService candidateService,
70                                                    VspDetails vspDetails, UploadFileResponse uploadFileResponse,
71                                                    byte[] uploadedFileData,
72                                                    Optional<FileContentHandler> optionalContentMap);
73
74
75     private boolean isNotEmptyFileToUpload(InputStream fileToUpload,
76                                            UploadFileResponse uploadFileResponse, CandidateService candidateService) {
77         Optional<ErrorMessage> errorMessage =
78                 candidateService.validateNonEmptyFileToUpload(fileToUpload);
79         if (errorMessage.isPresent()) {
80             uploadFileResponse.addStructureError(SdcCommon.UPLOAD_FILE, errorMessage.get());
81             return true;
82         }
83         return false;
84     }
85
86     protected boolean isInvalidRawZipData(UploadFileResponse uploadFileResponse,
87                                         byte[] uploadedFileData, CandidateService candidateService) {
88         Optional<ErrorMessage> errorMessage;
89         errorMessage = candidateService.validateRawZipData(uploadedFileData);
90         if (errorMessage.isPresent()) {
91             uploadFileResponse.addStructureError(SdcCommon.UPLOAD_FILE, errorMessage.get());
92             return true;
93         }
94         return false;
95     }
96
97     public abstract Optional<FileContentHandler> getFileContentMap(UploadFileResponse uploadFileResponse,
98                                                                    byte[] uploadedFileData);
99     protected abstract OnboardingTypesEnum getHandlerType();
100 }