package net.sourceforge.solexatools.webapp.controller;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sourceforge.seqware.common.model.File;
import net.sourceforge.seqware.common.util.filetools.ProvisionFilesUtil;
import net.sourceforge.solexatools.util.BulkUtil;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.BaseCommandController;
/**
* <p>
* BulkDownloaderSizeValidatorController class.
* </p>
*
* @author boconnor
* @version $Id: $Id
*/
public class BulkDownloaderSizeValidatorController extends BaseCommandController {
/**
* {@inheritDoc}
*
* @return
* @throws java.lang.Exception
*/
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView("Popup");
try {
List<File> filesToZip = BulkUtil.getFiles(request, "unknow");
ProvisionFilesUtil util = new ProvisionFilesUtil();
long size = determineSize(util, filesToZip);
long maxSize = getMaxBulkDownloadFilesSize();
if (size > maxSize) {
throw new Exception("The files you have chosen to download total > " + maxSize
+ " and cannot be zipped on this web server. Please download individually.");
}
} catch (Exception e) {
modelAndView.addObject("res", e.getMessage());
}
return modelAndView;
}
private long determineSize(ProvisionFilesUtil util, List<File> filesToZip) throws Exception {
long size = 0;
for (File file : filesToZip) {
size += ProvisionFilesUtil.getFileSize(file.getFilePath());
}
return size;
}
private long getMaxBulkDownloadFilesSize() {
ServletContext context = this.getServletContext();
String maxSizeStr = context.getInitParameter("bulk.download.max.file.size");
long maxSize = 200 * 1024 * 1024;
try {
maxSize = Integer.parseInt(maxSizeStr);
} catch (NumberFormatException e) {
e.printStackTrace();
}
return maxSize;
}
}