From 8c08f92afdb196839ca016fbccd0b083228d48a7 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Fri, 19 Feb 2016 08:57:58 +0000 Subject: [PATCH] updated pom version at 1.1.1 for gCube 3.10.1 git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-uploader@124333 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 2 +- .../server/WorkspaceUploadServletStream.java | 212 +++++++++--------- 2 files changed, 108 insertions(+), 106 deletions(-) diff --git a/pom.xml b/pom.xml index 8501aac..602c641 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portlets.widgets workspace-uploader jar - 1.1.0-SNAPSHOT + 1.1.1-SNAPSHOT Workspace Uploader Widget scm:svn:http://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/${project.artifactId} diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploadServletStream.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploadServletStream.java index 6470fb3..f8b5293 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploadServletStream.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploadServletStream.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.widgets.workspaceuploader.server; @@ -86,25 +86,25 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet public static final String UPLOAD_FORM_ELEMENT = ConstantsWorkspaceUploader.UPLOAD_FORM_ELEMENT; public static final String CLIENT_UPLOAD_KEYS = ConstantsWorkspaceUploader.CLIENT_UPLOAD_KEYS; - + public static final String JSON_CLIENT_KEYS = ConstantsWorkspaceUploader.JSON_CLIENT_KEYS; - + public static final String IS_OVERWRITE = ConstantsWorkspaceUploader.IS_OVERWRITE; - + public static final String CANCEL_UPLOAD = ConstantsWorkspaceUploader.CANCEL_UPLOAD; - + public static final String FILE = "File"; public static final String D4ST = Extensions.REPORT_TEMPLATE.getName(); //extension of Report Template type public static final String D4SR = Extensions.REPORT.getName(); //extension of Report type - + public static Logger logger = LoggerFactory.getLogger(WorkspaceUploadServletStream.class); private static boolean appEngine = false; /* * (non-Javadoc) - * + * * @see javax.servlet.GenericServlet#init() */ @Override @@ -117,7 +117,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet } else { appEngine = isAppEngine(); } - + logger.debug("init: appEngine is "+appEngine); } @@ -133,7 +133,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet return; } logger.debug("GET method CLIENT_UPLOAD_KEY "+clientUploadKey); - + boolean cancelUpload = Boolean.parseBoolean(request.getParameter(CANCEL_UPLOAD)); logger.debug("GET method CANCEL_UPLOAD "+cancelUpload); if (cancelUpload) { @@ -143,10 +143,10 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet logger.debug(CANCEL_UPLOAD + " param not found"); // }else // sendError(response, "Internal error: CANCEL_UPLOAD NOT FOUND"); - + return; } - + /** * {@inheritDoc} */ @@ -154,14 +154,14 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet System.out.println("POST on UploadServlet"); logger.info("POST on UploadServlet"); - + if (!ServletFileUpload.isMultipartContent(request)) { logger.error("ERROR: multipart request not found"); sendError(response, "ERROR: multipart request not found"); } - + try { - + logger.info("UPLOAD-SERVLET starting"); HttpSession session = request.getSession(); logger.info("UPLOAD-SERVLET session: "+session); @@ -172,7 +172,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet // String clientUploadKey = null; FileItemStream uploadItem = null; ArrayList listClientUploadKeys = null; - + FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload servletFileUpload = new ServletFileUpload(factory); @@ -182,28 +182,28 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet *transmitted. */ FileItemIterator fileItemIterator = servletFileUpload.getItemIterator(request); - + int uploadItemsCnt = 0; - + //GET FILE STREAM while (fileItemIterator.hasNext()) { FileItemStream item = fileItemIterator.next(); - + if (item.isFormField() && ID_FOLDER.equals(item.getFieldName())){ destinationId = Streams.asString(item.openStream()); logger.debug("ID_FOLDER OK "+destinationId); } - + if (item.isFormField() && UPLOAD_TYPE.equals(item.getFieldName())){ uploadType = Streams.asString(item.openStream()); logger.debug("UPLOAD_TYPE OK " +uploadType); } - + if (item.isFormField() && IS_OVERWRITE.equals(item.getFieldName())){ - isOverwrite = Boolean.parseBoolean(Streams.asString(item.openStream())); + isOverwrite = Boolean.parseBoolean(Streams.asString(item.openStream())); logger.debug("IS_OVERWRITE OK "+ isOverwrite); } - + if(item.isFormField() && CLIENT_UPLOAD_KEYS.equals(item.getFieldName())){ String jsonClientUploadKey = Streams.asString(item.openStream()); logger.debug("CLIENT_UPLOAD_KEY OK "+jsonClientUploadKey); @@ -217,7 +217,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.WAIT, "Uploading "+fileName+" at 0%", request.getSession()); } } - + //MUST BE THE LAST PARAMETER TRASMITTED if (UPLOAD_FORM_ELEMENT.equals(item.getFieldName())){ uploadItem = item; @@ -227,7 +227,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet uploadItemsCnt++; } } - + } catch (FileUploadException e) { logger.error("Error processing request in upload servlet", e); sendError(response, "Internal error: Error during request processing"); @@ -238,8 +238,8 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet return; } } - - + + /** * Removes the listener if done. @@ -248,9 +248,9 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet * @param keys the keys */ private void removeListenersIfDone(HttpSession session, List keys){ - + for (String key : keys) { - + AbstractUploadProgressListener listener = getCurrentListener(session, key); if (listener != null) { logger.debug("Listener found"); @@ -261,9 +261,9 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet }else logger.debug("Session id: "+session.getId() +" - "+key+" - Listener not found"); } - + } - + /** * Parses the json client upload keys. * @@ -277,7 +277,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet JSONObject root; LinkedHashMap keyFiles = null; try { - + root = new JSONObject(tokener); JSONArray jsonArray = root.getJSONArray(JSON_CLIENT_KEYS); keyFiles = new LinkedHashMap(jsonArray.length()); @@ -304,7 +304,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet logger.error("An error occurred during parsing file names: "+keyFiles, e); throw new FileUploadException("An error occurred during parsing file names"); } - + logger.debug("keyFiles: "+keyFiles); return keyFiles; } @@ -326,26 +326,26 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet String fileName = uploadItem.getName(); logger.info("Upload servlet parameters: [fileName: "+fileName+ ", destinationId: "+destinationId +", uploadType: "+uploadType+", isOverwrite: "+isOverwrite+", clientUploadKey: "+clientUploadKey+"]"); - + if (uploadType == null || uploadType.isEmpty()) { logger.error("Error processing request in upload servlet for: "+fileName+". No upload type found"); sendError(response, "Internal error: No upload type found"); return; } - + if(clientUploadKey==null || clientUploadKey.isEmpty()){ logger.error("Error processing request in upload servlet for: "+fileName+". No client upload key found"); sendError(response, "Internal error: No client upload key found"); return; } - + //CLIENT UPLOAD IS THE KEY // WorkspaceUploaderItem workspaceUploader = createNewWorkspaceUploader(clientUploadKey,destinationId,fileName); // saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.WAIT, "Uploading "+fileName+" at 0%", request.getSession()); //RETRIVE WORKSPACE UPLOADER FROM SESSION - + WorkspaceUploaderItem workspaceUploader = null; try { workspaceUploader = WsUtil.getWorkspaceUploaderInSession(request.getSession(), clientUploadKey); @@ -356,12 +356,12 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error processing request in upload servlet"); return; } - + //TODO DEBUG REMOVE THIS // saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "An error occurred during upload: "+fileName+". Error processing request in upload servlet", request.getSession()); // response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error processing request in upload servlet"); // return; - + Workspace wa = null; try { logger.debug("getWorkspace from HL"); @@ -397,25 +397,25 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet sendError(response, "Internal error: Wrong destination item"); return; } - + final WorkspaceFolder destinationFolder = (WorkspaceFolder) item; try { //we calculate an unique name for the current destination String itemName = ""; - + logger.debug("getItemName from HL"); if(!isOverwrite) itemName = WorkspaceUtil.getUniqueName(fileName, destinationFolder); else itemName = fileName; - + Long size = getContentLength(request); logger.debug("size: " + size + " bytes"); /* String contentType = uploadItem.getContentType(); logger.debug("Content type (mime type): "+contentType + " unique name: "+itemName); - + if(contentType==null || contentType.compareTo(UNKNOWN_UNKNOWN)==0){ logger.warn("Content Type not detected forcing to null"); contentType = null; @@ -423,67 +423,69 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet */ String extension = FilenameUtils.getExtension(itemName); logger.debug("extension: "+extension); - - //CONFIRM DESTINATION FOLDER + + //CONFIRM DESTINATION FOLDER workspaceUploader.getFile().setParentId(destinationFolder.getId()); - + //Create Item Uploader to read progress // WorkspaceUploadFile wsUploadFile = new WorkspaceUploadFile(destinationFolder.getId(), itemName); // workspaceUploader.setFile(wsUploadFile); // workspaceUploader.setStatusDescription("Uploading "+itemName+" at 0%"); - + //instanciate the progress listener final AbstractUploadProgressListener uploadProgressListener = createNewListener(request.getSession(), clientUploadKey); final UploadProgressInputStream inputStream = new UploadProgressInputStream(uploadItem.openStream(), size); inputStream.addListener(uploadProgressListener); workspaceUploader.setUploadProgress(uploadProgressListener.getUploadProgress()); - + saveWorkspaceUploaderInSession(workspaceUploader, request.getSession()); - + String contentType = null; //It's set into HL - + if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD - + boolean isZipFile = MimeTypeUtil.isZipContentType(uploadItem.getContentType()); //UNZIP?? - - if(isZipFile && (extension.compareToIgnoreCase(D4ST)==0)){ //Create REPORT TEMPLATE + + if(isZipFile && extension.compareToIgnoreCase(D4ST)==0){ //Create REPORT TEMPLATE String newItemName = itemName; logger.debug("createTemplate: "+newItemName); - + createTemplate(workspaceUploader, request.getSession(), wa, newItemName, inputStream, destinationFolder, response, isOverwrite); - - }else if(isZipFile && (extension.compareToIgnoreCase(D4SR)==0)){ //Create REPORT + + }else if(isZipFile && extension.compareToIgnoreCase(D4SR)==0){ //Create REPORT String newItemName = itemName; logger.debug("createReport: "+newItemName); createReport(workspaceUploader, request.getSession(), wa, newItemName, inputStream, destinationFolder, response, isOverwrite); }else{ //CREATE AN EXTERNAL FILE - + workspaceUploader = WorkspaceUploaderMng.uploadFile(workspaceUploader, request.getSession(), wa, itemName, inputStream, destinationFolder, contentType, isOverwrite, size); - + if(workspaceUploader==null) throw new Exception("Error when creating uploader, it is null!"); - + sendMessage(response, workspaceUploader.getIdentifier()); } - + }else {//IS ARCHIVE UPLOAD - + + logger.debug("Archive content type: "+uploadItem.getContentType()); + if (MimeTypeUtil.isZipContentType(uploadItem.getContentType())){ //UNZIP?? logger.debug("Unziping content"); workspaceUploader = WorkspaceUploaderMng.uploadArchive(workspaceUploader, request.getSession(), itemName, inputStream, destinationFolder, size); - + if(workspaceUploader==null) throw new Exception("Error when creating uploader, it is null!"); - + sendMessage(response, workspaceUploader.getIdentifier()); } else{ workspaceUploader = WorkspaceUploaderMng.uploadFile(workspaceUploader, request.getSession(), wa, itemName, inputStream, destinationFolder, contentType, isOverwrite, size); - + if(workspaceUploader==null) throw new Exception("Error when creating uploader, it is null!"); - + sendMessage(response, workspaceUploader.getIdentifier()); } } @@ -513,7 +515,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet removeCurrentListener(request.getSession(), clientUploadKey); } } - + /** * Save workspace uploader status. @@ -564,7 +566,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet Random randomGenerator = new Random(); return randomGenerator.nextInt(Integer.MAX_VALUE); } - + /** * Save workspace uploader in session. * @@ -585,7 +587,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet }else throw new Exception("An error occurred in the upload. Workspace Uploader not found. Abort and try again"); } - + //TEST TIME /** * Prints the start time. @@ -608,7 +610,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime)); logger.debug("Elapsed Time: "+time); } - + /** * Notify upload in shared folder. * @@ -619,7 +621,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet * @param isOverwrite the is overwrite */ public static void notifyUploadInSharedFolder(final HttpSession httpSession, final Workspace workspace, final String itemId, final String destinationFolderId, final boolean isOverwrite){ - + new Thread(){ public void run() { WorkspaceItem sourceItem; @@ -630,12 +632,12 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet NotificationsWorkspaceUploader.checkSendNotifyChangedItemToShare(httpSession, sourceItem, sourceSharedId, folderDestinationItem,isOverwrite); } catch (Exception e) { logger.error("Error in notifyUploadInSharedFolder", e); - } + } }; - - }.start(); + + }.start(); } - + /** * Overwrite item. * @@ -646,9 +648,9 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet * @return the folder item */ private FolderItem overwriteItem(Workspace wa, String itemName, InputStream fileData, WorkspaceFolder destinationFolder){ - + FolderItem overwriteItem = null; - + try { logger.debug("case overwriting item.. "+itemName); overwriteItem = (FolderItem) wa.find(itemName, destinationFolder.getId()); @@ -672,11 +674,11 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet }catch (Exception e) { logger.error("Error in createExternalFile, Exception", e); } - - return overwriteItem; + + return overwriteItem; } - + /** * Creates the report. * @@ -694,23 +696,23 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet * @throws IOException Signals that an I/O exception has occurred. */ private void createReport(WorkspaceUploaderItem workspaceUploader, HttpSession httpSession, Workspace wa, String itemName, InputStream fileInputStream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{ - + try { - + Report report = null; - + if(!isOverwrite){ itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); report = wa.createReport(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", "", 0, "",fileInputStream, destinationFolder.getId()); - + notifyUploadInSharedFolder(httpSession,wa,report.getId(),destinationFolder.getId(), isOverwrite); sendMessage(response, "File "+report.getName()+" imported correctly in "+destinationFolder.getPath()); } else{ //CASE OVERWRITE FolderItem rep = overwriteItem(wa, itemName, fileInputStream, destinationFolder); - + if(rep!=null){ - + notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); } @@ -735,7 +737,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet // TODO: handle exception } } - + } /** @@ -755,23 +757,23 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet * @throws IOException Signals that an I/O exception has occurred. */ private void createTemplate(WorkspaceUploaderItem workspaceUploader, HttpSession httpSession, Workspace wa, String itemName, InputStream fileInputStream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{ - + try { - + ReportTemplate template = null; - + if(!isOverwrite){ itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); template = wa.createReportTemplate(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", 0, "", fileInputStream, destinationFolder.getId()); - + notifyUploadInSharedFolder(httpSession,wa,template.getId(),destinationFolder.getId(), isOverwrite); sendMessage(response, "File "+template.getName()+" imported correctly in "+destinationFolder.getPath()); - + }else{ //CASE OVERWRITE FolderItem rep = overwriteItem(wa, itemName, fileInputStream, destinationFolder); - + if(rep!=null){ - + notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); } @@ -797,10 +799,10 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet // TODO: handle exception } } - + } - - + + /** * Send error. * @@ -824,7 +826,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet throw e; //Sending Exceptions } } - + /** * Send message. * @@ -848,7 +850,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet throw e; //Sending Exceptions } } - + /** * Send warn message. * @@ -872,7 +874,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet throw e; //Sending Exceptions } } - + /** * Mark the current upload process to be canceled. * @@ -888,7 +890,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet }else logger.info("Skipping cancel upload: listener is null or is cancel"); } - + /** * Get the listener active in this session. * @@ -913,7 +915,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet public boolean isAppEngine() { return appEngine; } - + /** * Create a new listener for this session. * @@ -929,7 +931,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet } } - + /** * Gets the content length. * @@ -945,7 +947,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet } return size; } - + /** * Remove the listener active in this session. * @@ -955,14 +957,14 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet protected void removeCurrentListener(HttpSession session, String clientUploadKey) { logger.debug("RemoveCurrentListener: "+clientUploadKey); AbstractUploadProgressListener listener = getCurrentListener(session, clientUploadKey); - + if (listener != null) { logger.debug("Removing listener: "+listener.getClientUploadKey()); listener.remove(); }else logger.warn("Listener "+clientUploadKey+ "is null"); } - + /** * The main method. * @@ -977,6 +979,6 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet e.printStackTrace(); } }*/ - + }