From 4016d716a466338e5eb2620bf388f39b02938b1f Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Mon, 24 Mar 2014 14:04:04 +0000 Subject: [PATCH] READY FOR TESTING git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/widgets/session-checker@93479 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 1 + pom.xml | 2 +- .../sessionchecker/client/CheckSession.java | 81 ++++++++++++++++-- .../sessionchecker/client/SessionChecker.java | 1 + .../client/bundle/CheckSession.css | 11 +++ .../client/bundle/CheckSessionBundle.java | 17 ++++ .../client/bundle/session_expired.jpg | Bin 0 -> 5090 bytes .../sessionchecker/client/elements/Div.java | 27 ++++++ .../server/SessionCheckerServiceImpl.java | 3 - 9 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSession.css create mode 100644 src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/CheckSessionBundle.java create mode 100644 src/main/java/org/gcube/portlets/widgets/sessionchecker/client/bundle/session_expired.jpg create mode 100644 src/main/java/org/gcube/portlets/widgets/sessionchecker/client/elements/Div.java 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 0000000000000000000000000000000000000000..5b6630699031fbbd6acc30908357537d5c70806d GIT binary patch literal 5090 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 LpB=66`tbh&L7jOT literal 0 HcmV?d00001 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); }