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/08/21 18:35:18 UTC
svn commit: r1516205 [2/9] - in /james/hupa/trunk: ./
client/src/main/java/org/apache/hupa/
client/src/main/java/org/apache/hupa/client/
client/src/main/java/org/apache/hupa/client/gin/
client/src/main/java/org/apache/hupa/client/mvp/ client/src/main/j...
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java?rev=1516205&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java Wed Aug 21 16:35:16 2013
@@ -0,0 +1,424 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.client.mvp;
+
+import java.util.ArrayList;
+
+import net.customware.gwt.dispatch.client.DispatchAsync;
+import net.customware.gwt.presenter.client.EventBus;
+import net.customware.gwt.presenter.client.widget.WidgetDisplay;
+import net.customware.gwt.presenter.client.widget.WidgetPresenter;
+
+import org.apache.hupa.client.HandlerRegistrationAdapter;
+import org.apache.hupa.client.HupaCallback;
+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.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.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.user.client.ui.HasValue;
+import com.google.gwt.user.client.ui.SourcesTableEvents;
+import com.google.gwt.user.client.ui.TableListener;
+import com.google.inject.Inject;
+
+@SuppressWarnings("deprecation")
+public class IMAPMessageListPresenter extends WidgetPresenter<IMAPMessageListPresenter.Display>{
+
+ public interface Display extends WidgetDisplay {
+ public HasRowSelectionHandlers getDataTableSelection();
+ public HasPageLoadHandlers getDataTableLoad();
+ public void addTableListener(TableListener listener) ;
+ public void removeTableListener(TableListener listener) ;
+ public void setPostFetchMessageCount(int count);
+ public HasClickHandlers getNewClick();
+ public Message getData(int rowIndex);
+ public HasClickHandlers getDeleteClick();
+ public HasClickHandlers getDeleteAllClick();
+ public HasEnable getDeleteEnable();
+ public void reloadData();
+ public void removeMessages(ArrayList<Message> messages);
+ public ArrayList<Message> getSelectedMessages();
+ public void reset();
+ public HasDialog getConfirmDeleteDialog();
+ public HasDialog getConfirmDeleteAllDialog();
+ public HasClickHandlers getConfirmDeleteDialogClick();
+ public HasClickHandlers getConfirmDeleteAllDialogClick();
+ public void selectAllMessages();
+ public void deselectAllMessages();
+ public HasClickHandlers getSelectAllClick();
+ public HasClickHandlers getSelectNoneClick();
+ public HasClickHandlers getMarkSeenClick();
+ public HasClickHandlers getMarkUnseenClick();
+ public HasEnable getMarkSeenEnable();
+ public HasEnable getMarkUnseenEnable();
+ public HasClickHandlers getRefreshClick();
+ public void redraw();
+ public HasPageChangeHandlers getDataTablePageChange();
+ public void goToPage(int page);
+ public int getCurrentPage();
+ public int getRowsPerPageIndex();
+ public HasChangeHandlers getRowsPerPageChange();
+ public HasClickHandlers getSearchClick();
+ public HasValue<String> getSearchValue();
+ public void fillSearchOracle(ArrayList<Message> messages);
+ public void setExpandLoading(boolean expanding);
+
+ }
+
+ private String searchValue;
+ private User user;
+ private IMAPFolder folder;
+ private DispatchAsync dispatcher;
+ private ShowMessageTableListener tableListener = new ShowMessageTableListener();
+
+ @Inject
+ public IMAPMessageListPresenter(IMAPMessageListPresenter.Display display,EventBus bus,DispatchAsync dispatcher) {
+ super(display,bus);
+ this.dispatcher = dispatcher;
+
+ // add this event on constructor because we don't want to remove it on unbind
+ eventBus.addHandler(LogoutEvent.TYPE, new LogoutEventHandler() {
+
+ public void onLogout(LogoutEvent logoutEvent) {
+ getDisplay().reset();
+ getDisplay().getSearchValue().setValue("");
+
+ // we need to fire a event to notify the history about the reset
+ firePresenterChangedEvent();
+ }
+
+ });
+ }
+
+ @Override
+ protected void onBind() {
+ registerHandler(eventBus.addHandler(MessagesReceivedEvent.TYPE, new MessagesReceivedEventHandler() {
+
+ public void onMessagesReceived(MessagesReceivedEvent event) {
+
+ // fill the oracle
+ display.fillSearchOracle(event.getMessages());
+ }
+
+ }));
+ registerHandler(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));
+ }
+
+ }));
+ registerHandler(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 HupaCallback<MoveMessageResult>(dispatcher, eventBus) {
+ public void callback(MoveMessageResult result) {
+ ArrayList<Message> messageArray = new ArrayList<Message>();
+ messageArray.add(message);
+ display.removeMessages(messageArray);
+ }
+ });
+ }
+
+ }));
+ registerHandler(display.getSelectAllClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ display.deselectAllMessages();
+ display.selectAllMessages();
+ }
+
+ }));
+
+ registerHandler(display.getSelectNoneClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ display.deselectAllMessages();
+ }
+
+ }));
+
+
+ registerHandler(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();
+ }
+
+ }
+
+ }));
+ registerHandler(display.getConfirmDeleteDialogClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ deleteMessages();
+ }
+
+ }));
+
+ registerHandler(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());
+ }
+
+ }));
+
+ registerHandler(display.getDeleteAllClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ display.getConfirmDeleteAllDialog().center();
+ }
+
+ }));
+
+ registerHandler(display.getConfirmDeleteAllDialogClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ dispatcher.execute(new DeleteAllMessages(folder), new HupaCallback<DeleteMessageResult>(dispatcher, eventBus) {
+ public void callback(DeleteMessageResult result) {
+ display.reset();
+ display.reloadData();
+// eventBus.fireEvent(new DecreaseUnseenEvent(user,folder,result.getCount()));
+ }
+ });
+ }
+
+ }));
+ registerHandler(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 HupaCallback<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()));
+ }
+ });
+ }
+
+ }));
+
+ registerHandler(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 HupaCallback<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()));
+ }
+ });
+ }
+
+
+ }));
+ registerHandler(eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {
+
+ public void onFolderSelectionEvent(FolderSelectionEvent event) {
+ folder = event.getFolder();
+ user = event.getUser();
+ firePresenterChangedEvent();
+ }
+
+ }));
+ registerHandler(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);
+ }
+ }
+
+
+
+ })));
+
+ registerHandler(display.getRefreshClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ display.reset();
+ display.reloadData();
+ }
+
+ }));
+ registerHandler(new HandlerRegistrationAdapter(display.getDataTablePageChange().addPageChangeHandler(new PageChangeHandler() {
+
+ public void onPageChange(PageChangeEvent event) {
+ //firePresenterRevealedEvent(true);
+ firePresenterChangedEvent();
+ }
+
+ })));
+ registerHandler(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 HupaCallback<DeleteMessageResult>(dispatcher, eventBus) {
+ public void callback(DeleteMessageResult result) {
+ eventBus.fireEvent(new DecreaseUnseenEvent(user,folder,result.getCount()));
+ }
+ });
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.BasicPresenter#onUnbind()
+ */
+ protected void onUnbind() {
+ display.removeTableListener(tableListener);
+ }
+
+
+ private final class ShowMessageTableListener implements TableListener {
+
+ public void onCellClicked(SourcesTableEvents sender, int row,
+ int cell) {
+
+ display.setExpandLoading(true);
+ Message message = display.getData(row);
+
+ // mark the message as seen and redraw the table to reflect this
+ if (message.getFlags().contains(Message.IMAPFlag.SEEN) == false) {
+ // add flag, fire event and redraw
+ message.getFlags().add(Message.IMAPFlag.SEEN);
+ eventBus.fireEvent(new DecreaseUnseenEvent(user,folder,1));
+
+ display.redraw();
+
+ }
+
+ eventBus.fireEvent(new ExpandMessageEvent(user,folder,message));
+ }
+
+ }
+
+ @Override
+ protected void onRevealDisplay() {
+ display.reloadData();
+ }
+
+ public void revealDisplay(User user, IMAPFolder folder, String searchValue) {
+ this.user = user;
+
+ if (this.folder == null || this.folder.getFullName().equals(folder.getFullName()) == false
+ || (searchValue == null && this.searchValue != null) || (searchValue != null && searchValue.equals(this.searchValue) == false)) {
+ display.reset();
+ display.deselectAllMessages();
+ }
+ display.setExpandLoading(false);
+ this.searchValue = searchValue;
+ this.folder = folder;
+ revealDisplay();
+ }
+
+}
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java?rev=1516205&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java Wed Aug 21 16:35:16 2013
@@ -0,0 +1,800 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.client.mvp;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.hupa.client.HupaCSS;
+import org.apache.hupa.client.HupaConstants;
+import org.apache.hupa.client.HupaMessages;
+import org.apache.hupa.client.bundles.HupaImageBundle;
+import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
+import org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display;
+import org.apache.hupa.client.widgets.CommandsBar;
+import org.apache.hupa.client.widgets.ConfirmDialogBox;
+import org.apache.hupa.client.widgets.DragRefetchPagingScrollTable;
+import org.apache.hupa.client.widgets.EnableButton;
+import org.apache.hupa.client.widgets.HasDialog;
+import org.apache.hupa.client.widgets.DragRefetchPagingScrollTable.DragHandlerFactory;
+import org.apache.hupa.shared.data.Message;
+import org.apache.hupa.shared.data.Message.IMAPFlag;
+import org.apache.hupa.widgets.ui.HasEnable;
+import org.apache.hupa.widgets.ui.Loading;
+import org.apache.hupa.widgets.ui.PagingOptions;
+import org.cobogw.gwt.user.client.ui.Button;
+import org.cobogw.gwt.user.client.ui.ButtonBar;
+
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.event.dom.client.HasChangeHandlers;
+import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyUpEvent;
+import com.google.gwt.event.dom.client.KeyUpHandler;
+import com.google.gwt.gen2.table.client.AbstractColumnDefinition;
+import com.google.gwt.gen2.table.client.CachedTableModel;
+import com.google.gwt.gen2.table.client.CellRenderer;
+import com.google.gwt.gen2.table.client.ColumnDefinition;
+import com.google.gwt.gen2.table.client.DefaultTableDefinition;
+import com.google.gwt.gen2.table.client.FixedWidthFlexTable;
+import com.google.gwt.gen2.table.client.FixedWidthGrid;
+import com.google.gwt.gen2.table.client.FixedWidthGridBulkRenderer;
+import com.google.gwt.gen2.table.client.MutableTableModel;
+import com.google.gwt.gen2.table.client.AbstractScrollTable.ColumnResizePolicy;
+import com.google.gwt.gen2.table.client.AbstractScrollTable.ResizePolicy;
+import com.google.gwt.gen2.table.client.AbstractScrollTable.ScrollPolicy;
+import com.google.gwt.gen2.table.client.AbstractScrollTable.SortPolicy;
+import com.google.gwt.gen2.table.client.SelectionGrid.SelectionPolicy;
+import com.google.gwt.gen2.table.client.TableDefinition.AbstractCellView;
+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.PageLoadEvent;
+import com.google.gwt.gen2.table.event.client.PageLoadHandler;
+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.Composite;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HasValue;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Hyperlink;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
+import com.google.gwt.user.client.ui.SuggestBox;
+import com.google.gwt.user.client.ui.TableListener;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.inject.Inject;
+
+
+@SuppressWarnings("deprecation")
+public class IMAPMessageListView extends Composite implements Display{
+
+ private static final int DEFAULT_MSG_PAGE_SIZE = 25;
+
+ @SuppressWarnings("unused")
+ private HupaMessages messages;
+ private HupaImageBundle imageBundle;
+
+ private PagingOptions pagingBar;
+ private DragRefetchPagingScrollTable<Message> mailTable;
+ private CachedTableModel<Message> cTableModel;
+
+ private FixedWidthGrid dataTable = createDataTable();
+ private EnableButton deleteMailButton;
+ private Button newMailButton;
+ private Button deleteAllMailButton;
+ private ConfirmDialogBox confirmBox = new ConfirmDialogBox();
+ private ConfirmDialogBox confirmDeleteAllBox = new ConfirmDialogBox();
+ private EnableButton markSeenButton;
+ private EnableButton markUnSeenButton;
+
+ private ListBox pageBox = new ListBox();
+ private Hyperlink allLink;
+ private Hyperlink noneLink;
+ private Hyperlink refreshLink;
+ private MultiWordSuggestOracle oracle = new MultiWordSuggestOracle(" ,@");
+ private SuggestBox searchBox = new SuggestBox(oracle);
+ private Button searchButton;
+ private Loading loading;
+
+ @Inject
+ public IMAPMessageListView(final PagingScrollTableRowDragController controller, final MessageTableModel mTableModel, final HupaConstants constants, final HupaMessages messages, final HupaImageBundle imageBundle) {
+ this.messages = messages;
+ this.imageBundle = imageBundle;
+
+ deleteMailButton = new EnableButton(constants.deleteMailButton());
+ newMailButton = new Button(constants.newMailButton());
+ 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(),"");
+ searchButton = new Button(constants.searchButton());
+ loading = new Loading(constants.loading());
+ this.cTableModel = new CachedTableModel<Message>(mTableModel);
+ cTableModel.setRowCount(MutableTableModel.UNKNOWN_ROW_COUNT);
+ mTableModel.addRowCountChangeHandler(new RowCountChangeHandler() {
+
+ public void onRowCountChange(RowCountChangeEvent event) {
+ cTableModel.setRowCount(event.getNewRowCount());
+ }
+ });
+
+ VerticalPanel msgListContainer = new VerticalPanel();
+ msgListContainer.addStyleName(HupaCSS.C_msg_list_container);
+ mailTable = new DragRefetchPagingScrollTable<Message>(
+ cTableModel, dataTable, new FixedWidthFlexTable(),
+ createTableDefinitation(),controller,1);
+ mailTable.setPageSize(20);
+ mailTable.setDragHandler(0,30, new DragHandlerFactory() {
+
+ public Widget createHandler() {
+ return new Image(imageBundle.readyToMoveMailIcon());
+ }
+
+ });
+
+ HTML emptyTable = new HTML(constants.emptyMailTable());
+ emptyTable.addStyleName(HupaCSS.C_msg_table_empty);
+ mailTable.setEmptyTableWidget(emptyTable);
+ FixedWidthGridBulkRenderer<Message> bulkRenderer = new FixedWidthGridBulkRenderer<Message>(mailTable.getDataTable(),mailTable);
+ mailTable.setBulkRenderer(bulkRenderer);
+ mailTable.addStyleName(HupaCSS.C_msg_table);
+ mailTable.setCellPadding(0);
+ mailTable.setResizePolicy(ResizePolicy.FILL_WIDTH);
+ mailTable.setColumnResizePolicy(ColumnResizePolicy.MULTI_CELL);
+ mailTable.setScrollPolicy(ScrollPolicy.DISABLED);
+ mailTable.addPageLoadHandler(onMessagePageLoadHandler);
+ mailTable.setPageSize(DEFAULT_MSG_PAGE_SIZE);
+ mailTable.getDataTable().setCellSpacing(0);
+ mailTable.setSortPolicy(SortPolicy.DISABLED);
+
+ mailTable.fillWidth();
+
+ pagingBar = new PagingOptions(mailTable, constants, loading);
+
+ HorizontalPanel buttonBar = new HorizontalPanel();
+ buttonBar.addStyleName(HupaCSS.C_buttons);
+
+ ButtonBar navigatorBar = new ButtonBar();
+ navigatorBar.add(newMailButton);
+ deleteMailButton.setEnabled(false);
+ navigatorBar.add(deleteMailButton);
+ buttonBar.add(navigatorBar);
+ buttonBar.add(deleteAllMailButton);
+
+ ButtonBar markButtonBar = new ButtonBar();
+ markButtonBar.add(markSeenButton);
+ markButtonBar.add(markUnSeenButton);
+ buttonBar.add(markButtonBar);
+ buttonBar.add(refreshLink);
+ pageBox.addItem("" + DEFAULT_MSG_PAGE_SIZE);
+ pageBox.addItem("" + (DEFAULT_MSG_PAGE_SIZE * 2));
+ pageBox.addItem("" + (DEFAULT_MSG_PAGE_SIZE * 4));
+ pageBox.addChangeHandler(new ChangeHandler() {
+ public void onChange(ChangeEvent event) {
+ if (pageBox.getSelectedIndex() > 0)
+ mailTable.setPageSize(Integer.parseInt(pageBox.getItemText(pageBox.getSelectedIndex())));
+ }
+ });
+
+
+ HorizontalPanel searchPanel = new HorizontalPanel();
+ searchPanel.addStyleName(HupaCSS.C_buttons);
+
+ searchBox.addStyleName(HupaCSS.C_msg_search);
+ searchBox.setAnimationEnabled(true);
+ searchBox.setAutoSelectEnabled(false);
+ searchBox.setLimit(20);
+ searchBox.addKeyUpHandler(new KeyUpHandler() {
+
+ public void onKeyUp(KeyUpEvent event) {
+ if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
+ searchButton.click();
+ }
+ }
+
+ });
+ searchPanel.add(searchBox);
+ searchPanel.add(searchButton);
+ searchPanel.add(pageBox);
+
+ HorizontalPanel hPanel = new HorizontalPanel();
+ hPanel.addStyleName(HupaCSS.C_msg_top_bar);
+ hPanel.add(buttonBar);
+ hPanel.add(searchPanel);
+ hPanel.setCellHorizontalAlignment(searchPanel, HorizontalPanel.ALIGN_RIGHT);
+
+ msgListContainer.add(hPanel);
+
+ CommandsBar commandsBar = new CommandsBar();
+ commandsBar.addLeft(new HTML(constants.select() +":"));
+ commandsBar.addLeft(allLink);
+ commandsBar.addLeft(noneLink);
+ commandsBar.add(loading);
+ commandsBar.addRight(pagingBar);
+
+ msgListContainer.add(commandsBar);
+ msgListContainer.add(mailTable);
+
+ confirmBox.setText(messages.confirmDeleteMessages());
+ confirmDeleteAllBox.setText(messages.confirmDeleteAllMessages());
+ initWidget(msgListContainer);
+ }
+
+
+ PageLoadHandler onMessagePageLoadHandler = new PageLoadHandler() {
+
+ public void onPageLoad(PageLoadEvent event) {
+
+ for (int i = 0; i < mailTable.getDataTable().getRowCount(); i++) {
+ mailTable.getDataTable().getRowFormatter().setStyleName(i, HupaCSS.C_msg_table_row);
+ Message msg = mailTable.getRowValue(i);
+ if (msg != null) {
+ if (msg.getFlags().contains(IMAPFlag.SEEN) == false) {
+ mailTable.getDataTable().getRowFormatter().addStyleName(i,HupaCSS.C_msg_table_unseen);
+ } else {
+ mailTable.getDataTable().getRowFormatter().removeStyleName(i, HupaCSS.C_msg_table_seen);
+ }
+ }
+ }
+
+ String nrows = String.valueOf(mailTable.getPageSize());
+ for (int i = 0; i<pageBox.getItemCount(); i++) {
+ if (nrows.equals(pageBox.getItemText(i)))
+ pageBox.setSelectedIndex(i);
+ }
+ }
+
+ };
+
+ private DefaultTableDefinition<Message> createTableDefinitation() {
+ DefaultTableDefinition<Message> def = new DefaultTableDefinition<Message>(createColumnDefinitionList());
+
+ return def;
+ }
+
+
+ /**
+ * @return the newly created data table.
+ */
+ private FixedWidthGrid createDataTable() {
+ FixedWidthGrid dataTable = new FixedWidthGrid();
+ dataTable.setSelectionPolicy(SelectionPolicy.CHECKBOX);
+ return dataTable;
+ }
+
+ /**
+ * Create a new List which holds all needed ColumnDefinitions
+ *
+ */
+ private List<ColumnDefinition<Message, ?>> createColumnDefinitionList() {
+ List<ColumnDefinition<Message, ?>> cList = new ArrayList<ColumnDefinition<Message, ?>>();
+
+ FromColumnDefination from = new FromColumnDefination();
+ from.setCellRenderer(new WhiteSpaceCellRenderer<Message>());
+ from.setColumnTruncatable(true);
+ from.setPreferredColumnWidth(250);
+ from.setMinimumColumnWidth(150);
+ from.setMaximumColumnWidth(300);
+ cList.add(from);
+
+
+ SubjectColumnDefination subject =new SubjectColumnDefination();
+ subject.setCellRenderer(new WhiteSpaceCellRenderer<Message>());
+ subject.setColumnTruncatable(true);
+ subject.setPreferredColumnWidth(800);
+ subject.setMinimumColumnWidth(200);
+ cList.add(subject);
+
+ AttachmentColumnDefination attachment = new AttachmentColumnDefination();
+ attachment.setColumnTruncatable(false);
+ // display an image if the message contains an attachment
+ attachment.setCellRenderer(new CellRenderer<Message, Boolean>() {
+
+ public void renderRowValue(Message rowValue,
+ ColumnDefinition<Message, Boolean> columnDef,
+ AbstractCellView<Message> view) {
+ if (columnDef.getCellValue(rowValue)) {
+ view.setWidget(new Image(imageBundle.attachmentIcon()));
+ } else {
+ view.setHTML(" ");
+ }
+
+ }
+
+ });
+
+ attachment.setPreferredColumnWidth(20);
+ attachment.setMinimumColumnWidth(15);
+ attachment.setMaximumColumnWidth(25);
+ cList.add(attachment);
+
+ DateColumnDefination date = new DateColumnDefination();
+ date.setColumnTruncatable(true);
+ // set a special renderer for the date
+ date.setCellRenderer(new CellRenderer<Message, Date>() {
+
+ public void renderRowValue(Message rowValue,
+ ColumnDefinition<Message, Date> columnDef,
+ AbstractCellView<Message> view) {
+ DateTimeFormat dtformat;
+ Date rDate = rowValue.getReceivedDate();
+ int rYear = rDate.getYear();
+ int rMonth = rDate.getMonth();
+ int rDay = rDate.getDate();
+
+ Date now = new Date();
+ int nowYear = now.getYear();
+ int nowMonth = now.getMonth();
+ int nowDay = now.getDate();
+
+ if (rYear < nowYear) {
+ dtformat = DateTimeFormat.getFormat("dd.MMM.yyyy");
+ } else if (rMonth < nowMonth || (rMonth == nowMonth && rDay < nowDay)) {
+ dtformat = DateTimeFormat.getFormat("dd.MMM.");
+ } else if (rDay == nowDay){
+ dtformat = DateTimeFormat.getFormat("HH:mm");
+ } else {
+
+ dtformat = DateTimeFormat.getFormat("dd.MMM.yyyy HH:mm");
+ }
+
+ view.setHTML(dtformat.format(rDate));
+ view.setHorizontalAlignment(HorizontalPanel.ALIGN_RIGHT);
+ }
+
+ });
+ date.setPreferredColumnWidth(100);
+ date.setMinimumColumnWidth(100);
+ date.setMaximumColumnWidth(150);
+
+ cList.add(date);
+
+ return cList;
+ }
+
+
+
+
+ /**
+ * ColumnDefination which display if the message contains an attachment
+ * @author Norman
+ *
+ */
+ private static final class AttachmentColumnDefination extends AbstractColumnDefinition<Message, Boolean> {
+
+ @Override
+ public Boolean getCellValue(Message rowValue) {
+ return rowValue.hasAttachment();
+ }
+
+ @Override
+ public void setCellValue(Message rowValue, Boolean cellValue) {
+ }
+
+ }
+
+ /**
+ * ColumnDefination which display the From
+ *
+ */
+ private static final class FromColumnDefination extends AbstractColumnDefinition<Message, String> {
+
+ @Override
+ public String getCellValue(Message rowValue) {
+ return rowValue.getFrom();
+ }
+
+ @Override
+ public void setCellValue(Message rowValue, String cellValue) {
+ rowValue.setFrom(cellValue);
+ }
+
+ }
+
+ /**
+ * ColumnDefination which display the Subject
+ *
+ */
+ private static final class SubjectColumnDefination extends AbstractColumnDefinition<Message, String> {
+
+ @Override
+ public String getCellValue(Message rowValue) {
+ return rowValue.getSubject();
+ }
+
+ @Override
+ public void setCellValue(Message rowValue, String cellValue) {
+ rowValue.setSubject(cellValue);
+
+ }
+
+ }
+
+ /**
+ * ColumnDefination which display the Date
+ *
+ */
+ private static final class DateColumnDefination extends AbstractColumnDefinition<Message, Date> {
+
+ @Override
+ public Date getCellValue(Message rowValue) {
+ return rowValue.getReceivedDate();
+ }
+
+ @Override
+ public void setCellValue(Message rowValue, Date cellValue) {
+ rowValue.setReceivedDate(cellValue);
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getDataTableSelection()
+ */
+ public HasRowSelectionHandlers getDataTableSelection() {
+ return mailTable.getDataTable();
+ }
+
+
+ public void reloadData() {
+ mailTable.reloadPage();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#reset()
+ */
+ public void reset() {
+ pageBox.setSelectedIndex(0);
+ cTableModel.clearCache();
+ cTableModel.setRowCount(CachedTableModel.UNKNOWN_ROW_COUNT);
+ mailTable.gotoFirstPage();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getDataTableLoad()
+ */
+ public HasPageLoadHandlers getDataTableLoad() {
+ return mailTable;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.widget.WidgetDisplay#asWidget()
+ */
+ public Widget asWidget() {
+ return this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getDeleteClick()
+ */
+ public HasClickHandlers getDeleteClick() {
+ return deleteMailButton;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getNewClick()
+ */
+ public HasClickHandlers getNewClick() {
+ return newMailButton;
+ }
+
+ /**
+ * Renderer which fill empty rows with a whitespace
+ *
+ * @param <E> RowType
+ */
+ private static final class WhiteSpaceCellRenderer<E> implements CellRenderer<E, String> {
+
+ /*
+ * (non-Javadoc)
+ * @see com.google.gwt.gen2.table.client.CellRenderer#renderRowValue(java.lang.Object, com.google.gwt.gen2.table.client.ColumnDefinition, com.google.gwt.gen2.table.client.TableDefinition.AbstractCellView)
+ */
+ public void renderRowValue(E rowValue,
+ ColumnDefinition<E, String> columnDef, AbstractCellView<E> view) {
+ String cellValue = columnDef.getCellValue(rowValue);
+ if (cellValue == null || cellValue.length() < 1) {
+ view.setHTML(" ");
+ } else {
+ view.setHTML(cellValue);
+ }
+ }
+
+
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getData(int)
+ */
+ public Message getData(int rowIndex) {
+ return mailTable.getRowValue(rowIndex);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getConfirmDialog()
+ */
+ public HasDialog getConfirmDeleteDialog() {
+ return confirmBox;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getConfirmDeleteDialogClick()
+ */
+ public HasClickHandlers getConfirmDeleteDialogClick() {
+ return confirmBox;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getConfirmDeleteAllDialog()
+ */
+ public HasDialog getConfirmDeleteAllDialog() {
+ return confirmDeleteAllBox;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getConfirmDeleteAllDialogClick()
+ */
+ public HasClickHandlers getConfirmDeleteAllDialogClick() {
+ return confirmDeleteAllBox;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#deselectAllMessages()
+ */
+ public void deselectAllMessages() {
+ mailTable.getDataTable().deselectAllRows();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getSelectAllClick()
+ */
+ public HasClickHandlers getSelectAllClick() {
+ return allLink;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getSelectNoneClick()
+ */
+ public HasClickHandlers getSelectNoneClick() {
+ return noneLink;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#selectAllMessages()
+ */
+ public void selectAllMessages() {
+ mailTable.getDataTable().selectAllRows();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getSelectedMessages()
+ */
+ public ArrayList<Message> getSelectedMessages() {
+ return mailTable.getSelectedRows();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#removeMessages(java.util.ArrayList)
+ */
+ public void removeMessages(ArrayList<Message> messages) {
+ mailTable.removeRows(messages);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#addTableListener(com.google.gwt.user.client.ui.TableListener)
+ */
+ public void addTableListener(TableListener listener) {
+ dataTable.addTableListener(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#removeTableListener(com.google.gwt.user.client.ui.TableListener)
+ */
+ public void removeTableListener(TableListener listener) {
+ dataTable.removeTableListener(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#setPostFetchMessageCount(int)
+ */
+ public void setPostFetchMessageCount(int count) {
+ cTableModel.setPostCachedRowCount(count);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#redraw()
+ */
+ public void redraw() {
+ mailTable.reloadPage();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getDeleteAllClick()
+ */
+ public HasClickHandlers getDeleteAllClick() {
+ return deleteAllMailButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getMarkSeenClick()
+ */
+ public HasClickHandlers getMarkSeenClick() {
+ return markSeenButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getMarkUnseenClick()
+ */
+ public HasClickHandlers getMarkUnseenClick() {
+ return markUnSeenButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getDeleteEnable()
+ */
+ public HasEnable getDeleteEnable() {
+ return deleteMailButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getMarkSeenEnable()
+ */
+ public HasEnable getMarkSeenEnable() {
+ return markSeenButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getMarkUnseenEnable()
+ */
+ public HasEnable getMarkUnseenEnable() {
+ return markUnSeenButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getRefreshClick()
+ */
+ public HasClickHandlers getRefreshClick() {
+ return refreshLink;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#goToPage(int)
+ */
+ public void goToPage(int page) {
+ if (page != mailTable.getCurrentPage()) {
+ mailTable.gotoPage(page, false);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getCurrentPage()
+ */
+ public int getCurrentPage() {
+ return mailTable.getCurrentPage();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getDataTablePageChange()
+ */
+ public HasPageChangeHandlers getDataTablePageChange() {
+ return mailTable;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getRowsPerPageIndex()
+ */
+ public int getRowsPerPageIndex() {
+ return pageBox.getSelectedIndex();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display#getRowsPerPageChange()
+ */
+ public HasChangeHandlers getRowsPerPageChange() {
+ return pageBox;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MainPresenter.Display#getSearchClick()
+ */
+ public HasClickHandlers getSearchClick() {
+ return searchButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MainPresenter.Display#getSearchValue()
+ */
+ public HasValue<String> getSearchValue() {
+ return searchBox;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MainPresenter.Display#fillSearchOracle(java.util.ArrayList)
+ */
+ public void fillSearchOracle(ArrayList<Message> messages) {
+ for (Message m : messages) {
+ String subject = m.getSubject();
+ String from = m.getFrom();
+ if (subject != null && subject.trim().length() > 0) {
+ oracle.add(subject.trim());
+ }
+ if (from != null && from.trim().length() > 0) {
+ oracle.add(from.trim());
+ }
+ }
+ //searchBox.setText("");
+ }
+
+ public void setExpandLoading(boolean expanding) {
+ if (expanding) {
+ loading.show();
+ } else {
+ loading.hide();
+ }
+ }
+}
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java?rev=1516205&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java Wed Aug 21 16:35:16 2013
@@ -0,0 +1,164 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.client.mvp;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.customware.gwt.presenter.client.EventBus;
+import net.customware.gwt.presenter.client.widget.WidgetDisplay;
+import net.customware.gwt.presenter.client.widget.WidgetPresenter;
+
+import org.apache.hupa.client.CachingDispatchAsync;
+import org.apache.hupa.client.HupaCallback;
+import org.apache.hupa.shared.SConsts;
+import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.Message;
+import org.apache.hupa.shared.data.MessageAttachment;
+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.ForwardMessageEvent;
+import org.apache.hupa.shared.events.LoadMessagesEvent;
+import org.apache.hupa.shared.events.ReplyMessageEvent;
+import org.apache.hupa.shared.rpc.DeleteMessageByUid;
+import org.apache.hupa.shared.rpc.DeleteMessageResult;
+
+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.user.client.Window;
+import com.google.inject.Inject;
+
+public class IMAPMessagePresenter extends WidgetPresenter<IMAPMessagePresenter.Display>{
+
+ public interface Display extends WidgetDisplay{
+
+ public void setHeaders(Message msg);
+ public void setAttachments(List<MessageAttachment> attachements, String folder, long uid);
+ public void setContent(String content);
+
+ public HasClickHandlers getShowRawMessageClick();
+ public HasClickHandlers getDeleteButtonClick();
+ public HasClickHandlers getReplyButtonClick();
+ public HasClickHandlers getReplyAllButtonClick();
+ public HasClickHandlers getForwardButtonClick();
+ public HasClickHandlers getBackButtonClick();
+ }
+
+ private MessageDetails messageDetails;
+ private Message message;
+ private CachingDispatchAsync dispatcher;
+ private IMAPFolder folder;
+ private User user;
+
+ @Inject
+ private IMAPMessagePresenter(IMAPMessagePresenter.Display display,EventBus bus, CachingDispatchAsync dispatcher) {
+ super(display,bus);
+ this.dispatcher = dispatcher;
+ }
+
+
+ public void revealDisplay(User user, IMAPFolder folder, Message message, MessageDetails messageDetails) {
+ this.message = message;
+ this.messageDetails = messageDetails;
+ this.folder = folder;
+ this.user = user;
+ updateDisplay();
+ firePresenterChangedEvent();
+ revealDisplay();
+ }
+
+ private void updateDisplay() {
+ display.setAttachments(messageDetails.getMessageAttachments(), folder.getFullName(),message.getUid());
+ display.setHeaders(message);
+ display.setContent(messageDetails.getText());
+ }
+
+ @Override
+ protected void onBind() {
+ registerHandler(display.getDeleteButtonClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ ArrayList<Long> uidList = new ArrayList<Long>();
+ uidList.add(message.getUid());
+ dispatcher.execute(new DeleteMessageByUid(folder, uidList), new HupaCallback<DeleteMessageResult>(dispatcher, eventBus) {
+ public void callback(DeleteMessageResult result) {
+ eventBus.fireEvent(new LoadMessagesEvent(user,folder));
+ }
+ });
+ }
+
+ }));
+
+ registerHandler(display.getForwardButtonClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ eventBus.fireEvent(new ForwardMessageEvent(user,folder,message, messageDetails));
+ }
+
+ }));
+
+ registerHandler(display.getReplyButtonClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ eventBus.fireEvent(new ReplyMessageEvent(user,folder,message, messageDetails, false));
+ }
+
+ }));
+
+ registerHandler(display.getReplyAllButtonClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ eventBus.fireEvent(new ReplyMessageEvent(user,folder,message, messageDetails, true));
+ }
+
+ }));
+ registerHandler(display.getBackButtonClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ eventBus.fireEvent(new BackEvent());
+ }
+
+ }));
+ registerHandler(display.getShowRawMessageClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ String message_url = GWT.getModuleBaseURL() + SConsts.SERVLET_SOURCE +
+ "?" + SConsts.PARAM_UID + "=" + message.getUid() +
+ "&" + SConsts.PARAM_FOLDER + "=" + folder.getFullName();
+ Window.open(message_url, "_blank", "");
+ }
+
+ }));
+ }
+
+
+ @Override
+ protected void onUnbind() {
+ }
+
+
+ @Override
+ protected void onRevealDisplay() {
+
+ }
+}
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java?rev=1516205&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/IMAPMessageView.java Wed Aug 21 16:35:16 2013
@@ -0,0 +1,201 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.client.mvp;
+
+import java.util.List;
+
+import org.apache.hupa.client.HupaCSS;
+import org.apache.hupa.client.HupaConstants;
+import org.apache.hupa.client.bundles.HupaImageBundle;
+import org.apache.hupa.client.mvp.IMAPMessagePresenter.Display;
+import org.apache.hupa.client.widgets.CommandsBar;
+import org.apache.hupa.client.widgets.MessageHeaders;
+import org.apache.hupa.shared.SConsts;
+import org.apache.hupa.shared.Util;
+import org.apache.hupa.shared.data.Message;
+import org.apache.hupa.shared.data.MessageAttachment;
+import org.apache.hupa.widgets.ui.Loading;
+import org.cobogw.gwt.user.client.ui.Button;
+
+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.user.client.DOM;
+import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Hyperlink;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.ScrollPanel;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.inject.Inject;
+
+public class IMAPMessageView extends Composite implements Display{
+
+ public final static int DELETE_BUTTON = 0;
+ public final static int REPLY_BUTTON = 1;
+ public final static int REPLY_ALL_BUTTON = 2;
+
+ private HupaImageBundle imageBundle;
+
+ private VerticalPanel messageContainer = new VerticalPanel();
+ private MessageHeaders headers;
+ private CommandsBar buttonsBar = new CommandsBar();
+ private HTML msgArea = new HTML();
+
+ private Label from = new Label();
+ private Label cc = new Label();
+ private Label to = new Label();
+ private Label subject = new Label();
+
+ private Button deleteMsgButton = new Button();
+ private Button replyMsgButton = new Button();
+ private Button replyAllMsgButton = new Button();
+ private Button forwardMsgButton = new Button();
+ private Hyperlink showRawButton;
+ private Hyperlink backButton;
+ private FlowPanel attachments = new FlowPanel();
+
+ private Loading loading;
+
+ @Inject
+ public IMAPMessageView(HupaConstants constants, HupaImageBundle imageBundle) {
+ this.imageBundle = imageBundle;
+
+ loading = new Loading(constants.loading());
+ showRawButton = new Hyperlink(constants.rawButton(),"");
+ backButton = new Hyperlink(constants.backButton(),"");
+ headers = new MessageHeaders(constants);
+ deleteMsgButton.setText(constants.deleteMailButton());
+ replyMsgButton.setText(constants.replyMailButton());
+ replyAllMsgButton.setText(constants.replyAllMailButton());
+ forwardMsgButton.setText(constants.forwardMailButton());
+
+ messageContainer.addStyleName(HupaCSS.C_msgview_container);
+
+ buttonsBar.add(replyMsgButton);
+ buttonsBar.add(replyAllMsgButton);
+ buttonsBar.add(deleteMsgButton);
+ buttonsBar.add(forwardMsgButton);
+ buttonsBar.add(loading);
+ buttonsBar.add(showRawButton);
+ buttonsBar.add(backButton);
+
+ ScrollPanel scrollPanel = new ScrollPanel();
+ scrollPanel.addStyleName(HupaCSS.C_msgview_content);
+ scrollPanel.setAlwaysShowScrollBars(false);
+ scrollPanel.add(msgArea);
+
+ messageContainer.add(headers);
+ messageContainer.add(buttonsBar);
+ messageContainer.add(scrollPanel);
+
+ loading.hide();
+
+ initWidget(messageContainer);
+ }
+
+ public Widget asWidget() {
+ return this;
+ }
+
+ public void startProcessing() {
+ loading.show();
+ }
+
+ public void stopProcessing() {
+ loading.show();
+ }
+
+ public HasClickHandlers getDeleteButtonClick() {
+ return deleteMsgButton;
+ }
+
+ public void setAttachments(List<MessageAttachment> attachements,
+ final String folder,
+ final long uid) {
+
+ attachments.clear();
+ final Element downloadIframe = RootPanel.get("__download").getElement();
+ if (attachements != null) {
+ for (final MessageAttachment messageAttachment : attachements) {
+ Label link = new Label(messageAttachment.getName() + " (" + messageAttachment.getSize() / 1024 + "kB)");
+ link.setStyleName(HupaCSS.C_hyperlink);
+ link.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ String url = GWT.getModuleBaseURL() + SConsts.SERVLET_DOWNLOAD
+ + "?" + SConsts.PARAM_NAME + "=" + messageAttachment.getName()
+ + "&" + SConsts.PARAM_FOLDER + "=" + folder
+ + "&" + SConsts.PARAM_UID + "=" + uid;
+ if (downloadIframe == null)
+ Window.open(url,"_blank", "");
+ else
+ DOM.setElementAttribute(downloadIframe, "src", url);
+ }
+ });
+ HorizontalPanel aPanel = new HorizontalPanel();
+ aPanel.addStyleName(HupaCSS.C_attachment);
+ aPanel.add(new Image(imageBundle.attachmentIcon()));
+ aPanel.add(link);
+ attachments.add(aPanel);
+ }
+ }
+ }
+
+ public HasClickHandlers getForwardButtonClick() {
+ return forwardMsgButton;
+ }
+
+ public HasClickHandlers getReplyAllButtonClick() {
+ return replyAllMsgButton;
+ }
+
+ public HasClickHandlers getReplyButtonClick() {
+ return replyMsgButton;
+ }
+
+ public HasClickHandlers getBackButtonClick() {
+ return backButton;
+ }
+
+ public HasClickHandlers getShowRawMessageClick() {
+ return showRawButton;
+ }
+
+ public void setHeaders(Message message) {
+ from.setText(message.getFrom());
+ cc.setText(Util.listToString(message.getCc()));
+ to.setText(Util.listToString(message.getTo()));
+ subject.setText(message.getSubject());
+ headers.setValues(from, to, cc, null, subject, attachments);
+ }
+
+ public void setContent(String content) {
+ msgArea.setHTML(content);
+ }
+
+}
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginPresenter.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginPresenter.java?rev=1516205&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginPresenter.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginPresenter.java Wed Aug 21 16:35:16 2013
@@ -0,0 +1,141 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.client.mvp;
+
+import net.customware.gwt.dispatch.client.DispatchAsync;
+import net.customware.gwt.presenter.client.EventBus;
+import net.customware.gwt.presenter.client.widget.WidgetDisplay;
+import net.customware.gwt.presenter.client.widget.WidgetPresenter;
+
+import org.apache.hupa.client.HupaCallback;
+import org.apache.hupa.client.HupaConstants;
+import org.apache.hupa.shared.events.FlashEvent;
+import org.apache.hupa.shared.events.LoginEvent;
+import org.apache.hupa.shared.events.SessionExpireEvent;
+import org.apache.hupa.shared.events.SessionExpireEventHandler;
+import org.apache.hupa.shared.rpc.LoginUser;
+import org.apache.hupa.shared.rpc.LoginUserResult;
+
+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.user.client.ui.Focusable;
+import com.google.gwt.user.client.ui.HasValue;
+import com.google.inject.Inject;
+
+/**
+ * Presenter which handles the Login of and user to the IMAP-Server
+ *
+ *
+ */
+public class LoginPresenter extends WidgetPresenter<LoginPresenter.Display>{
+
+ private HupaConstants constants = GWT.create(HupaConstants.class);
+ private int minUsernameLength = 1;
+ private int minPasswordLength = 1;
+
+ public interface Display extends WidgetDisplay{
+ public HasClickHandlers getLoginClick();
+ public HasClickHandlers getResetClick();
+ public HasValue<String> getUserNameValue();
+ public HasValue<String> getPasswordValue();
+ public Focusable getUserNameFocus();
+ public void setLoading(boolean loading);
+ }
+
+ private DispatchAsync dispatcher;
+
+ @Inject
+ public LoginPresenter(LoginPresenter.Display display,EventBus bus,DispatchAsync dispatcher) {
+ super(display,bus);
+ this.dispatcher = dispatcher;
+ }
+
+ /**
+ * Try to login the user
+ */
+ private void doLogin() {
+ String user = display.getUserNameValue().getValue();
+ String pass = display.getPasswordValue().getValue();
+
+ if (user.length() < minUsernameLength || pass.length() < minPasswordLength)
+ return;
+
+ display.setLoading(true);
+ dispatcher.execute(new LoginUser(user, pass), new HupaCallback<LoginUserResult>(dispatcher, eventBus, display) {
+ public void callback(LoginUserResult result) {
+ display.setLoading(false);
+ eventBus.fireEvent(new LoginEvent(result.getUser()));
+ doReset();
+ }
+ public void callbackError(Throwable caught) {
+ display.setLoading(false);
+ eventBus.fireEvent(new FlashEvent(constants.loginInvalid(), 4000));
+ doReset();
+ }
+ });
+ }
+
+ /**
+ * Reset display
+ */
+ private void doReset() {
+ display.getUserNameValue().setValue("");
+ display.getPasswordValue().setValue("");
+ display.getUserNameFocus().setFocus(true);
+ }
+
+ @Override
+ protected void onBind() {
+ registerHandler(display.getLoginClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ doLogin();
+ }
+
+ }));
+ registerHandler(display.getResetClick().addClickHandler(new ClickHandler() {
+
+ public void onClick(ClickEvent event) {
+ doReset();
+ }
+
+ }));
+
+ registerHandler(eventBus.addHandler(SessionExpireEvent.TYPE, new SessionExpireEventHandler() {
+
+ public void onSessionExpireEvent(SessionExpireEvent event) {
+ eventBus.fireEvent(new FlashEvent(constants.sessionTimedOut(), 4000));
+ }
+
+ }));
+ }
+
+ @Override
+ protected void onUnbind() {
+ // Nothing to do
+ }
+
+ @Override
+ protected void onRevealDisplay() {
+ // Nothing to do
+ }
+}
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java?rev=1516205&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/LoginView.java Wed Aug 21 16:35:16 2013
@@ -0,0 +1,182 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.hupa.client.mvp;
+
+import org.apache.hupa.client.HupaCSS;
+import org.apache.hupa.client.HupaConstants;
+import org.apache.hupa.widgets.ui.Loading;
+import org.apache.hupa.widgets.ui.RndPanel;
+import org.cobogw.gwt.user.client.ui.Button;
+import org.cobogw.gwt.user.client.ui.ButtonBar;
+
+import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyUpEvent;
+import com.google.gwt.event.dom.client.KeyUpHandler;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.Focusable;
+import com.google.gwt.user.client.ui.HasValue;
+import com.google.gwt.user.client.ui.PasswordTextBox;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.inject.Inject;
+
+/**
+ * View which shows the Login from
+ *
+ */
+public class LoginView extends Composite implements KeyUpHandler,LoginPresenter.Display{
+
+ private Button loginButton;
+ private Button resetButton;
+ private TextBox usernameTextBox = new TextBox();
+ private PasswordTextBox passwordTextBox = new PasswordTextBox();
+ private Loading loading;
+ @Inject
+ public LoginView(HupaConstants constants) {
+
+ VerticalPanel mainContainer = new VerticalPanel();
+ RndPanel rPanel = new RndPanel();
+ FlexTable formPanel = new FlexTable();
+ ButtonBar buttonBar = new ButtonBar();
+ loginButton = new Button(constants.loginButton());
+ resetButton = new Button(constants.resetButton());
+ loading = new Loading(constants.loading());
+
+ mainContainer.setStyleName(HupaCSS.C_login_container);
+ formPanel.addStyleName(HupaCSS.C_login_form);
+ usernameTextBox.addStyleName(HupaCSS.C_login_box);
+ passwordTextBox.addStyleName(HupaCSS.C_login_box);
+
+ buttonBar.add(loginButton);
+ buttonBar.add(resetButton);
+
+ formPanel.setText(0, 0, constants.usernameLabel());
+ formPanel.setWidget(0, 1, usernameTextBox);
+ formPanel.setText(1, 0, constants.passwordLabel());
+ formPanel.setWidget(1, 1, passwordTextBox);
+ formPanel.getFlexCellFormatter().setColSpan(2, 0, 2);
+ formPanel.setWidget(2, 0, buttonBar);
+
+ rPanel.add(formPanel);
+ mainContainer.add(rPanel);
+ mainContainer.add(loading);
+ initWidget(mainContainer);
+
+ usernameTextBox.addKeyUpHandler(this);
+ usernameTextBox.setFocus(true);
+ passwordTextBox.addKeyUpHandler(this);
+
+ loading.hide();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.google.gwt.event.dom.client.KeyUpHandler#onKeyUp(com.google.gwt.event
+ * .dom.client.KeyUpEvent)
+ */
+ public void onKeyUp(KeyUpEvent event) {
+ if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
+ if (event.getSource().equals(usernameTextBox)) {
+ passwordTextBox.setFocus(true);
+ } else if (event.getSource().equals(passwordTextBox)) {
+ loginButton.click();
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.LoginPresenter.Display#getLoginClick()
+ */
+ public HasClickHandlers getLoginClick() {
+ return loginButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.LoginPresenter.Display#getPasswordValue()
+ */
+ public HasValue<String> getPasswordValue() {
+ return passwordTextBox;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.LoginPresenter.Display#getResetClick()
+ */
+ public HasClickHandlers getResetClick() {
+ return resetButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.LoginPresenter.Display#getUserNameValue()
+ */
+ public HasValue<String> getUserNameValue() {
+ return usernameTextBox;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.LoginPresenter.Display#getUserNameFocus()
+ */
+ public Focusable getUserNameFocus() {
+ return usernameTextBox;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.widget.WidgetDisplay#asWidget()
+ */
+ public Widget asWidget() {
+ return this;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.HupaWidgetDisplay#startProcessing()
+ */
+ public void setLoading(boolean load) {
+ if (load) {
+ loading.show();
+ } else {
+ loading.hide();
+
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.google.gwt.user.client.ui.Composite#onAttach()
+ */
+ @Override
+ public void onAttach() {
+ super.onAttach();
+ usernameTextBox.setFocus(true);
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org