diff --git a/pom.xml b/pom.xml
index ea90c2e..105cff1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
org.gcube.portlets.widgets
workspace-uploader
jar
- 1.4.0-SNAPSHOT
+ 1.5.0-SNAPSHOT
Workspace Uploader Widget
Workspace Uploader Widget allows your application to upload file/s in the gCube Workspace
@@ -80,7 +80,7 @@
gcube-widgets
provided
-
+
org.gcube.resources.discovery
@@ -100,7 +100,7 @@
usermanagement-core
provided
-
+
com.liferay.portal
@@ -126,6 +126,12 @@
provided
+
+ org.gcube.portlets.widgets
+ session-checker
+ [0.0.1-SNAPSHOT, 1.0.0-SNAPSHOT)
+
+
org.gcube.common
@@ -183,7 +189,7 @@
social-networking-library
provided
-
+
org.gcube.applicationsupportlayer
aslsocial
diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/WorkspaceUploader.gwt.xml b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/WorkspaceUploader.gwt.xml
index c352f6b..9d5e6c7 100644
--- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/WorkspaceUploader.gwt.xml
+++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/WorkspaceUploader.gwt.xml
@@ -4,12 +4,13 @@
-
+
+
-
+
diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/WorkspaceUploader.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/WorkspaceUploader.java
index fc1f7d2..6bcb3ed 100644
--- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/WorkspaceUploader.java
+++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/WorkspaceUploader.java
@@ -1,112 +1,112 @@
-//package org.gcube.portlets.widgets.workspaceuploader.client;
-//
-//import org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE;
-//import org.gcube.portlets.widgets.workspaceuploader.client.uploader.MultipleDilaogUpload;
-//import org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload;
-//
-//import com.google.gwt.core.client.EntryPoint;
-//import com.google.gwt.core.client.ScriptInjector;
-//import com.google.gwt.core.shared.GWT;
-//import com.google.gwt.event.dom.client.ClickEvent;
-//import com.google.gwt.event.dom.client.ClickHandler;
-//import com.google.gwt.user.client.Window;
-//import com.google.gwt.user.client.rpc.AsyncCallback;
-//import com.google.gwt.user.client.ui.Button;
-//import com.google.gwt.user.client.ui.RootPanel;
-//
-///**
-// * Entry point classes define onModuleLoad()
.
-// */
-//public class WorkspaceUploader implements EntryPoint {
-//
-// String headerTitle = "Upload in your Workspace";
-// String parentId;
-// private Button buttonUploader;
-// private Button buttonDirect;
-//
-// public void onModuleLoad() {
-//
-// boolean jQueryLoaded = isjQueryLoaded();
-// GWT.log("jQueryLoaded: "+jQueryLoaded);
-//
-// GWT.log("Injected : http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js");
-//
-// if (!jQueryLoaded) {
+package org.gcube.portlets.widgets.workspaceuploader.client;
+
+import org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE;
+import org.gcube.portlets.widgets.workspaceuploader.client.uploader.MultipleDilaogUpload;
+import org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload;
+
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.core.client.ScriptInjector;
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.RootPanel;
+
+/**
+ * Entry point classes define onModuleLoad()
.
+ */
+public class WorkspaceUploader implements EntryPoint {
+
+ String headerTitle = "Upload in your Workspace";
+ String parentId;
+ private Button buttonUploader;
+ private Button buttonDirect;
+
+ public void onModuleLoad() {
+
+ boolean jQueryLoaded = isjQueryLoaded();
+ GWT.log("jQueryLoaded: "+jQueryLoaded);
+
+ GWT.log("Injected : http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js");
+
+ if (!jQueryLoaded) {
+ ScriptInjector.fromUrl("http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js")
+ .setWindow(ScriptInjector.TOP_WINDOW)
+ .inject();
+ }
+
// ScriptInjector.fromUrl("http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js")
// .setWindow(ScriptInjector.TOP_WINDOW)
// .inject();
-// }
-//
-//// ScriptInjector.fromUrl("http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js")
-//// .setWindow(ScriptInjector.TOP_WINDOW)
-//// .inject();
-//
-// buttonUploader = new Button("Upload in your Workspace");
-// buttonDirect = new Button("Upload (Stream) in your Workspace");
-// enableUpload(false);
-//
-// WorkspaceUploaderServiceAsync.Util.getInstance().getWorkspaceId(
-// new AsyncCallback() {
-//
-// @Override
-// public void onSuccess(String result) {
-//
-// if (result != null) {
-// parentId = result;
-// enableUpload(true);
-// } else {
-// Window.alert("An error occurred on recovering workspace, try again later");
-// enableUpload(true);
-// }
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// Window.alert("An error occurred on recovering workspace, try again later");
-// enableUpload(true);
-// }
-// });
-//
-// buttonDirect.addClickHandler(new ClickHandler() {
-//
-// @Override
-// public void onClick(ClickEvent event) {
+
+ buttonUploader = new Button("Upload in your Workspace");
+ buttonDirect = new Button("Upload (Stream) in your Workspace");
+ enableUpload(false);
+
+ WorkspaceUploaderServiceAsync.Util.getInstance().getWorkspaceId(
+ new AsyncCallback() {
+
+ @Override
+ public void onSuccess(String result) {
+
+ if (result != null) {
+ parentId = result;
+ enableUpload(true);
+ } else {
+ Window.alert("An error occurred on recovering workspace, try again later");
+ enableUpload(true);
+ }
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ Window.alert("An error occurred on recovering workspace, try again later");
+ enableUpload(true);
+ }
+ });
+
+ buttonDirect.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ MultipleDilaogUpload uploadStream = new MultipleDilaogUpload(headerTitle, parentId, org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE.File);
+// uploadStream.initFileReader();
+ uploadStream.center();
+
+ }
+ });
+
+ final MultipleDNDUpload dnd = new MultipleDNDUpload();
+
+ buttonDirect.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
// MultipleDilaogUpload uploadStream = new MultipleDilaogUpload(headerTitle, parentId, org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE.File);
// uploadStream.initFileReader();
// uploadStream.center();
-//
-// }
-// });
-//
-// final MultipleDNDUpload dnd = new MultipleDNDUpload();
-//
-// buttonDirect.addClickHandler(new ClickHandler() {
-//
-// @Override
-// public void onClick(ClickEvent event) {
-//// MultipleDilaogUpload uploadStream = new MultipleDilaogUpload(headerTitle, parentId, org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE.File);
-//// uploadStream.initFileReader();
-//// uploadStream.center();
-// dnd.setParameters(parentId, UPLOAD_TYPE.File);
-//
-// }
-// });
-//
-// RootPanel.get("workspace-uploader").add(dnd);
-// RootPanel.get("workspace-uploader").add(buttonDirect);
-// }
-//
-// private void enableUpload(boolean bool){
-// buttonUploader.setEnabled(bool);
-// buttonDirect.setEnabled(bool);
-// }
-//
-// /**
-// * Checks if is j query loaded.
-// *
-// * @return true, if is j query loaded
-// */
-// private native boolean isjQueryLoaded() /*-{
-// return (typeof $wnd['jQuery'] !== 'undefined');
-// }-*/;
-//}
+ dnd.setParameters(parentId, UPLOAD_TYPE.File);
+
+ }
+ });
+
+ RootPanel.get("workspace-uploader").add(dnd);
+ RootPanel.get("workspace-uploader").add(buttonDirect);
+ }
+
+ private void enableUpload(boolean bool){
+ buttonUploader.setEnabled(bool);
+ buttonDirect.setEnabled(bool);
+ }
+
+ /**
+ * Checks if is j query loaded.
+ *
+ * @return true, if is j query loaded
+ */
+ private native boolean isjQueryLoaded() /*-{
+ return (typeof $wnd['jQuery'] !== 'undefined');
+ }-*/;
+}
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 eebf674..c1c94e9 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
@@ -4,6 +4,7 @@ package org.gcube.portlets.widgets.workspaceuploader.client.uploader;
import java.util.ArrayList;
import java.util.List;
+import org.gcube.portlets.widgets.sessionchecker.client.CheckSession;
import org.gcube.portlets.widgets.workspaceuploader.client.ClosableDialog;
import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader;
import org.gcube.portlets.widgets.workspaceuploader.client.DialogResult;
@@ -216,6 +217,12 @@ public class DialogUpload extends ClosableDialog implements HasWorskpaceUploadNo
removeLoading();
break;
}
+ case SESSION_EXPIRED:{
+ GWT.log("Upload aborted due to session expired: "+ resultMessage.getMessage());
+ CheckSession.showLogoutDialog();
+ removeLoading();
+ break;
+ }
case OK: {
// removeLoading();
// UploaderMonitor.getInstance().pollWorkspaceUploaderId(resultMessage.getMessage());
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 fc16a8b..13c19ef 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
@@ -6,6 +6,7 @@ package org.gcube.portlets.widgets.workspaceuploader.client.uploader;
import java.util.ArrayList;
import java.util.Arrays;
+import org.gcube.portlets.widgets.sessionchecker.client.CheckSession;
import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader;
import org.gcube.portlets.widgets.workspaceuploader.client.DialogResult;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploaderServiceAsync;
@@ -161,13 +162,19 @@ public class MultipleDilaogUpload extends DialogUpload {
GWT.log("Error during upload " + resultMessage.getMessage());
break;
case WARN: {
- GWT.log("Upload completed with warnings "
- + resultMessage.getMessage());
+ GWT.log("Upload completed with warnings "+ resultMessage.getMessage());
+ removeLoading();
+ break;
+ }
+ case SESSION_EXPIRED:{
+ GWT.log("Upload aborted due to session expired: "+ resultMessage.getMessage());
+ CheckSession.showLogoutDialog();
removeLoading();
break;
}
case OK: {
}
+
}
}
diff --git a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/dragdrop/MultipleDNDUpload.java b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/dragdrop/MultipleDNDUpload.java
index bb3f35c..1c7e443 100644
--- a/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/dragdrop/MultipleDNDUpload.java
+++ b/src/main/java/org/gcube/portlets/widgets/workspaceuploader/client/uploader/dragdrop/MultipleDNDUpload.java
@@ -6,6 +6,7 @@ package org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop;
import java.util.HashMap;
import java.util.Map;
+import org.gcube.portlets.widgets.sessionchecker.client.CheckSession;
import org.gcube.portlets.widgets.workspaceuploader.client.ConstantsWorkspaceUploader;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.HasWorskpaceUploadNotificationListener;
import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener;
@@ -543,7 +544,7 @@ public class MultipleDNDUpload extends LayoutPanel implements HasWorskpaceUpload
} // stops the browser from redirecting off to the image.
var uploadUUID = generateUUID();
- console.log("uploadKey: " + uploadUUID);
+// console.log("uploadKey: " + uploadUUID);
//NEW WORKSPACE FIELDS
instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::newWorkspaceFieldsManagerForUUID(Ljava/lang/String;)(uploadUUID);
@@ -607,9 +608,29 @@ public class MultipleDNDUpload extends LayoutPanel implements HasWorskpaceUpload
var jsonKeys = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::currentJsonKey;
// var jsonKeys = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::getJsonKeyForFiles(Ljava/lang/String;)
// var jsonKeysMap = instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::jsonKeys;
- console.log("jsonKeys: " + jsonKeys);
+// console.log("jsonKeys: " + jsonKeys);
var xhr = new XMLHttpRequest();
+
+ xhr.onreadystatechange=function() {
+ if (xhr.readyState === 4){ //if complete
+ if(xhr.status === 200){ //check if "OK" (200)
+// console.log("status is OK");
+ //success
+ } else {
+ //otherwise, some other code was returned
+
+ if(xhr.status === 401){ //ASL session is expired
+// console.log("status is 401");
+ instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::showLogoutDialog()();
+ }else{
+ console.log(xhr.status);
+ instance.@org.gcube.portlets.widgets.workspaceuploader.client.uploader.dragdrop.MultipleDNDUpload::showAlert(Ljava/lang/String;)("Sorry, an error occurred during file/s upload. Try again");
+ }
+ }
+ }
+ }
+
xhr.open(opts.type, opts.url, true);
var formdata = new FormData();
@@ -738,6 +759,14 @@ public class MultipleDNDUpload extends LayoutPanel implements HasWorskpaceUpload
controller.addWorkspaceUploadListener(handler);
}
+
+ /**
+ * Show logout dialog.
+ */
+ private void showLogoutDialog(){
+ CheckSession.showLogoutDialog();
+ }
+
/*
* (non-Javadoc)
*
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 f4c989d..0a47ef0 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
@@ -169,6 +169,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet
if (!ServletFileUpload.isMultipartContent(request)) {
logger.error("ERROR: multipart request not found");
sendError(response, "ERROR: multipart request not found");
+ return;
}
try {
@@ -177,6 +178,14 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet
HttpSession session = request.getSession();
logger.info("UPLOAD-SERVLET session: "+session);
logger.debug("UPLOAD-SERVLET (" + session.getId() + ") new upload request received.");
+
+ if(WsUtil.isSessionExpired(session)){
+ logger.error("SESSION_EXPIRED: session is expired");
+ sendSessionExpired(response, "SESSION_EXPIRED: session is expired");
+ return;
+// sendError(response, "SESSION_EXPIRED: session is expired");
+ }
+
String destinationId = null;
String uploadType = null;
boolean isOverwrite = false;
@@ -767,6 +776,7 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet
/**
* Creates the template.
*
+ * @param request the request
* @param workspaceUploader the workspace uploader
* @param httpSession the http session
* @param wa the wa
@@ -851,6 +861,32 @@ public class WorkspaceUploadServletStream extends HttpServlet implements Servlet
}
}
+
+
+ /**
+ * Send session expired.
+ *
+ * @param response the response
+ * @param message the message
+ * @throws IOException Signals that an I/O exception has occurred.
+ */
+ protected void sendSessionExpired(HttpServletResponse response, String message) throws IOException{
+ try {
+ response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+ HandlerResultMessage resultMessage = HandlerResultMessage.sessionExpiredResult(message);
+ response.getWriter().write(resultMessage.toString());
+ //5.6 Closure of Response Object:
+ //When a response is closed, the container must immediately flush all remaining content in the response buffer to the client
+// response.flushBuffer();
+ } catch (IOException e){
+ logger.warn("IOException class name: "+e.getClass().getSimpleName());
+ if (e.getClass().getSimpleName().equals("ClientAbortException"))
+ logger.warn("Skipping ClientAbortException: "+e.getMessage());
+ else
+ throw e; //Sending Exceptions
+ }
+ }
+
/**
* Send message.
*
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 f71ed1b..b1a9c5e 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
@@ -35,7 +35,7 @@ public class WsUtil {
public static final String NOTIFICATION_PORTLET_CLASS_ID = "org.gcube.portlets.user.workspace.server.GWTWorkspaceServiceImpl";
//IN DEV
public static final String TEST_SCOPE = "/gcube/devsec";
- public static String TEST_USER = "francesco.mangiacrapa";
+ public static String TEST_USER = "test.user";
public static String TEST_USER_FULL_NAME = "Test User";
@@ -78,7 +78,8 @@ public class WsUtil {
user=TEST_USER;
if (!isWithinPortal()) { //DEV MODE
- user = "francesco.mangiacrapa";
+// user = "francesco.mangiacrapa";
+ user=TEST_USER;
TEST_USER_FULL_NAME = "Francesco Mangiacrapa";
}
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 549a4ca..fb9c688 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
@@ -15,6 +15,10 @@ import java.io.Serializable;
public class HandlerResultMessage implements Serializable{
+ /**
+ *
+ */
+ private static final String SEPARATOR = ":";
protected Status status;
protected String message;
@@ -46,12 +50,17 @@ public class HandlerResultMessage implements Serializable{
/**
* If the result is unknown.
*/
- UNKNOWN;
+ UNKNOWN,
+
+ /**
+ * If the session is expired.
+ */
+ SESSION_EXPIRED;
}
/**
- * TO SERIALIZATION
+ * TO SERIALIZATION.
*/
public HandlerResultMessage() {
}
@@ -96,6 +105,17 @@ public class HandlerResultMessage implements Serializable{
return new HandlerResultMessage(Status.WARN, message);
}
+
+ /**
+ * Session expired result.
+ *
+ * @param message the message
+ * @return the handler result message
+ */
+ public static HandlerResultMessage sessionExpiredResult(String message){
+ return new HandlerResultMessage(Status.SESSION_EXPIRED, message);
+ }
+
/**
* Parses the result.
* expected status:message (e.g. OK:Upload aborted)
@@ -158,7 +178,7 @@ public class HandlerResultMessage implements Serializable{
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(status);
- builder.append(":");
+ builder.append(SEPARATOR);
builder.append(message);
return builder.toString();
}