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