You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2009/10/02 14:22:29 UTC

svn commit: r820986 [1/2] - in /james/hupa/trunk: ./ client/src/main/java/org/apache/hupa/client/ client/src/main/java/org/apache/hupa/client/mvp/ server/src/main/java/org/apache/hupa/server/ server/src/main/java/org/apache/hupa/server/guice/ server/sr...

Author: norman
Date: Fri Oct  2 12:22:26 2009
New Revision: 820986

URL: http://svn.apache.org/viewvc?rev=820986&view=rev
Log:
Remove usage of Session and LoginSession (HUPA-32)
Detect server status and reuse server session (HUPA-30)
Support demo mode (HUPA-31)
*** All three patches were contributed by Manuel Carrasco. Thx a bunch:) ***

Added:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCallback.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CheckSessionHandler.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEvent.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEventHandler.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSession.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSessionResult.java
Removed:
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LoginSessionHandler.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/LoginSession.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/Session.java
Modified:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppPresenter.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java
    james/hupa/trunk/pom.xml
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractDeleteMessageHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSessionHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteAllMessagesHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteMessageByUidHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ForwardMessageHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetRawMessageHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LoginUserHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LogoutUserHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/NoopHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/RenameFolderHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ReplyMessageHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/TagMessagesHandler.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/AbstractHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/CreateFolderHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteFolderHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteMessageByUidHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchFoldersHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LoginUserHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LogoutUserHandlerTest.java
    james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/NoopHandlerTest.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/User.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/DeleteAllMessages.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/DeleteFolder.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/DeleteMessage.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/DeleteMessageByUid.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchFolders.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchMessages.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchRecentMessages.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ForwardMessage.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetails.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/LoginUser.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/LogoutUser.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/MoveMessage.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/Noop.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/NoopResult.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/RawMessage.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/RenameFolder.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ReplyMessage.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SendMessage.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java
    james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/TagMessage.java

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCallback.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCallback.java?rev=820986&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCallback.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/HupaCallback.java Fri Oct  2 12:22:26 2009
@@ -0,0 +1,80 @@
+package org.apache.hupa.client;
+
+import net.customware.gwt.dispatch.client.DispatchAsync;
+import net.customware.gwt.presenter.client.EventBus;
+
+import org.apache.hupa.shared.events.LogoutEvent;
+import org.apache.hupa.shared.events.ServerStatusEvent;
+import org.apache.hupa.shared.events.ServerStatusEvent.ServerStatus;
+import org.apache.hupa.shared.rpc.CheckSession;
+import org.apache.hupa.shared.rpc.CheckSessionResult;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.inject.Inject;
+
+public abstract class HupaCallback<T> implements AsyncCallback<T> {
+	
+	private DispatchAsync dispatcher = null;
+	private EventBus eventBus = null;
+	private ServerStatusEvent available = new ServerStatusEvent(ServerStatus.Available); 
+	private ServerStatusEvent unavailable = new ServerStatusEvent(ServerStatus.Unavailable); 
+
+	@Inject
+	public HupaCallback(DispatchAsync dispatcher, EventBus bus) {
+		this.dispatcher = dispatcher;
+		this.eventBus = bus;
+	}
+
+	/**
+	 * If you override this method, remember to call super.onFailure() 
+	 */
+	public void onFailure(final Throwable originalCaught) {
+		// Server's response is invalid due to:
+		// server unaccessible, session error or server exception
+		dispatcher.execute(new CheckSession(), new AsyncCallback<CheckSessionResult>() {
+			public void onFailure(Throwable caught) {
+				// The server is unaccessible
+				eventBus.fireEvent(unavailable);
+				callbackError(originalCaught);
+			}
+			public void onSuccess(CheckSessionResult result) {
+				if (!result.isValid()) {
+					// Server's connection is fine, but the user has not a valid session
+					eventBus.fireEvent(new LogoutEvent(null));
+				} else {
+					// Server's connection is fine, and the user has a valid session
+					// So the original action failed because a server's exception 
+					eventBus.fireEvent(available);
+				}
+				callbackError(originalCaught);
+			}
+		});
+	}
+	
+	/**
+	 * If you override this method, remember to call super.onSuccess() 
+	 */
+	public void onSuccess(T result) {
+		// Server's response is valid,
+		eventBus.fireEvent(available);
+		// Execute the original method
+		callback(result);
+	}
+	
+	/**
+	 * The callback code
+	 * @param result
+	 */
+	public abstract void callback(T result); 
+
+	/**
+	 * The callback code in the case of error
+	 * Override this method, if you need this feature.
+	 *  
+	 * @param result
+	 */
+	public void callbackError(Throwable caught) {
+		GWT.log("Error", caught);
+	}
+}

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppPresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppPresenter.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppPresenter.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppPresenter.java Fri Oct  2 12:22:26 2009
@@ -27,16 +27,19 @@
 import net.customware.gwt.presenter.client.widget.WidgetDisplay;
 import net.customware.gwt.presenter.client.widget.WidgetPresenter;
 
-import org.apache.hupa.client.SessionAsyncCallback;
+import org.apache.hupa.client.HupaCallback;
 import org.apache.hupa.shared.data.User;
 import org.apache.hupa.shared.events.LoginEvent;
 import org.apache.hupa.shared.events.LoginEventHandler;
 import org.apache.hupa.shared.events.LogoutEvent;
 import org.apache.hupa.shared.events.LogoutEventHandler;
+import org.apache.hupa.shared.events.ServerStatusEvent;
+import org.apache.hupa.shared.events.ServerStatusEventHandler;
 import org.apache.hupa.shared.events.SessionExpireEvent;
 import org.apache.hupa.shared.events.SessionExpireEventHandler;
-import org.apache.hupa.shared.rpc.LoginSession;
-import org.apache.hupa.shared.rpc.LoginUserResult;
+import org.apache.hupa.shared.events.ServerStatusEvent.ServerStatus;
+import org.apache.hupa.shared.rpc.CheckSession;
+import org.apache.hupa.shared.rpc.CheckSessionResult;
 import org.apache.hupa.shared.rpc.LogoutUser;
 import org.apache.hupa.shared.rpc.LogoutUserResult;
 import org.apache.hupa.shared.rpc.Noop;
@@ -46,7 +49,6 @@
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.HasClickHandlers;
-import com.google.gwt.user.client.Cookies;
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.Window.ClosingEvent;
@@ -58,19 +60,23 @@
 
 public class AppPresenter extends WidgetPresenter<AppPresenter.Display>{
 
+	private static final int NOOP_INTERVAL = 15000;
+
 	public interface Display extends WidgetDisplay {
 		public HasClickHandlers getLogoutClick();
 		public void showTopNavigation(boolean show);
 		public void setMain(Widget w);
 		public HasText getUserText();
+		public void setServerStatus(ServerStatus status);
 	}
 	
 	private LoginPresenter loginPresenter;
 	private MainPresenter mainPresenter;
-	private Timer noopTimer;
+	private Timer noopTimer = new NoopTimer();
+
 	private DispatchAsync dispatcher;
 	private User user;
-	
+	private ServerStatus serverStatus = ServerStatus.Available;
 
 	@Inject
 	public AppPresenter(Display display, DispatchAsync dispatcher,final EventBus bus, LoginPresenter loginPresenter, MainPresenter mainPresenter) {
@@ -93,7 +99,6 @@
 		loginPresenter.bind();
 		display.showTopNavigation(false);
 		display.setMain(loginPresenter.getDisplay().asWidget());
-
 	}
 
 	@Override
@@ -109,37 +114,17 @@
 			public void onLogin(LoginEvent event) {
 				user = event.getUser();
 				display.getUserText().setText(event.getUser().getName());
-
-				Cookies.setCookie("sessionId", user.getSessionId());
-				noopTimer = new Timer() {
-
-					@Override
-					public void run() {
-						dispatcher.execute(new Noop(user.getSessionId()), new SessionAsyncCallback<NoopResult>(new AsyncCallback<NoopResult>() {
-
-							public void onFailure(Throwable caught) {
-								GWT.log("Error while NOOP", caught);
-							}
-
-							public void onSuccess(NoopResult result) {
-							}
-							
-						}, eventBus, user));
-					}
-					
-				};
-				noopTimer.scheduleRepeating(30000);
+				noopTimer.scheduleRepeating(NOOP_INTERVAL);
 				showMain(user);
 			}
+
 		}));
+		
 		registerHandler(eventBus.addHandler(LogoutEvent.TYPE, new LogoutEventHandler() {
 
 			public void onLogout(LogoutEvent event) {
-				Cookies.removeCookie("sessionId");
 				showLogin();
-				if (noopTimer != null) {
-					noopTimer.cancel();
-				}
+				noopTimer.cancel();
 			}
 			
 		}));
@@ -153,7 +138,11 @@
 		registerHandler(Window.addWindowClosingHandler(new ClosingHandler() {
 
 			public void onWindowClosing(ClosingEvent event) {
-				doLogout();
+				// TODO: When the application is loaded, it checks if there is already a valid session in the server.
+				// Executing here doLogout makes the application remove the user session when 
+			    // the user closes the window or reloads the application.
+				// It is better let the user decide when to logout instead of do it automatically
+				// doLogout();
 			}
 			
 		}));
@@ -164,54 +153,24 @@
 			}
 			
 		}));
-		
-		checkForCookie();
-	}
-	
-	private void doLogout() {
-		if (user != null) {
-			dispatcher.execute(new LogoutUser(user.getSessionId()), new AsyncCallback<LogoutUserResult>() {
-
-				public void onFailure(Throwable caught) {
-					GWT.log("ERROR",caught);
-				}
-
-				public void onSuccess(LogoutUserResult result) {
-					Cookies.removeCookie("sessionId");
-
-					eventBus.fireEvent(new LogoutEvent(result.getUser()));
-				}
+		registerHandler(eventBus.addHandler(ServerStatusEvent.TYPE, new ServerStatusEventHandler() {
 			
-			});
-		}
-	}
-	
-
-	private void checkForCookie() {
-		String sessionId = Cookies.getCookie("sessionId");
-		if (sessionId != null) {
-			dispatcher.execute(new LoginSession(sessionId), new AsyncCallback<LoginUserResult>() {
-
-				public void onFailure(Throwable caught) {
-					// show login and remove cookie
-					Cookies.removeCookie("sessionId");
-					showLogin();
-
+			public void onServerStatusChange(ServerStatusEvent event) {
+				if (event.getStatus() != serverStatus) {
+					GWT.log("Server status has hanged from " + serverStatus + " to" + event.getStatus(), null);
+					serverStatus = event.getStatus();
+					display.setServerStatus(serverStatus);
 				}
+			}
+			
+		}));
 
-				public void onSuccess(LoginUserResult result) {
-					eventBus.fireEvent(new LoginEvent(result.getUser()));
-				}
-				
-			});
-		} else {
-			showLogin();
-		}
+		checkSession();
 	}
+	
 	@Override
 	protected void onPlaceRequest(PlaceRequest request) {
 		// TODO Auto-generated method stub
-		
 	}
 
 	@Override
@@ -229,4 +188,50 @@
 		// TODO Auto-generated method stub
 		
 	}
+
+	private void doLogout() {
+		if (user != null) {
+			dispatcher.execute(new LogoutUser(), new HupaCallback<LogoutUserResult>(dispatcher, eventBus) {
+				public void callback(LogoutUserResult result) {
+					eventBus.fireEvent(new LogoutEvent(result.getUser()));
+				}
+			});
+		}
+	}
+
+	private void checkSession() {
+		dispatcher.execute(new CheckSession(), new AsyncCallback<CheckSessionResult>() {
+			public void onFailure(Throwable caught) {
+				serverStatus = ServerStatus.Unavailable;
+				display.setServerStatus(serverStatus);
+				showLogin();
+			}
+			public void onSuccess(CheckSessionResult result) {
+				serverStatus = ServerStatus.Available;
+				display.setServerStatus(serverStatus);
+				if (result.isValid()) {
+					eventBus.fireEvent(new LoginEvent(result.getUser()));
+				} else {
+					showLogin();
+				}
+			}
+		});
+	}
+	
+	private class NoopTimer extends Timer {
+		boolean running = false;
+		public void run() {
+			if (!running) {
+				running = true;
+				dispatcher.execute(new Noop(), new HupaCallback<NoopResult>(dispatcher, eventBus) {
+					public void callback(NoopResult result) {
+						running = false;
+						// Noop
+						// TODO: put code here to read new events from server (new messages ...)
+					}
+				});
+			}
+		}
+	};
+
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppView.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/AppView.java Fri Oct  2 12:22:26 2009
@@ -20,6 +20,7 @@
 package org.apache.hupa.client.mvp;
 
 import org.apache.hupa.client.HupaConstants;
+import org.apache.hupa.shared.events.ServerStatusEvent.ServerStatus;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.HasClickHandlers;
@@ -29,6 +30,7 @@
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Hyperlink;
 import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.PopupPanel;
 import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
@@ -42,6 +44,27 @@
 	private HTML dummy = new HTML("&nbsp");
 	private Label userName = new Label();
 	private HorizontalPanel loginInfoPanel = new HorizontalPanel();
+	private ServerStatusPanel serverStatusPanel  = new ServerStatusPanel();
+	
+	private class ServerStatusPanel extends PopupPanel {
+		HTML messageLabel = new HTML("");
+		ServerStatusPanel() {
+			add(messageLabel);
+			addStyleName("hupa-server-status");
+			setPopupPosition(400, 1);
+			setAnimationEnabled(true);
+		}
+		// TODO: i18n (take a look to gmail's messages when the server is unacessible)
+		public void setStatus(ServerStatus status) {
+			if (status == ServerStatus.Available) {
+				messageLabel.setHTML("<h2>Server is available now.</h2>");
+				hide();
+			} else {
+				messageLabel.setHTML("<h2>Server unavailable</h2>");
+				show();
+			}
+		}
+	}
 
 	public AppView() {
 		VerticalPanel vPanel = new VerticalPanel();
@@ -138,4 +161,8 @@
 		return userName;
 	}
 
+	public void setServerStatus(ServerStatus status) {
+		serverStatusPanel.setStatus(status);
+	}
+
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java Fri Oct  2 12:22:26 2009
@@ -103,7 +103,7 @@
 	}
 
 	protected void loadTreeItems() {
-		dispatcher.execute(new FetchFolders(user.getSessionId()), new SessionAsyncCallback<FetchFoldersResult>(new DisplayCallback<FetchFoldersResult>(display) {
+		dispatcher.execute(new FetchFolders(), new SessionAsyncCallback<FetchFoldersResult>(new DisplayCallback<FetchFoldersResult>(display) {
 
 			@Override
 			protected void handleFailure(Throwable e) {
@@ -145,7 +145,7 @@
 						IMAPFolder iFolder = new IMAPFolder((String)event.getOldValue());
 						final String newName = (String)event.getNewValue();
 						if (iFolder.getFullName().equalsIgnoreCase(newName) == false) {
-							dispatcher.execute(new RenameFolder(user.getSessionId(), iFolder, newName), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
+							dispatcher.execute(new RenameFolder(iFolder, newName), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
 
 								public void onFailure(Throwable caught) {
 									record.cancelEdit();
@@ -284,7 +284,7 @@
 		registerHandler(display.getDeleteConfirmClick().addClickHandler(new ClickHandler() {
 
 			public void onClick(ClickEvent event) {
-				dispatcher.execute(new DeleteFolder(user.getSessionId(),folder), new AsyncCallback<EmptyResult>() {
+				dispatcher.execute(new DeleteFolder(folder), new AsyncCallback<EmptyResult>() {
 
 					public void onFailure(Throwable caught) {
 						GWT.log("ERROR while deleting", caught);
@@ -308,7 +308,7 @@
 						final IMAPTreeItem item = (IMAPTreeItem)event.getSource();
 						final String newValue = (String) event.getNewValue();
 						if (event.getEventType().equals(EditEvent.EventType.Stop)) {
-							dispatcher.execute(new CreateFolder(user.getSessionId(),new IMAPFolder(newValue.trim())),  new AsyncCallback<EmptyResult>() {
+							dispatcher.execute(new CreateFolder(new IMAPFolder(newValue.trim())),  new AsyncCallback<EmptyResult>() {
 
 								public void onFailure(Throwable caught) {
 									GWT.log("Error while create folder",caught);

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java Fri Oct  2 12:22:26 2009
@@ -126,7 +126,7 @@
 
 			public void onMoveMessageHandler(MoveMessageEvent event) {
 				final Message message = event.getMessage();
-				dispatcher.execute(new MoveMessage(event.getUser().getSessionId(),event.getOldFolder(),event.getNewFolder(),message.getUid()), new SessionAsyncCallback<MoveMessageResult>(new AsyncCallback<MoveMessageResult>() {
+				dispatcher.execute(new MoveMessage(event.getOldFolder(), event.getNewFolder(), message.getUid()), new SessionAsyncCallback<MoveMessageResult>(new AsyncCallback<MoveMessageResult>() {
 
 					public void onFailure(Throwable caught) {
 						GWT.log("ERROR while moving",caught);
@@ -199,7 +199,7 @@
 		registerHandler(display.getConfirmDeleteAllDialogClick().addClickHandler(new ClickHandler() {
 
 			public void onClick(ClickEvent event) {
-				dispatcher.execute(new DeleteAllMessages(user.getSessionId(),folder), new SessionAsyncCallback<DeleteMessageResult>(new AsyncCallback<DeleteMessageResult>() {
+				dispatcher.execute(new DeleteAllMessages(folder), new SessionAsyncCallback<DeleteMessageResult>(new AsyncCallback<DeleteMessageResult>() {
 
 					public void onFailure(Throwable caught) {
 						GWT.log("E=", caught);
@@ -225,7 +225,7 @@
 						selectedMessages.remove(m);
 					}
 				}
-				dispatcher.execute(new SetFlag(user.getSessionId(), folder, IMAPFlag.SEEN, true, uids), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
+				dispatcher.execute(new SetFlag(folder, IMAPFlag.SEEN, true, uids), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
 					public void onFailure(Throwable caught) {
 						GWT.log("ERR=", caught);
 					}
@@ -262,7 +262,7 @@
 					}
 				}
 				
-				dispatcher.execute(new SetFlag(user.getSessionId(), folder, IMAPFlag.SEEN, false, uids), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
+				dispatcher.execute(new SetFlag(folder, IMAPFlag.SEEN, false, uids), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
 					public void onFailure(Throwable caught) {
 						GWT.log("ERR=", caught);
 					}
@@ -312,11 +312,10 @@
 		for (int i = 0; i < selectedMessages.size(); i++) {
 			uids.add(selectedMessages.get(i).getUid());
 		}
-		dispatcher.execute(new DeleteMessageByUid(user.getSessionId(),folder,uids), new SessionAsyncCallback<DeleteMessageResult>(new AsyncCallback<DeleteMessageResult>() {
+		dispatcher.execute(new DeleteMessageByUid(folder,uids), new SessionAsyncCallback<DeleteMessageResult>(new AsyncCallback<DeleteMessageResult>() {
 
 			public void onFailure(Throwable caught) {
 				// TODO Auto-generated method stub
-				
 			}
 
 			public void onSuccess(DeleteMessageResult result) {

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java Fri Oct  2 12:22:26 2009
@@ -374,7 +374,7 @@
 				});
 			}
 			
-			dispatcher.execute(new FetchMessages(user.getSessionId(),folder,request.getStartRow(),request.getNumRows(),searchValue), new AsyncCallback<FetchMessagesResult>() {
+			dispatcher.execute(new FetchMessages(folder, request.getStartRow(), request.getNumRows(),searchValue), new AsyncCallback<FetchMessagesResult>() {
 
 				public void onFailure(Throwable caught) {
 					callback.onFailure(caught);

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java Fri Oct  2 12:22:26 2009
@@ -74,7 +74,7 @@
 		public HasClickHandlers getReplyAllButtonClick();
 		public HasClickHandlers getForwardButtonClick();
 		public HasClickHandlers getBackButtonClick();
-		public void setAttachments(List<MessageAttachment> attachements, String sessionId,  String folder,  long uid);
+		public void setAttachments(List<MessageAttachment> attachements, String folder,  long uid);
 	}
 
 	public static final Place PLACE = new Place("IMAPMessage");
@@ -113,7 +113,7 @@
 			con = Util.toHtml(con);
 		}
 		display.getContent().setHTML(con);
-		display.setAttachments(messageDetails.getMessageAttachments(),user.getSessionId(), folder.getFullName(),message.getUid());
+		display.setAttachments(messageDetails.getMessageAttachments(), folder.getFullName(),message.getUid());
 	}
 	
 	@Override
@@ -128,7 +128,7 @@
 			public void onClick(ClickEvent event) {
 				ArrayList<Long> uidList = new ArrayList<Long>();
 				uidList.add(message.getUid());
-				dispatcher.execute(new DeleteMessageByUid(user.getSessionId(),folder,uidList), new SessionAsyncCallback<DeleteMessageResult>(new AsyncCallback<DeleteMessageResult>() {
+				dispatcher.execute(new DeleteMessageByUid(folder, uidList), new SessionAsyncCallback<DeleteMessageResult>(new AsyncCallback<DeleteMessageResult>() {
 
 					public void onFailure(Throwable caught) {
 						// TODO Auto-generated method stub
@@ -177,7 +177,7 @@
 		registerHandler(display.getShowRawMessageClick().addClickHandler(new ClickHandler() {
 
 			public void onClick(ClickEvent event) {
-				dispatcher.executeWithCache(new RawMessage(user.getSessionId(),folder,message.getUid()), new SessionAsyncCallback<RawMessageResult>(new DisplayCallback<RawMessageResult>(display) {
+				dispatcher.executeWithCache(new RawMessage(folder, message.getUid()), new SessionAsyncCallback<RawMessageResult>(new DisplayCallback<RawMessageResult>(display) {
 
 					@Override
 					protected void handleFailure(Throwable e) {

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java Fri Oct  2 12:22:26 2009
@@ -218,7 +218,7 @@
 	}
 
 	public void setAttachments(List<MessageAttachment> attachements,
-			final String sessionUid, final String folder,
+			final String folder,
 			final long uid) {
 		attachments.clear();
 		if (attachements != null) {
@@ -233,8 +233,7 @@
 	                             .getElement(), "src", GWT.getModuleBaseURL()
 	                             + "downloadAttachmentServlet?attachment_name="
 	                             + a.getName() + "&folder_name=" + folder
-	                               + "&message_uuid="
-	                             + uid + "&sessionId=" + sessionUid);
+	                             + "&message_uuid=" + uid);
 					}
 
 				});

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java Fri Oct  2 12:22:26 2009
@@ -59,7 +59,6 @@
     
     	VerticalPanel vPanel = new VerticalPanel();
         vPanel.setSpacing(5);
-        vPanel.setWidth("100%");
         vPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
         vPanel.setVerticalAlignment(VerticalPanel.ALIGN_MIDDLE);
 
@@ -84,10 +83,8 @@
 
         usernameTextBox.addKeyUpHandler(this);
         usernameTextBox.setFocus(true);
-        usernameTextBox.setWidth("150px");
         
         passwordTextBox.addKeyUpHandler(this);
-        passwordTextBox.setWidth("150px");
 
         formPanel.add(grid);
         formPanel.add(loading);
@@ -105,13 +102,18 @@
         errorLabel.setStyleName("hupa-ErrorLabel");
         formPanel.add(errorLabel);
         
-    	RoundedPanel rPanel = new RoundedPanel(RoundedPanel.ALL,1);
-    	rPanel.setBorder();
-    	rPanel.setWidth("250px");
+        RoundedPanel rPanel = new RoundedPanel(RoundedPanel.ALL,1);
+        rPanel.setBorder();
         rPanel.add(formPanel);
         vPanel.add(rPanel);
         vPanel.add(loading);
         initWidget(vPanel);
+        
+        // TODO: move width to style sheet to be customizable
+        vPanel.setWidth("100%");
+        rPanel.setWidth("400px");
+        usernameTextBox.setWidth("250px");
+        passwordTextBox.setWidth("250px");
     }
 
 

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java Fri Oct  2 12:22:26 2009
@@ -207,7 +207,7 @@
 				} else {
 					decreaseUnseen = false;
 				}
-				cachingDispatcher.executeWithCache(new GetMessageDetails(event.getUser().getSessionId(),event.getFolder(),message.getUid()), new SessionAsyncCallback<GetMessageDetailsResult>(new DisplayCallback<GetMessageDetailsResult>(display) {
+				cachingDispatcher.executeWithCache(new GetMessageDetails(event.getFolder(),message.getUid()), new SessionAsyncCallback<GetMessageDetailsResult>(new DisplayCallback<GetMessageDetailsResult>(display) {
 
 					@Override
 					protected void handleFailure(Throwable e) {

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MessageSendPresenter.java Fri Oct  2 12:22:26 2009
@@ -204,7 +204,7 @@
 					message.setMessageAttachments(aList);
 				
 					if (type.equals(Type.NEW)) {
-						dispatcher.execute(new SendMessage(user.getSessionId(),message), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
+						dispatcher.execute(new SendMessage(message), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
 
 							public void onFailure(Throwable caught) {
 								// TODO Auto-generated method stub
@@ -218,7 +218,7 @@
 							
 						}, eventBus,user));
 					} else if(type.equals(Type.FORWARD)) {
-						dispatcher.execute(new ForwardMessage(user.getSessionId(),message,folder,oldmessage.getUid()), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
+						dispatcher.execute(new ForwardMessage(message, folder, oldmessage.getUid()), new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
 
 							public void onFailure(Throwable caught) {
 								// TODO Auto-generated method stub
@@ -234,7 +234,7 @@
 					} else if(type.equals(Type.REPLY) || type.equals(Type.REPLY_ALL)) {
 					
 						boolean replyAll = type.equals(Type.REPLY_ALL);
-						dispatcher.execute(new ReplyMessage(user.getSessionId(),message,folder,oldmessage.getUid(),replyAll),new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
+						dispatcher.execute(new ReplyMessage(message, folder, oldmessage.getUid(), replyAll),new SessionAsyncCallback<EmptyResult>(new AsyncCallback<EmptyResult>() {
 
 							public void onFailure(Throwable caught) {
 								// TODO Auto-generated method stub

Modified: james/hupa/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/hupa/trunk/pom.xml?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/pom.xml (original)
+++ james/hupa/trunk/pom.xml Fri Oct  2 12:22:26 2009
@@ -133,7 +133,7 @@
 	</pluginRepositories>
 
 	<properties>
-		<gwtVersion>1.7.1</gwtVersion>
+		<gwtVersion>1.7.0</gwtVersion>
 	</properties>
 
 	<build>

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java Fri Oct  2 12:22:26 2009
@@ -39,6 +39,8 @@
 @Singleton
 public class InMemoryIMAPStoreCache implements IMAPStoreCache{
 
+	public static final String DEMO_MODE = "demo-mode";
+	
 	private Properties props = new Properties();
 	private Session session;
 	protected Log logger;
@@ -77,7 +79,7 @@
 	 * (non-Javadoc)
 	 * @see org.apache.hupa.server.IMAPStoreCache#get(java.lang.String, java.lang.String)
 	 */
-	public synchronized IMAPStore get(String username,String password) throws MessagingException {
+	public synchronized IMAPStore get(String username, String password) throws MessagingException {
 		CachedIMAPStore cstore = pool.get(username);
 		if (cstore == null) {
 			logger.debug("No cached store found for user " +username);
@@ -92,9 +94,18 @@
 		}
 		
 		if (cstore.getStore().isConnected() == false) {
-			cstore.getStore().connect(address, port, username,password);
+			// TODO: Full demo-mode able to mock all actions (folders, messages ...) 
+			// setting IMAPServerAddress=demo-mode allows login in the application using
+			// any user and password. It is thought to play the client application without
+			// having any imap/smtp server installed. Very useful while developing and testing. 
+			try {
+				cstore.getStore().connect(address, port, username, password);
+			} catch (MessagingException e) {
+				if (!DEMO_MODE.equals(this.address))
+					throw (e);
+			}
 		}
-		pool.put(username,cstore);
+		pool.put(username, cstore);
 		return cstore.getStore();
 	}
 	

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java Fri Oct  2 12:22:26 2009
@@ -31,6 +31,7 @@
 import org.apache.hupa.server.FileItemRegistry;
 import org.apache.hupa.server.IMAPStoreCache;
 import org.apache.hupa.server.InMemoryIMAPStoreCache;
+import org.apache.hupa.server.handler.CheckSessionHandler;
 import org.apache.hupa.server.handler.CreateFolderHandler;
 import org.apache.hupa.server.handler.DeleteAllMessagesHandler;
 import org.apache.hupa.server.handler.DeleteFolderHandler;
@@ -41,7 +42,6 @@
 import org.apache.hupa.server.handler.ForwardMessageHandler;
 import org.apache.hupa.server.handler.GetMessageDetailsHandler;
 import org.apache.hupa.server.handler.GetRawMessageHandler;
-import org.apache.hupa.server.handler.LoginSessionHandler;
 import org.apache.hupa.server.handler.LoginUserHandler;
 import org.apache.hupa.server.handler.LogoutUserHandler;
 import org.apache.hupa.server.handler.MoveMessageHandler;
@@ -80,6 +80,7 @@
 
 	@Override
 	protected void configureHandlers() {
+		bindHandler(CheckSessionHandler.class);
 		bindHandler(LoginUserHandler.class);
 		bindHandler(FetchFoldersHandler.class);
 		bindHandler(FetchMessagesHandler.class);
@@ -92,7 +93,6 @@
 		bindHandler(ReplyMessageHandler.class);
 		bindHandler(ForwardMessageHandler.class);
 		bindHandler(NoopHandler.class);
-		bindHandler(LoginSessionHandler.class);
 		bindHandler(MoveMessageHandler.class);
 		bindHandler(RenameFolderHandler.class);
 		bindHandler(DeleteFolderHandler.class);
@@ -116,7 +116,10 @@
 			Names.bindProperties(binder(), properties);
 
 		} catch (Exception e) {
-			throw new RuntimeException("Unable to to configure", e);
+			throw new RuntimeException("Unable to to configure hupa server," +
+					"\nmake sure that you have a valid /etc/default/hupa file" +
+					"\nor the web container has been started with the appropriate parameter:" +
+					" -Dhupa.config.file=your_hupa_properties_file", e);
 		}
 	}
 

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractDeleteMessageHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractDeleteMessageHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractDeleteMessageHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractDeleteMessageHandler.java Fri Oct  2 12:22:26 2009
@@ -58,7 +58,7 @@
 	public DeleteMessageResult executeInternal(Action action,
 			ExecutionContext context) throws ActionException {
 		org.apache.hupa.shared.data.IMAPFolder folder = action.getFolder();
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		try {
 			IMAPStore store = cache.get(user);
 			com.sun.mail.imap.IMAPFolder f = (com.sun.mail.imap.IMAPFolder) store

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java Fri Oct  2 12:22:26 2009
@@ -58,7 +58,7 @@
 	@Override
 	protected FetchMessagesResult executeInternal(A action,
 			ExecutionContext context) throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		IMAPFolder folder = action.getFolder();
 		com.sun.mail.imap.IMAPFolder f = null;
 		try {

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSendMessageHandler.java Fri Oct  2 12:22:26 2009
@@ -273,7 +273,7 @@
 			Message message = createMessage(session, action);
 			message = fillBody(message,action);
 			
-			sendMessage(getUser(action.getSessionId()),session, message);
+			sendMessage(getUser(),session, message);
 			
 		
 		} catch (AddressException e) {

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSessionHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSessionHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSessionHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractSessionHandler.java Fri Oct  2 12:22:26 2009
@@ -22,25 +22,25 @@
 
 import javax.servlet.http.HttpSession;
 
+import net.customware.gwt.dispatch.server.ActionHandler;
+import net.customware.gwt.dispatch.server.ExecutionContext;
+import net.customware.gwt.dispatch.shared.Action;
+import net.customware.gwt.dispatch.shared.ActionException;
+import net.customware.gwt.dispatch.shared.Result;
+
 import org.apache.commons.logging.Log;
 import org.apache.hupa.server.IMAPStoreCache;
 import org.apache.hupa.shared.data.User;
 import org.apache.hupa.shared.exception.InvalidSessionException;
-import org.apache.hupa.shared.rpc.Session;
 
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
-import net.customware.gwt.dispatch.server.ActionHandler;
-import net.customware.gwt.dispatch.server.ExecutionContext;
-import net.customware.gwt.dispatch.shared.ActionException;
-import net.customware.gwt.dispatch.shared.Result;
 /**
  * Abstract class which take care of checking if the session is still valid before
  * executing the handler
  * 
  */
-public abstract class AbstractSessionHandler<A extends Session<R>,R extends Result> implements ActionHandler<A, R> {
+public abstract class AbstractSessionHandler<A extends Action<R>,R extends Result> implements ActionHandler<A, R> {
 
 	protected final Provider<HttpSession> sessionProvider;
 	protected final IMAPStoreCache cache;
@@ -57,10 +57,10 @@
 	 * Check if the session is valid, if that is true execute executeInternal method
 	 */
 	public R execute(A action, ExecutionContext context) throws ActionException {
-		if (isValidSession(action.getSessionId())) {
+		if (isValidSession()) {
 			return executeInternal(action, context);
 		} else {
-			throw new InvalidSessionException("Invalid SessionId=" +action.getSessionId());
+			throw new InvalidSessionException("Invalid Session");
 		}
 	}
 	
@@ -84,11 +84,9 @@
 	 * @param sessionId
 	 * @return isValid
 	 */
-	protected boolean isValidSession(String sessionId) {
-		if (sessionProvider.get().getId().equals(sessionId)) {
-			return true;
-		}
-		return false;
+	protected boolean isValidSession() {
+		// TODO: MCM delete or implement this method
+		return true;
 	}
 	
 	/**
@@ -98,10 +96,10 @@
 	 * @return user
 	 * @throws ActionException
 	 */
-	protected User getUser(String sessionId) throws ActionException{
+	protected User getUser() throws ActionException{
 		User user = (User) sessionProvider.get().getAttribute("user");
 		if (user == null) {
-			throw new InvalidSessionException("User not found in session with id " + sessionId);
+			throw new InvalidSessionException("User not found in session with id " + sessionProvider.get().getId());
 		} else {
 			return user;
 		}

Added: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CheckSessionHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CheckSessionHandler.java?rev=820986&view=auto
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CheckSessionHandler.java (added)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CheckSessionHandler.java Fri Oct  2 12:22:26 2009
@@ -0,0 +1,71 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+
+package org.apache.hupa.server.handler;
+
+import javax.servlet.http.HttpSession;
+
+import net.customware.gwt.dispatch.server.ActionHandler;
+import net.customware.gwt.dispatch.server.ExecutionContext;
+import net.customware.gwt.dispatch.shared.ActionException;
+
+import org.apache.commons.logging.Log;
+import org.apache.hupa.shared.data.User;
+import org.apache.hupa.shared.rpc.CheckSession;
+import org.apache.hupa.shared.rpc.CheckSessionResult;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+/**
+ * Handler for asking the server if the session is valid
+ */
+public class CheckSessionHandler implements ActionHandler<CheckSession, CheckSessionResult> {
+	
+	protected final Provider<HttpSession> sessionProvider;
+	protected final Log logger;
+	
+	@Inject
+	public CheckSessionHandler(Log logger, Provider<HttpSession> provider) {
+		this.sessionProvider = provider;
+		this.logger = logger;
+	}
+
+	public CheckSessionResult execute(CheckSession arg0, ExecutionContext arg1) throws ActionException {
+		CheckSessionResult ret = new CheckSessionResult();
+		try {
+			User user = (User) sessionProvider.get().getAttribute("user");
+			if (user != null && user.getAuthenticated())
+				ret.setUser(user);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return ret;
+	}
+
+	public Class<CheckSession> getActionType() {
+		return CheckSession.class;
+	}
+
+	public void rollback(CheckSession arg0, CheckSessionResult arg1, ExecutionContext arg2) throws ActionException {
+	}
+
+
+}

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/CreateFolderHandler.java Fri Oct  2 12:22:26 2009
@@ -52,7 +52,7 @@
 	@Override
 	protected EmptyResult executeInternal(CreateFolder action,
 			ExecutionContext context) throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		IMAPFolder folder = action.getFolder();
 		
 		try {

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteAllMessagesHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteAllMessagesHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteAllMessagesHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteAllMessagesHandler.java Fri Oct  2 12:22:26 2009
@@ -50,7 +50,7 @@
 	 */
 	protected Message[] getMessagesToDelete(DeleteAllMessages action)
 			throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		try {
 			logger.info("Delete all messages in folder " + action.getFolder() + " for user " + user);
 			IMAPStore store =cache.get(user);

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java Fri Oct  2 12:22:26 2009
@@ -52,7 +52,7 @@
 	@Override
 	protected EmptyResult executeInternal(DeleteFolder action,
 			ExecutionContext context) throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		IMAPFolder folder = action.getFolder();
 		try {
 			IMAPStore store = cache.get(user);

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteMessageByUidHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteMessageByUidHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteMessageByUidHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/DeleteMessageByUidHandler.java Fri Oct  2 12:22:26 2009
@@ -65,7 +65,7 @@
 			throws ActionException {
 		IMAPFolder folder = action.getFolder();
 		ArrayList<Long> uids = action.getMessageUids();
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 
 		logger.info("Deleting messages with uids " + action.getMessageUids()
 				+ " for user " + user + " in folder " + action.getFolder());

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java Fri Oct  2 12:22:26 2009
@@ -57,7 +57,7 @@
 	 */
 	public FetchFoldersResult executeInternal(FetchFolders action, ExecutionContext arg1)
 	throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		ArrayList<IMAPFolder> fList = new ArrayList<IMAPFolder>();
 		try {
 			// get the store for the user

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ForwardMessageHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ForwardMessageHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ForwardMessageHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ForwardMessageHandler.java Fri Oct  2 12:22:26 2009
@@ -98,7 +98,7 @@
 		Multipart multipart = new MimeMultipart();
 		multipart.addBodyPart(messageBodyPart);
 		
-		IMAPStore store = cache.get(getUser(action.getSessionId()));
+		IMAPStore store = cache.get(getUser());
 		
 		IMAPFolder folder = (IMAPFolder) store.getFolder(action.getFolder().getFullName());
 		if (folder.isOpen() == false) {

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java Fri Oct  2 12:22:26 2009
@@ -68,8 +68,7 @@
 	 */
 	public GetMessageDetailsResult executeInternal(GetMessageDetails action,
 			ExecutionContext arg1) throws ActionException {
-		return new GetMessageDetailsResult(exposeMessage(getUser(action
-				.getSessionId()), action.getFolder(), action.getUid()));
+		return new GetMessageDetailsResult(exposeMessage(getUser(), action.getFolder(), action.getUid()));
 	}
 
 	/*

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetRawMessageHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetRawMessageHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetRawMessageHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetRawMessageHandler.java Fri Oct  2 12:22:26 2009
@@ -50,7 +50,7 @@
 	@Override
 	protected RawMessageResult executeInternal(RawMessage action,
 			ExecutionContext context) throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		long uid = action.getUid();
 		org.apache.hupa.shared.data.IMAPFolder folder = action.getFolder();
 		try {

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LoginUserHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LoginUserHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LoginUserHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LoginUserHandler.java Fri Oct  2 12:22:26 2009
@@ -77,7 +77,6 @@
 			user.setSettings(settingsProvider.get());
 			// store the session id for later usage
 			HttpSession session = sessionProvider.get();
-			user.setSessionId(session.getId());
 			session.setAttribute("user", user);
 			return new LoginUserResult(user);
 

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LogoutUserHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LogoutUserHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LogoutUserHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/LogoutUserHandler.java Fri Oct  2 12:22:26 2009
@@ -53,7 +53,7 @@
 	 */
 	public LogoutUserResult executeInternal(LogoutUser action, ExecutionContext arg1)
 			throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		user.setAuthenticated(false);
 		
 		// delete cached store

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java Fri Oct  2 12:22:26 2009
@@ -57,7 +57,7 @@
 	 */
 	protected MoveMessageResult executeInternal(MoveMessage action,
 			ExecutionContext context) throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		try {
 			IMAPStore store = cache.get(user);
 			IMAPFolder folder = (IMAPFolder)store.getFolder(action.getOldFolder().getFullName());

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/NoopHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/NoopHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/NoopHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/NoopHandler.java Fri Oct  2 12:22:26 2009
@@ -26,11 +26,13 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.hupa.server.IMAPStoreCache;
+import org.apache.hupa.server.InMemoryIMAPStoreCache;
 import org.apache.hupa.shared.rpc.Noop;
 import org.apache.hupa.shared.rpc.NoopResult;
 
 import com.google.inject.Inject;
 import com.google.inject.Provider;
+import com.sun.mail.imap.IMAPStore;
 
 /**
  * Handle Noops
@@ -41,7 +43,7 @@
 
 
 	@Inject
-	public NoopHandler(IMAPStoreCache cache, Log logger,Provider<HttpSession> provider) {
+	public NoopHandler(IMAPStoreCache cache, Log logger, Provider<HttpSession> provider) {
 		super(cache,logger,provider);
 	}
 	
@@ -52,14 +54,16 @@
 	public NoopResult executeInternal(Noop action, ExecutionContext context)
 			throws ActionException {
 		try {
-			// just send a noop to keep the connection alive
-			cache.get(getUser(action.getSessionId())).idle();
+			IMAPStore store = cache.get(getUser());
+			if (store.getURLName() != null &&
+				!InMemoryIMAPStoreCache.DEMO_MODE.equals(store.getURLName().getHost()) ) {
+				// just send a noop to keep the connection alive
+				store.idle();
+			}
 			return new NoopResult();
 		} catch (Exception e) {
-			logger.error("Error while sending NOOP",e);
-			throw new ActionException("Unable to send NOOP");
+			throw new ActionException("Unable to send NOOP " + e.getMessage());
 		}
-		
 	}
 
 	/*

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/RenameFolderHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/RenameFolderHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/RenameFolderHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/RenameFolderHandler.java Fri Oct  2 12:22:26 2009
@@ -54,7 +54,7 @@
 	 */
 	protected EmptyResult executeInternal(RenameFolder action,
 			ExecutionContext context) throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		IMAPFolder folder = action.getFolder();
 		String newName = action.getNewName();
 		try {

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ReplyMessageHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ReplyMessageHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ReplyMessageHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/ReplyMessageHandler.java Fri Oct  2 12:22:26 2009
@@ -62,7 +62,7 @@
 	 */
 	protected Message createMessage(Session session, ReplyMessage action)
 			throws AddressException, MessagingException, ActionException {
-		IMAPStore store = cache.get(getUser(action.getSessionId()));
+		IMAPStore store = cache.get(getUser());
 		IMAPFolder folder = (IMAPFolder) store.getFolder(action.getFolder().getFullName());
 		if (folder.isOpen() == false) {
 			folder.open(Folder.READ_ONLY);

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java Fri Oct  2 12:22:26 2009
@@ -53,7 +53,7 @@
 	@Override
 	protected EmptyResult executeInternal(SetFlag action,
 			ExecutionContext context) throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		IMAPFolder folder = action.getFolder();
 		ArrayList<Long> uids = action.getUids();
 		com.sun.mail.imap.IMAPFolder f = null;

Modified: james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/TagMessagesHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/TagMessagesHandler.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/TagMessagesHandler.java (original)
+++ james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/TagMessagesHandler.java Fri Oct  2 12:22:26 2009
@@ -59,7 +59,7 @@
 	 */
 	protected EmptyResult executeInternal(TagMessage action,
 			ExecutionContext context) throws ActionException {
-		User user = getUser(action.getSessionId());
+		User user = getUser();
 		ArrayList<Long> uids = action.getMessageUids();
 		Tag tag = action.getTag();
 		IMAPFolder folder = null;

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/AbstractHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/AbstractHandlerTest.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/AbstractHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/AbstractHandlerTest.java Fri Oct  2 12:22:26 2009
@@ -65,7 +65,6 @@
 		User user = new User();
 		user.setName("test");
 		user.setPassword("password");
-		user.setSessionId(VALID_ID);
 		user.setSettings(new Settings());
 		return user;
 	}

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/CreateFolderHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/CreateFolderHandlerTest.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/CreateFolderHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/CreateFolderHandlerTest.java Fri Oct  2 12:22:26 2009
@@ -48,7 +48,7 @@
 		
 		CreateFolderHandler handler = new CreateFolderHandler(storeCache,new MockLog(),sessionProvider);
 		try {
-			handler.execute(new CreateFolder(user.getSessionId(),folder), null);
+			handler.execute(new CreateFolder(folder), null);
 			Folder f = store.getFolder(folder.getFullName());
 			assertTrue("exists",f.exists());
 			
@@ -73,26 +73,24 @@
 
 		CreateFolderHandler handler = new CreateFolderHandler(storeCache,new MockLog(),sessionProvider);
 		try {
-			handler.execute(new CreateFolder(user.getSessionId(),folder), null);
+			handler.execute(new CreateFolder(folder), null);
 			fail("Folder already exists");
 		} catch (ActionException e) {
 			// folder already exists
-			e.printStackTrace();
+			// e.printStackTrace();
 		}
 		
 	}
 	
 	public void testInvalidSessionId() {
-		User user = createUser();
-		user.setSessionId("INVALID");
 		IMAPFolder folder = createFolder();
 		CreateFolderHandler handler = new CreateFolderHandler(storeCache,new MockLog(),sessionProvider);
 		try {
-			handler.execute(new CreateFolder(user.getSessionId(),folder), null);
+			handler.execute(new CreateFolder(folder), null);
 			fail("Invalid session");
 			
 		} catch (InvalidSessionException e) {
-			e.printStackTrace();
+			// e.printStackTrace();
 		} catch (ActionException e) {
 			e.printStackTrace();
 			fail();

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteFolderHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteFolderHandlerTest.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteFolderHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteFolderHandlerTest.java Fri Oct  2 12:22:26 2009
@@ -47,7 +47,7 @@
 		DeleteFolderHandler handler = new DeleteFolderHandler(storeCache,new MockLog(),sessionProvider);
 
 		try {
-			handler.execute(new DeleteFolder(user.getSessionId(),folder), null);
+			handler.execute(new DeleteFolder(folder), null);
 			Folder f = store.getFolder(folder.getFullName());
 			assertFalse("not exists",f.exists());
 			
@@ -67,24 +67,22 @@
 		DeleteFolderHandler handler = new DeleteFolderHandler(storeCache,new MockLog(),sessionProvider);
 
 		try {
-			handler.execute(new DeleteFolder(user.getSessionId(),folder), null);
+			handler.execute(new DeleteFolder(folder), null);
 			fail("Folder should not exist");
 		} catch (ActionException e) {
-			e.printStackTrace();
+			//e.printStackTrace();
 		}	
 	}
 	
 	public void testInvalidSessionId() {
-		User user = createUser();
-		user.setSessionId("INVALID");
 		IMAPFolder folder = createFolder();
 		DeleteFolderHandler handler = new DeleteFolderHandler(storeCache,new MockLog(),sessionProvider);
 		try {
-			handler.execute(new DeleteFolder(user.getSessionId(),folder), null);
+			handler.execute(new DeleteFolder(folder), null);
 			fail("Invalid session");
 			
 		} catch (InvalidSessionException e) {
-			e.printStackTrace();
+			//e.printStackTrace();
 		} catch (ActionException e) {
 			e.printStackTrace();
 			fail();

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteMessageByUidHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteMessageByUidHandlerTest.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteMessageByUidHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/DeleteMessageByUidHandlerTest.java Fri Oct  2 12:22:26 2009
@@ -49,13 +49,13 @@
 		session.setAttribute("user", user);
 		IMAPFolder folder = new IMAPFolder();
 		folder.setFullName("NOT_EXISTS");
-		DeleteMessageByUid action = new DeleteMessageByUid(VALID_ID,folder,new ArrayList<Long>());
+		DeleteMessageByUid action = new DeleteMessageByUid(folder,new ArrayList<Long>());
 
 		try {
 			handler.execute(action, null);
 			fail("Folder should not exists!");
 		} catch (ActionException e) {
-			e.printStackTrace();
+			//e.printStackTrace();
 		}
 	}
 	
@@ -77,7 +77,7 @@
 		ArrayList<Long> uids = new ArrayList<Long>();
 		uids.add(new Long(1));
 		uids.add(new Long(3));
-		DeleteMessageByUid action = new DeleteMessageByUid(VALID_ID, folder, uids);
+		DeleteMessageByUid action = new DeleteMessageByUid(folder, uids);
 
 		MockIMAPFolder f3 = (MockIMAPFolder) store.getFolder(user.getSettings().getTrashFolderName());
 		assertFalse("Trash folder not exists yet",f3.exists());
@@ -114,7 +114,7 @@
 		ArrayList<Long> uids = new ArrayList<Long>();
 		uids.add(new Long(1));
 		uids.add(new Long(3));
-		DeleteMessageByUid action = new DeleteMessageByUid(VALID_ID, folder, uids);
+		DeleteMessageByUid action = new DeleteMessageByUid(folder, uids);
 
 		try {
 			DeleteMessageResult result = handler.execute(action, null);

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchFoldersHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchFoldersHandlerTest.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchFoldersHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/FetchFoldersHandlerTest.java Fri Oct  2 12:22:26 2009
@@ -38,14 +38,13 @@
 
 	public void testInvalidSessionId() {
 		User user = createUser();
-		user.setSessionId("INVALID");
 		FetchFoldersHandler handler = new FetchFoldersHandler(storeCache,new MockLog(),sessionProvider);
 		try {
-			handler.execute(new FetchFolders(user.getSessionId()), null);
+			handler.execute(new FetchFolders(), null);
 			fail("Invalid session");
 			
 		} catch (InvalidSessionException e) {
-			e.printStackTrace();
+			//e.printStackTrace();
 		} catch (ActionException e) {
 			e.printStackTrace();
 			fail();
@@ -58,7 +57,7 @@
 		storeCache.addValidUser(user.getName(), user.getPassword());
 		FetchFoldersHandler handler = new FetchFoldersHandler(storeCache,new MockLog(),sessionProvider);
 		try {
-			FetchFoldersResult result = handler.execute(new FetchFolders(user.getSessionId()), null);
+			FetchFoldersResult result = handler.execute(new FetchFolders(), null);
 			assertTrue(result.getFolders().isEmpty());
 		} catch (ActionException e) {
 			e.printStackTrace();
@@ -78,7 +77,7 @@
 
 		FetchFoldersHandler handler = new FetchFoldersHandler(storeCache,new MockLog(),sessionProvider);
 		try {
-			FetchFoldersResult result = handler.execute(new FetchFolders(user.getSessionId()), null);
+			FetchFoldersResult result = handler.execute(new FetchFolders(), null);
 			ArrayList<IMAPFolder> folders = result.getFolders();
 			assertFalse(folders.isEmpty());
 			assertEquals(3, folders.size());

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LoginUserHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LoginUserHandlerTest.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LoginUserHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LoginUserHandlerTest.java Fri Oct  2 12:22:26 2009
@@ -41,7 +41,7 @@
 			handler.execute(new LoginUser("invalid","invalid"), null);
 			fail("Should throw an exception");
 		} catch (ActionException e) {
-			e.printStackTrace();
+			//e.printStackTrace();
 		}
 		assertNull("no user stored in session", session.getAttribute("user"));
 	}
@@ -58,7 +58,6 @@
 			assertEquals("Authenticated", true, u.getAuthenticated());
 			assertEquals("Authenticated", username, u.getName());
 			assertEquals("Authenticated", password, u.getPassword());
-			assertEquals("Authenticated", VALID_ID, u.getSessionId());
 			assertEquals("User stored in session", u, session.getAttribute("user"));
 		} catch (ActionException e) {
 			e.printStackTrace();

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LogoutUserHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LogoutUserHandlerTest.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LogoutUserHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/LogoutUserHandlerTest.java Fri Oct  2 12:22:26 2009
@@ -37,11 +37,10 @@
 		user.setName(username);
 		user.setPassword(password);
 		user.setAuthenticated(true);
-		user.setSessionId(VALID_ID);
 		session.setAttribute("user", user);
 		LogoutUserHandler handler = new LogoutUserHandler(storeCache,new MockLog(),sessionProvider);
 		try {
-			LogoutUserResult result = handler.execute(new LogoutUser(user.getSessionId()), null);
+			LogoutUserResult result = handler.execute(new LogoutUser(), null);
 			assertFalse("Not authenticated anymore", result.getUser().getAuthenticated());
 			assertNull("User removed", session.getAttribute("user"));
 			

Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/NoopHandlerTest.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/NoopHandlerTest.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/NoopHandlerTest.java (original)
+++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/NoopHandlerTest.java Fri Oct  2 12:22:26 2009
@@ -31,7 +31,7 @@
 	public void testNoop() {
 		NoopHandler handler = new NoopHandler(storeCache,new MockLog(),sessionProvider);
 		User user = createUser();
-		Noop action = new Noop(user.getSessionId());
+		Noop action = new Noop();
 		storeCache.addValidUser(user.getName(), user.getPassword());
 		session.setAttribute("user", user);
 		try {

Modified: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/User.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/User.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/User.java (original)
+++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/User.java Fri Oct  2 12:22:26 2009
@@ -29,15 +29,11 @@
  */
 public class User implements Serializable{
 	
-	/**
-	 * 
-	 */
 	private static final long serialVersionUID = -573674209289821920L;
 	private String name;
 	private String password;
 	private Date loginDate;
 	private boolean auth;
-	private String sessionId;
 	private Settings settings;
 	
 	
@@ -131,14 +127,6 @@
 		return auth;
 	}
 	
-	public String getSessionId() {
-		return sessionId;
-	}
-	
-	public void setSessionId(String sessionId) {
-		this.sessionId = sessionId;
-	}
-	
 	public void setSettings(Settings settings) {
 		this.settings = settings;
 	}

Added: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEvent.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEvent.java?rev=820986&view=auto
==============================================================================
--- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEvent.java (added)
+++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEvent.java Fri Oct  2 12:22:26 2009
@@ -0,0 +1,50 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.hupa.shared.events;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+public class ServerStatusEvent extends GwtEvent<ServerStatusEventHandler> {
+	public static Type<ServerStatusEventHandler> TYPE = new Type<ServerStatusEventHandler>();
+
+	public enum ServerStatus {
+		Unknown, Available, Unavailable, Error
+	}
+	
+	private ServerStatus status = ServerStatus.Unknown;
+	public ServerStatusEvent(ServerStatus status) {
+		this.status = status;
+	}
+	
+	public ServerStatus getStatus() {
+		return status;
+	}
+
+	@Override
+	protected void dispatch(ServerStatusEventHandler handler) {
+		handler.onServerStatusChange(this);
+	}
+
+	@Override
+	public com.google.gwt.event.shared.GwtEvent.Type<ServerStatusEventHandler> getAssociatedType() {
+		return TYPE;
+	}
+	
+}

Added: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEventHandler.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEventHandler.java?rev=820986&view=auto
==============================================================================
--- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEventHandler.java (added)
+++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/events/ServerStatusEventHandler.java Fri Oct  2 12:22:26 2009
@@ -0,0 +1,26 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.hupa.shared.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+public interface ServerStatusEventHandler extends EventHandler{
+	public void onServerStatusChange(ServerStatusEvent event);
+}

Added: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSession.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSession.java?rev=820986&view=auto
==============================================================================
--- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSession.java (added)
+++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSession.java Fri Oct  2 12:22:26 2009
@@ -0,0 +1,29 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.hupa.shared.rpc;
+
+import net.customware.gwt.dispatch.shared.Action;
+
+
+public class CheckSession implements Action<CheckSessionResult> {
+
+	private static final long serialVersionUID = 2255166545722718094L;
+	
+}

Added: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSessionResult.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSessionResult.java?rev=820986&view=auto
==============================================================================
--- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSessionResult.java (added)
+++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CheckSessionResult.java Fri Oct  2 12:22:26 2009
@@ -0,0 +1,44 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.hupa.shared.rpc;
+
+import org.apache.hupa.shared.data.User;
+
+import net.customware.gwt.dispatch.shared.Result;
+
+public class CheckSessionResult implements Result {
+
+	private static final long serialVersionUID = -4785233314922498952L;
+	boolean valid = false;
+
+	private User user;
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public boolean isValid() {
+		return user != null && user.getAuthenticated();
+	}
+}

Modified: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java?rev=820986&r1=820985&r2=820986&view=diff
==============================================================================
--- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java (original)
+++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/CreateFolder.java Fri Oct  2 12:22:26 2009
@@ -19,18 +19,16 @@
 
 package org.apache.hupa.shared.rpc;
 
+import net.customware.gwt.dispatch.shared.Action;
+
 import org.apache.hupa.shared.data.IMAPFolder;
 
-public class CreateFolder extends Session<EmptyResult>{
+public class CreateFolder implements Action<EmptyResult>{
 
-	/**
-	 * 
-	 */
 	private static final long serialVersionUID = -4966856616698265177L;
 	private IMAPFolder folder;
 
-	public CreateFolder(String sessionId, IMAPFolder folder) {
-		super(sessionId);
+	public CreateFolder(IMAPFolder folder) {
 		this.folder = folder;
 	}
 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org