From ae93c863fe433610cbb7d398837ef2d958e0c92d Mon Sep 17 00:00:00 2001 From: Massimiliano Assante Date: Tue, 25 Mar 2014 10:52:42 +0000 Subject: [PATCH] added sending of event on eventBus when session expires git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/widgets/session-checker@93509 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../sessionchecker/client/CheckSession.java | 34 +++++++++++++++++-- .../client/event/SessionTimeoutEvent.java | 31 +++++++++++++++++ .../event/SessionTimoutEventHandler.java | 7 ++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimeoutEvent.java create mode 100644 src/main/java/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimoutEventHandler.java 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 625eb77..13fa7a4 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 @@ -3,10 +3,12 @@ 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.client.event.SessionTimeoutEvent; 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.event.shared.HandlerManager; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HTML; @@ -23,6 +25,10 @@ public class CheckSession { static { CheckSessionBundle.INSTANCE.css().ensureInjected(); } + /** + * the eventbus where to launch the events + */ + private HandlerManager eventBus = null; /** * Create a remote service proxy to talk to the server-side Greeting service. */ @@ -36,13 +42,34 @@ public class CheckSession { private Div maskDiv = new Div(); private static CheckSession singleton; - + /** + * use this method if you want to get an event when session expires + * @param eventBus your GWT webapp instance of {@link HandlerManager} + */ + public static CheckSession getInstance(HandlerManager eventBus) { + if (singleton == null) + singleton = new CheckSession(eventBus); + return singleton; + } + /** + * method with no events launching when session expires + */ public static CheckSession getInstance() { if (singleton == null) singleton = new CheckSession(); return singleton; } - + /** + * use this constructor if you want to get an event when session expires + * @param eventBus GWT webapp instance of {@link HandlerManager} + */ + private CheckSession(HandlerManager eventBus) { + this(); + this.eventBus = eventBus; + } + /** + * constructor with no events launching when session expires + */ private CheckSession() { addMaskDiv2DOM(); @@ -66,6 +93,9 @@ public class CheckSession { mask(true); stopPolling(); showLogoutDialog(); + if (eventBus != null) { + eventBus.fireEvent(new SessionTimeoutEvent(result)); + } } } else { diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimeoutEvent.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimeoutEvent.java new file mode 100644 index 0000000..1a880d1 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimeoutEvent.java @@ -0,0 +1,31 @@ +package org.gcube.portlets.widgets.sessionchecker.client.event; + +import org.gcube.portlets.widgets.sessionchecker.shared.SessionInfoBean; + +import com.google.gwt.event.shared.GwtEvent; + + + +public class SessionTimeoutEvent extends GwtEvent { + public static Type TYPE = new Type(); + + private SessionInfoBean sessionInfo; + + public SessionTimeoutEvent(SessionInfoBean sessionInfo) { + this.sessionInfo = sessionInfo; + } + + public SessionInfoBean getSessionInfo() { + return sessionInfo; + } + + @Override + public Type getAssociatedType() { + return TYPE; + } + + @Override + protected void dispatch(SessionTimoutEventHandler handler) { + handler.onSessionExpiration(this); + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimoutEventHandler.java b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimoutEventHandler.java new file mode 100644 index 0000000..46c0fce --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/sessionchecker/client/event/SessionTimoutEventHandler.java @@ -0,0 +1,7 @@ +package org.gcube.portlets.widgets.sessionchecker.client.event; + +import com.google.gwt.event.shared.EventHandler; + +public interface SessionTimoutEventHandler extends EventHandler { + void onSessionExpiration(SessionTimeoutEvent event); +}