148 lines
4.5 KiB
Java
148 lines
4.5 KiB
Java
package org.gcube.portlets.widgets.dataminermanagerwidget.server;
|
|
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.OutputStream;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.StandardCopyOption;
|
|
|
|
import javax.servlet.ServletException;
|
|
import javax.servlet.http.HttpServlet;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
import org.apache.commons.io.IOUtils;
|
|
import org.gcube.data.analysis.dataminermanagercl.server.util.ServiceCredentials;
|
|
import org.gcube.portlets.widgets.dataminermanagerwidget.server.storage.StorageUtil;
|
|
import org.gcube.portlets.widgets.dataminermanagerwidget.shared.Constants;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
/**
|
|
*
|
|
* @author Giancarlo Panichi
|
|
*
|
|
*
|
|
* Download Folder Servlet
|
|
*
|
|
*/
|
|
public class DownloadFolderServlet extends HttpServlet {
|
|
private static final long serialVersionUID = -1838255772767180518L;
|
|
private static Logger logger = LoggerFactory
|
|
.getLogger(DownloadFolderServlet.class);
|
|
|
|
/**
|
|
* @see HttpServlet#HttpServlet()
|
|
*/
|
|
public DownloadFolderServlet() {
|
|
super();
|
|
// TODO Auto-generated constructor stub
|
|
}
|
|
|
|
/**
|
|
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
|
|
* response)
|
|
*/
|
|
protected void doGet(HttpServletRequest request,
|
|
HttpServletResponse response) throws ServletException, IOException {
|
|
createResponse(request, response);
|
|
}
|
|
|
|
/**
|
|
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
|
|
* response)
|
|
*/
|
|
protected void doPost(HttpServletRequest request,
|
|
HttpServletResponse response) throws ServletException, IOException {
|
|
createResponse(request, response);
|
|
}
|
|
|
|
private void createResponse(HttpServletRequest request,
|
|
HttpServletResponse response) throws ServletException, IOException {
|
|
try {
|
|
logger.debug("DownloadFolderServlet");
|
|
|
|
HttpSession session = request.getSession();
|
|
|
|
if (session == null) {
|
|
logger.error("Error getting the session, no session valid found: "
|
|
+ session);
|
|
response.sendError(
|
|
HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
|
|
"ERROR-Error getting the user session, no session found "
|
|
+ session);
|
|
return;
|
|
}
|
|
logger.debug("DownloadFolderServlet session id: " + session.getId());
|
|
|
|
ServiceCredentials serviceCredentials;
|
|
|
|
String scopeGroupId = request.getHeader(Constants.CURR_GROUP_ID);
|
|
if (scopeGroupId == null || scopeGroupId.isEmpty()) {
|
|
scopeGroupId = request.getParameter(Constants.CURR_GROUP_ID);
|
|
if (scopeGroupId == null || scopeGroupId.isEmpty()) {
|
|
logger.error("CURR_GROUP_ID is null, it is a mandatory parameter in custom servlet: "
|
|
+ scopeGroupId);
|
|
throw new ServletException(
|
|
"CURR_GROUP_ID is null, it is a mandatory parameter in custom servlet: "
|
|
+ scopeGroupId);
|
|
}
|
|
}
|
|
|
|
try {
|
|
serviceCredentials = SessionUtil.getServiceCredentials(request,
|
|
scopeGroupId);
|
|
|
|
} catch (Exception e) {
|
|
logger.error(
|
|
"Error retrieving credentials:"
|
|
+ e.getLocalizedMessage(), e);
|
|
throw new ServletException(e.getLocalizedMessage());
|
|
}
|
|
|
|
String itemId = request
|
|
.getParameter(Constants.DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER);
|
|
String folderName = request
|
|
.getParameter(Constants.DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER);
|
|
logger.debug("Request: [itemId=" + itemId + ", folderName="
|
|
+ folderName + "]");
|
|
StorageUtil storageUtil=new StorageUtil();
|
|
InputStream is = storageUtil.zipFolder(
|
|
serviceCredentials.getUserName(), itemId);
|
|
Path tempFile = Files.createTempFile("dataMinerWidgetDownload", ".zip");
|
|
Files.copy(is, tempFile, StandardCopyOption.REPLACE_EXISTING);
|
|
File tmpZip= tempFile.toFile();
|
|
|
|
response.setHeader("Content-Disposition", "attachment; filename=\""
|
|
+ folderName + ".zip\"");
|
|
response.setContentType("application/zip");
|
|
response.setHeader("Content-Length",
|
|
String.valueOf(tmpZip.length()));
|
|
|
|
|
|
|
|
OutputStream out = response.getOutputStream();
|
|
|
|
FileInputStream fileTmpZip = new FileInputStream(tmpZip);
|
|
IOUtils.copy(fileTmpZip, response.getOutputStream());
|
|
out.flush();
|
|
out.close();
|
|
fileTmpZip.close();
|
|
Files.delete(tempFile);
|
|
return;
|
|
|
|
} catch (Throwable e) {
|
|
logger.error("Error in DownloadFolderServlet: "
|
|
+ e.getLocalizedMessage());
|
|
e.printStackTrace();
|
|
throw new ServletException("Error:" + e.getLocalizedMessage(), e);
|
|
|
|
}
|
|
}
|
|
|
|
}
|