Author: dongxu Date: Thu Sep 12 04:20:52 2013 New Revision: 1522334 URL: http://svn.apache.org/r1522334 Log: let messages list activity make use of mvp
Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java?rev=1522334&r1=1522333&r2=1522334&view=diff ============================================================================== --- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java (original) +++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/MessageListActivity.java Thu Sep 12 04:20:52 2013 @@ -22,6 +22,7 @@ package org.apache.hupa.client.activity; <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD import java.util.Collection; import java.util.List; import java.util.Set; @@ -250,29 +251,167 @@ import org.apache.hupa.client.rf.GetMess ======= import org.apache.hupa.client.place.MailFolderPlace; >>>>>>> make reload message content work, use the same place with folder list, >>>>>>> while separated with slash, that looks like Gmail's +======= +import java.util.List; +import java.util.logging.Level; + +import org.apache.hupa.client.place.DefaultPlace; +import org.apache.hupa.client.place.MailFolderPlace; +import org.apache.hupa.client.rf.FetchMessagesRequest; +import org.apache.hupa.client.rf.GetMessageDetailsRequest; +import org.apache.hupa.client.rf.HupaRequestFactory; +import org.apache.hupa.client.ui.MessagesCellTable; +>>>>>>> let messages list activity make use of mvp import org.apache.hupa.client.ui.WidgetDisplayable; import org.apache.hupa.shared.data.ImapFolderImpl; +import org.apache.hupa.shared.domain.FetchMessagesAction; +import org.apache.hupa.shared.domain.FetchMessagesResult; +import org.apache.hupa.shared.domain.GetMessageDetailsAction; +import org.apache.hupa.shared.domain.GetMessageDetailsResult; import org.apache.hupa.shared.domain.ImapFolder; +import org.apache.hupa.shared.domain.Message; +import org.apache.hupa.shared.domain.User; +import org.apache.hupa.shared.events.ExpandMessageEvent; +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 com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.event.shared.EventBus; +import com.google.gwt.place.shared.PlaceController; import com.google.gwt.user.client.ui.AcceptsOneWidget; +import com.google.gwt.view.client.CellPreviewEvent; +import com.google.gwt.view.client.RangeChangeEvent; +import com.google.gwt.view.client.CellPreviewEvent.Handler; import com.google.inject.Inject; +import com.google.web.bindery.requestfactory.shared.Receiver; +import com.google.web.bindery.requestfactory.shared.ServerFailure; public class MessageListActivity extends AppBaseActivity { @Inject private Displayable display; - + @Inject private HupaRequestFactory requestFactory; + @Inject private PlaceController placeController; + private ImapFolder folder; + private String searchValue; + private User user; + private boolean pending; @Override - public void start(AcceptsOneWidget container, EventBus eventBus) { + public void start(AcceptsOneWidget container, final EventBus eventBus) { container.setWidget(display.asWidget()); bindTo(eventBus); + display.getGrid().addCellPreviewHandler(new Handler<Message>() { + @Override + public void onCellPreview(final CellPreviewEvent<Message> event) { + if (hasClickedButFirstCol(event)) { + List<Message> displayedItems = display.getGrid().getVisibleItems(); + for (Message msg : displayedItems) { + display.getGrid().getSelectionModel().setSelected(msg, false); + } + GetMessageDetailsRequest req = requestFactory.messageDetailsRequest(); + GetMessageDetailsAction action = req.create(GetMessageDetailsAction.class); + final ImapFolder f = req.create(ImapFolder.class); + f.setFullName(folder.getFullName()); + action.setFolder(f); + action.setUid(event.getValue().getUid()); + req.get(action).fire(new Receiver<GetMessageDetailsResult>() { + @Override + public void onSuccess(GetMessageDetailsResult response) { + eventBus.fireEvent(new ExpandMessageEvent(user, folder, event.getValue(), response.getMessageDetails())); + placeController.goTo(new MailFolderPlace(f.getFullName() + "/" + event.getValue().getUid())); + } + + @Override + public void onFailure(ServerFailure error) { + if (error.isFatal()) { +// log.log(Level.SEVERE, error.getMessage()); + // TODO write the error message to + // status bar. + throw new RuntimeException(error.getMessage()); + } + } + }); + } + } + + private boolean hasClickedButFirstCol(CellPreviewEvent<Message> event) { + return "click".equals(event.getNativeEvent().getType()) && 0 != event.getColumn(); + } + + }); + display.getGrid().addRangeChangeHandler(new RangeChangeEvent.Handler() { + @Override + public void onRangeChange(RangeChangeEvent event) { + fetch(event.getNewRange().getStart()); + } + }); + eventBus.addHandler(LoadMessagesEvent.TYPE, new LoadMessagesEventHandler() { + public void onLoadMessagesEvent(LoadMessagesEvent loadMessagesEvent) { + user = loadMessagesEvent.getUser(); + folder = loadMessagesEvent.getFolder(); + searchValue = loadMessagesEvent.getSearchValue(); + fetch(0); + + } + }); + eventBus.addHandler(LoginEvent.TYPE, new LoginEventHandler() { + public void onLogin(LoginEvent event) { + user = event.getUser(); + folder = new ImapFolderImpl(user.getSettings().getInboxFolderName()); + searchValue = null; + if (!pending) { + pending = true; + Scheduler.get().scheduleFinally(new ScheduledCommand() { + @Override + public void execute() { + pending = false; + fetch(0); + } + }); + } + } + }); + + } + + public void fetch(final int start) { + FetchMessagesRequest req = requestFactory.messagesRequest(); + FetchMessagesAction action = req.create(FetchMessagesAction.class); + final ImapFolder f = req.create(ImapFolder.class); + f.setFullName(folder.getFullName()); + action.setFolder(f); + action.setOffset(display.getGrid().getPageSize()); + action.setSearchString(searchValue); + action.setStart(start); + req.fetch(action).fire(new Receiver<FetchMessagesResult>() { + + @Override + public void onSuccess(final FetchMessagesResult result) { + assert result != null; + display.getGrid().setRowCount(result.getRealCount()); + display.getGrid().setRowData(start, result.getMessages()); + } + + @Override + public void onFailure(ServerFailure error) { + placeController.goTo(new DefaultPlace("@")); + if (error.isFatal()) { + // FIXME should goto login page regarding the long time + // session expired. + throw new RuntimeException(error.getMessage()); + } + } + }); } + private void bindTo(EventBus eventBus) { } public MessageListActivity with(MailFolderPlace place) { - display.setFolder(new ImapFolderImpl(place.getFullName())); + setFolder(new ImapFolderImpl(place.getFullName())); return this; } @@ -292,7 +431,13 @@ public class MessageListActivity extends ======= >>>>>>> make reload message content work, use the same place with folder list, >>>>>>> while separated with slash, that looks like Gmail's public interface Displayable extends WidgetDisplayable { - void setFolder(ImapFolder folder); + MessagesCellTable getGrid(); + } + + public void setFolder(ImapFolder folder) { + this.folder = folder; + if (folder != null) + fetch(0); } >>>>>>> prepare for message content panel } Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java?rev=1522334&r1=1522333&r2=1522334&view=diff ============================================================================== --- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java (original) +++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageListView.java Thu Sep 12 04:20:52 2013 @@ -111,92 +111,15 @@ public class MessageListView extends Com private static final Logger log = Logger.getLogger(MessageListView.class.getName()); @UiField(provided = true) MessagesCellTable grid; - private HupaRequestFactory requestFactory; - private PlaceController placeController; - private ImapFolder folder; - private String searchValue; - private User user; - private boolean pending; + @Inject public MessageListView(final EventBus eventBus, final HupaRequestFactory requestFactory, final PlaceController placeController, final MessagesCellTable table) { - this.requestFactory = requestFactory; - this.placeController = placeController; grid = table; initWidget(binder.createAndBindUi(this)); - grid.addCellPreviewHandler(new Handler<Message>() { - @Override - public void onCellPreview(final CellPreviewEvent<Message> event) { - if (hasClickedButFirstCol(event)) { - List<Message> displayedItems = table.getVisibleItems(); - for (Message msg : displayedItems) { - table.getSelectionModel().setSelected(msg, false); - } - GetMessageDetailsRequest req = requestFactory.messageDetailsRequest(); - GetMessageDetailsAction action = req.create(GetMessageDetailsAction.class); - final ImapFolder f = req.create(ImapFolder.class); - f.setFullName(folder.getFullName()); - action.setFolder(f); - action.setUid(event.getValue().getUid()); - req.get(action).fire(new Receiver<GetMessageDetailsResult>() { - @Override - public void onSuccess(GetMessageDetailsResult response) { - eventBus.fireEvent(new ExpandMessageEvent(user, folder, event.getValue(), response.getMessageDetails())); - placeController.goTo(new MailFolderPlace(f.getFullName() + "/" + event.getValue().getUid())); - } - - @Override - public void onFailure(ServerFailure error) { - if (error.isFatal()) { - log.log(Level.SEVERE, error.getMessage()); - // TODO write the error message to - // status bar. - throw new RuntimeException(error.getMessage()); - } - } - }); - } - } - - private boolean hasClickedButFirstCol(CellPreviewEvent<Message> event) { - return "click".equals(event.getNativeEvent().getType()) && 0 != event.getColumn(); - } - - }); - grid.addRangeChangeHandler(new RangeChangeEvent.Handler() { - @Override - public void onRangeChange(RangeChangeEvent event) { - fetch(event.getNewRange().getStart()); - } - }); - eventBus.addHandler(LoadMessagesEvent.TYPE, new LoadMessagesEventHandler() { - public void onLoadMessagesEvent(LoadMessagesEvent loadMessagesEvent) { - user = loadMessagesEvent.getUser(); - folder = loadMessagesEvent.getFolder(); - searchValue = loadMessagesEvent.getSearchValue(); - fetch(0); - - } - }); - eventBus.addHandler(LoginEvent.TYPE, new LoginEventHandler() { - public void onLogin(LoginEvent event) { - user = event.getUser(); - folder = new ImapFolderImpl(user.getSettings().getInboxFolderName()); - searchValue = null; - if (!pending) { - pending = true; - Scheduler.get().scheduleFinally(new ScheduledCommand() { - @Override - public void execute() { - pending = false; - fetch(0); - } - }); - } - } - }); } +<<<<<<< HEAD public void fetch(final int start) { FetchMessagesRequest req = requestFactory.messagesRequest(); @@ -253,6 +176,8 @@ public class MessageListView extends Com UiBinder<DataGrid<Message>, MessageListView> { >>>>>>> prepare for place management and history controller ======= +======= +>>>>>>> let messages list activity make use of mvp interface MessageListUiBinder extends UiBinder<DataGrid<Message>, MessageListView> { >>>>>>> coping with reply and forward sending message } @@ -261,6 +186,7 @@ public class MessageListView extends Com <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD @Override public MessagesCellTable getGrid() { return grid; @@ -305,12 +231,17 @@ public class MessageListView extends Com ======= >>>>>>> make login page as one part of the overall layout & splite layout to >>>>>>> little one ======= +======= + +>>>>>>> let messages list activity make use of mvp @Override - public void setFolder(ImapFolder folder) { - this.folder = folder; - if (folder != null) - fetch(0); + public MessagesCellTable getGrid() { + return grid; } +<<<<<<< HEAD >>>>>>> prepare for place management and history controller +======= + +>>>>>>> let messages list activity make use of mvp } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org