package net.sourceforge.solexatools.validation; import net.sourceforge.seqware.common.business.FileService; import net.sourceforge.seqware.common.business.FileTypeService; import net.sourceforge.seqware.common.model.UploadSequence; import net.sourceforge.seqware.common.util.Log; import org.springframework.validation.Errors; import org.springframework.validation.Validator; import org.springframework.web.multipart.MultipartFile; /** * <p> * UploadSequenceValidator class. * </p> * * @author boconnor * @version $Id: $Id */ public class UploadSequenceValidator extends UploadFileValidator implements Validator { private FileService fileService; private FileTypeService fileTypeService; /** * <p> * Constructor for UploadSequenceValidator. * </p> */ public UploadSequenceValidator() { super(); } /** * {@inheritDoc} * * @param clazz * @return */ @Override public boolean supports(Class clazz) { return UploadSequence.class.equals(clazz); } /** * {@inheritDoc} * * Validates the specified Object. * * @param obj * @param errors */ @Override public void validate(Object obj, Errors errors) { UploadSequence comm = (UploadSequence) obj; if (comm.getSample() == null) { errors.reject("upload.required.sample"); } if (!errors.hasErrors()) { if (getFileTypeService().list().isEmpty()) { errors.reject("error.upload.file.file.type.empty"); } } // must be list true protocol if used URL if (!errors.hasErrors() && (comm.getUseOneURL() || (comm.getUseTwoURL() && comm.isUsePairedFile()))) { String s = comm.getStrStartURL(); if (s == null || s.isEmpty()) { errors.reject("error.upload.file.url.emty.protocol"); } } Log.info("!! comm.getUseURL() = " + comm.getUseOneURL()); Log.info("!! comm.getUseTwoURL() = " + comm.getUseTwoURL()); if (!errors.hasErrors()) { boolean isUsedTrueProtocol = true; boolean isUsedTrueExtension = true; // for first file ... if (comm.getUseOneURL()) { // check URL ... Log.info("!!!!!!!!! check URL 1"); // required URL if selected if (comm.getFileURL() == null || comm.getFileURL().isEmpty()) { errors.rejectValue("fileURL", "error.upload.required.url"); } // validate Protocol if (!errors.hasFieldErrors("fileURL")) { String[] trueProtocols = comm.getStrStartURL().split(","); isUsedTrueProtocol = this.validateProtocol(comm.getFileURL(), trueProtocols, errors); } // test file extension if (!errors.hasFieldErrors("fileURL")) { String fileName = comm.getFileURL(); isUsedTrueExtension = this.validateExtension(fileName, "fileURL", comm.getFileTypeId(), errors); } } else { // check file... Log.info("!!!!!!!!!!!! check file 1"); // file is required if (comm.getFileOne() == null || comm.getFileOne().isEmpty()) { errors.rejectValue("fileOne", "upload.required.file"); } // test file extension if (!errors.hasFieldErrors("fileOne")) { String fileName = comm.getFileOne().getOriginalFilename(); isUsedTrueExtension = this.validateExtension(fileName, "fileOne", comm.getFileTypeId(), errors); } } if (comm.isUsePairedFile()) { // for second file ... if (comm.getUseTwoURL()) { // check URL ... // required URL if selected if (comm.getFileTwoURL() == null || comm.getFileTwoURL().isEmpty()) { errors.rejectValue("fileTwoURL", "error.upload.required.two.url"); } // validate Protocol if (!errors.hasFieldErrors("fileTwoURL") && isUsedTrueProtocol) { String[] trueProtocols = comm.getStrStartURL().split(","); this.validateProtocol(comm.getFileTwoURL(), trueProtocols, errors); } // test file extension if (!errors.hasFieldErrors("fileTwoURL") && isUsedTrueExtension) { String fileName = comm.getFileTwoURL(); this.validateExtension(fileName, "fileTwoURL", comm.getFileTypeId(), errors); } } else { // check file... // file is required if (comm.getFileTwo() == null || comm.getFileTwo().isEmpty()) { errors.rejectValue("fileTwo", "error.upload.file.two.required"); } // test file extension if (!errors.hasFieldErrors("fileTwo") && isUsedTrueExtension) { String fileName = comm.getFileTwo().getOriginalFilename(); this.validateExtension(fileName, "fileTwo", comm.getFileTypeId(), errors); } } } } } /* TODO: this needs to be made more flexible, there are multiple possible extensions for the same file type */ /** * {@inheritDoc} * * @param errors * @param fileTypeId */ public void validateExtension(MultipartFile fileOne, MultipartFile fileTwo, Integer fileTypeId, Errors errors) { String trueExtension = getFileTypeService().findByID(fileTypeId).getExtension(); if (!errors.hasErrors()) { String firstFileExtension = this.getExtension(fileOne.getOriginalFilename()); Log.info("Ext1 = " + firstFileExtension); if (!trueExtension.equals(firstFileExtension)) { errors.rejectValue("fileOne", "error.upload.bad.first.file.extension", new Object[] { trueExtension }, "bad extension"); } if (fileTwo != null && !fileTwo.isEmpty()) { String secondFileExtension = getExtension(fileTwo.getOriginalFilename()); if (!trueExtension.equals(secondFileExtension)) { errors.rejectValue("fileTwo", "error.upload.bad.second.file.extension", new Object[] { trueExtension }, "bad extension"); } } } } /* * public void validateExists(MultipartFile fileOne, MultipartFile fileTwo, String folderStore, Errors errors){ * * String firstFileName = fileOne.getOriginalFilename(); if(getFileService().isExists(firstFileName, folderStore)){ * errors.rejectValue("fileOne", "error.upload.first.file.used"); } * * if(fileTwo != null && !fileTwo.isEmpty()){ String secondFileName = fileTwo.getOriginalFilename(); * if(getFileService().isExists(secondFileName, folderStore)){ errors.rejectValue("fileTwo", "error.upload.second.file.used"); } } } */ /* * public void validateFileNameDontMatch(MultipartFile fileOne, MultipartFile fileTwo, Errors errors){ * * if(fileOne != null && !fileOne.isEmpty() && fileTwo != null && !fileTwo.isEmpty()){ * * String firstFileName = fileOne.getOriginalFilename(); String secondFileName = fileTwo.getOriginalFilename(); * * if (errors.getFieldError("fileOne") == null && errors.getFieldError("fileTwo") == null) { // DONT END * if(firstFileName.trim().equals(secondFileName.trim())){ errors.reject("error.file.names.dont.match"); } } } } */ /** * <p> * Getter for the field <code>fileService</code>. * </p> * * @return a {@link net.sourceforge.seqware.common.business.FileService} object. */ @Override public FileService getFileService() { return fileService; } /** {@inheritDoc} */ @Override public void setFileService(FileService fileService) { this.fileService = fileService; } /** * <p> * Getter for the field <code>fileTypeService</code>. * </p> * * @return a {@link net.sourceforge.seqware.common.business.FileTypeService} object. */ @Override public FileTypeService getFileTypeService() { return fileTypeService; } /** {@inheritDoc} */ @Override public void setFileTypeService(FileTypeService fileTypeService) { this.fileTypeService = fileTypeService; } }