diff --git a/.classpath b/.classpath
index 3e75f39..929323c 100644
--- a/.classpath
+++ b/.classpath
@@ -24,6 +24,7 @@
+
diff --git a/pom.xml b/pom.xml
index 189fdda..0339c1d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
org.gcube.portlets.widgets
session-checker
- jar
+ war
0.1.0-SNAPSHOT
gCube Session Checker Widget
diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java
index 9e9068e..625eb77 100644
--- a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java
+++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/CheckSession.java
@@ -1,14 +1,28 @@
package org.gcube.portlets.widgets.sessionchecker.client;
+import org.gcube.portlets.user.gcubewidgets.client.popup.GCubeDialog;
+import org.gcube.portlets.widgets.sessionchecker.client.bundle.CheckSessionBundle;
+import org.gcube.portlets.widgets.sessionchecker.client.elements.Div;
import org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Style.Display;
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.HasAlignment;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.VerticalPanel;
public class CheckSession {
- private final int MILLI_SECONDS = 60 * 1000; //60 seconds
+ private final int MILLI_SECONDS = 45 * 1000; //45 seconds
+
+ //for css and images
+ private CheckSessionBundle images = GWT.create(CheckSessionBundle.class);
+
+ static {
+ CheckSessionBundle.INSTANCE.css().ensureInjected();
+ }
/**
* Create a remote service proxy to talk to the server-side Greeting service.
*/
@@ -18,15 +32,23 @@ public class CheckSession {
private String scope;
private Timer t;
- private static CheckSession singleton;
+ //needed to mask the page when session id up!
+ private Div maskDiv = new Div();
+ private static CheckSession singleton;
+
public static CheckSession getInstance() {
if (singleton == null)
singleton = new CheckSession();
return singleton;
}
-
- private CheckSession() {
+
+ private CheckSession() {
+
+ addMaskDiv2DOM();
+ maskDiv.setStyleName("div-mask");
+
+ //polling timer
t = new Timer() {
@Override
public void run() {
@@ -34,15 +56,22 @@ public class CheckSession {
@Override
public void onSuccess(SessionInfoBean result) {
if (result != null) {
+
username = result.getUsername();
scope = result.getScope();
boolean userValid = ( username != null) ? true : false;
boolean scopeValid = (scope != null) ? true : false;
-
+
if (! (userValid && scopeValid) ) {
- Window.alert("Session Expired");
+ mask(true);
+ stopPolling();
+ showLogoutDialog();
}
- }
+ }
+ else {
+ GWT.log("result null");
+ stopPolling();
+ }
}
@Override
public void onFailure(Throwable caught) { }
@@ -50,7 +79,43 @@ public class CheckSession {
}
};
}
+
+ private void addMaskDiv2DOM() {
+ RootPanel.get().insert(maskDiv, 0);
+ }
+ /**
+ * set visible the masking div setting/unsetting css display property
+ * @param mask
+ */
+ private void mask(boolean mask) {
+ GWT.log("Masking");
+ if (mask)
+ maskDiv.getElement().getStyle().setDisplay(Display.BLOCK);
+ else
+ maskDiv.getElement().getStyle().setDisplay(Display.NONE);
+ }
+ private void showLogoutDialog() {
+ GCubeDialog dlg = new GCubeDialog();
+ dlg.setText("Your Session Expired!");
+
+ VerticalPanel topPanel = new VerticalPanel();
+ topPanel.setPixelSize(420, 290);
+
+ topPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER);
+
+ HTML toShow = new HTML(""
+ + "
"
+ + "
"
+ + "Please
reload this page.
");
+
+
+ topPanel.add(toShow);
+ dlg.add(topPanel);
+ dlg.center();
+ dlg.show();
+ }
+
public String getUsername() {
return username;
diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java
index 9394d3a..b818bbf 100644
--- a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java
+++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/SessionChecker.java
@@ -8,5 +8,6 @@ import com.google.gwt.core.client.EntryPoint;
public class SessionChecker implements EntryPoint {
public void onModuleLoad() {
+ CheckSession.getInstance().startPolling();
}
}
diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSession.css b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSession.css
new file mode 100644
index 0000000..998217f
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSession.css
@@ -0,0 +1,11 @@
+@external div-mask;
+
+.div-mask {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0,0,0,.15);
+ top: 0;
+ left: 0;
+ display: none;
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSessionBundle.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSessionBundle.java
new file mode 100644
index 0000000..86603b8
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSessionBundle.java
@@ -0,0 +1,17 @@
+package org.gcube.portlets.widgets.sessionchecker.client.bundle;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.resources.client.ImageResource;
+
+public interface CheckSessionBundle extends ClientBundle {
+
+ public static final CheckSessionBundle INSTANCE = GWT.create(CheckSessionBundle.class);
+
+ @Source("CheckSession.css")
+ public CssResource css();
+
+ @Source("session_expired.jpg")
+ ImageResource expired();
+}
diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/session_expired.jpg b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/session_expired.jpg
new file mode 100644
index 0000000..5b66306
Binary files /dev/null and b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/session_expired.jpg differ
diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/elements/Div.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/elements/Div.java
new file mode 100644
index 0000000..04eab23
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/elements/Div.java
@@ -0,0 +1,27 @@
+package org.gcube.portlets.widgets.sessionchecker.client.elements;
+
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HasText;
+
+/**
+ *
+ * @author Massimiliano Assante, ISTI-CNR
+ * @version 0.1 Sep 2012
+ *
+ */
+public class Div extends HTML implements HasText {
+
+ public Div() {
+ super(DOM.createElement("div"));
+ }
+
+ public Div(String text) {
+ this();
+ setText(text);
+ }
+
+ public void setAttribute(String name, String value) {
+ super.getElement().setAttribute(name, value);
+ }
+}
diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java
index 12e555b..37a787e 100644
--- a/src/main/java/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java
+++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/server/SessionCheckerServiceImpl.java
@@ -24,11 +24,8 @@ public class SessionCheckerServiceImpl extends RemoteServiceServlet implements
* @return .
*/
private ASLSession getASLSession() {
- System.out.println("\n\n\n*****+ ASL checksession");
String sessionID = this.getThreadLocalRequest().getSession().getId();
String user = (String) this.getThreadLocalRequest().getSession().getAttribute(ScopeHelper.USERNAME_ATTRIBUTE);
-
- System.out.println("ASL checksession ID = " +sessionID);
return SessionManager.getInstance().getASLSession(sessionID, user);
}