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 do...@apache.org on 2013/09/12 04:06:31 UTC

svn commit: r1522115 - in /james/hupa/trunk/client/src/main/java/org/apache/hupa/client: activity/ ioc/ mvp/ place/ ui/

Author: dongxu
Date: Thu Sep 12 02:06:30 2013
New Revision: 1522115

URL: http://svn.apache.org/r1522115
Log: (empty)

Added:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingTopActivityMapper.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingWestActivityMapper.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java
Removed:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailPlace.java
Modified:
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopActivity.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailInboxPlace.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MessageSendPlace.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/IMAPMessageListView.java
    james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java?rev=1522115&r1=1522114&r2=1522115&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/IMAPMessageListActivity.java Thu Sep 12 02:06:30 2013
@@ -380,25 +380,53 @@ import java.util.ArrayList;
 
 import net.customware.gwt.dispatch.client.DispatchAsync;
 
+import org.apache.hupa.client.HandlerRegistrationAdapter;
+import org.apache.hupa.client.HupaCallback;
+import org.apache.hupa.client.HupaEvoCallback;
 import org.apache.hupa.client.mvp.WidgetDisplayable;
 import org.apache.hupa.client.place.MailInboxPlace;
 import org.apache.hupa.client.widgets.HasDialog;
 import org.apache.hupa.shared.data.IMAPFolder;
 import org.apache.hupa.shared.data.Message;
 import org.apache.hupa.shared.data.User;
+import org.apache.hupa.shared.data.Message.IMAPFlag;
 import org.apache.hupa.shared.events.DecreaseUnseenEvent;
 import org.apache.hupa.shared.events.ExpandMessageEvent;
+import org.apache.hupa.shared.events.FolderSelectionEvent;
+import org.apache.hupa.shared.events.FolderSelectionEventHandler;
+import org.apache.hupa.shared.events.IncreaseUnseenEvent;
+import org.apache.hupa.shared.events.LoadMessagesEvent;
 import org.apache.hupa.shared.events.LogoutEvent;
 import org.apache.hupa.shared.events.LogoutEventHandler;
+import org.apache.hupa.shared.events.MessagesReceivedEvent;
+import org.apache.hupa.shared.events.MessagesReceivedEventHandler;
+import org.apache.hupa.shared.events.MoveMessageEvent;
+import org.apache.hupa.shared.events.MoveMessageEventHandler;
+import org.apache.hupa.shared.events.NewMessageEvent;
+import org.apache.hupa.shared.rpc.DeleteAllMessages;
+import org.apache.hupa.shared.rpc.DeleteMessageByUid;
+import org.apache.hupa.shared.rpc.DeleteMessageResult;
+import org.apache.hupa.shared.rpc.GenericResult;
+import org.apache.hupa.shared.rpc.MoveMessage;
+import org.apache.hupa.shared.rpc.MoveMessageResult;
+import org.apache.hupa.shared.rpc.SetFlag;
 import org.apache.hupa.widgets.ui.HasEnable;
 
 import com.google.gwt.activity.shared.AbstractActivity;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.HasChangeHandlers;
 import com.google.gwt.event.dom.client.HasClickHandlers;
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.gen2.table.event.client.HasPageChangeHandlers;
 import com.google.gwt.gen2.table.event.client.HasPageLoadHandlers;
 import com.google.gwt.gen2.table.event.client.HasRowSelectionHandlers;
+import com.google.gwt.gen2.table.event.client.PageChangeEvent;
+import com.google.gwt.gen2.table.event.client.PageChangeHandler;
+import com.google.gwt.gen2.table.event.client.RowSelectionEvent;
+import com.google.gwt.gen2.table.event.client.RowSelectionHandler;
 import com.google.gwt.place.shared.PlaceController;
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
 import com.google.gwt.user.client.ui.HasValue;
@@ -449,9 +477,220 @@ public class IMAPMessageListActivity ext
 	}
 	
 	private void bind(){
-		
+		eventBus.addHandler(MessagesReceivedEvent.TYPE, new MessagesReceivedEventHandler() {
+
+            public void onMessagesReceived(MessagesReceivedEvent event) {
+
+                // fill the oracle
+                display.fillSearchOracle(event.getMessages());
+            }
+
+        });
+		display.getSearchClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                String searchValue = null;
+                if (display.getSearchValue().getValue().trim().length() > 0) {
+                    searchValue = display.getSearchValue().getValue().trim();
+                }
+                eventBus.fireEvent(new LoadMessagesEvent(user, folder, searchValue));
+            }
+
+        });
+		eventBus.addHandler(MoveMessageEvent.TYPE, new MoveMessageEventHandler() {
+
+            public void onMoveMessageHandler(MoveMessageEvent event) {
+                final Message message = event.getMessage();
+                dispatcher.execute(new MoveMessage(event.getOldFolder(), event.getNewFolder(), message.getUid()), new HupaEvoCallback<MoveMessageResult>(dispatcher, eventBus) {
+                    public void callback(MoveMessageResult result) {
+                        ArrayList<Message> messageArray = new ArrayList<Message>();
+                        messageArray.add(message);
+                        display.removeMessages(messageArray);
+                    }
+                }); 
+            }
+            
+        });
+		display.getSelectAllClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                display.deselectAllMessages();
+                display.selectAllMessages();
+            }
+            
+        });
+		display.getSelectNoneClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                display.deselectAllMessages();
+            }
+            
+        });
+		display.getDeleteClick().addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
+
+            public void onClick(com.google.gwt.event.dom.client.ClickEvent event) {
+                if (folder.getFullName().equals(user.getSettings().getTrashFolderName())) {
+                    display.getConfirmDeleteDialog().show();
+                } else {
+                    deleteMessages();
+                }
+                
+            }
+            
+        });
+		display.getConfirmDeleteDialogClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                deleteMessages();
+            }
+            
+        });
+		display.getNewClick().addClickHandler(new com.google.gwt.event.dom.client.ClickHandler() {
+
+            public void onClick(com.google.gwt.event.dom.client.ClickEvent event) {
+                eventBus.fireEvent(new NewMessageEvent());
+            }
+            
+        });
+		display.getDeleteAllClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                display.getConfirmDeleteAllDialog().center();
+            }
+            
+        });
+		display.getConfirmDeleteAllDialogClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                dispatcher.execute(new DeleteAllMessages(folder), new HupaEvoCallback<DeleteMessageResult>(dispatcher, eventBus) {
+                    public void callback(DeleteMessageResult result) {
+                        display.reset();
+                        display.reloadData();
+//                        eventBus.fireEvent(new DecreaseUnseenEvent(user,folder,result.getCount()));
+                    }
+                });
+            }
+            
+        });
+		display.getMarkSeenClick().addClickHandler( new ClickHandler() {
+            public void onClick(ClickEvent event) {
+                final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
+                ArrayList<Long> uids = new ArrayList<Long>();
+                for (Message m : selectedMessages) {
+                    if (m.getFlags().contains(IMAPFlag.SEEN) == false) {
+                        uids.add(m.getUid());
+                    } else {
+                        selectedMessages.remove(m);
+                    }
+                }
+                dispatcher.execute(new SetFlag(folder, IMAPFlag.SEEN, true, uids), new HupaEvoCallback<GenericResult>(dispatcher, eventBus) {
+                    public void callback(GenericResult result) {
+                        for (Message m : selectedMessages) {
+                            if (m.getFlags().contains(IMAPFlag.SEEN) == false) {
+                                m.getFlags().add(IMAPFlag.SEEN);
+                            }
+                        }
+                        display.redraw();
+                        eventBus.fireEvent(new DecreaseUnseenEvent(user, folder,selectedMessages.size()));
+                    }
+                });
+            }
+
+        });
+		display.getMarkUnseenClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
+                ArrayList<Long> uids = new ArrayList<Long>();
+                for (Message m : selectedMessages) {
+                    if (m.getFlags().contains(IMAPFlag.SEEN)) {
+                        uids.add(m.getUid());
+                    } else {
+                        selectedMessages.remove(m);
+                    }
+                }
+                
+                dispatcher.execute(new SetFlag(folder, IMAPFlag.SEEN, false, uids), new HupaEvoCallback<GenericResult>(dispatcher, eventBus) {
+                    public void callback(GenericResult result) {
+                        for (Message m : selectedMessages) {
+                            if (m.getFlags().contains(IMAPFlag.SEEN)) {
+                                m.getFlags().remove(IMAPFlag.SEEN);
+                            }
+                        }
+                        display.redraw();
+                        eventBus.fireEvent(new IncreaseUnseenEvent(user, folder,selectedMessages.size()));
+                    }
+                });
+            }
+            
+            
+        });
+		eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {//TODO
+
+            public void onFolderSelectionEvent(FolderSelectionEvent event) {
+                folder = event.getFolder();
+                user = event.getUser();
+            }
+            
+        });
+		new HandlerRegistrationAdapter(display.getDataTableSelection().addRowSelectionHandler(new RowSelectionHandler() {
+            public void onRowSelection(RowSelectionEvent event) {
+                if (event.getSelectedRows().size() == 0) {
+                    display.getDeleteEnable().setEnabled(false);
+                    display.getMarkSeenEnable().setEnabled(false);
+                    display.getMarkUnseenEnable().setEnabled(false);
+                } else {
+                    display.getDeleteEnable().setEnabled(true);
+                    display.getMarkSeenEnable().setEnabled(true);
+                    display.getMarkUnseenEnable().setEnabled(true);
+                }
+            }
+            
+        
+        
+		}));
+		display.getRefreshClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                display.reset();
+                display.reloadData();
+            }
+            
+        });
+		new HandlerRegistrationAdapter(display.getDataTablePageChange().addPageChangeHandler(new PageChangeHandler() {//TODO
+
+            public void onPageChange(PageChangeEvent event) {
+                //firePresenterRevealedEvent(true);
+//                firePresenterChangedEvent();
+            }
+            
+        }));
+		display.getRowsPerPageChange().addChangeHandler(new ChangeHandler() {
+
+            public void onChange(ChangeEvent event) {
+                //firePresenterRevealedEvent(true);
+//                firePresenterChangedEvent();
+            }
+            
+        });
+		display.addTableListener(tableListener);
 	}
 
+    private void deleteMessages() {
+        final ArrayList<Message> selectedMessages = new ArrayList<Message>(display.getSelectedMessages());
+        ArrayList<Long> uids = new ArrayList<Long>();
+        for (Message m : selectedMessages) {
+            uids.add(m.getUid());
+        }
+        // maybe its better to just remove the messages from the table and expect the removal will work
+        display.removeMessages(selectedMessages);
+
+        dispatcher.execute(new DeleteMessageByUid(folder,uids), new HupaEvoCallback<DeleteMessageResult>(dispatcher, eventBus) {
+            public void callback(DeleteMessageResult result) {
+                eventBus.fireEvent(new DecreaseUnseenEvent(user,folder,result.getCount()));
+            }
+        }); 
+    }
 	public IMAPMessageListActivity with(User user){
 		this.user = user;
 		this.folder = new IMAPFolder(user.getSettings().getInboxFolderName());

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopActivity.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopActivity.java?rev=1522115&r1=1522114&r2=1522115&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopActivity.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/TopActivity.java Thu Sep 12 02:06:30 2013
@@ -36,6 +36,7 @@ import net.customware.gwt.dispatch.clien
 import org.apache.hupa.client.HupaConstants;
 import org.apache.hupa.client.HupaEvoCallback;
 import org.apache.hupa.client.mvp.WidgetDisplayable;
+import org.apache.hupa.client.place.DefaultPlace;
 import org.apache.hupa.shared.data.User;
 >>>>>>> introduce the top activity
 import org.apache.hupa.shared.events.FlashEvent;
@@ -82,6 +83,7 @@ import com.google.gwt.user.client.rpc.As
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
 import com.google.gwt.user.client.ui.HasText;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 
 public class TopActivity extends AbstractActivity {
 
@@ -124,6 +126,7 @@ public class TopActivity extends Abstrac
 				}
 				showLogin(username);
 				noopTimer.cancel();
+				TopActivity.this.placeController.goTo(defaultPlaceProvider.get());
 			}
 <<<<<<< HEAD
 		});
@@ -265,11 +268,12 @@ public class TopActivity extends Abstrac
 	private Timer noopTimer = new IdleTimer();
 
 	@Inject
-	public TopActivity(Displayable display, EventBus eventBus, PlaceController placeController,
+	public TopActivity(Displayable display, EventBus eventBus, PlaceController placeController, Provider<DefaultPlace> defaultPlaceProvider,
 			HupaConstants constants, DispatchAsync dispatcher) {
 		this.dispatcher = dispatcher;
 		this.display = display;
 		this.eventBus = eventBus;
+		this.defaultPlaceProvider = defaultPlaceProvider;
 		this.constants = constants;
 		this.placeController = placeController;
 
@@ -305,6 +309,7 @@ public class TopActivity extends Abstrac
 	private final EventBus eventBus;
 	private final PlaceController placeController;
 	private final DispatchAsync dispatcher;
+	private final Provider<DefaultPlace> defaultPlaceProvider;
 
 	private User user;
 	private ServerStatus serverStatus = ServerStatus.Available;

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java?rev=1522115&r1=1522114&r2=1522115&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java Thu Sep 12 02:06:30 2013
@@ -252,14 +252,50 @@ import java.util.List;
 import net.customware.gwt.dispatch.client.DispatchAsync;
 
 import org.apache.hupa.client.HupaEvoCallback;
+import org.apache.hupa.client.mvp.MessageSendPresenter.Type;
+import org.apache.hupa.client.mvp.MainPresenter;
 import org.apache.hupa.client.mvp.WidgetContainerDisplayable;
+import org.apache.hupa.client.place.IMAPMessagePlace;
+import org.apache.hupa.client.place.MailInboxPlace;
+import org.apache.hupa.client.place.MessageSendPlace;
 import org.apache.hupa.client.widgets.HasDialog;
 import org.apache.hupa.client.widgets.IMAPTreeItem;
 import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.Message;
+import org.apache.hupa.shared.data.Message.IMAPFlag;
+import org.apache.hupa.shared.data.MessageDetails;
 import org.apache.hupa.shared.data.User;
+import org.apache.hupa.shared.events.BackEvent;
+import org.apache.hupa.shared.events.BackEventHandler;
+import org.apache.hupa.shared.events.DecreaseUnseenEvent;
+import org.apache.hupa.shared.events.DecreaseUnseenEventHandler;
+import org.apache.hupa.shared.events.ExpandMessageEvent;
+import org.apache.hupa.shared.events.ExpandMessageEventHandler;
+import org.apache.hupa.shared.events.FolderSelectionEvent;
+import org.apache.hupa.shared.events.FolderSelectionEventHandler;
+import org.apache.hupa.shared.events.ForwardMessageEvent;
+import org.apache.hupa.shared.events.ForwardMessageEventHandler;
+import org.apache.hupa.shared.events.IncreaseUnseenEvent;
+import org.apache.hupa.shared.events.IncreaseUnseenEventHandler;
+import org.apache.hupa.shared.events.LoadMessagesEvent;
+import org.apache.hupa.shared.events.LoadMessagesEventHandler;
+import org.apache.hupa.shared.events.LoginEvent;
+import org.apache.hupa.shared.events.LoginEventHandler;
+import org.apache.hupa.shared.events.MessagesReceivedEvent;
+import org.apache.hupa.shared.events.MessagesReceivedEventHandler;
+import org.apache.hupa.shared.events.NewMessageEvent;
+import org.apache.hupa.shared.events.NewMessageEventHandler;
+import org.apache.hupa.shared.events.ReplyMessageEvent;
+import org.apache.hupa.shared.events.ReplyMessageEventHandler;
+import org.apache.hupa.shared.events.SentMessageEvent;
+import org.apache.hupa.shared.events.SentMessageEventHandler;
+import org.apache.hupa.shared.rpc.CreateFolder;
+import org.apache.hupa.shared.rpc.DeleteFolder;
 import org.apache.hupa.shared.rpc.FetchFolders;
 import org.apache.hupa.shared.rpc.FetchFoldersResult;
 import org.apache.hupa.shared.rpc.GenericResult;
+import org.apache.hupa.shared.rpc.GetMessageDetails;
+import org.apache.hupa.shared.rpc.GetMessageDetailsResult;
 import org.apache.hupa.shared.rpc.RenameFolder;
 import org.apache.hupa.widgets.event.EditEvent;
 import org.apache.hupa.widgets.event.EditHandler;
@@ -267,33 +303,48 @@ import org.apache.hupa.widgets.ui.HasEdi
 import org.apache.hupa.widgets.ui.HasEnable;
 
 import com.google.gwt.activity.shared.AbstractActivity;
+import com.google.gwt.core.client.GWT;
+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.event.logical.shared.HasSelectionHandlers;
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.place.shared.PlaceController;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
 import com.google.gwt.user.client.ui.TreeItem;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 
 public class WestActivity extends AbstractActivity {
 
 	private final Displayable display;
 	private final EventBus eventBus;
 	private final PlaceController placeController;
+	private final Provider<MailInboxPlace> mailInboxPlaceProvider;
+	private final Provider<IMAPMessagePlace> IMAPMessagePlaceProvider;
+	private final Provider<MessageSendPlace> messageSendPlaceProvider;
 	
     private DispatchAsync dispatcher;
     private User user;
     private IMAPFolder folder;
     private IMAPTreeItem tItem;
     private HasEditable editableTreeItem;
+    private String searchValue;
     
     @Inject
     public WestActivity(Displayable display, EventBus eventBus, PlaceController placeController,
-			DispatchAsync dispatcher){
+			DispatchAsync dispatcher,Provider<MailInboxPlace> mailInboxPlaceProvider,Provider<IMAPMessagePlace> IMAPMessagePlaceProvider,Provider<MessageSendPlace> messageSendPlaceProvider){
     	this.dispatcher = dispatcher;
     	this.display = display;
     	this.eventBus = eventBus;
     	this.placeController = placeController;
+    	this.mailInboxPlaceProvider = mailInboxPlaceProvider;
+    	this.IMAPMessagePlaceProvider = IMAPMessagePlaceProvider;
+    	this.messageSendPlaceProvider = messageSendPlaceProvider;
     	
     }
 
@@ -384,9 +435,278 @@ public class WestActivity extends Abstra
         return tList;
     }
 	private void bind(){
-		
+		eventBus.addHandler(LoadMessagesEvent.TYPE, new LoadMessagesEventHandler() {
+
+            public void onLoadMessagesEvent(LoadMessagesEvent loadMessagesEvent) {
+                showMessageTable(loadMessagesEvent.getUser(), loadMessagesEvent.getFolder(), loadMessagesEvent.getSearchValue());
+            }
+
+        });
+		eventBus.addHandler(ExpandMessageEvent.TYPE, new ExpandMessageEventHandler() {
+
+            public void onExpandMessage(ExpandMessageEvent event) {
+                final boolean decreaseUnseen;
+                final Message message = event.getMessage();
+                // check if the message was already seen in the past
+                if (event.getMessage().getFlags().contains(IMAPFlag.SEEN) == false) {
+                    decreaseUnseen = true;
+                } else {
+                    decreaseUnseen = false;
+                }
+
+                display.setLoadingMessage(true);
+                dispatcher.execute(new GetMessageDetails(event.getFolder(), message.getUid()), new HupaEvoCallback<GetMessageDetailsResult>(dispatcher, eventBus, display) {
+                    public void callback(GetMessageDetailsResult result) {
+                        if (decreaseUnseen) {
+                            eventBus.fireEvent(new DecreaseUnseenEvent(user, folder));
+                        }
+                        display.setLoadingMessage(false);
+                        showMessage(user, folder, message, result.getMessageDetails());
+                    }
+                });
+            }
+
+        });
+		eventBus.addHandler(NewMessageEvent.TYPE, new NewMessageEventHandler() {
+
+            public void onNewMessageEvent(NewMessageEvent event) {
+                showNewMessage();
+            }
+
+        });
+		eventBus.addHandler(SentMessageEvent.TYPE, new SentMessageEventHandler() {
+
+            public void onSentMessageEvent(SentMessageEvent ev) {
+                showMessageTable(user, folder, searchValue);
+            }
+
+        });
+		eventBus.addHandler(ForwardMessageEvent.TYPE, new ForwardMessageEventHandler() {
+
+            public void onForwardMessageEvent(ForwardMessageEvent event) {
+                showForwardMessage(event);
+            }
+
+        });
+		eventBus.addHandler(ReplyMessageEvent.TYPE, new ReplyMessageEventHandler() {
+
+            public void onReplyMessageEvent(ReplyMessageEvent event) {
+                showReplyMessage(event);
+            }
+
+        });
+		eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {
+
+            public void onFolderSelectionEvent(FolderSelectionEvent event) {
+                user = event.getUser();
+                folder = event.getFolder();
+                showMessageTable(user, event.getFolder(), searchValue);
+            }
+
+        });
+		eventBus.addHandler(BackEvent.TYPE, new BackEventHandler() {
+
+            public void onBackEvent(BackEvent event) {
+                showMessageTable(user, folder, searchValue);
+            }
+
+        });
+		eventBus.addHandler(ExpandMessageEvent.TYPE, new ExpandMessageEventHandler() {
+
+            public void onExpandMessage(ExpandMessageEvent event) {
+                if (editableTreeItem != null && editableTreeItem.isEdit()) {
+                    editableTreeItem.cancelEdit();
+                }
+            }
+
+        });
+		eventBus.addHandler(NewMessageEvent.TYPE, new NewMessageEventHandler() {
+
+            public void onNewMessageEvent(NewMessageEvent event) {
+                if (editableTreeItem != null && editableTreeItem.isEdit()) {
+                    editableTreeItem.cancelEdit();
+                }
+            }
+
+        });
+		eventBus.addHandler(DecreaseUnseenEvent.TYPE, new DecreaseUnseenEventHandler() {
+
+            public void onDecreaseUnseenEvent(DecreaseUnseenEvent event) {
+                display.decreaseUnseenMessageCount(event.getFolder(), event.getAmount());
+            }
+
+        });
+		eventBus.addHandler(IncreaseUnseenEvent.TYPE, new IncreaseUnseenEventHandler() {
+
+            public void onIncreaseUnseenEvent(IncreaseUnseenEvent event) {
+                display.increaseUnseenMessageCount(event.getFolder(), event.getAmount());
+            }
+
+        });
+		display.getTree().addSelectionHandler(new SelectionHandler<TreeItem>() {
+
+            public void onSelection(SelectionEvent<TreeItem> event) {
+                tItem = (IMAPTreeItem) event.getSelectedItem();
+                if (tItem.isEdit()) 
+                    return;
+                folder = (IMAPFolder) tItem.getUserObject();
+                eventBus.fireEvent(new LoadMessagesEvent(user, folder));
+            }
+
+        });
+		display.getTree().addSelectionHandler(new SelectionHandler<TreeItem>() {
+
+            public void onSelection(SelectionEvent<TreeItem> event) {
+                tItem = (IMAPTreeItem) event.getSelectedItem();
+                if (tItem.isEdit()) 
+                    return;
+                folder = (IMAPFolder) tItem.getUserObject();
+                if (folder.getFullName().equalsIgnoreCase(user.getSettings().getInboxFolderName())) {
+                    display.getDeleteEnable().setEnabled(false);
+                    display.getRenameEnable().setEnabled(false);
+                } else {
+                    display.getDeleteEnable().setEnabled(true);
+                    display.getRenameEnable().setEnabled(true);
+                }
+            }
+
+        });
+		display.getRenameClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                tItem.startEdit();
+            }
+
+        });
+		display.getDeleteClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                display.getDeleteConfirmDialog().show();
+            }
+
+        });
+		display.getDeleteConfirmClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                dispatcher.execute(new DeleteFolder(folder), new AsyncCallback<GenericResult>() {
+
+                    public void onFailure(Throwable caught) {
+                        GWT.log("ERROR while deleting", caught);
+                    }
+
+                    public void onSuccess(GenericResult result) {
+                        display.deleteSelectedFolder();
+                    }
+
+                });
+            }
+
+        });
+		display.getNewClick().addClickHandler(new ClickHandler() {
+
+            public void onClick(ClickEvent event) {
+                editableTreeItem = display.createFolder(new EditHandler() {
+
+                    public void onEditEvent(EditEvent event) {
+                        final IMAPTreeItem item = (IMAPTreeItem) event.getSource();
+                        final String newValue = (String) event.getNewValue();
+                        if (event.getEventType().equals(EditEvent.EventType.Stop)) {
+                            dispatcher.execute(new CreateFolder(new IMAPFolder(newValue.trim())), new AsyncCallback<GenericResult>() {
+
+                                public void onFailure(Throwable caught) {
+                                    GWT.log("Error while create folder", caught);
+                                    item.cancelEdit();
+                                }
+
+                                public void onSuccess(GenericResult result) {
+                                    // Nothing todo
+                                }
+
+                            });
+                        }
+                    }
+
+                });
+            }
+
+        });
+		eventBus.addHandler(MessagesReceivedEvent.TYPE, new MessagesReceivedEventHandler() {
+
+            public void onMessagesReceived(MessagesReceivedEvent event) {
+                IMAPFolder f = event.getFolder();
+                display.updateTreeItem(f);
+            }
+
+        });
+		eventBus.addHandler(LoginEvent.TYPE,  new LoginEventHandler() {
+
+            public void onLogin(LoginEvent event) {
+                user = event.getUser();
+                folder = new IMAPFolder(user.getSettings().getInboxFolderName());;
+                searchValue = null;
+                showMessageTable(user, folder, searchValue);
+            }
+            
+        });
+
+        exportJSMethods(this);
 	}
 
+    
+    public void openLink(String url) {
+        Window.open(url, "_blank", "");
+    }
+
+    public void mailTo(String mailto) {
+//        sendPresenter.revealDisplay(user, mailto);
+    }
+    private native void exportJSMethods(WestActivity westactivity) /*-{
+      $wnd.openLink = function(url) {
+        try {
+           westactivity.@org.apache.hupa.client.activity.WestActivity::openLink(Ljava/lang/String;) (url);
+        } catch(e) {}
+        return false;
+      };
+      $wnd.mailTo = function(mail) {
+        try {
+           westactivity.@org.apache.hupa.client.activity.WestActivity::mailTo(Ljava/lang/String;) (mail);
+        } catch(e) {}
+        return false;
+      };
+    }-*/;
+    private void showMessageTable(User user, IMAPFolder folder, String searchValue) {
+        this.user = user;
+        this.folder = folder;
+        this.searchValue = searchValue;
+        placeController.goTo(mailInboxPlaceProvider.get().with(user));
+    }
+
+    private void showMessage(User user, IMAPFolder folder, Message message, MessageDetails details) {
+    	placeController.goTo(IMAPMessagePlaceProvider.get());
+    }
+
+    private void showNewMessage() {
+    	placeController.goTo(this.messageSendPlaceProvider.get());
+//        sendPresenter.revealDisplay(user);
+    }
+
+    private void showForwardMessage(ForwardMessageEvent event) {
+    	placeController.goTo(this.messageSendPlaceProvider.get());
+//        sendPresenter.revealDisplay(event.getUser(), event.getFolder(), event.getMessage(), event.getMessageDetails(), Type.FORWARD);
+    }
+
+    private void showReplyMessage(ReplyMessageEvent event) {
+        if (event.getReplyAll()) {
+        	placeController.goTo(this.messageSendPlaceProvider.get());
+//            sendPresenter.revealDisplay(event.getUser(), event.getFolder(), event.getMessage(), event.getMessageDetails(), Type.REPLY_ALL);
+        } else {
+        	placeController.goTo(this.messageSendPlaceProvider.get());
+//            sendPresenter.revealDisplay(event.getUser(), event.getFolder(), event.getMessage(), event.getMessageDetails(), Type.REPLY);
+
+        }
+    	placeController.goTo(this.messageSendPlaceProvider.get());
+//        sendPresenter.revealDisplay();
+    }
     public interface Displayable extends WidgetContainerDisplayable {
         
         public HasSelectionHandlers<TreeItem> getTree();

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java?rev=1522115&r1=1522114&r2=1522115&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ioc/AppGinModule.java Thu Sep 12 02:06:30 2013
@@ -107,8 +107,8 @@ import org.apache.hupa.client.activity.T
 import org.apache.hupa.client.activity.WestActivity;
 import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
 import org.apache.hupa.client.mvp.AppPlaceHistoryMapper;
+import org.apache.hupa.client.mvp.CachingTopActivityMapper;
 import org.apache.hupa.client.mvp.MainContentActivityMapper;
-import org.apache.hupa.client.mvp.TopActivityMapper;
 import org.apache.hupa.client.mvp.WestActivityMapper;
 import org.apache.hupa.client.place.DefaultPlace;
 import org.apache.hupa.client.ui.AppLayout;
@@ -330,7 +330,7 @@ public class AppGinModule extends Abstra
 	@Provides
 	@Singleton
 	@Named("TopRegion")
-	public ActivityManager getTopRegionActivityMapper(TopActivityMapper activityMapper,
+	public ActivityManager getTopRegionActivityMapper(CachingTopActivityMapper activityMapper,
 			EventBus eventBus) {
 		return new ActivityManager(activityMapper, eventBus);
 	}

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingTopActivityMapper.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingTopActivityMapper.java?rev=1522115&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingTopActivityMapper.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingTopActivityMapper.java Thu Sep 12 02:06:30 2013
@@ -0,0 +1,33 @@
+package org.apache.hupa.client.mvp;
+
+import com.google.gwt.activity.shared.Activity;
+import com.google.gwt.activity.shared.ActivityMapper;
+import com.google.gwt.activity.shared.CachingActivityMapper;
+import com.google.gwt.activity.shared.FilteredActivityMapper;
+import com.google.gwt.place.shared.Place;
+import com.google.inject.Inject;
+
+public class CachingTopActivityMapper implements ActivityMapper {
+
+	private ActivityMapper filteredActivityMapper;
+
+	@Inject
+	public CachingTopActivityMapper(TopActivityMapper topActivityMapper) {
+
+		FilteredActivityMapper.Filter filter = new FilteredActivityMapper.Filter() {
+			@Override
+			public Place filter(Place place) {
+				return place;
+			}
+		};
+
+		CachingActivityMapper cachingActivityMapper = new CachingActivityMapper(topActivityMapper);
+		filteredActivityMapper = new FilteredActivityMapper(filter, cachingActivityMapper);
+	}
+
+	@Override
+	public Activity getActivity(Place place) {
+		return filteredActivityMapper.getActivity(place);
+	}
+
+}

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingWestActivityMapper.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingWestActivityMapper.java?rev=1522115&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingWestActivityMapper.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/CachingWestActivityMapper.java Thu Sep 12 02:06:30 2013
@@ -0,0 +1,36 @@
+package org.apache.hupa.client.mvp;
+
+import org.apache.hupa.client.place.DefaultPlace;
+import org.apache.hupa.client.place.MailInboxPlace;
+
+import com.google.gwt.activity.shared.Activity;
+import com.google.gwt.activity.shared.ActivityMapper;
+import com.google.gwt.activity.shared.CachingActivityMapper;
+import com.google.gwt.activity.shared.FilteredActivityMapper;
+import com.google.gwt.place.shared.Place;
+import com.google.inject.Inject;
+
+public class CachingWestActivityMapper implements ActivityMapper {
+
+	private ActivityMapper filteredActivityMapper;
+
+	@Inject
+	public CachingWestActivityMapper(WestActivityMapper westActivityMapper) {
+
+		FilteredActivityMapper.Filter filter = new FilteredActivityMapper.Filter() {
+			@Override
+			public Place filter(Place place) {
+				return place instanceof DefaultPlace ? place : new MailInboxPlace(null); // FIXME with user
+			}
+		};
+
+		CachingActivityMapper cachingActivityMapper = new CachingActivityMapper(westActivityMapper);
+		filteredActivityMapper = new FilteredActivityMapper(filter, cachingActivityMapper);
+	}
+
+	@Override
+	public Activity getActivity(Place place) {
+		return filteredActivityMapper.getActivity(place);
+	}
+
+}

Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java?rev=1522115&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/IMAPMessagePlace.java Thu Sep 12 02:06:30 2013
@@ -0,0 +1,27 @@
+package org.apache.hupa.client.place;
+
+import com.google.gwt.place.shared.Place;
+import com.google.gwt.place.shared.PlaceTokenizer;
+import com.google.gwt.place.shared.Prefix;
+
+public class IMAPMessagePlace extends Place {
+
+  @Prefix("IMAPMessage")
+  public static class Tokenizer implements PlaceTokenizer<IMAPMessagePlace> {
+
+    @Override
+    public IMAPMessagePlace getPlace(String token) {
+      return new IMAPMessagePlace();
+    }
+
+    @Override
+    public String getToken(IMAPMessagePlace place) {
+      return "IMAPMessage";
+    }
+  }
+  
+  public String toString(){
+	  return this.getClass().getName()+"->[IMAPMessage]";
+  }
+
+}

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailInboxPlace.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailInboxPlace.java?rev=1522115&r1=1522114&r2=1522115&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailInboxPlace.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MailInboxPlace.java Thu Sep 12 02:06:30 2013
@@ -2,13 +2,25 @@ package org.apache.hupa.client.place;
 
 import org.apache.hupa.shared.data.User;
 
+import com.google.gwt.place.shared.Place;
 import com.google.gwt.place.shared.PlaceTokenizer;
 import com.google.gwt.place.shared.Prefix;
 
-public class MailInboxPlace extends MailPlace {
+public class MailInboxPlace extends Place {
 
 	private static final String PREFIX = "inbox";
 	private User user;
+	private String mailId;
+	
+	public MailInboxPlace(){
+		this.mailId = "";
+	}
+	public MailInboxPlace(String token){
+		this.mailId = token;
+	}
+	public String getMailId(){
+		return mailId;
+	}
 
 	/**
 	 * equality test based on Class type, to let different instance of this
@@ -46,12 +58,12 @@ public class MailInboxPlace extends Mail
 
 		@Override
 		public MailInboxPlace getPlace(String token) {
-			return new MailInboxPlace();
+			return new MailInboxPlace(token);
 		}
 
 		@Override
 		public String getToken(MailInboxPlace place) {
-			return PREFIX;
+			return place.getMailId();
 		}
 	}
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MessageSendPlace.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MessageSendPlace.java?rev=1522115&r1=1522114&r2=1522115&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MessageSendPlace.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/place/MessageSendPlace.java Thu Sep 12 02:06:30 2013
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
 /****************************************************************
  * Licensed to the Apache Software Foundation (ASF) under one   *
  * or more contributor license agreements.  See the NOTICE file *
@@ -25,10 +26,15 @@ import org.apache.hupa.shared.domain.Mes
 import org.apache.hupa.shared.domain.MessageDetails;
 import org.apache.hupa.shared.domain.User;
 
+=======
+package org.apache.hupa.client.place;
+
+>>>>>>> 
 import com.google.gwt.place.shared.Place;
 import com.google.gwt.place.shared.PlaceTokenizer;
 import com.google.gwt.place.shared.Prefix;
 
+<<<<<<< HEAD
 public class MessageSendPlace extends AbstractPlace {
 
 	
@@ -86,4 +92,26 @@ public class MessageSendPlace extends Ab
 
 	
 	
+=======
+public class MessageSendPlace extends Place {
+
+  @Prefix("MessageSend")
+  public static class Tokenizer implements PlaceTokenizer<MessageSendPlace> {
+
+    @Override
+    public MessageSendPlace getPlace(String token) {
+      return new MessageSendPlace();
+    }
+
+    @Override
+    public String getToken(MessageSendPlace place) {
+      return "MessageSend";
+    }
+  }
+  
+  public String toString(){
+	  return this.getClass().getName()+"->[MessageSend]";
+  }
+
+>>>>>>> 
 }

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/IMAPMessageListView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/IMAPMessageListView.java?rev=1522115&r1=1522114&r2=1522115&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/IMAPMessageListView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/IMAPMessageListView.java Thu Sep 12 02:06:30 2013
@@ -756,6 +756,7 @@ import com.google.gwt.gen2.table.event.c
 import com.google.gwt.gen2.table.event.client.RowCountChangeEvent;
 import com.google.gwt.gen2.table.event.client.RowCountChangeHandler;
 import com.google.gwt.i18n.client.DateTimeFormat;
+import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.HasValue;
@@ -794,9 +795,9 @@ public class IMAPMessageListView extends
     private EnableButton markUnSeenButton;
 
     private ListBox pageBox = new ListBox();
-    private Hyperlink allLink;    
-    private Hyperlink noneLink;
-    private Hyperlink refreshLink;
+    private Anchor allLink;    
+    private Anchor noneLink;
+    private Anchor refreshLink;
     private MultiWordSuggestOracle oracle = new MultiWordSuggestOracle(" ,@");
     private SuggestBox searchBox = new SuggestBox(oracle);
     private Button searchButton;
@@ -812,9 +813,9 @@ public class IMAPMessageListView extends
         deleteAllMailButton = new Button(constants.deleteAll());
         markSeenButton = new EnableButton(constants.markSeen());
         markUnSeenButton = new EnableButton(constants.markUnseen());
-        allLink = new Hyperlink(constants.all(),"");    
-        noneLink = new Hyperlink(constants.none(),"");
-        refreshLink = new Hyperlink(constants.refresh(),"");
+        allLink = new Anchor(constants.all());    
+        noneLink = new Anchor(constants.none());
+        refreshLink = new Anchor(constants.refresh());
         searchButton = new Button(constants.searchButton());
         loading = new Loading(constants.loading());
         this.cTableModel = new CachedTableModel<Message>(mTableModel);

Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java?rev=1522115&r1=1522114&r2=1522115&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/WestView.java Thu Sep 12 02:06:30 2013
@@ -163,9 +163,9 @@ public class WestView extends Composite 
         this.controller = controllerProvider;
         this.bus = bus;
         loader = new Loading(constants.loading());
-        newFolderButton = new EnableHyperlink(constants.newFolder(), "");
-        renameFolderButton = new EnableHyperlink(constants.renameFolder(), "");
-        deleteFolderButton = new EnableHyperlink(constants.deleteFolder(), "");
+        newFolderButton = new EnableHyperlink(constants.newFolder(), null);
+        renameFolderButton = new EnableHyperlink(constants.renameFolder(), null);
+        deleteFolderButton = new EnableHyperlink(constants.deleteFolder(), null);
         
         dockPanel = new DockPanel();
 



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