Add collaboration feature
[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
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(fileToUpload, uploadFileResponse, candidateService)) {
35       return uploadFileResponse;
36     }
37
38     byte[] uploadedFileData = FileUtils.toByteArray(fileToUpload);
39     if (isInvalidRawZipData(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(InputStream fileToUpload,
79                                          UploadFileResponse uploadFileResponse,
80                                          CandidateService candidateService) {
81     Optional<ErrorMessage> errorMessage =
82         candidateService.validateNonEmptyFileToUpload(fileToUpload);
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(UploadFileResponse uploadFileResponse,
91                                         byte[] uploadedFileData,
92                                         CandidateService candidateService) {
93     Optional<ErrorMessage> errorMessage;
94     errorMessage = candidateService.validateRawZipData(uploadedFileData);
95     if (errorMessage.isPresent()) {
96       uploadFileResponse.addStructureError(SdcCommon.UPLOAD_FILE, errorMessage.get());
97       return true;
98     }
99     return false;
100   }
101
102   public abstract Optional<FileContentHandler> getFileContentMap(
103       UploadFileResponse uploadFileResponse,
104       byte[] uploadedFileData);
105
106   protected abstract OnboardingTypesEnum getHandlerType();
107 }