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("&nbsp");
+                }
+                
+            }
+            
+        });
+        
+        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("&nbsp");
+            } 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