From 2890a420d7e5fb22d2fc53f51c1c0f4565ca042e Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Thu, 12 May 2016 13:12:45 +0000 Subject: [PATCH] 3962: Workspace Uploader improvements: use a sequential get status instead of parallel during (multiple-)uploads Task-Url: https://support.d4science.org/issues/3962 Fixed problem on cancel during multiple-uploads git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-uploader@128570 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/uploader/DialogUpload.java | 4 +- .../client/uploader/MultipleDilaogUpload.java | 2 +- .../client/uploader/TimerUpload.java | 124 ++++++ .../client/uploader/UploaderMonitor.java | 384 ++++++------------ .../WorkspaceFieldsUploadManager.java | 2 +- .../server/WorkspaceUploadServletStream.java | 27 +- .../server/WorkspaceUploaderServiceImpl.java | 33 +- .../server/WorkspaceUploaderWsUtil.java | 1 - .../AbstractUploadProgressListener.java | 72 ++-- .../server/upload/MemoryUploadListener.java | 11 +- .../upload/UploadCanceledException.java | 22 +- .../server/upload/UploadProgressListener.java | 30 +- .../workspaceuploader/server/util/WsUtil.java | 103 +++-- .../shared/HandlerResultMessage.java | 2 +- 14 files changed, 422 insertions(+), 395 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/TimerUpload.java diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/DialogUpload.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/DialogUpload.java index 15e7e53..eebf674 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/DialogUpload.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/DialogUpload.java @@ -243,10 +243,12 @@ public class DialogUpload extends ClosableDialog implements HasWorskpaceUploadNo enableButtons(false); WorkspaceUploaderItem fakeUploader = new WorkspaceUploaderItem(); fakeUploader.setClientUploadKey(clientUploadKey); + int queueIndex = UploaderMonitor.getInstance().newQueue(); UploaderMonitor.getInstance().addNewUploaderToMonitorPanel(fakeUploader, fileUpload.getFilename()); setVisible(false); removeLoading(); -// UploaderMonitor.getInstance().pollWorkspaceUploader(fakeUploader); + UploaderMonitor.getInstance().addNewUploaderToQueue(queueIndex, fakeUploader); + UploaderMonitor.getInstance().doStartPollingQueue(queueIndex); } }); diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/MultipleDilaogUpload.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/MultipleDilaogUpload.java index d5e1c8e..ebbd6e5 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/MultipleDilaogUpload.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/MultipleDilaogUpload.java @@ -278,7 +278,7 @@ public class MultipleDilaogUpload extends DialogUpload { UploaderMonitor.getInstance().addNewUploaderToMonitorPanel(workspaceUploaderItem, workspaceUploaderItem.getFile().getFileName()); setVisible(false); removeLoading(); - UploaderMonitor.getInstance().addNewTimerToQueue(queueIndex, workspaceUploaderItem); + UploaderMonitor.getInstance().addNewUploaderToQueue(queueIndex, workspaceUploaderItem); // UploaderMonitor.getInstance().pollWorkspaceUploader(workspaceUploaderItem); } 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 new file mode 100644 index 0000000..9a1f1dd --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/TimerUpload.java @@ -0,0 +1,124 @@ +/** + * + */ +package org.gcube.portlets.widgets.workspaceuploader.client.uploader; + +import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderServiceAsync; +import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploaderItem; +import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploaderItem.UPLOAD_STATUS; + +import com.google.gwt.core.shared.GWT; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; + + +/** + * The Class TimerUpload. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * May 11, 2016 + */ +public class TimerUpload extends Timer{ + + /** The workspace uploader. */ + private WorkspaceUploaderItem workspaceUploader; + private UploaderMonitor monitor; + private TimerUpload INSTANCE = this; + + /** + * Instantiates a new timer upload. + * + * @param workspaceUploader the workspace uploader + * @param queue the queue + * @param indexQueue the index queue + */ + public TimerUpload(WorkspaceUploaderItem workspaceUploader) { + this.workspaceUploader = workspaceUploader; + this.monitor = UploaderMonitor.getInstance(); + } + + /* (non-Javadoc) + * @see com.google.gwt.user.client.Timer#run() + */ + @Override + public void run() { + + WorkspaceUploaderServiceAsync.Util.getInstance().getUploadStatus(workspaceUploader.getClientUploadKey(), new AsyncCallback() { + + @Override + public void onSuccess(WorkspaceUploaderItem result) { + try{ + synchronized(this){ + // Timer tmn = queue.get(workspaceUploader.getClientUploadKey()); + if(INSTANCE!=null && INSTANCE.isRunning()){ + if(result==null || result.getUploadStatus()==null){ + GWT.log("Upload or status its status is null for: "+workspaceUploader.getClientUploadKey()); + return; + } + if(result.getUploadStatus().equals(UPLOAD_STATUS.COMPLETED)){ + GWT.log("Upload Completed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); + // queue.remove(workspaceUploader.getClientUploadKey()); + // monitor.deleteUploaderByClientKey(workspaceUploader.getClientUploadKey()); + + if(!result.getIsOverwrite()) + monitor.notifyUploadCompleted(result.getFile().getParentId(), result.getFile().getItemId()); + else + monitor.notifyOverwriteCompleted(result.getFile().getParentId(), result.getFile().getItemId()); + + cancel(); + monitor.goNextUploaderAfterKey(workspaceUploader.getClientUploadKey()); + }else if(result.getUploadStatus().equals(UPLOAD_STATUS.FAILED)){ + GWT.log("Upload Failed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); + // monitor.deleteUploaderByClientKey(workspaceUploader.getClientUploadKey()); + // queue.remove(workspaceUploader.getClientUploadKey()); + monitor.notifyUploadError(result.getFile().getParentId(), null, null); + // new DialogResult(null, "Upload Failed!!", result.getStatusDescription()).center(); + + cancel(); + 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()); + cancel(); + monitor.goNextUploaderAfterKey(workspaceUploader.getClientUploadKey()); + } + + monitor.getMonitorPanel().updateWorkspaceUploder(result); + // GWT.log(result.toString()); + }else{ + // monitor.deleteUploaderByClientKey(workspaceUploader.getClientUploadKey()); + GWT.log("Timer is null or already closed or completed"); + cancel(); + monitor.goNextUploaderAfterKey(workspaceUploader.getClientUploadKey()); + } + } + }catch(Exception e){ + GWT.log("getUploadStatus exception "+e.getMessage()); + } + } + + @Override + public void onFailure(Throwable caught) { + GWT.log("onFailure: "+caught.getMessage()); + cancel(); +// monitor.deleteUploaderByClientKey(workspaceUploader.getClientUploadKey()); + monitor.goNextUploaderAfterKey(workspaceUploader.getClientUploadKey()); + monitor.notifyUploadError(workspaceUploader.getFile().getParentId(), null, caught); +// removeTimer(workspaceUploader.getClientUploadKey()); + } + }); + + } + + /* (non-Javadoc) + * @see com.google.gwt.user.client.Timer#cancel() + */ + @Override + public void cancel() { + GWT.log("Cancelling timer for "+workspaceUploader); + super.cancel(); + } + + + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/UploaderMonitor.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/UploaderMonitor.java index ee9d403..975fd0f 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/UploaderMonitor.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/UploaderMonitor.java @@ -13,7 +13,6 @@ import java.util.Set; import org.gcube.portlets.widgets.workspaceuploader.client.ClosableDialog; import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader; import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderListenerController; -import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderServiceAsync; import org.gcube.portlets.widgets.workspaceuploader.client.events.CancelUploadEvent; import org.gcube.portlets.widgets.workspaceuploader.client.events.CancelUploadEventHandler; import org.gcube.portlets.widgets.workspaceuploader.client.events.HideMonitorEvent; @@ -34,7 +33,6 @@ import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.Response; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.VerticalPanel; @@ -52,7 +50,7 @@ public class UploaderMonitor { private static ArrayList> queueUploads = new ArrayList>(); private ClosableDialog dialogUploadMonitor = new ClosableDialog(monitorPanel, false, ConstantsWorkspaceUploader.MY_UPLOADS); - private Map currentTimersRun = new HashMap(); + private Map currentTimersRun = new HashMap(); /** * Gets the single instance of UploaderMonitor. @@ -88,13 +86,13 @@ public class UploaderMonitor { return; final String clientKey = deleteTimerEvent.getUploader().getClientUploadKey(); - final LinkedHashMap queue = getQueueFromClientUploadKey(clientKey); + final LinkedHashMap queue = getMapUploaderByClientUploadKey(clientKey); if(queue==null){ GWT.log("onCancelUpload mapUpload is null for key: "+clientKey +", return"); return; } - final Timer timer = getTimer(clientKey); + final TimerUpload timer = getTimer(clientKey); GWT.log("Client abort for timer with clientKey "+clientKey); if(timer==null || !timer.isRunning()){ @@ -102,16 +100,7 @@ public class UploaderMonitor { return; } - //CANCELLING TIMER timer.cancel(); -// queue.put(clientKey, null); - - /*if(timer!=null && timer.isRunning()){ - timer.cancel(); -// mapUpload.put(clientKey, null); - GWT.log("Aborted WorkspaceUploaderItem for key: "+clientKey); -// removeTimer(clientKey); - }*/ RequestBuilder request = new RequestBuilder(RequestBuilder.GET, ConstantsWorkspaceUploader.WORKSPACE_UPLOADER_SERVLET_STREAM+"?"+ConstantsWorkspaceUploader.CLIENT_UPLOAD_KEYS+"="+clientKey+"&"+ConstantsWorkspaceUploader.CANCEL_UPLOAD+"=true"); try { @@ -121,7 +110,18 @@ public class UploaderMonitor { public void onResponseReceived(Request request, Response response) { String result = response.getText(); GWT.log("onResponseReceived "+result); + final HandlerResultMessage resultMessage = HandlerResultMessage.parseResult(result); +// timer.cancel(); +// int indexQueue = getQueueIndexFromClientUploadKey(clientKey); +// goNextUploaderFromKey(clientKey, queue, indexQueue); +// deleteTimerEvent.getUploader().setUploadStatus(UPLOAD_STATUS.ABORTED); +// notifyUploadAborted(deleteTimerEvent.getUploader().getFile().getParentId(), null); + +// if(timer!=null) +// timer.cancel(); +// goNextUploaderAfterKey(clientKey); + GWT.log("Cancel Upload Stream result: "+resultMessage); if(resultMessage==null) return; @@ -143,23 +143,9 @@ public class UploaderMonitor { text+="Upload "+deleteTimerEvent.getFileName()+ " aborted"; html.setHTML(text); - //UPDATING STATUS AS ABORTED IN ORDER TO STOP THE TIMER -// WorkspaceUploaderItem workspaceUploader = mapUpload.get(clientKey); -// workspaceUploader.setUploadStatus(UPLOAD_STATUS.ABORTED); -// mapUpload.put(clientKey, workspaceUploader); - //UPDATING STATUS AS ABORTED IN ORDER TO STOP THE TIMER GWT.log("Upload Aborted is OK"); - timer.cancel(); -// queue.remove(clientKey); - removeTimer(clientKey); -// int indexQueue = getQueueIndexFromClientUploadKey(clientKey); -// nextUploader(queue, indexQueue); -// queue.remove(clientKey); -// timer.cancel(); -// removeTimer(clientKey); -// int indexQueue = getQueueIndexFromClientUploadKey(clientKey); -// nextUploader(queue, indexQueue); + goNextUploaderAfterKey(clientKey); deleteTimerEvent.getUploader().setUploadStatus(UPLOAD_STATUS.ABORTED); notifyUploadAborted(deleteTimerEvent.getUploader().getFile().getParentId(), null); @@ -172,39 +158,6 @@ public class UploaderMonitor { break; } } - -// switch (resultMessage.getStatus()) { -// case ERROR: { -// GWT.log("ERROR: Error during stop upload "+resultMessage.getMessage()); -// Window.alert("Sorry, An error occurred during upload abort! "+resultMessage.getMessage()); -// break; -// } -// case OK: { -// UploaderProgressView upv = deleteTimerEvent.getProgessView(); -// VerticalPanel vp = upv!=null?upv.getPanel():null; -// if(vp!=null){ -// vp.clear(); -// HTML html = new HTML(); -// vp.add(html); -// String text = "
"; -// text+="Upload "+deleteTimerEvent.getFileName()+ " aborted
"; -// html.setHTML(text); - - //UPDATING STATUS AS ABORTED IN ORDER TO STOP THE TIMER -// WorkspaceUploaderItem workspaceUploader = mapUpload.get(clientKey); -// workspaceUploader.setUploadStatus(UPLOAD_STATUS.ABORTED); -// mapUpload.put(clientKey, workspaceUploader); - -// deleteTimerEvent.getUploader().setUploadStatus(UPLOAD_STATUS.ABORTED); -// notifyUploadAborted(deleteTimerEvent.getUploader().getFile().getParentId(), null); -// } -// break; -// } -// default:{ -// GWT.log("UNKNOWN CASE: Error during stop upload "+resultMessage.getMessage()); -// break; -// } -// } } @Override @@ -229,45 +182,17 @@ public class UploaderMonitor { }); } - /** - * Gets the queue from client upload key. + * Gets the monitor panel. * - * @param clientKey the client key - * @return the queue from client upload key, otherwise null; + * @return the monitorPanel */ - public LinkedHashMap getQueueFromClientUploadKey(String clientKey){ - for (LinkedHashMap queue : queueUploads) { - if(queue!=null){ - WorkspaceUploaderItem tm = queue.get(clientKey); - if(tm != null) - return queue; - } - } - return null; + public MonitorPanel getMonitorPanel() { + + return monitorPanel; } - - /** - * Gets the queue index from client upload key. - * - * @param clientKey the client key - * @return the queue index from client upload key, otherwise -1; - */ - public int getQueueIndexFromClientUploadKey(String clientKey){ - int index = -1; - for (LinkedHashMap queue : queueUploads) { - if(queue!=null){ - index++; - WorkspaceUploaderItem tm = queue.get(clientKey); - if(tm != null) - return index; - } - } - return index; - } - /** * Show monitor. */ @@ -292,140 +217,13 @@ public class UploaderMonitor { /** - * Do polling. + * Start timer. * * @param workspaceUploader the workspace uploader - * @param queue the queue - * @param indexQueue the index queue - * @return the timer */ - /*private void doPolling(final WorkspaceUploaderItem workspaceUploader){ - - Timer timer = new Timer() { - - @Override - public void run() { - - WorkspaceUploaderServiceAsync.Util.getInstance().getUploadStatus(workspaceUploader.getClientUploadKey(), new AsyncCallback() { - - @Override - public void onSuccess(WorkspaceUploaderItem result) { -// GWT.log("onSuccess: "+result.toString()); - synchronized(this){ - Timer tmn = queueTimers.get(workspaceUploader.getClientUploadKey()); - if(tmn!=null && tmn.isRunning()){ - if(result.getUploadStatus().equals(UPLOAD_STATUS.COMPLETED)){ - GWT.log("Upload Completed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); - queueTimers.remove(tmn); - - if(!result.getIsOverwrite()) - notifyUploadCompleted(result.getFile().getParentId(), result.getFile().getItemId()); - else - notifyOverwriteCompleted(result.getFile().getParentId(), result.getFile().getItemId()); - - cancel(); - }else if(result.getUploadStatus().equals(UPLOAD_STATUS.FAILED)){ - GWT.log("Upload Failed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); - queueTimers.remove(tmn); - notifyUploadError(result.getFile().getParentId(), null, null); -// new DialogResult(null, "Upload Failed!!", result.getStatusDescription()).center(); - cancel(); - } - monitorPanel.updateWorkspaceUploder(result); -// GWT.log(result.toString()); - }else{ - GWT.log("Timer is null or already closed or completed"); - cancel(); - } - } - } - - @Override - public void onFailure(Throwable caught) { - GWT.log("onFailure: "+caught.getMessage()); - notifyUploadError(workspaceUploader.getFile().getParentId(), null, caught); - cancel(); - } - }); - - } - }; - queueTimers.put(workspaceUploader.getClientUploadKey(), timer); - timer.scheduleRepeating(2000); - - }*/ - - - public void startTimer(final WorkspaceUploaderItem workspaceUploader, final LinkedHashMap queue, final int indexQueue){ - - final Timer timer = new Timer() { - - @Override - public void run() { - - WorkspaceUploaderServiceAsync.Util.getInstance().getUploadStatus(workspaceUploader.getClientUploadKey(), new AsyncCallback() { - - @Override - public void onSuccess(WorkspaceUploaderItem result) { -// GWT.log("onSuccess: "+result.toString()); - synchronized(this){ -// Timer tmn = queue.get(workspaceUploader.getClientUploadKey()); - if(isRunning()){ - if(result.getUploadStatus()==null){ - GWT.log("Upload status is null for: "+workspaceUploader.getClientUploadKey()); - return; - } - if(result.getUploadStatus().equals(UPLOAD_STATUS.COMPLETED)){ - GWT.log("Upload Completed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); - queue.remove(workspaceUploader.getClientUploadKey()); - - if(!result.getIsOverwrite()) - notifyUploadCompleted(result.getFile().getParentId(), result.getFile().getItemId()); - else - notifyOverwriteCompleted(result.getFile().getParentId(), result.getFile().getItemId()); - - cancel(); - removeTimer(workspaceUploader.getClientUploadKey()); - nextUploader(queue, indexQueue); - }else if(result.getUploadStatus().equals(UPLOAD_STATUS.FAILED)){ - GWT.log("Upload Failed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); - queue.remove(workspaceUploader.getClientUploadKey()); - notifyUploadError(result.getFile().getParentId(), null, null); -// new DialogResult(null, "Upload Failed!!", result.getStatusDescription()).center(); - - cancel(); - removeTimer(workspaceUploader.getClientUploadKey()); - nextUploader(queue, indexQueue); - } -// }else if(result.getUploadStatus().equals(UPLOAD_STATUS.ABORTED)){ -// GWT.log("Upload Aborted "+result.getFile().getItemId() +" name: "+result.getFile().getFileName()); -// cancel(); -// removeTimer(workspaceUploader.getClientUploadKey()); -// nextUploader(queue, indexQueue); -// } - - monitorPanel.updateWorkspaceUploder(result); -// GWT.log(result.toString()); - }else{ - GWT.log("Timer is null or already closed or completed"); - cancel(); - removeTimer(workspaceUploader.getClientUploadKey()); - nextUploader(queue, indexQueue); - } - } - } - - @Override - public void onFailure(Throwable caught) { - GWT.log("onFailure: "+caught.getMessage()); - cancel(); - notifyUploadError(workspaceUploader.getFile().getParentId(), null, caught); - removeTimer(workspaceUploader.getClientUploadKey()); - } - }); - } - }; + public void startTimer(final WorkspaceUploaderItem workspaceUploader){ + TimerUpload timer = new TimerUpload(workspaceUploader); GWT.log("Starting new timer for key: "+workspaceUploader.getClientUploadKey()); saveTimer(timer, workspaceUploader.getClientUploadKey()); timer.scheduleRepeating(2000); @@ -449,11 +247,11 @@ public class UploaderMonitor { /** * Save timer. * - * @param timer the timer + * @param timerUpload the timer upload * @param clientKey the client key */ - private synchronized void saveTimer(Timer timer, String clientKey){ - currentTimersRun.put(clientKey, timer); + private synchronized void saveTimer(TimerUpload timerUpload, String clientKey){ + currentTimersRun.put(clientKey, timerUpload); } @@ -463,7 +261,7 @@ public class UploaderMonitor { * @param clientKey the client key * @return the timer */ - private Timer getTimer(String clientKey){ + private TimerUpload getTimer(String clientKey){ return currentTimersRun.get(clientKey); } @@ -473,7 +271,7 @@ public class UploaderMonitor { * @param parentId the parent id * @param itemId the item id */ - private void notifyOverwriteCompleted(String parentId, String itemId){ + protected void notifyOverwriteCompleted(String parentId, String itemId){ GWT.log("notifyOverwriteCompleted in monitor"); WorkspaceUploaderListenerController.getEventBus().fireEvent(new NotifyUploadEvent(UPLOAD_EVENT_TYPE.OVERWRITE_COMPLETED, parentId, itemId)); } @@ -484,7 +282,7 @@ public class UploaderMonitor { * @param parentId the parent id * @param itemId the item id */ - private void notifyUploadCompleted(String parentId, String itemId){ + protected void notifyUploadCompleted(String parentId, String itemId){ GWT.log("notifyUploadCompleted in monitor"); WorkspaceUploaderListenerController.getEventBus().fireEvent(new NotifyUploadEvent(UPLOAD_EVENT_TYPE.UPLOAD_COMPLETED, parentId, itemId)); } @@ -495,7 +293,7 @@ public class UploaderMonitor { * @param parentId the parent id * @param itemId the item id */ - private void notifyUploadAborted(String parentId, String itemId){ + protected void notifyUploadAborted(String parentId, String itemId){ WorkspaceUploaderListenerController.getEventBus().fireEvent(new NotifyUploadEvent(UPLOAD_EVENT_TYPE.ABORTED, parentId, itemId)); } @@ -506,7 +304,7 @@ public class UploaderMonitor { * @param itemId the item id * @param t the t */ - private void notifyUploadError(String parentId, String itemId, Throwable t){ + protected void notifyUploadError(String parentId, String itemId, Throwable t){ WorkspaceUploaderListenerController.getEventBus().fireEvent(new NotifyUploadEvent(UPLOAD_EVENT_TYPE.FAILED, parentId, itemId, t)); } @@ -562,15 +360,18 @@ public class UploaderMonitor { } + /** - * Adds the new timer to queue. + * Adds the new uploader to queue. * * @param indexQueue the index queue * @param workspaceUploaderItem the workspace uploader item + * @return the linked hash map */ - public void addNewTimerToQueue(int indexQueue, WorkspaceUploaderItem workspaceUploaderItem) { + public LinkedHashMap addNewUploaderToQueue(int indexQueue, WorkspaceUploaderItem workspaceUploaderItem) { LinkedHashMap queue = queueUploads.get(indexQueue); queue.put(workspaceUploaderItem.getClientUploadKey(), workspaceUploaderItem); + return queue; } @@ -595,17 +396,29 @@ public class UploaderMonitor { } WorkspaceUploaderItem workspaceUploader = getNextUploader(queue); - startTimer(workspaceUploader, queue, index); + startTimer(workspaceUploader); } + /** + * Go next uploader after key. + * + * @param clientKey the client key + */ + protected void goNextUploaderAfterKey(String clientKey){ + removeTimer(clientKey); + LinkedHashMap mapUploader = deleteUploaderByClientKey(clientKey); + nextUploader(mapUploader, clientKey); + } + + /** * Gets the next uploader. * - * @param queue the queue + * @param mapUploaders the map uploaders * @return the next uploader */ - public WorkspaceUploaderItem getNextUploader(LinkedHashMap queue){ - Iterator it = queue.keySet().iterator(); + protected WorkspaceUploaderItem getNextUploader(LinkedHashMap mapUploaders){ + Iterator it = mapUploaders.keySet().iterator(); String firstKey = it.next(); if(firstKey==null || firstKey.isEmpty()){ @@ -613,31 +426,104 @@ public class UploaderMonitor { return null; } - return queue.get(firstKey); + return mapUploaders.get(firstKey); } + /** * Next uploader. * - * @param queue the queue - * @param indexQueue the index queue + * @param mapUploaders the map uploaders + * @param clientKey the client key */ - public synchronized void nextUploader(LinkedHashMap queue, int indexQueue){ + protected synchronized void nextUploader(LinkedHashMap mapUploaders, String clientKey){ - if(queue.keySet().size()==0){ - GWT.log("nextUploader return, queue size is = 0, deleting queue"); - deleteQueue(indexQueue); + int index = getQueueIndexFromClientUploadKey(clientKey); + + if(mapUploaders==null || mapUploaders.keySet().size()==0){ + GWT.log("nextUploader return, mapUploaders is null or size is = 0, deleting queue"); + deleteQueue(index); return; } - WorkspaceUploaderItem workspaceUploader = getNextUploader(queue); + WorkspaceUploaderItem workspaceUploader = getNextUploader(mapUploaders); if(workspaceUploader==null){ GWT.log("nextUploader return a null uploader, deleting queue"); - deleteQueue(indexQueue); + deleteQueue(index); return; } - startTimer(workspaceUploader, queue, indexQueue); + startTimer(workspaceUploader); } + + /** + * Gets the map uploader by client upload key. + * + * @param clientKey the client key + * @return the map uploader by client upload key + */ + protected LinkedHashMap getMapUploaderByClientUploadKey(String clientKey){ + for (LinkedHashMap queue : queueUploads) { + if(queue!=null){ + WorkspaceUploaderItem tm = queue.get(clientKey); + if(tm != null) + return queue; + } + } + return null; + } + + /** + * Gets the uploader by client upload key. + * + * @param clientKey the client key + * @return the uploader by client upload key + */ + protected WorkspaceUploaderItem getUploaderByClientUploadKey(String clientKey){ + LinkedHashMap map = getMapUploaderByClientUploadKey(clientKey); + if(map!=null) + return map.get(clientKey); + + return null; + } + + + /** + * Delete uploader by client key. + * + * @param clientKey the client key + * @return the linked hash map + */ + protected LinkedHashMap deleteUploaderByClientKey(String clientKey){ + GWT.log("deleteUploaderByClientKey by key: "+clientKey); + LinkedHashMap map = getMapUploaderByClientUploadKey(clientKey); + if(map!=null){ + GWT.log("Deleted uploader with key: "+clientKey); + map.remove(clientKey); + } + return map; + } + + /** + * Gets the queue index from client upload key. + * + * @param clientKey the client key + * @return the queue index from client upload key, otherwise -1; + */ + public int getQueueIndexFromClientUploadKey(String clientKey){ + int index = -1; + for (LinkedHashMap queue : queueUploads) { + if(queue!=null){ + index++; + WorkspaceUploaderItem tm = queue.get(clientKey); + if(tm != null) + return index; + else + index = -1; + } + } + return index; + } + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/WorkspaceFieldsUploadManager.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/WorkspaceFieldsUploadManager.java index 47ee374..4feedae 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/WorkspaceFieldsUploadManager.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/WorkspaceFieldsUploadManager.java @@ -60,7 +60,7 @@ public class WorkspaceFieldsUploadManager { int queueIndex = UploaderMonitor.getInstance().newQueue(); for (final WorkspaceUploaderItem workspaceUploaderItem : fakeUploaders) { UploaderMonitor.getInstance().addNewUploaderToMonitorPanel(workspaceUploaderItem, workspaceUploaderItem.getFile().getFileName()); - UploaderMonitor.getInstance().addNewTimerToQueue(queueIndex, workspaceUploaderItem); + UploaderMonitor.getInstance().addNewUploaderToQueue(queueIndex, workspaceUploaderItem); // UploaderMonitor.getInstance().pollWorkspaceUploader(workspaceUploaderItem); } UploaderMonitor.getInstance().doStartPollingQueue(queueIndex); 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 1815cbb..c4e65c8 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 @@ -138,13 +138,20 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet boolean cancelUpload = Boolean.parseBoolean(request.getParameter(CANCEL_UPLOAD)); logger.debug("GET method CANCEL_UPLOAD "+cancelUpload); if (cancelUpload) { - cancelUpload(request.getSession(), clientUploadKey); - sendMessage(response, "Upload aborted "+clientUploadKey); + boolean cancelled = cancelUpload(request.getSession(), clientUploadKey); + if(cancelled){ + sendMessage(response, "Upload aborted "+clientUploadKey); +// try { +//// removeCurrentListener(request.getSession(), clientUploadKey); +// WsUtil.eraseWorkspaceUploaderInSession(request.getSession(), clientUploadKey); +// }catch (Exception e) { +// logger.warn("An error occurred during removing cancelled upload from session "); +// } + } + else + sendWarnMessage(response, "Upload aborted for id: "+clientUploadKey +" has skipped, already aborted or completed?"); }else logger.debug(CANCEL_UPLOAD + " param not found"); -// }else -// sendError(response, "Internal error: CANCEL_UPLOAD NOT FOUND"); - return; } @@ -383,7 +390,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet WorkspaceItem item; try { - logger.debug("getWorkspace Item from HL"); + logger.debug("getWorkspaceItem destination id: "+destinationId+" from HL"); item = wa.getItem(destinationId); } catch (ItemNotFoundException e) { logger.error("Error, no destination folder found", e); @@ -883,15 +890,19 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet * * @param session the session * @param clientUploadKey the client upload key + * @return true, if successful */ - public void cancelUpload(HttpSession session, String clientUploadKey) { + public boolean cancelUpload(HttpSession session, String clientUploadKey) { logger.debug("UPLOAD-SERVLET (" + session.getId()+ ") cancelling Upload: "+clientUploadKey); AbstractUploadProgressListener listener = getCurrentListener(session, clientUploadKey); if (listener != null && !listener.isCanceled()) { logger.info("CancelUpload listener is "+listener.toString()); listener.setException(new UploadCanceledException()); - }else + return true; + }else{ logger.info("Skipping cancel upload: listener is null or is cancel"); + return false; + } } /** diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderServiceImpl.java index b9bb8cb..2231b56 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderServiceImpl.java @@ -15,12 +15,18 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** * The server side implementation of the RPC service. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * May 12, 2016 */ @SuppressWarnings("serial") public class WorkspaceUploaderServiceImpl extends RemoteServiceServlet implements WorkspaceUploaderService { public static Logger logger = LoggerFactory.getLogger(WorkspaceUploaderServiceImpl.class); + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderService#getUploadStatus(java.lang.String) + */ @Override public WorkspaceUploaderItem getUploadStatus(String identifier) throws Exception { @@ -41,19 +47,22 @@ public class WorkspaceUploaderServiceImpl extends RemoteServiceServlet implement logger.error(exception); throw new Exception(exception);*/ } - + // getThreadIds(); String progress = ""; if(uploader.getUploadProgress()!=null && uploader.getUploadProgress().getLastEvent()!=null) progress = uploader.getUploadProgress().getLastEvent().toString(); else progress = "upload progress is null or last event is null"; - + logger.info("returning uploader: "+uploader.getClientUploadKey() +" status: "+uploader.getUploadStatus() +", file: "+uploader.getFile().toString() +", progress: "+progress); return uploader; } - + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderService#getWorkspaceId() + */ @Override public String getWorkspaceId() throws Exception { logger.trace("getWorkspaceId"); @@ -67,11 +76,11 @@ public class WorkspaceUploaderServiceImpl extends RemoteServiceServlet implement String error = "An error occurred getting root id"; throw new Exception(error); } - + return null; } - - + + /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService#itemExistsInWorkpaceFolder(java.lang.String, java.lang.String) */ @@ -79,17 +88,17 @@ public class WorkspaceUploaderServiceImpl extends RemoteServiceServlet implement public String itemExistsInWorkpaceFolder(String parentId, String itemName) throws Exception { logger.trace("get itemExistsInWorkpace by parentId: "+parentId); try { - + Workspace workspace = WsUtil.getWorkspace(getThreadLocalRequest().getSession()); WorkspaceItem wsItem = workspace.getItem(parentId); //GET PARENT - + if(wsItem.getType().equals(WorkspaceItemType.FOLDER) || wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ - + WorkspaceItem itemFound = workspace.find(itemName, parentId); - + if(itemFound==null) return null; - + return itemFound.getId(); } else @@ -101,7 +110,7 @@ public class WorkspaceUploaderServiceImpl extends RemoteServiceServlet implement throw new Exception(e.getMessage()); } } - + // protected void getThreadIds(){ // WorkspaceUploadServletStream.printAllThreadIds(); // } diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderWsUtil.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderWsUtil.java index e2568e1..a173009 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderWsUtil.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/WorkspaceUploaderWsUtil.java @@ -121,7 +121,6 @@ public class WorkspaceUploaderWsUtil extends HttpServlet { protected void sendOKMessage(HttpServletResponse response, String message) throws IOException{ try { response.setStatus(HttpServletResponse.SC_OK); - response.setContentType("text/xml"); if(message==null) message="null"; response.getWriter().write(message); diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/AbstractUploadProgressListener.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/AbstractUploadProgressListener.java index e466aa3..f7818b8 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/AbstractUploadProgressListener.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/AbstractUploadProgressListener.java @@ -20,26 +20,29 @@ import org.slf4j.LoggerFactory; * * @see UploadProgressEvent */ -public abstract class AbstractUploadProgressListener implements - ProgressListener, Serializable { +public abstract class AbstractUploadProgressListener implements ProgressListener, Serializable { /** - * + * */ - private static final long serialVersionUID = 9039352626573789199L; - + private static final long serialVersionUID = -7542788161740799624L; private static final double COMPLETE_PERECENTAGE = 100d; private int percentage = -1; private UploadProgress uploadProgress; private int percentageOffset = 0; private double completePercentage = COMPLETE_PERECENTAGE; - private static Logger logger = LoggerFactory - .getLogger(AbstractUploadProgressListener.class); + private static Logger logger = LoggerFactory.getLogger(AbstractUploadProgressListener.class); protected RuntimeException exception = null; protected boolean exceptionTrhown = false; protected String sessionId; + /** + * Current. + * + * @param sessionId the session id + * @return the abstract upload progress listener + */ public static AbstractUploadProgressListener current(String sessionId) { throw new RuntimeException( "Implement the static method 'current' in your customized class"); @@ -64,14 +67,10 @@ public abstract class AbstractUploadProgressListener implements /** * Instantiates a new upload progress listener. * - * @param request - * the request - * @param uploadProgress - * the upload progress - * @param percentageOffset - * the percentage offset - * @param completePercentage - * the complete percentage + * @param session the session + * @param clientUploadKey the client upload key + * @param percentageOffset the percentage offset + * @param completePercentage the complete percentage */ public AbstractUploadProgressListener(HttpSession session, String clientUploadKey, int percentageOffset, @@ -88,16 +87,9 @@ public abstract class AbstractUploadProgressListener implements save(); } - /** - * @return the session - */ - public HttpSession getSession() { - return session; - } - /* * (non-Javadoc) - * + * * @see org.apache.commons.fileupload.ProgressListener#update(long, long, * int) */ @@ -105,6 +97,7 @@ public abstract class AbstractUploadProgressListener implements public void update(final long bytesRead, final long totalBytes, final int items) { if (exceptionTrhown) { + logger.warn("An exception thrown is already true. Is upload already cancelled?, returning"); return; } @@ -112,8 +105,7 @@ public abstract class AbstractUploadProgressListener implements // commons-fileupload's // parser stops and the connection is closed. if (isCanceled()) { - String eName = exception.getClass().getName() - .replaceAll("^.+\\.", ""); + String eName = exception.getClass().getName().replaceAll("^.+\\.", ""); logger.info(AbstractUploadProgressListener.class.getName() + " " + sessionKey + " The upload has been canceled after " + bytesRead + " bytes received, raising an exception (" @@ -124,21 +116,16 @@ public abstract class AbstractUploadProgressListener implements this.bytesRead = bytesRead; this.contentLength = totalBytes; - - int percentage = percentageOffset - + ((int) Math.floor(((double) bytesRead / (double) totalBytes) - * completePercentage)); + int percentage = percentageOffset+ (int) Math.floor((double) bytesRead / (double) totalBytes* completePercentage); if (this.percentage == percentage) return; this.percentage = percentage; - UploadProgressChangeEvent event = new UploadProgressChangeEvent(); event.setReadPercentage(percentage); event.setReadTime(System.currentTimeMillis()); // logger.trace("Updating percentage.. "+percentage); - synchronized (this.uploadProgress) { // logger.trace("Adding event: "+event); this.uploadProgress.add(event); @@ -147,6 +134,8 @@ public abstract class AbstractUploadProgressListener implements } /** + * Gets the bytes read. + * * @return the bytesRead */ public Long getBytesRead() { @@ -154,6 +143,8 @@ public abstract class AbstractUploadProgressListener implements } /** + * Gets the content length. + * * @return the contentLength */ public Long getContentLength() { @@ -191,6 +182,7 @@ public abstract class AbstractUploadProgressListener implements /** * Set the exception which cancels the upload. * + * @param e the new exception */ public void setException(RuntimeException e) { logger.info("Set RuntimeException to cancel upload"); @@ -199,6 +191,8 @@ public abstract class AbstractUploadProgressListener implements } /** + * Gets the percentage. + * * @return the percentage */ public int getPercentage() { @@ -206,12 +200,24 @@ public abstract class AbstractUploadProgressListener implements } /** + * Gets the client upload key. + * * @return the clientUploadKey */ public String getClientUploadKey() { return clientUploadKey; } + + /** + * Gets the session. + * + * @return the session + */ + public HttpSession getSession() { + return session; + } + /** * Gets the session key. * @@ -254,6 +260,6 @@ public abstract class AbstractUploadProgressListener implements builder.append("]"); return builder.toString(); } - - + + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/MemoryUploadListener.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/MemoryUploadListener.java index 300354a..4e98af8 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/MemoryUploadListener.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/MemoryUploadListener.java @@ -24,6 +24,7 @@ import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + /** * This File Upload Listener is used by Apache Commons File Upload to monitor * the progress of the uploaded file. @@ -34,8 +35,7 @@ import org.slf4j.LoggerFactory; * It is thought to be used in systems where session objects are not updated * until the request has finished. * - * @author francesco-mangiacrapa - * + * @see MemoryUploadEvent */ public class MemoryUploadListener extends AbstractUploadProgressListener { @@ -81,7 +81,7 @@ public class MemoryUploadListener extends AbstractUploadProgressListener { /* * (non-Javadoc) - * + * * @see org.gcube.portlets.widgets.workspaceuploader.server.upload. * AbstractUploadProgressListener#remove() */ @@ -93,7 +93,7 @@ public class MemoryUploadListener extends AbstractUploadProgressListener { /* * (non-Javadoc) - * + * * @see org.gcube.portlets.widgets.workspaceuploader.server.upload. * AbstractUploadProgressListener#save() */ @@ -102,6 +102,9 @@ public class MemoryUploadListener extends AbstractUploadProgressListener { logger.debug(sessionKey + " Saved " + this.toString()); } + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.workspaceuploader.server.upload.AbstractUploadProgressListener#toString() + */ public String toString() { return super.toString(); } diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/UploadCanceledException.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/UploadCanceledException.java index b633e2c..5f27043 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/UploadCanceledException.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/UploadCanceledException.java @@ -1,19 +1,3 @@ -/* - * Copyright 2010 Manuel Carrasco MoƱino. (manolo at apache/org) - * http://code.google.com/p/gwtupload - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ package org.gcube.portlets.widgets.workspaceuploader.server.upload; @@ -25,5 +9,9 @@ package org.gcube.portlets.widgets.workspaceuploader.server.upload; * Sep 8, 2015 */ public class UploadCanceledException extends RuntimeException { - private static final long serialVersionUID = 1L; + + /** + * + */ + private static final long serialVersionUID = 4311434519628111824L; } diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/UploadProgressListener.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/UploadProgressListener.java index 5f23e8c..a486e68 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/UploadProgressListener.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/upload/UploadProgressListener.java @@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory; public class UploadProgressListener extends AbstractUploadProgressListener { /** - * + * */ private static final long serialVersionUID = -7757392979344200978L; @@ -47,6 +47,8 @@ public class UploadProgressListener extends AbstractUploadProgressListener { private static final int WATCHER_INTERVAL = 2000; + private TimeoutWatchDog watcher = null; + /** * Sets the no data timeout. * @@ -67,12 +69,12 @@ public class UploadProgressListener extends AbstractUploadProgressListener { */ public class TimeoutWatchDog extends Thread implements Serializable { /** - * + * */ private static final long serialVersionUID = -6958907286385617168L; AbstractUploadProgressListener listener; private long lastBytesRead = 0L; - private long lastData = (new Date()).getTime(); + private long lastData = new Date().getTime(); /** * Instantiates a new timeout watch dog. @@ -93,7 +95,7 @@ public class UploadProgressListener extends AbstractUploadProgressListener { /* * (non-Javadoc) - * + * * @see java.lang.Thread#run() */ @Override @@ -131,7 +133,7 @@ public class UploadProgressListener extends AbstractUploadProgressListener { * @return true, if is frozen */ private boolean isFrozen() { - long now = (new Date()).getTime(); + long now = new Date().getTime(); if (bytesRead > lastBytesRead) { lastData = now; lastBytesRead = bytesRead; @@ -154,11 +156,10 @@ public class UploadProgressListener extends AbstractUploadProgressListener { public static AbstractUploadProgressListener current(HttpSession session, String clientUploadKey) { String sessionKey = getSessionKey(session.getId(), clientUploadKey); - return (AbstractUploadProgressListener) session - .getAttribute(sessionKey); + return (AbstractUploadProgressListener) session.getAttribute(sessionKey); } - - private TimeoutWatchDog watcher = null; + + /** * Instantiates a new upload listener. @@ -180,7 +181,7 @@ public class UploadProgressListener extends AbstractUploadProgressListener { /* * (non-Javadoc) - * + * * @see gwtupload.server.AbstractUploadListener#remove() */ /** @@ -196,7 +197,7 @@ public class UploadProgressListener extends AbstractUploadProgressListener { /* * (non-Javadoc) - * + * * @see gwtupload.server.AbstractUploadListener#save() */ /** @@ -205,15 +206,14 @@ public class UploadProgressListener extends AbstractUploadProgressListener { public void save() { if (getSession() != null) { getSession().setAttribute(sessionKey, this); - logger.info("Added in session: " + toString()); + logger.info("Save - Added in session: " + toString()); } - logger.debug(sessionKey + " save listener " + toString()); } /* * (non-Javadoc) - * + * * @see gwtupload.server.AbstractUploadListener#update(long, long, int) */ @Override @@ -256,7 +256,7 @@ public class UploadProgressListener extends AbstractUploadProgressListener { StringBuilder builder = new StringBuilder(); builder.append("UploadProgressListener [watcher="); builder.append(watcher); - builder.append(super.toString()); + builder.append(", "+super.toString()); return builder.toString(); } } diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/util/WsUtil.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/util/WsUtil.java index 78d86b9..d33d099 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/util/WsUtil.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/server/util/WsUtil.java @@ -1,5 +1,5 @@ /** - * + * */ package org.gcube.portlets.widgets.workspaceuploader.server.util; @@ -40,12 +40,12 @@ public class WsUtil { public static final String TEST_SCOPE = "/gcube/devsec"; public static String TEST_USER = "test.user"; public static String TEST_USER_FULL_NAME = "Test User"; - - + + protected static Logger logger = Logger.getLogger(WsUtil.class); // public static boolean withoutPortal = false; - + /** * Checks if is within portal. * @@ -55,13 +55,13 @@ public class WsUtil { try { UserLocalServiceUtil.getService(); return true; - } - catch (Exception ex) { + } + catch (Exception ex) { logger.trace("Development Mode ON"); return false; - } + } } - + /** * Gets the asl session. * @@ -73,18 +73,18 @@ public class WsUtil { String sessionID = httpSession.getId(); String user = (String) httpSession.getAttribute(USERNAME_ATTRIBUTE); ASLSession session; - + if (user == null) { - + /*USE ANOTHER ACCOUNT (OTHERWHISE BY TEST_USER) FOR RUNNING * COMMENT THIS IN DEVELOP ENVIROMENT (UNCOMMENT IN PRODUCTION)*/ user=TEST_USER; - + if (!isWithinPortal()) { //DEV MODE user = "francesco.mangiacrapa"; TEST_USER_FULL_NAME = "Francesco Mangiacrapa"; } - + logger.warn("WORKSPACE PORTLET STARTING IN TEST MODE - NO USER FOUND - PORTLETS STARTING WITH FOLLOWING SETTINGS:"); logger.warn("session id: "+sessionID); logger.warn("TEST_USER: "+user); @@ -92,21 +92,21 @@ public class WsUtil { logger.warn("USERNAME_ATTRIBUTE: "+USERNAME_ATTRIBUTE); session = SessionManager.getInstance().getASLSession(sessionID, user); session.setScope(TEST_SCOPE); - + //MANDATORY FOR SOCIAL LIBRARY session.setUserAvatarId(user + "Avatar"); session.setUserFullName(TEST_USER_FULL_NAME); session.setUserEmailAddress(user + "@mail.test"); - + //SET HTTP SESSION ATTRIBUTE httpSession.setAttribute(USERNAME_ATTRIBUTE, user); return session; - + } - + return SessionManager.getInstance().getASLSession(sessionID, user); } - + /** * Checks if is session expired. * @@ -119,22 +119,22 @@ public class WsUtil { //READING USERNAME FROM ASL SESSION String userUsername = getAslSession(httpSession).getUsername(); boolean isTestUser = userUsername.compareTo(WsUtil.TEST_USER)==0; - + //TODO UNCOMMENT THIS FOR RELEASE logger.trace("Is "+WsUtil.TEST_USER+" test user? "+isTestUser); - + if(isTestUser){ logger.error("workspace session is expired! username is: "+WsUtil.TEST_USER); return true; //is TEST_USER, session is expired } logger.trace("workspace session is valid! current username is: "+userUsername); - + return false; - + } - - + + /** * Gets the workspace. @@ -146,18 +146,18 @@ public class WsUtil { * @throws WorkspaceFolderNotFoundException the workspace folder not found exception */ public static Workspace getWorkspace(final HttpSession httpSession) throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException{ - + logger.trace("Get Workspace"); final ASLSession session = getAslSession(httpSession); logger.trace("ASLSession scope: "+session.getScope() + " username: "+session.getUsername()); ScopeProvider.instance.set(session.getScope()); logger.trace("Scope provider instancied"); - + return HomeLibrary.getUserWorkspace(session.getUsername()); } - + /** * Gets the notification manager. * @@ -166,9 +166,9 @@ public class WsUtil { */ public static NotificationsManager getNotificationManager(ASLSession session) { - + NotificationsManager notifMng = (NotificationsManager) session.getAttribute(NOTIFICATION_MANAGER); - + if (notifMng == null) { try{ logger.trace("Create new NotificationsManager for user: "+session.getUsername()); @@ -179,10 +179,10 @@ public class WsUtil { logger.error("An error occurred instancing ApplicationNotificationsManager for user: "+session.getUsername(),e); } } - + return notifMng; } - + /** * Gets the notification producer. * @@ -191,18 +191,18 @@ public class WsUtil { */ public static NotificationsWorkspaceUploaderProducer getNotificationProducer(ASLSession session) { - + NotificationsWorkspaceUploaderProducer notifProducer = (NotificationsWorkspaceUploaderProducer) session.getAttribute(NOTIFICATION_PRODUCER); - + if (notifProducer == null) { logger.trace("Create new Notification Producer for user: "+session.getUsername()); notifProducer = new NotificationsWorkspaceUploaderProducer(session); session.setAttribute(NOTIFICATION_PRODUCER, notifProducer); } - + return notifProducer; } - + /** * Put workspace uploader in session. * @@ -212,18 +212,17 @@ public class WsUtil { */ public static void putWorkspaceUploaderInSession(final HttpSession httpSession, WorkspaceUploaderItem uploader) throws Exception { - logger.trace("Get Workspace"); + logger.trace("Put workspace uploader in session: "+uploader); final ASLSession session = getAslSession(httpSession); - + if(uploader.getIdentifier()==null || uploader.getIdentifier().isEmpty()) throw new Exception("Invalid uploader"); - - logger.debug("Adding uploader: "+uploader.getIdentifier() +" in session"); + session.setAttribute(uploader.getIdentifier(), uploader); - + logger.debug("Added uploader: "+uploader.getIdentifier() +" in session"); } - - + + /** * Gets the workspace uploader in session. * @@ -235,14 +234,14 @@ public class WsUtil { public static WorkspaceUploaderItem getWorkspaceUploaderInSession(final HttpSession httpSession, String uploaderIdentifier) throws Exception { final ASLSession session = getAslSession(httpSession); - + if(uploaderIdentifier==null || uploaderIdentifier.isEmpty()) throw new Exception("Invalid uploader"); - + return (WorkspaceUploaderItem) session.getAttribute(uploaderIdentifier); - + } - + /** * Erase workspace uploader in session. @@ -255,17 +254,17 @@ public class WsUtil { public static boolean eraseWorkspaceUploaderInSession(final HttpSession httpSession, String uploaderIdentifier) throws Exception { WorkspaceUploaderItem uploader = getWorkspaceUploaderInSession(httpSession, uploaderIdentifier); - + if(uploader!=null){ - logger.debug("Erased uploader: "+uploader.getIdentifier() +" in session"); + logger.debug("Erasing uploader: "+uploader.getIdentifier() +" in session, adding null value"); uploader = null; putWorkspaceUploaderInSession(httpSession, uploader); return true; } logger.debug("Uploader not found, skipping erase from session"); - return false; + return false; } - + /** * Gets the user id. @@ -274,10 +273,10 @@ public class WsUtil { * @return the user id */ public static String getUserId(HttpSession httpSession) { - + ASLSession session = getAslSession(httpSession); - + return session.getUsername(); } - + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/shared/HandlerResultMessage.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/shared/HandlerResultMessage.java index c59f87a..549a4ca 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/shared/HandlerResultMessage.java +++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/shared/HandlerResultMessage.java @@ -111,7 +111,7 @@ public class HandlerResultMessage implements Serializable{ return errorResult("result is null or empty"); int index = result.indexOf(':'); - if (index>0){ + if (index>=0){ statusToken = result.substring(0,index); if (index