Fixed issue on upload archive

Added listener controller


git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-uploader@119406 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2015-10-05 16:27:00 +00:00
parent c6a54dd79d
commit bf3e09f5cd
6 changed files with 325 additions and 50 deletions

View File

@ -0,0 +1,152 @@
/**
*
*/
package org.gcube.portlets.widgets.workspaceuploader.client;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener;
import org.gcube.portlets.widgets.workspaceuploader.client.events.NotifyUploadEvent;
import org.gcube.portlets.widgets.workspaceuploader.client.events.NotifyUploadEventHandler;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.shared.HandlerManager;
/**
* The Class WorkspaceExplorerListenerController.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Oct 5, 2015
*/
public class WorkspaceExplorerListenerController {
private static HandlerManager controllerEventBus = null;
private List<WorskpaceUploadNotificationListener> listenersUpload = new ArrayList<WorskpaceUploadNotificationListener>();
/**
* Instantiates a new workspace explorer listener controller.
*/
public WorkspaceExplorerListenerController(){
controllerEventBus = new HandlerManager(null);
bindEvents();
}
/**
* Bind events.
*/
private void bindEvents() {
controllerEventBus.addHandler(NotifyUploadEvent.TYPE, new NotifyUploadEventHandler() {
@Override
public void onNotifyUpload(NotifyUploadEvent notifyUploadEvent) {
if(notifyUploadEvent.getEvent()==null)
return;
switch(notifyUploadEvent.getEvent()){
case COMPLETED:
GWT.log("NotifyUploadEvent Completed");
notifyUploadCompleted(notifyUploadEvent.getParentId(), notifyUploadEvent.getItemId());
break;
case ABORTED:
GWT.log("NotifyUploadEvent Aborted");
notifyUploadAborted(notifyUploadEvent.getParentId(), notifyUploadEvent.getItemId());
break;
case FAILED:
GWT.log("NotifyUploadEvent FAILED");
notifyUploadError(notifyUploadEvent.getParentId(), notifyUploadEvent.getItemId(), notifyUploadEvent.getException());
break;
default:
break;
}
}
});
}
/**
* Gets the event bus.
*
* @return the event bus
*/
public static HandlerManager getEventBus(){
return controllerEventBus;
}
/**
* Adds the workspace upload listener.
*
* @param handler the handler
*/
public void addWorkspaceUploadListener(WorskpaceUploadNotificationListener handler) {
this.listenersUpload.add(handler);
}
/**
* Removes the workspace upload listener.
*
* @param handler the handler
*/
public void removeWorkspaceUploadListener(WorskpaceUploadNotificationListener handler) {
try {
this.listenersUpload.remove(handler);
} catch (Exception e) {
// SILENT
}
}
/**
* Reset listeners.
*/
public void resetListeners(){
this.listenersUpload.clear();
}
/**
* Notify upload completed.
*
* @param parentId the parent id
* @param itemId the item id
*/
private void notifyUploadCompleted(String parentId, String itemId){
listnersSize();
for (WorskpaceUploadNotificationListener listener : listenersUpload) {
listener.onUploadCompleted(parentId, itemId);
}
}
/**
* Notify upload aborted.
*
* @param parentId the parent id
* @param itemId the item id
*/
private void notifyUploadAborted(String parentId, String itemId){
for (WorskpaceUploadNotificationListener listener : listenersUpload) {
listener.onUploadAborted(parentId, itemId);
}
}
/**
* Notify upload error.
*
* @param parentId the parent id
* @param itemId the item id
* @param t the t
*/
private void notifyUploadError(String parentId, String itemId, Throwable t){
for (WorskpaceUploadNotificationListener listener : listenersUpload) {
listener.onError(parentId, itemId, t);
}
}
private int listnersSize(){
GWT.log("listenersUpload.size() "+listenersUpload.size());
return listenersUpload.size();
}
}

View File

@ -0,0 +1,127 @@
package org.gcube.portlets.widgets.workspaceuploader.client.events;
import com.google.gwt.event.shared.GwtEvent;
/**
* The Class NotifyUploadEvent.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Oct 5, 2015
*/
public class NotifyUploadEvent extends GwtEvent<NotifyUploadEventHandler> {
public static Type<NotifyUploadEventHandler> TYPE = new Type<NotifyUploadEventHandler>();
/**
* The Enum UPLOAD_EVENT_TYPE.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Oct 5, 2015
*/
public static enum UPLOAD_EVENT_TYPE {
COMPLETED, FAILED, ABORTED
}
private UPLOAD_EVENT_TYPE event;
private String parentId;
private String itemId;
private Throwable exception;
/**
* @return the exception
*/
public Throwable getException() {
return exception;
}
/**
* @param exception the exception to set
*/
public void setException(Throwable exception) {
this.exception = exception;
}
/**
* @return the event
*/
public UPLOAD_EVENT_TYPE getEvent() {
return event;
}
/**
* @param event the event to set
*/
public void setEvent(UPLOAD_EVENT_TYPE event) {
this.event = event;
}
/**
* Instantiates a new notify upload event.
*/
public NotifyUploadEvent(UPLOAD_EVENT_TYPE event, String parentId, String itemId) {
this.parentId = parentId;
this.itemId = itemId;
this.event = event;
}
/**
* Instantiates a new notify upload event.
*/
public NotifyUploadEvent(UPLOAD_EVENT_TYPE event, String parentId, String itemId, Throwable e) {
this.parentId = parentId;
this.itemId = itemId;
this.event = event;
this.exception = e;
}
/**
* @return the parentId
*/
public String getParentId() {
return parentId;
}
/**
* @return the itemId
*/
public String getItemId() {
return itemId;
}
/**
* @param parentId the parentId to set
*/
public void setParentId(String parentId) {
this.parentId = parentId;
}
/**
* @param itemId the itemId to set
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/*
* (non-Javadoc)
*
* @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
*/
@Override
public Type<NotifyUploadEventHandler> getAssociatedType() {
return TYPE;
}
/*
* (non-Javadoc)
*
* @see
* com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared
* .EventHandler)
*/
@Override
protected void dispatch(NotifyUploadEventHandler handler) {
handler.onNotifyUpload(this);
}
}

View File

@ -0,0 +1,21 @@
package org.gcube.portlets.widgets.workspaceuploader.client.events;
import com.google.gwt.event.shared.EventHandler;
/**
* The Interface NotifyUploadEventHandler.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Oct 5, 2015
*/
public interface NotifyUploadEventHandler extends EventHandler {
/**
* On notify upload.
*
* @param notifyUploadEvent the notify upload event
*/
void onNotifyUpload(NotifyUploadEvent notifyUploadEvent);
}

View File

@ -7,6 +7,7 @@ import java.util.List;
import org.gcube.portlets.widgets.workspaceuploader.client.ClosableDialog; import org.gcube.portlets.widgets.workspaceuploader.client.ClosableDialog;
import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader; import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader;
import org.gcube.portlets.widgets.workspaceuploader.client.DialogResult; import org.gcube.portlets.widgets.workspaceuploader.client.DialogResult;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceExplorerListenerController;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.HasWorskpaceUploadNotificationListener; import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.HasWorskpaceUploadNotificationListener;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener; import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderServiceAsync; import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderServiceAsync;
@ -43,18 +44,14 @@ import com.google.gwt.user.client.ui.VerticalPanel;
*/ */
public class DialogUploadStream extends ClosableDialog implements HasWorskpaceUploadNotificationListener{ public class DialogUploadStream extends ClosableDialog implements HasWorskpaceUploadNotificationListener{
/**
*
*/
private DialogUploadStream INSTANCE = this; private DialogUploadStream INSTANCE = this;
// private boolean isStatusCompleted = false;
protected Button btnUpload = new Button("Upload"); protected Button btnUpload = new Button("Upload");
// protected Button btnCancel = new Button("Cancel");
private Hidden hiddenOverwrite = new Hidden(ConstantsWorkspaceUploader.IS_OVERWRITE,"false"); private Hidden hiddenOverwrite = new Hidden(ConstantsWorkspaceUploader.IS_OVERWRITE,"false");
protected final FormPanel formPanel = new FormPanel(); protected final FormPanel formPanel = new FormPanel();
protected FileUpload fileUpload; protected FileUpload fileUpload;
protected Hidden jsonClientKeys; protected Hidden jsonClientKeys;
protected List<WorkspaceUploaderItem> fakeUploaders = new ArrayList<WorkspaceUploaderItem>(); protected List<WorkspaceUploaderItem> fakeUploaders = new ArrayList<WorkspaceUploaderItem>();
protected WorkspaceExplorerListenerController controller = new WorkspaceExplorerListenerController();
/** /**
* The Enum UPLOAD_TYPE. * The Enum UPLOAD_TYPE.
@ -363,7 +360,7 @@ public class DialogUploadStream extends ClosableDialog implements HasWorskpaceUp
*/ */
@Override @Override
public void addWorkspaceUploadNotificationListener(WorskpaceUploadNotificationListener handler) { public void addWorkspaceUploadNotificationListener(WorskpaceUploadNotificationListener handler) {
UploaderMonitor.getInstance().addWorkspaceUploadListener(handler); controller.addWorkspaceUploadListener(handler);
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -371,7 +368,7 @@ public class DialogUploadStream extends ClosableDialog implements HasWorskpaceUp
*/ */
@Override @Override
public void removeWorkspaceUploadNotificationListener(WorskpaceUploadNotificationListener handler) { public void removeWorkspaceUploadNotificationListener(WorskpaceUploadNotificationListener handler) {
UploaderMonitor.getInstance().removeWorkspaceUploadListener(handler); controller.removeWorkspaceUploadListener(handler);
} }
} }

View File

@ -3,17 +3,17 @@
*/ */
package org.gcube.portlets.widgets.workspaceuploader.client.uploader; package org.gcube.portlets.widgets.workspaceuploader.client.uploader;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.gcube.portlets.widgets.workspaceuploader.client.ClosableDialog; import org.gcube.portlets.widgets.workspaceuploader.client.ClosableDialog;
import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader; import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener; import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceExplorerListenerController;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderServiceAsync; 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.CancelUploadEvent;
import org.gcube.portlets.widgets.workspaceuploader.client.events.CancelUploadEventHandler; import org.gcube.portlets.widgets.workspaceuploader.client.events.CancelUploadEventHandler;
import org.gcube.portlets.widgets.workspaceuploader.client.events.NotifyUploadEvent;
import org.gcube.portlets.widgets.workspaceuploader.client.events.NotifyUploadEvent.UPLOAD_EVENT_TYPE;
import org.gcube.portlets.widgets.workspaceuploader.client.resource.WorkspaceUploaderResources; import org.gcube.portlets.widgets.workspaceuploader.client.resource.WorkspaceUploaderResources;
import org.gcube.portlets.widgets.workspaceuploader.shared.HandlerResultMessage; import org.gcube.portlets.widgets.workspaceuploader.shared.HandlerResultMessage;
import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploaderItem; import org.gcube.portlets.widgets.workspaceuploader.shared.WorkspaceUploaderItem;
@ -41,11 +41,11 @@ import com.google.gwt.user.client.ui.HorizontalPanel;
public class UploaderMonitor { public class UploaderMonitor {
private static UploaderMonitor instance; private static UploaderMonitor instance;
private final static HandlerManager eventBus = new HandlerManager(null); private final static HandlerManager monitorEventBus = new HandlerManager(null);
private MonitorPanel monitorPanel = new MonitorPanel(eventBus); private MonitorPanel monitorPanel = new MonitorPanel(monitorEventBus);
private static Map<String, Timer> mapTimer = new HashMap<String, Timer>(); private static Map<String, Timer> mapTimer = new HashMap<String, Timer>();
private ClosableDialog dialogUploadMonitor = new ClosableDialog(monitorPanel, false, ConstantsWorkspaceUploader.MY_UPLOADS); private ClosableDialog dialogUploadMonitor = new ClosableDialog(monitorPanel, false, ConstantsWorkspaceUploader.MY_UPLOADS);
private List<WorskpaceUploadNotificationListener> listenersUpload = new ArrayList<WorskpaceUploadNotificationListener>();
/** /**
* Gets the single instance of UploaderMonitor. * Gets the single instance of UploaderMonitor.
* *
@ -67,7 +67,7 @@ public class UploaderMonitor {
*/ */
private void bindEvents() { private void bindEvents() {
eventBus.addHandler(CancelUploadEvent.TYPE, new CancelUploadEventHandler() { monitorEventBus.addHandler(CancelUploadEvent.TYPE, new CancelUploadEventHandler() {
@Override @Override
public void onCancelUpload(final CancelUploadEvent deleteTimerEvent) { public void onCancelUpload(final CancelUploadEvent deleteTimerEvent) {
@ -175,11 +175,13 @@ public class UploaderMonitor {
Timer tmn = mapTimer.get(workspaceUploader.getClientUploadKey()); Timer tmn = mapTimer.get(workspaceUploader.getClientUploadKey());
if(tmn!=null && tmn.isRunning()){ if(tmn!=null && tmn.isRunning()){
if(result.getUploadStatus().equals(UPLOAD_STATUS.COMPLETED)){ if(result.getUploadStatus().equals(UPLOAD_STATUS.COMPLETED)){
GWT.log("Upload Completed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName());
mapTimer.remove(tmn); mapTimer.remove(tmn);
notifyUploadCompleted(result.getFile().getParentId(), result.getFile().getItemId()); notifyUploadCompleted(result.getFile().getParentId(), result.getFile().getItemId());
// new DialogResult(null, "Upload Completed!!", result.getStatusDescription()).center(); // new DialogResult(null, "Upload Completed!!", result.getStatusDescription()).center();
cancel(); cancel();
}else if(result.getUploadStatus().equals(UPLOAD_STATUS.FAILED)){ }else if(result.getUploadStatus().equals(UPLOAD_STATUS.FAILED)){
GWT.log("Upload Failed "+result.getFile().getItemId() +" name: "+result.getFile().getFileName());
mapTimer.remove(tmn); mapTimer.remove(tmn);
notifyUploadError(result.getFile().getParentId(), null, null); notifyUploadError(result.getFile().getParentId(), null, null);
// new DialogResult(null, "Upload Failed!!", result.getStatusDescription()).center(); // new DialogResult(null, "Upload Failed!!", result.getStatusDescription()).center();
@ -216,9 +218,11 @@ public class UploaderMonitor {
* @param itemId the item id * @param itemId the item id
*/ */
private void notifyUploadCompleted(String parentId, String itemId){ private void notifyUploadCompleted(String parentId, String itemId){
for (WorskpaceUploadNotificationListener listener : listenersUpload) { GWT.log("notifyUploadCompleted in monitor");
listener.onUploadCompleted(parentId, itemId); WorkspaceExplorerListenerController.getEventBus().fireEvent(new NotifyUploadEvent(UPLOAD_EVENT_TYPE.COMPLETED, parentId, itemId));
} // for (WorskpaceUploadNotificationListener listener : listenersUpload) {
// listener.onUploadCompleted(parentId, itemId);
// }
} }
/** /**
@ -228,9 +232,7 @@ public class UploaderMonitor {
* @param itemId the item id * @param itemId the item id
*/ */
private void notifyUploadAborted(String parentId, String itemId){ private void notifyUploadAborted(String parentId, String itemId){
for (WorskpaceUploadNotificationListener listener : listenersUpload) { WorkspaceExplorerListenerController.getEventBus().fireEvent(new NotifyUploadEvent(UPLOAD_EVENT_TYPE.ABORTED, parentId, itemId));
listener.onUploadAborted(parentId, itemId);
}
} }
/** /**
@ -241,32 +243,6 @@ public class UploaderMonitor {
* @param t the t * @param t the t
*/ */
private void notifyUploadError(String parentId, String itemId, Throwable t){ private void notifyUploadError(String parentId, String itemId, Throwable t){
for (WorskpaceUploadNotificationListener listener : listenersUpload) { WorkspaceExplorerListenerController.getEventBus().fireEvent(new NotifyUploadEvent(UPLOAD_EVENT_TYPE.FAILED, parentId, itemId, t));
listener.onError(parentId, itemId, t);
}
}
/**
* Adds the workspace upload listener.
*
* @param handler the handler
*/
public void addWorkspaceUploadListener(WorskpaceUploadNotificationListener handler) {
this.listenersUpload.add(handler);
}
/**
* Removes the workspace upload listener.
*
* @param handler the handler
*/
public void removeWorkspaceUploadListener(WorskpaceUploadNotificationListener handler) {
try {
this.listenersUpload.remove(handler);
} catch (Exception e) {
// SILENT
}
} }
} }

View File

@ -405,7 +405,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet
Long size = getContentLength(request); Long size = getContentLength(request);
logger.debug("size: " + size + " bytes"); logger.debug("size: " + size + " bytes");
String contentType = null; //It's set into HL
/* /*
String contentType = uploadItem.getContentType(); String contentType = uploadItem.getContentType();
@ -435,9 +435,11 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet
saveWorkspaceUploaderInSession(workspaceUploader, request.getSession()); saveWorkspaceUploaderInSession(workspaceUploader, request.getSession());
String contentType = null; //It's set into HL
if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD
boolean isZipFile = MimeTypeUtil.isZipContentType(contentType); 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
@ -463,7 +465,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet
}else {//IS ARCHIVE UPLOAD }else {//IS ARCHIVE UPLOAD
if (MimeTypeUtil.isZipContentType(contentType)){ if (MimeTypeUtil.isZipContentType(uploadItem.getContentType())){ //UNZIP??
logger.debug("Unziping content"); logger.debug("Unziping content");
workspaceUploader = WorkspaceUploaderMng.uploadArchive(workspaceUploader, request.getSession(), itemName, inputStream, destinationFolder, size); workspaceUploader = WorkspaceUploaderMng.uploadArchive(workspaceUploader, request.getSession(), itemName, inputStream, destinationFolder, size);