You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by do...@apache.org on 2013/09/12 04:04:41 UTC
svn commit: r1522110 [2/2] - in
/james/hupa/trunk/client/src/main/java/org/apache/hupa: ./ client/
client/activity/ client/gin/ client/ioc/ client/mvp/ client/place/ client/ui/
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=1522110&r1=1522109&r2=1522110&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:04:40 2013
@@ -19,13 +19,20 @@
package org.apache.hupa.client.ui;
+<<<<<<< HEAD
import java.util.List;
import java.util.Set;
+=======
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+>>>>>>> Change to new mvp framework - first step
import org.apache.hupa.client.HupaCSS;
import org.apache.hupa.client.HupaConstants;
import org.apache.hupa.client.HupaMessages;
import org.apache.hupa.client.activity.IMAPMessageListActivity;
+<<<<<<< HEAD
import org.apache.hupa.client.rf.FetchMessagesRequest;
import org.apache.hupa.client.rf.HupaRequestFactory;
import org.apache.hupa.client.widgets.ConfirmDialogBox;
@@ -56,6 +63,24 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.dom.client.Style.Unit;
+=======
+import org.apache.hupa.client.bundles.HupaImageBundle;
+import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
+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.DragRefetchPagingScrollTable.DragHandlerFactory;
+import org.apache.hupa.client.widgets.EnableButton;
+import org.apache.hupa.client.widgets.HasDialog;
+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;
+
+>>>>>>> Change to new mvp framework - first step
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.HasChangeHandlers;
@@ -63,6 +88,7 @@ import com.google.gwt.event.dom.client.H
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
+<<<<<<< HEAD
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
@@ -706,4 +732,753 @@ public class IMAPMessageListView extends
public MessagesCellTable getTable() {
return table;
}
+=======
+import com.google.gwt.gen2.table.client.AbstractColumnDefinition;
+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.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.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 IMAPMessageListActivity.Displayable{
+
+ 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.gotoPage(0, false);
+ }
+
+ /*
+ * (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();
+ }
+ }
+>>>>>>> Change to new mvp framework - first step
}
Modified: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/LoginView.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/LoginView.java?rev=1522110&r1=1522109&r2=1522110&view=diff
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/LoginView.java (original)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/LoginView.java Thu Sep 12 02:04:40 2013
@@ -27,7 +27,16 @@ import com.google.gwt.dom.client.Documen
=======
package org.apache.hupa.client.ui;
+<<<<<<< HEAD
>>>>>>> change the LOGIN progress using native MVP instead of gwt-presenter
+=======
+import org.apache.hupa.client.HupaCSS;
+import org.apache.hupa.client.HupaConstants;
+import org.apache.hupa.client.activity.LoginActivity;
+import org.apache.hupa.widgets.ui.Loading;
+import org.apache.hupa.widgets.ui.RndPanel;
+
+>>>>>>> Change to new mvp framework - first step
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
@@ -48,6 +57,7 @@ import com.google.gwt.user.client.ui.Flo
import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.FormPanel;
<<<<<<< HEAD
+<<<<<<< HEAD
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasValue;
@@ -144,6 +154,9 @@ public class LoginView extends Composite
formPanel.add(flexTable);
innerBox.add(formPanel);
=======
+=======
+import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
+>>>>>>> Change to new mvp framework - first step
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.PasswordTextBox;
@@ -151,16 +164,9 @@ import com.google.gwt.user.client.ui.Sub
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.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.inject.Inject;
-import org.apache.hupa.client.HupaCSS;
-import org.apache.hupa.client.HupaConstants;
-import org.apache.hupa.client.activity.LoginActivity;
-import org.apache.hupa.widgets.ui.Loading;
-import org.apache.hupa.widgets.ui.RndPanel;
-
-public class LoginView extends Composite implements KeyUpHandler, LoginActivity.Display {
+public class LoginView extends Composite implements KeyUpHandler, LoginActivity.Displayable {
private Button loginButton = new Button();
private SubmitButton submitButton;
private Button resetButton;
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageTableModel.java
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageTableModel.java?rev=1522110&view=auto
==============================================================================
--- james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageTableModel.java (added)
+++ james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/MessageTableModel.java Thu Sep 12 02:04:40 2013
@@ -0,0 +1,158 @@
+/****************************************************************
+ * 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.ui;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import net.customware.gwt.dispatch.client.DispatchAsync;
+
+import org.apache.hupa.client.HupaEvoCallback;
+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.events.FolderSelectionEvent;
+import org.apache.hupa.shared.events.FolderSelectionEventHandler;
+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.LogoutEvent;
+import org.apache.hupa.shared.events.LogoutEventHandler;
+import org.apache.hupa.shared.events.MessagesReceivedEvent;
+import org.apache.hupa.shared.rpc.FetchMessages;
+import org.apache.hupa.shared.rpc.FetchMessagesResult;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.gen2.table.client.MutableTableModel;
+import com.google.gwt.gen2.table.client.TableModelHelper;
+import com.google.gwt.gen2.table.client.TableModelHelper.Request;
+import com.google.inject.Inject;
+
+/**
+ * TableModel which retrieve the messages for the user
+ *
+ */
+public class MessageTableModel extends MutableTableModel<Message> {
+
+ private EventBus eventBus;
+ private DispatchAsync dispatcher;
+ private User user;
+ private IMAPFolder folder;
+ private String searchValue;
+
+ @Inject
+ public MessageTableModel(EventBus eventBus, DispatchAsync dispatcher){
+
+ this.eventBus = eventBus;
+ this.dispatcher = dispatcher;
+
+ // bind some Events
+ eventBus.addHandler(LoadMessagesEvent.TYPE, new LoadMessagesEventHandler() {
+
+ public void onLoadMessagesEvent(LoadMessagesEvent loadMessagesEvent) {
+ user = loadMessagesEvent.getUser();
+ folder = loadMessagesEvent.getFolder();
+ searchValue = loadMessagesEvent.getSearchValue();
+ }
+ });
+ eventBus.addHandler(FolderSelectionEvent.TYPE, new FolderSelectionEventHandler() {
+
+ public void onFolderSelectionEvent(FolderSelectionEvent event) {
+ user = event.getUser();
+ folder = event.getFolder();
+ searchValue = null;
+ }
+ });
+ eventBus.addHandler(LoginEvent.TYPE, new LoginEventHandler() {
+
+ public void onLogin(LoginEvent event) {
+ user = event.getUser();
+ folder = new IMAPFolder(user.getSettings().getInboxFolderName());
+ searchValue = null;
+ }
+ });
+ eventBus.addHandler(LogoutEvent.TYPE, new LogoutEventHandler() {
+
+ public void onLogout(LogoutEvent logoutEvent) {
+ user = null;
+ folder = null;
+ searchValue = null;
+ }
+ });
+
+
+ }
+
+ @Override
+ public void requestRows(
+ final Request request,
+ final com.google.gwt.gen2.table.client.TableModel.Callback<Message> callback) {
+
+ // if the given user or folder is null, its safe to return an empty list
+ if (user == null || folder == null) {
+ callback.onRowsReady(request, new TableModelHelper.Response<Message>() {
+
+ @Override
+ public Iterator<Message> getRowValues() {
+ return new ArrayList<Message>().iterator();
+ }
+
+ });
+ }
+
+ dispatcher.execute(new FetchMessages(folder, request.getStartRow(), request.getNumRows(), searchValue),new HupaEvoCallback<FetchMessagesResult>(dispatcher, eventBus) {
+ public void callback(final FetchMessagesResult result) {
+ // Update folder information before notifying presenter
+ folder.setMessageCount(result.getRealCount());
+ folder.setUnseenMessageCount(result.getRealUnreadCount());
+
+ setRowCount(result.getRealCount());
+ callback.onRowsReady(request, new TableModelHelper.Response<Message>() {
+ @Override
+ public Iterator<Message> getRowValues() {
+ if (result != null && result.getMessages() != null) {
+ return result.getMessages().iterator();
+ } else {
+ return new ArrayList<Message>().iterator();
+ }
+ }
+ });
+
+ // Notify presenter to update folder tree view
+ eventBus.fireEvent(new MessagesReceivedEvent(folder, result.getMessages()));
+ }
+ });
+ }
+
+ @Override
+ protected boolean onRowInserted(int beforeRow) {
+ return true;
+ }
+
+ @Override
+ protected boolean onRowRemoved(int row) {
+ return true;
+ }
+
+ @Override
+ protected boolean onSetRowValue(int row, Message rowValue) {
+ return true;
+ }
+}
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=1522110&r1=1522109&r2=1522110&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:04:40 2013
@@ -19,6 +19,7 @@
package org.apache.hupa.client.ui;
+<<<<<<< HEAD
import org.apache.hupa.client.activity.WestActivity;
import org.apache.hupa.shared.domain.ImapFolder;
import org.apache.hupa.shared.domain.User;
@@ -74,5 +75,571 @@ public class WestView extends Composite
public Widget asWidget() {
return this;
+=======
+import java.util.ArrayList;
+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.activity.WestActivity;
+import org.apache.hupa.client.bundles.IMAPTreeImages;
+import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
+import org.apache.hupa.client.mvp.IMAPMessageListView;
+import org.apache.hupa.client.widgets.ConfirmDialogBox;
+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.User;
+import org.apache.hupa.shared.events.LoginEvent;
+import org.apache.hupa.shared.events.LoginEventHandler;
+import org.apache.hupa.shared.events.LogoutEvent;
+import org.apache.hupa.shared.events.LogoutEventHandler;
+import org.apache.hupa.shared.events.MoveMessageEvent;
+import org.apache.hupa.widgets.event.EditEvent;
+import org.apache.hupa.widgets.event.EditHandler;
+import org.apache.hupa.widgets.ui.EnableHyperlink;
+import org.apache.hupa.widgets.ui.HasEditable;
+import org.apache.hupa.widgets.ui.HasEnable;
+import org.apache.hupa.widgets.ui.Loading;
+import org.apache.hupa.widgets.ui.RndPanel;
+
+import com.allen_sauer.gwt.dnd.client.DragContext;
+import com.allen_sauer.gwt.dnd.client.VetoDragException;
+import com.allen_sauer.gwt.dnd.client.drop.DropController;
+import com.allen_sauer.gwt.dnd.client.drop.SimpleDropController;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.HasClickHandlers;
+import com.google.gwt.event.logical.shared.HasSelectionHandlers;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.DockPanel;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Panel;
+import com.google.gwt.user.client.ui.Tree;
+import com.google.gwt.user.client.ui.TreeItem;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.inject.Inject;
+/**
+ * MainView acts like a container of other widgets which will get displayed after the user successfully logged in
+ *
+ *
+ */
+public class WestView extends Composite implements WestActivity.Displayable {
+
+ private DockPanel dockPanel;
+ private VerticalPanel north;
+ private HupaConstants constants;
+ private RndPanel west;
+ private IMAPTreeImages tImages = GWT.create(IMAPTreeImages.class);
+ private Tree folderTree = new Tree(tImages, true);
+
+ private Widget centerWidget;
+ private RndPanel center;
+ private IMAPMessageListView mListView;
+ private HupaMessages messages;
+ private VerticalPanel folderPanel = new VerticalPanel();
+ private Panel westPanel = new HorizontalPanel();
+ private HorizontalPanel folderButtonBar = new HorizontalPanel();
+ private EnableHyperlink newFolderButton;
+ private EnableHyperlink renameFolderButton;
+ private EnableHyperlink deleteFolderButton;
+ private ConfirmDialogBox confirmFolderDeleteBox = new ConfirmDialogBox();
+ private Loading loader;
+ private Loading messageLoader = new Loading();
+ private List<DropController> dropControllerList = new ArrayList<DropController>();
+ private EventBus bus;
+ private PagingScrollTableRowDragController controller;
+ protected User user;
+
+
+ @Inject
+ public WestView(EventBus bus, PagingScrollTableRowDragController controllerProvider, HupaConstants constants, HupaMessages messages) {
+ this.constants = constants;
+ this.messages = messages;
+ 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(), "");
+
+ dockPanel = new DockPanel();
+
+ dockPanel.setSpacing(10);
+ dockPanel.setWidth("100%");
+
+ // Not used so far
+ // createNorth();
+ // dockPanel.add(north, DockPanel.NORTH);
+ // dockPanel.setCellHorizontalAlignment(north, DockPanel.ALIGN_RIGHT);
+
+ createWest();
+ dockPanel.add(west, DockPanel.WEST);
+ dockPanel.setCellWidth(west, "160px");
+
+ createCenter();
+ dockPanel.add(center, DockPanel.CENTER);
+ dockPanel.setCellHorizontalAlignment(center, DockPanel.ALIGN_LEFT);
+
+ initWidget(west);
+ }
+
+ private void createWest() {
+ west = new RndPanel();
+ west.add(folderTree);
+ west.addStyleName(HupaCSS.C_tree_container);
+
+ folderTree.setAnimationEnabled(true);
+ folderPanel.setSpacing(5);
+
+ folderButtonBar.setSpacing(3);
+ folderButtonBar.add(newFolderButton);
+ folderButtonBar.add(renameFolderButton);
+ folderButtonBar.add(deleteFolderButton);
+ folderPanel.add(folderButtonBar);
+ folderPanel.add(folderTree);
+ westPanel.add(loader);
+ confirmFolderDeleteBox.setText(messages.confirmDeleteFolder());
+ bus.addHandler(LoginEvent.TYPE, new LoginEventHandler() {
+
+ public void onLogin(LoginEvent event) {
+ user = event.getUser();
+ }
+
+ });
+ bus.addHandler(LogoutEvent.TYPE, new LogoutEventHandler() {
+
+ public void onLogout(LogoutEvent event) {
+ user = null;
+ }
+
+ });
+ west.add(westPanel);
+ }
+
+ @SuppressWarnings("unused")
+ private void createNorth() {
+ north = new VerticalPanel();
+ north.setWidth("100%");
+ }
+
+ private void createCenter() {
+ center = new RndPanel();
+ center.setWidth("100%");
+ // FIXME:
+ if (mListView != null)
+ center.add(mListView);
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MainPresenter.Display#bindTreeItems(java.util.ArrayList)
+ */
+ public void bindTreeItems(List<IMAPTreeItem> treeList) {
+ folderTree.clear();
+ for (DropController dropController : dropControllerList) {
+ controller.unregisterDropController(dropController);
+ }
+
+ for (IMAPTreeItem iTreeItem : treeList) {
+ bindDropController(iTreeItem);
+ folderTree.addItem(iTreeItem);
+
+ if (((IMAPFolder) iTreeItem.getUserObject()).getFullName().equalsIgnoreCase(user.getSettings().getInboxFolderName())) {
+ folderTree.setSelectedItem(iTreeItem, false);
+ }
+
+ }
+ }
+
+ /**
+ * Bind a IMAPFolderDropController to the given Item and all its childs
+ *
+ * @param item
+ */
+ private void bindDropController(IMAPTreeItem item) {
+ IMAPFolderDropController dropController = new IMAPFolderDropController(item);
+ controller.registerDropController(dropController);
+ dropControllerList.add(dropController);
+
+ if (item.getChildCount() > 0) {
+ for (int i = 0; i < item.getChildCount(); i++) {
+ bindDropController((IMAPTreeItem) item.getChild(i));
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getTree()
+ */
+ public HasSelectionHandlers<TreeItem> getTree() {
+ return folderTree;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see net.customware.gwt.presenter.client.widget.WidgetDisplay#asWidget()
+ */
+ public Widget asWidget() {
+ return this;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MainPresenter.Display#setLoadingFolders(boolean)
+ */
+ public void setLoadingFolders(boolean load) {
+ if (load) {
+ loader.show();
+// panel.clear();
+ westPanel.add(loader);
+ } else {
+ westPanel.clear();
+ westPanel.add(folderPanel);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MainPresenter.Display#setLoadingMessage(boolean)
+ */
+ public void setLoadingMessage(boolean load) {
+ if (load) {
+ messageLoader.show();
+ } else {
+ messageLoader.hide();
+ }
+ }
+
+ /**
+ * Drop controller which handle drop on TreeItems
+ *
+ *
+ */
+ private class IMAPFolderDropController extends SimpleDropController {
+ private IMAPTreeItem item;
+
+ public IMAPFolderDropController(IMAPTreeItem item) {
+ super(item.getWidget());
+ this.item = item;
+ }
+
+ /**
+ * Veto the Drop if the folder is the same
+ */
+ @Override
+ public void onPreviewDrop(DragContext context) throws VetoDragException {
+ if (item.equals(folderTree.getSelectedItem())) {
+ throw new VetoDragException();
+ }
+ }
+
+ /**
+ * Set the right unseen count on the folders and fire an event
+ */
+ @Override
+ public void onDrop(DragContext context) {
+ IMAPTreeItem oldTreeItem = (IMAPTreeItem) folderTree.getSelectedItem();
+ Message message = (Message) controller.getDragValue();
+ if (message.getFlags().contains(IMAPFlag.SEEN) == false) {
+ oldTreeItem.decreaseUnseenMessageCount();
+ item.increaseUnseenMessageCount();
+ }
+ bus.fireEvent(new MoveMessageEvent(user, (IMAPFolder) oldTreeItem.getUserObject(), (IMAPFolder) item.getUserObject(), message));
+ }
+
+ /**
+ * Update the proxy widget to show its valid to drop it
+ *
+ */
+ @Override
+ public void onEnter(DragContext context) {
+ if (item.equals(folderTree.getSelectedItem()) == false) {
+ controller.getCurrentProxy().setIsValid(true);
+ }
+ super.onEnter(context);
+ }
+
+ /**
+ * Update the proxy widget to show its invalid to drop it
+ */
+ @Override
+ public void onLeave(DragContext context) {
+ controller.getCurrentProxy().setIsValid(false);
+ super.onLeave(context);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getRenameClick()
+ */
+ public HasClickHandlers getRenameClick() {
+ return renameFolderButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getDeleteEnable()
+ */
+ public HasEnable getDeleteEnable() {
+ return deleteFolderButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getNewEnable()
+ */
+ public HasEnable getNewEnable() {
+ return newFolderButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getRenameEnable()
+ */
+ public HasEnable getRenameEnable() {
+ return renameFolderButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getDeleteClick()
+ */
+ public HasClickHandlers getDeleteClick() {
+ return deleteFolderButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getNewClick()
+ */
+ public HasClickHandlers getNewClick() {
+ return newFolderButton;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getDeleteConfirmDialog
+ * ()
+ */
+ public HasDialog getDeleteConfirmDialog() {
+ return confirmFolderDeleteBox;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#getDeleteConfirmClick
+ * ()
+ */
+ public HasClickHandlers getDeleteConfirmClick() {
+ return confirmFolderDeleteBox;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#deleteSelectedFolder
+ * ()
+ */
+ public void deleteSelectedFolder() {
+ folderTree.getSelectedItem().remove();
+
+ // Select the INBOX after delete folder
+ for (int i = 0; i < folderTree.getItemCount(); i++) {
+ IMAPTreeItem item = (IMAPTreeItem) folderTree.getItem(i);
+ if (((IMAPFolder) item.getUserObject()).getFullName().equalsIgnoreCase(user.getSettings().getInboxFolderName())) {
+ folderTree.setSelectedItem(item, true);
+ break;
+ }
+ }
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.hupa.client.mvp.IMAPFolderPresenter.Display#createFolder(org
+ * .apache.hupa.client.widgets.EditHandler)
+ */
+ public HasEditable createFolder(EditHandler handler) {
+ final IMAPTreeItem selected = (IMAPTreeItem) folderTree.getSelectedItem();
+
+ if (selected.isEdit())
+ return null;
+
+ IMAPFolder oldFolder = (IMAPFolder) selected.getUserObject();
+
+ // Generate a new folder with a whitespace as name, this is needed as
+ // workaround
+ IMAPFolder folder = new IMAPFolder(oldFolder.getFullName() + oldFolder.getDelimiter() + " ");
+ folder.setDelimiter(oldFolder.getDelimiter());
+
+ final IMAPTreeItem newItem = new IMAPTreeItem(folder);
+
+ // add the new item as child
+ folderTree.getSelectedItem().addItem(newItem);
+ newItem.addEditHandler(handler);
+ newItem.addEditHandler(new EditHandler() {
+
+ public void onEditEvent(EditEvent event) {
+ if (event.getEventType().equals(EditEvent.EventType.Cancel)) {
+ // remove the folder
+ newItem.remove();
+ folderTree.setSelectedItem(selected, false);
+ } else if (event.getEventType().equals(EditEvent.EventType.Stop)) {
+ // add the new item to dnd controller
+ bindDropController(newItem);
+ // Select the parent folder to avoid an issue in gmail, because
+ // the new folder takes a while until it is available
+ folderTree.setSelectedItem(selected, false);
+ }
+ }
+
+ });
+ // Expand the parent
+ folderTree.getSelectedItem().setState(true, false);
+
+ // Select the new folder and start editing it
+ folderTree.setSelectedItem(newItem, false);
+ newItem.startEdit();
+
+ // reset the text of the new item (remove the whitespace)
+ newItem.setText("");
+
+ return newItem;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.apache.hupa.client.mvp.IMAPFolderPresenter.Display#
+ * decreaseUnseenMessageCount(org.apache.hupa.shared.data.IMAPFolder, int)
+ */
+ public void decreaseUnseenMessageCount(IMAPFolder folder, int amount) {
+ int count = folderTree.getItemCount();
+ for (int i = 0; i < count; i++) {
+ IMAPTreeItem item = findTreeItemForFolder((IMAPTreeItem) folderTree.getItem(i), folder);
+ if (item != null) {
+ item.descreaseUnseenMessageCount(amount);
+ break;
+ }
+
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.apache.hupa.client.mvp.IMAPFolderPresenter.Display#
+ * increaseUnseenMessageCount(org.apache.hupa.shared.data.IMAPFolder, int)
+ */
+ public void increaseUnseenMessageCount(IMAPFolder folder, int amount) {
+ int count = folderTree.getItemCount();
+ for (int i = 0; i < count; i++) {
+ IMAPTreeItem item = findTreeItemForFolder((IMAPTreeItem) folderTree.getItem(i), folder);
+ if (item != null) {
+ item.increaseUnseenMessageCount(amount);
+ break;
+ }
+
+ }
+ }
+
+
+ private IMAPTreeItem findTreeItemForFolder(IMAPTreeItem item, IMAPFolder folder) {
+ if (folder.getFullName().equalsIgnoreCase(((IMAPFolder) item.getUserObject()).getFullName())) {
+ return item;
+ }
+ for (int i = 0; i < item.getChildCount(); i++) {
+ IMAPTreeItem tItem = findTreeItemForFolder((IMAPTreeItem) item.getChild(i), folder);
+ if (tItem != null) {
+ return tItem;
+ }
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.MainPresenter.Display#updateTreeItem(org.apache.hupa.shared.data.IMAPFolder)
+ */
+ public void updateTreeItem(IMAPFolder folder) {
+ int count = folderTree.getItemCount();
+ for (int i = 0; i < count; i++) {
+ IMAPTreeItem item = findTreeItemForFolder((IMAPTreeItem) folderTree.getItem(i), folder);
+ if (item != null) {
+ item.setUserObject(folder);
+ break;
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.widget.WidgetContainerDisplay#addWidget(com.google.gwt.user.client.ui.Widget)
+ */
+ public void addWidget(Widget widget) {
+ showWidget(widget);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.widget.WidgetContainerDisplay#removeWidget(com.google.gwt.user.client.ui.Widget)
+ */
+ public void removeWidget(Widget widget) {
+ centerWidget = null;
+ center.remove(widget);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see net.customware.gwt.presenter.client.widget.WidgetContainerDisplay#showWidget(com.google.gwt.user.client.ui.Widget)
+ */
+ public void showWidget(Widget widget) {
+ centerWidget = widget;
+ center.setWidget(centerWidget);
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.hupa.client.mvp.NameAwareDisplay#getName()
+ */
+ public String getName() {
+ return constants.mailTab();
+ }
+
+ @Override
+ public void setUser(User user) {
+ this.user = user;
+
+>>>>>>> Change to new mvp framework - first step
}
}
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/maincontent.png
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/maincontent.png?rev=1522110&view=auto
==============================================================================
Files james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/maincontent.png (added) and james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/maincontent.png Thu Sep 12 02:04:40 2013 differ
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/mainmenu.png
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/mainmenu.png?rev=1522110&view=auto
==============================================================================
Files james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/mainmenu.png (added) and james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/mainmenu.png Thu Sep 12 02:04:40 2013 differ
Added: james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/masterv.png
URL: http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/masterv.png?rev=1522110&view=auto
==============================================================================
Files james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/masterv.png (added) and james/hupa/trunk/client/src/main/java/org/apache/hupa/client/ui/masterv.png Thu Sep 12 02:04:40 2013 differ
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org