153 lines
5.6 KiB
Java
153 lines
5.6 KiB
Java
/**
|
|
*
|
|
*/
|
|
package org.gcube.portlets.user.td.gxtservice.server;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
|
|
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.fileupload.FileItem;
|
|
import org.apache.commons.fileupload.FileItemFactory;
|
|
import org.apache.commons.fileupload.FileUploadException;
|
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
|
import org.gcube.portlets.user.td.gxtservice.server.file.FileUploadListener;
|
|
import org.gcube.portlets.user.td.gxtservice.server.file.FileUploadSession;
|
|
import org.gcube.portlets.user.td.gxtservice.server.file.FileUtil;
|
|
import org.gcube.portlets.user.td.gxtservice.shared.csv.CSVImportMonitor;
|
|
import org.gcube.portlets.user.td.gxtservice.shared.csv.CSVParserConfiguration;
|
|
import org.gcube.portlets.user.td.gxtservice.shared.file.FileUploadMonitor;
|
|
import org.gcube.portlets.user.td.gxtservice.shared.file.FileUploadState;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import com.allen_sauer.gwt.log.client.Log;
|
|
|
|
|
|
/**
|
|
*
|
|
* @author "Giancarlo Panichi"
|
|
* <a href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
|
|
*
|
|
*/
|
|
public class LocalUploadServlet extends HttpServlet {
|
|
|
|
protected static Logger logger = LoggerFactory.getLogger(LocalUploadServlet.class);
|
|
|
|
|
|
/**
|
|
*
|
|
*/
|
|
private static final long serialVersionUID = -4197748678713054285L;
|
|
|
|
@SuppressWarnings("rawtypes")
|
|
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
|
|
|
logger.trace("Post");
|
|
|
|
HttpSession session = request.getSession();
|
|
|
|
if(session==null){
|
|
logger.error("Error getting the upload 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.info("CSV Import session id: "+session.getId());
|
|
|
|
FileUploadSession fileUploadSession=new FileUploadSession();
|
|
CSVImportMonitor csvImportMonitor=new CSVImportMonitor();
|
|
FileUploadMonitor fileUploadMonitor=new FileUploadMonitor();
|
|
|
|
fileUploadSession.setId(session.getId());
|
|
fileUploadSession.setFileUploadState(FileUploadState.STARTED);
|
|
fileUploadSession.setCsvImportMonitor(csvImportMonitor);
|
|
fileUploadSession.setFileUploadMonitor(fileUploadMonitor);
|
|
|
|
SessionUtil.setFileUploadSession(session,fileUploadSession);
|
|
|
|
|
|
FileItemFactory factory = new DiskFileItemFactory();
|
|
ServletFileUpload upload = new ServletFileUpload(factory);
|
|
|
|
|
|
FileUploadListener uploadListener = new FileUploadListener(fileUploadSession.getFileUploadMonitor());
|
|
upload.setProgressListener(uploadListener);
|
|
|
|
FileItem uploadItem = null;
|
|
Log.info("Start upload file ");
|
|
try {
|
|
List items = upload.parseRequest(request);
|
|
Iterator it = items.iterator();
|
|
while (it.hasNext()) {
|
|
FileItem item = (FileItem) it.next();
|
|
if (!item.isFormField() && "uploadFormElement".equals(item.getFieldName())) {
|
|
uploadItem = item;
|
|
}
|
|
}
|
|
} catch (FileUploadException e) {
|
|
fileUploadSession.getFileUploadMonitor().setFailed("An error occured elaborating the HTTP request", FileUtil.exceptionDetailMessage(e));
|
|
fileUploadSession.setFileUploadState(FileUploadState.FAILED);
|
|
SessionUtil.setFileUploadSession(session, fileUploadSession);
|
|
logger.error("Error processing request in upload servlet", e);
|
|
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "ERROR-Error during request processing: "+e.getMessage());
|
|
return;
|
|
}
|
|
|
|
if (uploadItem == null) {
|
|
fileUploadSession.getFileUploadMonitor().setFailed("An error occured elaborating the HTTP request: No file found", "Upload request without file");
|
|
fileUploadSession.setFileUploadState(FileUploadState.FAILED);
|
|
SessionUtil.setFileUploadSession(session, fileUploadSession);
|
|
logger.error("Error processing request in upload servlet: No file to upload");
|
|
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "No file to upload");
|
|
return;
|
|
}
|
|
|
|
String contentType = uploadItem.getContentType();
|
|
|
|
logger.trace("ContentType: "+contentType);
|
|
|
|
/* TODO is necessary?
|
|
if (contentType.equals("application/octet-stream")){
|
|
|
|
logger.trace("We try to guess the content using the extension");
|
|
String name = uploadItem.getName();
|
|
|
|
int lastIndex = name.lastIndexOf('.');
|
|
if (lastIndex>=0){
|
|
String extension = name.substring(lastIndex+1);
|
|
logger.trace("extension "+extension);
|
|
contentType = MimeTypeUtil.getMimeType(extension);
|
|
logger.trace("new contenttype: "+contentType);
|
|
} else logger.trace("No extensions found");
|
|
}
|
|
*/
|
|
|
|
try {
|
|
FileUtil.setImportFile(fileUploadSession, uploadItem.getInputStream(), uploadItem.getName(), contentType);
|
|
} catch (Exception e) {
|
|
fileUploadSession.getFileUploadMonitor().setFailed("An error occured elaborating the file", FileUtil.exceptionDetailMessage(e));
|
|
fileUploadSession.setFileUploadState(FileUploadState.FAILED);
|
|
SessionUtil.setFileUploadSession(session, fileUploadSession);
|
|
logger.error("Error elaborating the stream", e);
|
|
uploadItem.delete();
|
|
response.getWriter().write("ERROR-"+e.getMessage());
|
|
return;
|
|
}
|
|
|
|
uploadItem.delete();
|
|
|
|
logger.trace("changing state");
|
|
fileUploadSession.getFileUploadMonitor().setState(FileUploadState.COMPLETED);
|
|
SessionUtil.setFileUploadSession(session, fileUploadSession);
|
|
response.getWriter().write("OK");
|
|
}
|
|
|
|
}
|