From 168cc2dc2de31065b76ea5c337b0f9d64445f907 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Wed, 19 Sep 2018 13:15:28 +0000 Subject: [PATCH] completed upload archive integration git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-uploader@171516 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../resource/WorkspaceUploaderIcons.java | 10 ++- .../resource/WorkspaceUploaderResources.java | 11 ++- .../client/resource/abort.png | Bin 0 -> 319 bytes .../client/uploader/TimerUpload.java | 5 +- .../client/uploader/UploaderProgressView.java | 12 ++++ .../server/WorkspaceUploadServletStream.java | 63 +++++++++++++----- .../server/upload/WorkspaceUploaderMng.java | 10 +-- 7 files changed, 85 insertions(+), 26 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/abort.png diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/WorkspaceUploaderIcons.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/WorkspaceUploaderIcons.java index d1372f9..3b1193a 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/WorkspaceUploaderIcons.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/WorkspaceUploaderIcons.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.widgets.workspaceuploader.client.resource; @@ -61,7 +61,7 @@ public interface WorkspaceUploaderIcons extends ClientBundle { */ @Source("closewindow.png") ImageResource closeWin(); - + /** * Wait icon. * @@ -75,4 +75,10 @@ public interface WorkspaceUploaderIcons extends ClientBundle { */ @Source("upload.gif") ImageResource uploadIcon(); + + /** + * @return + */ + @Source("abort.png") + ImageResource abort(); } diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/WorkspaceUploaderResources.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/WorkspaceUploaderResources.java index eb61f80..0f28167 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/WorkspaceUploaderResources.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/WorkspaceUploaderResources.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.widgets.workspaceuploader.client.resource; @@ -51,6 +51,15 @@ public class WorkspaceUploaderResources { return new Image(ICONS.cancel()); } + /** + * Gets the image cancel. + * + * @return the image cancel + */ + public static Image getImageAbort() { + return new Image(ICONS.abort()); + } + /** * Gets the image cancel red. * diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/abort.png b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/abort.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0a30a615bc2beac367389cc04698e1a94f5afc GIT binary patch literal 319 zcmV-F0l@x=P)PM|h+VL2`~%v9a(BA~qJ1J%P2YgfJ(t&=itt$tl7Vi-oiL z6xq$@2M->@eDmht%lM-zh7m9arhqhNU=5U__L2H$2^fG|;0nn3Up4Rm+=!Ze2XOcq zxZp6o05egu=B2wHFu=JpWK|4f;JqbnTFN=iy"; + text+=""+StringUtil.ellipsize(uploader.getStatusDescription(), MAX_CHARS, 0)+""; + // GWT.log(text); + html.setHTML(text); + html.setTitle(uploader.getStatusDescription()); // bar.update(uploader.getUploadProgress().getLastEvent().getReadPercentage()); try{ hpBar.clear(); 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 72f1b6c..b0902eb 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 @@ -8,8 +8,10 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Random; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -104,6 +106,15 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet public static final String ARCHIVE = "Archive"; + public static final Map SUPPORTED_UNPACKING_ARCHIVE = new HashMap() {{ + put("zip","application/zip"); //.zip + put("7z","application/x-7z-compressed"); //.7z + put("tar","application/x-tar"); //tar + put("java archive","application/java-archive");//.jar + put("jar","application/x-java-archive"); + put("gtar","application/x-gtar"); + }}; + // 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 @@ -538,25 +549,45 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet saveWorkspaceUploaderInSession(workspaceUploader, request.getSession()); - String contentType = null; //It's set into HL - + String contentType = uploadItem.getContentType(); + logger.debug("Stream content type: "+contentType); if(uploadType.compareTo(ARCHIVE)==0){ //UPLOAD ARCHIVE - //TODO UPLOAD ARCHIVE - logger.debug("Archive content type: "+uploadItem.getContentType()); - workspaceUploader = WorkspaceUploaderMng.uploadArchive(storageHubWrapper, user, scopeGroupId, workspaceUploader, request, itemName, inputStream, destinationFolder, size); -// if (MimeTypeUtil.isZipContentType(uploadItem.getContentType())){ //UNZIP?? -// logger.debug("Unziping content"); -// //THE WORKSPACE HAS BEEN INSTANCIED ABOVE + logger.debug("Uploding archive...."); + boolean isSupportedArchive = false; + for (String archive_extension : SUPPORTED_UNPACKING_ARCHIVE.keySet()) { - if(workspaceUploader==null) - throw new Exception("Error when creating uploader, it is null!"); + //is content-type supported? + if(SUPPORTED_UNPACKING_ARCHIVE.get(archive_extension).compareTo(uploadItem.getContentType())==0){ + isSupportedArchive = true; + break; + } + } - sendMessage(response, workspaceUploader.getIdentifier()); + if (isSupportedArchive){ //Uploading Archive OK + + logger.debug("Supported archive " +uploadItem.getContentType() +" for unpacking"); + workspaceUploader = WorkspaceUploaderMng.uploadArchive(storageHubWrapper, user, scopeGroupId, workspaceUploader, request, itemName, inputStream, destinationFolder, size); +// if (MimeTypeUtil.isZipContentType(uploadItem.getContentType())){ //UNZIP?? +// logger.debug("Unziping content"); +// //THE WORKSPACE HAS BEEN INSTANCIED ABOVE + + if(workspaceUploader==null) + throw new Exception("Error when creating uploader, it is null!"); + + sendMessage(response, workspaceUploader.getIdentifier()); + + }else{ + logger.warn("Unsuppoterd archive for unpacking: " +uploadItem.getContentType()); + saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.ABORTED, "Unpacking not supported for: "+uploadItem.getContentType()+" Supported archive are: "+SUPPORTED_UNPACKING_ARCHIVE.keySet().toString(), request.getSession()); + sendError(response, "Internal error: Unpacking not supported for "+uploadItem.getContentType()); + return; + } }else{ //UPLOAD FILE. IT IS DEFAULT CASE //I don't need to check this if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD + logger.debug("Uploding file...."); workspaceUploader = WorkspaceUploaderMng.uploadFile(storageHubWrapper, user, scopeGroupId, request, workspaceUploader, request.getSession(), itemName, inputStream, destinationFolder, contentType, isOverwrite, size); @@ -569,29 +600,29 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet } catch (InsufficientPrivilegesException e) { logger.error("Error creating elements", e); - saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "An error occurred in the upload. Insufficient privileges", request.getSession()); + saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "Uploading error. Insufficient privileges", request.getSession()); sendError(response, "Internal error: Insufficient privileges"); return; } catch (InternalErrorException e) { logger.error("Error creating elements", e); - saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "An error occurred in the upload:"+e.getMessage(), request.getSession()); + saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "Uploading error:"+e.getMessage(), request.getSession()); sendError(response, "Internal error: "+e.getMessage()); return; } catch (ItemAlreadyExistException e) { logger.error("Error creating elements", e); - saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "An error occurred in the upload. An item with that name already exists", request.getSession()); + saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "Uploading error. An item with that name already exists", request.getSession()); sendError(response, "Internal error: An item with that name already exists"); return; } catch (IOException e){ logger.error("Error creating elements, is it cancel?", e); - saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "An error occurred in the upload", request.getSession()); + saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "Uploading error", request.getSession()); sendError(response, "Internal error: An item with that name already exists"); return; // sendError(response, "Internal error: An item with that name already exists"); // return; }catch (Exception e) { logger.error("Error creating elements", e); - saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "An error occurred in the upload. "+e.getMessage(), request.getSession()); + saveWorkspaceUploaderStatus(workspaceUploader, UPLOAD_STATUS.FAILED, "Uploading error. "+e.getMessage(), request.getSession()); // sendError(response, "Internal error: An error occurred on uploading the file, try again later"); // return; }finally{ diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/WorkspaceUploaderMng.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/WorkspaceUploaderMng.java index cc702aa..e8dceea 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/WorkspaceUploaderMng.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/WorkspaceUploaderMng.java @@ -111,7 +111,7 @@ public class WorkspaceUploaderMng { workspaceUploader.setUploadStatus(UPLOAD_STATUS.COMPLETED); WorkspaceUploadServletStream.notifyUploadInSharedFolder(storageWrapper, currUser, scopeGroupId, request, httpSession, createdItem.getId(), createdItem.getParentId(), isOvewrite); }else{ - workspaceUploader.setStatusDescription("An error occurred during upload: \""+itemName + "\". Try again"); + workspaceUploader.setStatusDescription("Error on uploading: \""+itemName + "\". Try again"); workspaceUploader.setUploadStatus(UPLOAD_STATUS.FAILED); } try { @@ -121,7 +121,7 @@ public class WorkspaceUploaderMng { } } catch (InternalErrorException e) { logger.error("Error during upload: ",e); - workspaceUploader.setStatusDescription("An error occurred server-side during upload: "+itemName+". "+e.getMessage() +". Try again"); + workspaceUploader.setStatusDescription("Error on uploading: "+itemName+". "+e.getMessage()); workspaceUploader.setUploadStatus(UPLOAD_STATUS.FAILED); try { WsUtil.putWorkspaceUploaderInSession(httpSession, workspaceUploader); @@ -222,7 +222,7 @@ public class WorkspaceUploaderMng { final boolean isOvewrite = false; WorkspaceUploadServletStream.notifyUploadInSharedFolder(storageWrapper, currUser, scopeGroupId, request, httpSession, createdItem.getId(), createdItem.getParentId(), isOvewrite); }else{ - workspaceUploader.setStatusDescription("An error occurred during upload: \""+itemName + "\". Try again"); + workspaceUploader.setStatusDescription("Error on uploading: \""+itemName + "\". Try again"); workspaceUploader.setUploadStatus(UPLOAD_STATUS.FAILED); } @@ -233,7 +233,7 @@ public class WorkspaceUploaderMng { } } catch (InternalErrorException e) { logger.error("Error during upload: ",e); - workspaceUploader.setStatusDescription("An error occurred server-side during upload: "+itemName+". "+e.getMessage() +". Try again"); + workspaceUploader.setStatusDescription("Error on uploading: "+itemName+". "+e.getMessage()); workspaceUploader.setUploadStatus(UPLOAD_STATUS.FAILED); try { WsUtil.putWorkspaceUploaderInSession(httpSession, workspaceUploader); @@ -331,7 +331,7 @@ public class WorkspaceUploaderMng { } catch (Exception e) { logger.error("Error when uploading Archive to HL creation: ",e); - throw new Exception("An error occurred during upload:: "+itemName+". Try again"); + throw new Exception("An error occurred during upload: "+itemName+". Try again"); } }