f25f6d780b80df3e868892067d84476787522a76
[sdc.git] /
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
18 import java.io.InputStream;
19 import java.util.Optional;
20
21 import static org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder.getErrorWithParameters;
22
23 public abstract class BaseOrchestrationTemplateHandler implements OrchestrationTemplateFileHandler {
24   protected static final Logger logger =
25       LoggerFactory.getLogger(BaseOrchestrationTemplateHandler.class);
26   protected static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
27
28   @Override
29   public UploadFileResponse upload(VspDetails vspDetails, InputStream fileToUpload,
30                                    String fileSuffix, String networkPackageName,
31                                    CandidateService candidateService) {
32     UploadFileResponse uploadFileResponse = new UploadFileResponse();
33     uploadFileResponse.setOnboardingType(getHandlerType());
34     if (isNotEmptyFileToUpload(fileSuffix, fileToUpload, uploadFileResponse, candidateService)) {
35       return uploadFileResponse;
36     }
37
38     byte[] uploadedFileData = FileUtils.toByteArray(fileToUpload);
39     if (isInvalidRawZipData(fileSuffix, uploadFileResponse, uploadedFileData, candidateService)) {
40       return uploadFileResponse;
41     }
42
43     Optional<FileContentHandler> optionalContentMap =
44         getFileContentMap(uploadFileResponse, uploadedFileData);
45     if (!optionalContentMap.isPresent()) {
46       logger.error(getErrorWithParameters(Messages.FILE_CONTENT_MAP.getErrorMessage(),
47           getHandlerType().toString()));
48       uploadFileResponse.addStructureError(SdcCommon.UPLOAD_FILE, new ErrorMessage(ErrorLevel.ERROR,
49           getErrorWithParameters(Messages.FILE_CONTENT_MAP.getErrorMessage(),
50               getHandlerType().toString())));
51
52       mdcDataDebugMessage.debugExitMessage("VSP id", vspDetails.getId());
53       return uploadFileResponse;
54     }
55
56     if (!MapUtils.isEmpty(uploadFileResponse.getErrors())) {
57       mdcDataDebugMessage.debugExitMessage("VSP id", vspDetails.getId());
58       return uploadFileResponse;
59     }
60     if (updateCandidateData(vspDetails, uploadedFileData, optionalContentMap.get(), fileSuffix,
61         networkPackageName, candidateService, uploadFileResponse)) {
62       return uploadFileResponse;
63     }
64
65     mdcDataDebugMessage.debugExitMessage("VSP id", vspDetails.getId());
66     return uploadFileResponse;
67
68   }
69
70   protected abstract boolean updateCandidateData(VspDetails vspDetails,
71                                                  byte[] uploadedFileData,
72                                                  FileContentHandler contentMap,
73                                                  String fileSuffix,
74                                                  String networkPackageName,
75                                                  CandidateService candidateService,
76                                                  UploadFileResponse uploadFileResponse);
77
78   private boolean isNotEmptyFileToUpload(String fileSuffix, InputStream fileToUpload,
79                                          UploadFileResponse uploadFileResponse,
80                                          CandidateService candidateService) {
81     Optional<ErrorMessage> errorMessage =
82         candidateService.validateNonEmptyFileToUpload(fileToUpload, fileSuffix);
83     if (errorMessage.isPresent()) {
84       uploadFileResponse.addStructureError(SdcCommon.UPLOAD_FILE, errorMessage.get());
85       return true;
86     }
87     return false;
88   }
89
90   protected boolean isInvalidRawZipData(String fileSuffix,
91                                         UploadFileResponse uploadFileResponse,
92                                         byte[] uploadedFileData,
93                                         CandidateService candidateService) {
94     Optional<ErrorMessage> errorMessage;
95     errorMessage = candidateService.validateRawZipData(fileSuffix, uploadedFileData);
96     if (errorMessage.isPresent()) {
97       uploadFileResponse.addStructureError(SdcCommon.UPLOAD_FILE, errorMessage.get());
98       return true;
99     }
100     return false;
101   }
102
103   public abstract Optional<FileContentHandler> getFileContentMap(
104       UploadFileResponse uploadFileResponse,
105       byte[] uploadedFileData);
106
107   protected abstract OnboardingTypesEnum getHandlerType();
108 }