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 { + westactivi...@org.apache.hupa.client.activity.WestActivity::openLink(Ljava/lang/String;) (url); + } catch(e) {} + return false; + }; + $wnd.mailTo = function(mail) { + try { + westactivi...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org