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 0000000..7a0a30a Binary files /dev/null and b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/resource/abort.png differ diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/TimerUpload.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/TimerUpload.java index a5aef67..ee77f43 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/TimerUpload.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/TimerUpload.java @@ -80,7 +80,8 @@ public class TimerUpload extends Timer{ cancel(); monitor.goNextUploaderAfterKey(workspaceUploader.getClientUploadKey()); }else if(result.getUploadStatus().equals(UPLOAD_STATUS.FAILED)){ - GWT.log("Upload Failed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); + //GWT.log("Upload Failed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); + GWT.log("Upload Failed Upload Key: "+result.getClientUploadKey() +" status description: "+result.getStatusDescription()); // monitor.deleteUploaderByClientKey(workspaceUploader.getClientUploadKey()); // queue.remove(workspaceUploader.getClientUploadKey()); monitor.notifyUploadError(result.getFile().getParentId(), null, result.getStatusDescription(), null); @@ -90,7 +91,7 @@ public class TimerUpload extends Timer{ monitor.goNextUploaderAfterKey(workspaceUploader.getClientUploadKey()); }else if(result.getUploadStatus().equals(UPLOAD_STATUS.ABORTED)){ // monitor.deleteUploaderByClientKey(workspaceUploader.getClientUploadKey()); - GWT.log("Upload Aborted "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); + GWT.log("Upload Aborted Upload Key: "+result.getClientUploadKey() +" status description: "+result.getStatusDescription()); cancel(); monitor.notifyUploadAborted(result.getFile().getParentId(), null); monitor.goNextUploaderAfterKey(workspaceUploader.getClientUploadKey()); diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/UploaderProgressView.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/UploaderProgressView.java index f6c65d3..e3f2237 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/UploaderProgressView.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/UploaderProgressView.java @@ -120,6 +120,18 @@ public class UploaderProgressView { // GWT.log(text); html.setHTML(text); html.setTitle(uploader.getStatusDescription()); + // bar.update(uploader.getUploadProgress().getLastEvent().getReadPercentage()); + try{ + hpBar.clear(); + }catch (Exception e) {} + break; + case ABORTED: + setVisibleBar(true); + text = "
"; + 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"); } }