Author: norman
Date: Thu Aug 13 14:07:30 2009
New Revision: 803894

URL: http://svn.apache.org/viewvc?rev=803894&view=rev
Log:
Support moving message from folder to folder

Added:
    labs/hupa/src/main/java/org/apache/hupa/client/bundles/email.png   (with 
props)
    labs/hupa/src/main/java/org/apache/hupa/client/bundles/email_link.png   
(with props)
    labs/hupa/src/main/java/org/apache/hupa/client/dnd/
    
labs/hupa/src/main/java/org/apache/hupa/client/dnd/DragRefetchPagingScrollTable.java
    
labs/hupa/src/main/java/org/apache/hupa/client/dnd/PagingScrollTableRowDragController.java
    
labs/hupa/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java
    labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java
    
labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEventHandler.java
    labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessage.java
    labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessageResult.java
Modified:
    labs/hupa/src/main/java/org/apache/hupa/Hupa.gwt.xml
    labs/hupa/src/main/java/org/apache/hupa/client/Hupa.java
    labs/hupa/src/main/java/org/apache/hupa/client/HupaMessages.java
    labs/hupa/src/main/java/org/apache/hupa/client/bundles/HupaImageBundle.java
    labs/hupa/src/main/java/org/apache/hupa/client/gin/HupaClientModule.java
    labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java
    
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
    labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
    labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java

Modified: labs/hupa/src/main/java/org/apache/hupa/Hupa.gwt.xml
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/Hupa.gwt.xml?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/Hupa.gwt.xml (original)
+++ labs/hupa/src/main/java/org/apache/hupa/Hupa.gwt.xml Thu Aug 13 14:07:30 
2009
@@ -23,7 +23,9 @@
   <inherits name="com.google.gwt.inject.Inject"/>
   <inherits name="gwtupload.GWTUpload"/>
   <inherits name="eu.maydu.gwt.validation.ValidationLibrary"/>
-   
+  <!-- Inherit gwt-dnd support                   -->
+  <inherits name='com.allen_sauer.gwt.dnd.gwt-dnd'/>
+  
   <source path="shared"/>
   <source path="client"/>
   

Modified: labs/hupa/src/main/java/org/apache/hupa/client/Hupa.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/Hupa.java?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/Hupa.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/Hupa.java Thu Aug 13 
14:07:30 2009
@@ -33,7 +33,7 @@
                
                AppPresenter aPres = injector.getAppPresenter();
         aPres.go(RootPanel.get());
-        
+
         injector.getPlaceManager().fireCurrentPlace();
     }
 

Modified: labs/hupa/src/main/java/org/apache/hupa/client/HupaMessages.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/HupaMessages.java?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/HupaMessages.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/HupaMessages.java Thu Aug 13 
14:07:30 2009
@@ -25,4 +25,7 @@
 
        @DefaultMessage("Are you sure you want to delete the selected 
messages?")
        public String confirmDeleteMessages();
+       
+       @DefaultMessage("Moving message")
+       public String moveMessage();
 }

Modified: 
labs/hupa/src/main/java/org/apache/hupa/client/bundles/HupaImageBundle.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/bundles/HupaImageBundle.java?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/bundles/HupaImageBundle.java 
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/bundles/HupaImageBundle.java 
Thu Aug 13 14:07:30 2009
@@ -26,4 +26,10 @@
 
        @Resource("attach.png")
        public AbstractImagePrototype attachmentIcon();
+       
+       @Resource("email_link.png")
+       public AbstractImagePrototype readyToMoveMailIcon();
+       
+       @Resource("email.png")
+       public AbstractImagePrototype moveMailIcon();
 }

Added: labs/hupa/src/main/java/org/apache/hupa/client/bundles/email.png
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/bundles/email.png?rev=803894&view=auto
==============================================================================
Binary file - no diff available.

Propchange: labs/hupa/src/main/java/org/apache/hupa/client/bundles/email.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: labs/hupa/src/main/java/org/apache/hupa/client/bundles/email_link.png
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/bundles/email_link.png?rev=803894&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
labs/hupa/src/main/java/org/apache/hupa/client/bundles/email_link.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
labs/hupa/src/main/java/org/apache/hupa/client/dnd/DragRefetchPagingScrollTable.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/dnd/DragRefetchPagingScrollTable.java?rev=803894&view=auto
==============================================================================
--- 
labs/hupa/src/main/java/org/apache/hupa/client/dnd/DragRefetchPagingScrollTable.java
 (added)
+++ 
labs/hupa/src/main/java/org/apache/hupa/client/dnd/DragRefetchPagingScrollTable.java
 Thu Aug 13 14:07:30 2009
@@ -0,0 +1,104 @@
+/****************************************************************
+ * 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.dnd;
+
+import java.util.Iterator;
+
+import org.apache.hupa.client.widgets.RefetchPagingScrollTable;
+
+import com.google.gwt.gen2.table.client.AbstractColumnDefinition;
+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.MutableTableModel;
+import com.google.gwt.user.client.ui.Widget;
+
+public class DragRefetchPagingScrollTable<RowType> extends 
RefetchPagingScrollTable<RowType>{
+       private DragHandlerFactory factory;
+       private int cellIndex =-1;
+       private PagingScrollTableRowDragController tableRowDragController;
+       public DragRefetchPagingScrollTable(MutableTableModel<RowType> 
tableModel,
+                       FixedWidthGrid dataTable, FixedWidthFlexTable 
headerTable,
+                       DefaultTableDefinition<RowType> tableDefinition, 
PagingScrollTableRowDragController tableRowDragController,int dragColumn) {
+               super(tableModel, dataTable, headerTable, tableDefinition);
+               this.tableRowDragController = tableRowDragController;
+       }
+
+       /**
+        * Factory which will create new Handler Widgets 
+        *       */
+       public interface DragHandlerFactory {
+               public Widget createHandler();
+       }
+
+       @SuppressWarnings("unchecked")
+       public void setDragHandler(int cellIndex,int 
cellWidth,DragHandlerFactory factory) {
+               this.factory = factory;
+               this.cellIndex = cellIndex;
+               if (cellIndex < 0) {
+                       throw new IllegalArgumentException("cellIndex needs to 
be higher then 0");
+               }
+               
+               DefaultTableDefinition tableDef = (DefaultTableDefinition) 
getTableDefinition();
+               
+               // remove old definition 
+               if (cellIndex != -1) {
+                       
tableDef.removeColumnDefinition(tableDef.getColumnDefinition(cellIndex));
+               }
+               
+               // Create new ghost definition which will get used later to add 
the drag widget
+               DragColumnDefinition def = new DragColumnDefinition();
+               def.setColumnSortable(false);
+               def.setColumnTruncatable(false);
+               def.setMaximumColumnWidth(cellWidth);
+               def.setPreferredColumnWidth(cellWidth);
+               def.setMinimumColumnWidth(cellWidth);
+               tableDef.addColumnDefinition(cellIndex,def);
+       }
+       
+       
+       @Override
+       protected void setData(int firstRow, Iterator<RowType> rows) {
+               super.setData(firstRow, rows);
+               
+               if (getRowValues().size() >0 && factory != null && cellIndex > 
-1) {
+                       for (int i = firstRow; i < getRowValues().size();i++) {
+                               Widget handler = factory.createHandler();
+                               getDataTable().setWidget(i, cellIndex, handler);
+                               tableRowDragController.makeDraggable(handler);
+                       }
+               }
+       }
+       
+       private final class DragColumnDefinition extends 
AbstractColumnDefinition<RowType, Boolean> {
+               
+               @Override
+               public Boolean getCellValue(RowType rowValue) {
+                       return true;
+               }
+
+               @Override
+               public void setCellValue(RowType rowValue, Boolean cellValue) {
+               
+               }
+               
+       }
+       
+}

Added: 
labs/hupa/src/main/java/org/apache/hupa/client/dnd/PagingScrollTableRowDragController.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/dnd/PagingScrollTableRowDragController.java?rev=803894&view=auto
==============================================================================
--- 
labs/hupa/src/main/java/org/apache/hupa/client/dnd/PagingScrollTableRowDragController.java
 (added)
+++ 
labs/hupa/src/main/java/org/apache/hupa/client/dnd/PagingScrollTableRowDragController.java
 Thu Aug 13 14:07:30 2009
@@ -0,0 +1,120 @@
+/****************************************************************
+ * 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.dnd;
+
+import org.apache.hupa.client.HupaMessages;
+import org.apache.hupa.client.bundles.HupaImageBundle;
+import org.cobogw.gwt.user.client.ui.RoundedPanel;
+
+import com.allen_sauer.gwt.dnd.client.DragContext;
+import com.allen_sauer.gwt.dnd.client.PickupDragController;
+import com.allen_sauer.gwt.dnd.client.drop.BoundaryDropController;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.gen2.table.client.FixedWidthGrid;
+import com.google.gwt.gen2.table.client.PagingScrollTable;
+import com.google.gwt.user.client.ui.AbsolutePanel;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+public class PagingScrollTableRowDragController extends PickupDragController {
+
+
+       private HupaMessages messages = GWT.create(HupaMessages.class);
+       private HupaImageBundle bundle =GWT.create(HupaImageBundle.class);
+       private FixedWidthGrid draggableTable;
+       private PagingScrollTable parentTable;
+       private int dragRow;
+
+
+       public PagingScrollTableRowDragController() {
+               this(RootPanel.get());
+       }
+       public PagingScrollTableRowDragController(AbsolutePanel boundaryPanel) {
+               super(boundaryPanel, false);
+               setBehaviorDragProxy(true);
+               setBehaviorMultipleSelection(false);
+       }
+
+       @Override
+       public void dragEnd() {
+               super.dragEnd();
+
+               // cleanup
+               // draggableTable = null;
+       }
+
+       @Override
+       public void setBehaviorDragProxy(boolean dragProxyEnabled) {
+               if (!dragProxyEnabled) {
+                       // TODO implement drag proxy behavior
+                       throw new IllegalArgumentException();
+               }
+               super.setBehaviorDragProxy(dragProxyEnabled);
+       }
+
+       @Override
+       protected BoundaryDropController newBoundaryDropController(
+                       AbsolutePanel boundaryPanel, boolean 
allowDroppingOnBoundaryPanel) {
+               if (allowDroppingOnBoundaryPanel) {
+                       throw new IllegalArgumentException();
+               }
+               return super.newBoundaryDropController(boundaryPanel,
+                               allowDroppingOnBoundaryPanel);
+       }
+
+       
+       @SuppressWarnings("unchecked")
+       protected Widget newDragProxy(DragContext context) {
+               
+               draggableTable = (FixedWidthGrid) context.draggable.getParent();
+               parentTable = (PagingScrollTable)draggableTable.getParent();
+               RoundedPanel proxyPanel = new RoundedPanel(RoundedPanel.ALL,1);
+               HorizontalPanel proxy = new HorizontalPanel();
+               proxy.add(bundle.moveMailIcon().createImage());
+               proxy.add(new Label(" " + messages.moveMessage()));
+           dragRow = getWidgetRow(context.draggable);
+           proxyPanel.add(proxy);
+           proxyPanel.setBorder();
+           proxyPanel.setWidth("150px");
+               return proxyPanel;
+       }
+
+       private int getWidgetRow(Widget widget) {
+               FixedWidthGrid grid = draggableTable;
+           for (int row = 0; row < grid.getRowCount(); row++) {
+               for (int col = 0; col < grid.getCellCount(row); col++) {
+                   Widget w = grid.getWidget(row, col);
+                   if (w == widget) {
+                       return row;
+                   }
+               }
+               }
+           throw new RuntimeException("Unable to determine widget row");
+       }
+       
+
+       
+       public Object getDragValue() {
+               return parentTable.getRowValue(dragRow);
+       }
+
+}
\ No newline at end of file

Modified: 
labs/hupa/src/main/java/org/apache/hupa/client/gin/HupaClientModule.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/gin/HupaClientModule.java?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/gin/HupaClientModule.java 
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/gin/HupaClientModule.java 
Thu Aug 13 14:07:30 2009
@@ -25,6 +25,7 @@
 import net.customware.gwt.presenter.client.place.PlaceManager;
 
 import org.apache.hupa.client.CachingDispatchAsync;
+import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
 import org.apache.hupa.client.mvp.AppPresenter;
 import org.apache.hupa.client.mvp.IMAPFolderPresenter;
 import org.apache.hupa.client.mvp.IMAPFolderView;
@@ -55,7 +56,7 @@
                bindPresenter(IMAPFolderPresenter.class, 
IMAPFolderPresenter.Display.class, IMAPFolderView.class);
                bind(AppPresenter.class).in(Singleton.class);
                bind(CachingDispatchAsync.class);
-
+               
bind(PagingScrollTableRowDragController.class).in(Singleton.class);
        }
 
 }

Modified: labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java 
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java Thu 
Aug 13 14:07:30 2009
@@ -19,14 +19,29 @@
 
 package org.apache.hupa.client.mvp;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import net.customware.gwt.presenter.client.EventBus;
+
 import org.apache.hupa.client.bundles.IMAPTreeImages;
+import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
 import org.apache.hupa.client.mvp.IMAPFolderPresenter.Display;
 import org.apache.hupa.client.widgets.IMAPTreeItem;
 import org.apache.hupa.client.widgets.Loading;
 import org.apache.hupa.shared.data.IMAPFolder;
-
+import org.apache.hupa.shared.data.IMAPMessage;
+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 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.logical.shared.HasSelectionHandlers;
 import com.google.gwt.user.client.ui.Composite;
@@ -34,16 +49,40 @@
 import com.google.gwt.user.client.ui.Tree;
 import com.google.gwt.user.client.ui.TreeItem;
 import com.google.gwt.user.client.ui.Widget;
+import com.google.inject.Inject;
 
 public class IMAPFolderView extends Composite implements Display{
        private IMAPTreeImages tImages = GWT.create(IMAPTreeImages.class);
        private Tree folderTree = new Tree(tImages,true);
        private SimplePanel panel = new SimplePanel();
        
+       
        private Loading loader = new Loading(false);
-       public IMAPFolderView() {
+       private List<DropController> dropControllerList = new 
ArrayList<DropController>();
+       private EventBus bus;
+       private PagingScrollTableRowDragController controller;
+       protected User user;
+       
+       @Inject
+       public IMAPFolderView(EventBus bus, PagingScrollTableRowDragController 
controllerProvider) {
                folderTree.setAnimationEnabled(true);           
                panel.add(loader);
+               this.controller = controllerProvider;
+               this.bus = bus;
+               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;
+                       }
+                       
+               });
                initWidget(panel);
        }
 
@@ -53,9 +92,15 @@
         */
        public void bindTreeItems(List<IMAPTreeItem> treeList) {
                folderTree.clear();
+               for (int i = 0; i < dropControllerList.size();i++) {
+                       
controller.unregisterDropController(dropControllerList.get(i));
+               }
                
                for (int i = 0; i < treeList.size(); i++) {
                        IMAPTreeItem item = treeList.get(i);
+                       IMAPFolderDropController dropController = new 
IMAPFolderDropController(item);
+                       controller.registerDropController(dropController);
+                       dropControllerList.add(dropController);
                        folderTree.addItem(item);
                        if (((IMAPFolder) 
item.getUserObject()).getFullName().equalsIgnoreCase(IMAPFolder.DEFAULT_INBOX)) 
{
                                folderTree.setSelectedItem(item, false);
@@ -97,5 +142,38 @@
                panel.clear();
                panel.add(folderTree);
        }
+       
+       private class IMAPFolderDropController extends SimpleDropController {
+               private IMAPTreeItem item;
+               
+               public IMAPFolderDropController(IMAPTreeItem item) {
+                       super(item.getWidget());
+                       this.item = item;
+               }
+               
+               public void onPreviewDrop(DragContext context) throws 
VetoDragException {
+                       if (item.equals(folderTree.getSelectedItem())) {
+                               throw new VetoDragException();
+                       }
+               }
+               
+               public void onDrop(DragContext context) {
+                       bus.fireEvent(new 
MoveMessageEvent(user,(IMAPFolder)folderTree.getSelectedItem().getUserObject(),(IMAPFolder)item.getUserObject(),(IMAPMessage)controller.getDragValue()));
+               }
+
+               @Override
+               public void onEnter(DragContext context) {
+                       
context.selectedWidgets.get(0).removeStyleName("hupa-droptarget-invalid");
+                       super.onEnter(context);
+               }
 
+               @Override
+               public void onLeave(DragContext context) {
+                       
context.selectedWidgets.get(0).addStyleName("hupa-droptarget-invalid");
+                       super.onLeave(context);
+               }
+               
+               
+               
+       }
 }

Modified: 
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- 
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
 (original)
+++ 
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
 Thu Aug 13 14:07:30 2009
@@ -41,10 +41,15 @@
 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.shared.events.MoveMessageEventHandler;
 import org.apache.hupa.shared.events.NewMessageEvent;
 import org.apache.hupa.shared.rpc.DeleteMessage;
 import org.apache.hupa.shared.rpc.DeleteMessageResult;
+import org.apache.hupa.shared.rpc.MoveMessage;
+import org.apache.hupa.shared.rpc.MoveMessageResult;
 
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.dom.client.HasClickHandlers;
@@ -53,6 +58,7 @@
 import com.google.gwt.gen2.table.event.client.RowSelectionEvent;
 import com.google.gwt.gen2.table.event.client.RowSelectionHandler;
 import com.google.gwt.gen2.table.event.client.TableEvent.Row;
+import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.SourcesTableEvents;
 import com.google.gwt.user.client.ui.TableListener;
 import com.google.inject.Inject;
@@ -127,6 +133,29 @@
 
                        
                });
+               eventBus.addHandler(MoveMessageEvent.TYPE, new 
MoveMessageEventHandler() {
+
+                       public void onMoveMessageHandler(MoveMessageEvent 
event) {
+                               final long uid = event.getMessage().getUid();
+                               GWT.log("Start moving",null);
+                               dispatcher.execute(new 
MoveMessage(event.getUser().getSessionId(),event.getOldFolder(),event.getNewFolder(),uid),
 new AsyncCallback<MoveMessageResult>() {
+
+                                       public void onFailure(Throwable caught) 
{
+                                               GWT.log("ERROR while 
moving",caught);
+                                       }
+
+                                       public void onSuccess(MoveMessageResult 
result) {
+                                               ArrayList<Long> uidArray = new 
ArrayList<Long>();
+                                               uidArray.add(uid);
+                                               
display.removeMessages(uidArray);
+                                               GWT.log("Stop moving",null);
+
+                                       }
+                                       
+                               });
+                       }
+                       
+               });
                display.addTableListner(new TableListener() {
 
                        public void onCellClicked(SourcesTableEvents sender, 
int row,

Modified: 
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java 
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java 
Thu Aug 13 14:07:30 2009
@@ -31,10 +31,12 @@
 import org.apache.hupa.client.HupaMessages;
 import org.apache.hupa.client.bundles.HupaImageBundle;
 import org.apache.hupa.client.bundles.MyPagingOptionImages;
+import org.apache.hupa.client.dnd.DragRefetchPagingScrollTable;
+import org.apache.hupa.client.dnd.PagingScrollTableRowDragController;
+import 
org.apache.hupa.client.dnd.DragRefetchPagingScrollTable.DragHandlerFactory;
 import org.apache.hupa.client.mvp.IMAPMessageListPresenter.Display;
 import org.apache.hupa.client.widgets.ConfirmDialogBox;
 import org.apache.hupa.client.widgets.HasDialog;
-import org.apache.hupa.client.widgets.RefetchPagingScrollTable;
 import org.apache.hupa.shared.data.IMAPFolder;
 import org.apache.hupa.shared.data.IMAPMessage;
 import org.apache.hupa.shared.data.User;
@@ -61,7 +63,6 @@
 import com.google.gwt.gen2.table.client.FixedWidthGridBulkRenderer;
 import com.google.gwt.gen2.table.client.MutableTableModel;
 import com.google.gwt.gen2.table.client.PagingOptions;
-import com.google.gwt.gen2.table.client.TableDefinition;
 import com.google.gwt.gen2.table.client.TableModelHelper;
 import com.google.gwt.gen2.table.client.AbstractScrollTable.ColumnResizePolicy;
 import com.google.gwt.gen2.table.client.AbstractScrollTable.ResizePolicy;
@@ -88,6 +89,8 @@
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.Singleton;
 
 @SuppressWarnings("deprecation")
 public class IMAPMessageListView extends Composite implements Display{
@@ -100,7 +103,7 @@
        private IMAPFolder folder;
        private String searchValue;
        
-       private RefetchPagingScrollTable<IMAPMessage> mailTable;
+       private DragRefetchPagingScrollTable<IMAPMessage> mailTable;
        private CachedTableModel<IMAPMessage> cTableModel = new 
CachedTableModel<IMAPMessage>(new IMAPMessageTableModel());
 
        private EventBus bus;
@@ -109,25 +112,33 @@
        private Button newMailButton = new Button(constants.newMailButton());
        private ConfirmDialogBox confirmBox = new ConfirmDialogBox();
        private ListBox pageBox = new ListBox();
+       private PagingScrollTableRowDragController controller;
 
 
        
        @Inject
-       public IMAPMessageListView(DispatchAsync dispatcher,EventBus bus) {
+       public IMAPMessageListView(DispatchAsync dispatcher,EventBus bus, 
PagingScrollTableRowDragController controller) {
                this.bus = bus;
                this.dispatcher = dispatcher;
+               this.controller = controller;
+               //this.controller = controllerProvider.get();
                
                VerticalPanel vPanel = new VerticalPanel();
 
                cTableModel.setPostCachedRowCount(50);
                cTableModel.setRowCount(MutableTableModel.UNKNOWN_ROW_COUNT);
-               
-               mailTable = new RefetchPagingScrollTable<IMAPMessage>(
+               mailTable = new DragRefetchPagingScrollTable<IMAPMessage>(
                                cTableModel, dataTable,
                                createHeaderTable(),
-                               createTableDefinitation());
+                               createTableDefinitation(),controller,1);
                mailTable.setPageSize(20);
-               
+               mailTable.setDragHandler(0,30, new DragHandlerFactory() {
+
+                       public Widget createHandler() {
+                               return new 
HTML(imageBundle.readyToMoveMailIcon().getHTML());
+                       }
+                       
+               });
                
                HTML emptyTable = new HTML(constants.emptyMailTable());
                emptyTable.setHorizontalAlignment(HTML.ALIGN_CENTER);
@@ -140,7 +151,6 @@
                mailTable.setResizePolicy(ResizePolicy.FILL_WIDTH);
                mailTable.setColumnResizePolicy(ColumnResizePolicy.MULTI_CELL);
                mailTable.setScrollPolicy(ScrollPolicy.DISABLED);
-               
                mailTable.addPageLoadHandler(new PageLoadHandler() {
 
                        public void onPageLoad(PageLoadEvent event) {
@@ -223,7 +233,7 @@
                initWidget(vPanel);
        }
        
-       private TableDefinition<IMAPMessage> createTableDefinitation() {
+       private DefaultTableDefinition<IMAPMessage> createTableDefinitation() {
                DefaultTableDefinition<IMAPMessage> def = new 
DefaultTableDefinition<IMAPMessage>(createColumnDefinitionList());
                
                return def;

Modified: labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java?rev=803894&r1=803893&r2=803894&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java 
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java Thu 
Aug 13 14:07:30 2009
@@ -35,6 +35,7 @@
 import org.apache.hupa.server.handler.LoginSessionHandler;
 import org.apache.hupa.server.handler.LoginUserHandler;
 import org.apache.hupa.server.handler.LogoutUserHandler;
+import org.apache.hupa.server.handler.MoveMessageHandler;
 import org.apache.hupa.server.handler.NoopHandler;
 import org.apache.hupa.server.handler.ReplyMessageHandler;
 import org.apache.hupa.server.handler.SendMessageHandler;
@@ -66,7 +67,7 @@
                bindHandler(ForwardMessageHandler.class);
                bindHandler(NoopHandler.class);
                bindHandler(LoginSessionHandler.class);
-               
+               bindHandler(MoveMessageHandler.class);
                bind(FileItemRegistry.class).in(Singleton.class);
                bind(IMAPStoreCache.class).in(Singleton.class);
                
bind(Log.class).toProvider(LogProvider.class).in(Singleton.class);

Added: 
labs/hupa/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java?rev=803894&view=auto
==============================================================================
--- 
labs/hupa/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java 
(added)
+++ 
labs/hupa/src/main/java/org/apache/hupa/server/handler/MoveMessageHandler.java 
Thu Aug 13 14:07:30 2009
@@ -0,0 +1,83 @@
+/****************************************************************
+ * 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.server.handler;
+
+import javax.mail.Flags;
+import javax.mail.Folder;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.servlet.http.HttpSession;
+
+import net.customware.gwt.dispatch.server.ExecutionContext;
+import net.customware.gwt.dispatch.shared.ActionException;
+
+import org.apache.commons.logging.Log;
+import org.apache.hupa.server.IMAPStoreCache;
+import org.apache.hupa.shared.data.User;
+import org.apache.hupa.shared.rpc.MoveMessage;
+import org.apache.hupa.shared.rpc.MoveMessageResult;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.sun.mail.imap.IMAPFolder;
+import com.sun.mail.imap.IMAPStore;
+
+public class MoveMessageHandler extends AbstractSessionHandler<MoveMessage, 
MoveMessageResult>{
+
+       @Inject
+       public MoveMessageHandler(IMAPStoreCache cache, Log logger,
+                       Provider<HttpSession> sessionProvider) {
+               super(cache, logger, sessionProvider);
+       }
+
+       @Override
+       protected MoveMessageResult executeInternal(MoveMessage action,
+                       ExecutionContext context) throws ActionException {
+               User user = getUser(action.getSessionId());
+               try {
+                       IMAPStore store = cache.get(user);
+                       IMAPFolder folder = 
(IMAPFolder)store.getFolder(action.getOldFolder().getFullName());
+                       if (folder.isOpen() == false) {
+                               folder.open(Folder.READ_WRITE);
+                       }
+                       Message m = 
folder.getMessageByUID(action.getMessageUid());
+                       Message[] mArray = new Message[] {m};
+                       folder.copyMessages(mArray, 
store.getFolder(action.getNewFolder().getFullName()));
+                       folder.setFlags(mArray, new Flags(Flags.Flag.DELETED), 
true);
+                       folder.expunge(mArray);
+                       folder.close(true);
+                       return new MoveMessageResult();
+               } catch (MessagingException e) {
+                       logger.error("Error while moving message " + 
action.getMessageUid() + " from folder" + action.getOldFolder() + " to " + 
action.getNewFolder(),e);
+                       throw new ActionException(e);
+               }
+       }
+
+       public Class<MoveMessage> getActionType() {
+               return MoveMessage.class;
+       }
+
+       public void rollback(MoveMessage arg0, MoveMessageResult arg1,
+                       ExecutionContext arg2) throws ActionException {
+               // TODO Auto-generated method stub
+               
+       }
+
+}

Added: 
labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java?rev=803894&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java 
(added)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEvent.java 
Thu Aug 13 14:07:30 2009
@@ -0,0 +1,69 @@
+/****************************************************************
+ * 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.shared.events;
+
+import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.IMAPMessage;
+import org.apache.hupa.shared.data.User;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+public class MoveMessageEvent extends GwtEvent<MoveMessageEventHandler> {
+
+       public final static Type<MoveMessageEventHandler> TYPE = new 
Type<MoveMessageEventHandler>();
+       private User user;
+       private IMAPFolder oldFolder;
+       private IMAPFolder newFolder;
+       private IMAPMessage message;
+
+       public MoveMessageEvent(User user, IMAPFolder oldFolder,
+                       IMAPFolder newFolder, IMAPMessage message) {
+               this.user = user;
+               this.oldFolder = oldFolder;
+               this.newFolder = newFolder;
+               this.message = message;
+       }
+
+       public User getUser() {
+               return user;
+       }
+
+       public IMAPFolder getOldFolder() {
+               return oldFolder;
+       }
+
+       public IMAPFolder getNewFolder() {
+               return newFolder;
+       }
+
+       public IMAPMessage getMessage() {
+               return message;
+       }
+
+       protected void dispatch(MoveMessageEventHandler handler) {
+               handler.onMoveMessageHandler(this);
+       }
+
+       @Override
+       public 
com.google.gwt.event.shared.GwtEvent.Type<MoveMessageEventHandler> 
getAssociatedType() {
+               return TYPE;
+       }
+
+}

Added: 
labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEventHandler.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEventHandler.java?rev=803894&view=auto
==============================================================================
--- 
labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEventHandler.java
 (added)
+++ 
labs/hupa/src/main/java/org/apache/hupa/shared/events/MoveMessageEventHandler.java
 Thu Aug 13 14:07:30 2009
@@ -0,0 +1,27 @@
+/****************************************************************
+ * 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.shared.events;
+
+import com.google.gwt.event.shared.EventHandler;
+
+public interface MoveMessageEventHandler extends EventHandler{
+
+       public void onMoveMessageHandler(MoveMessageEvent event);
+}

Added: labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessage.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessage.java?rev=803894&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessage.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessage.java Thu Aug 
13 14:07:30 2009
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.shared.rpc;
+
+import org.apache.hupa.shared.data.IMAPFolder;
+
+public class MoveMessage extends Session<MoveMessageResult>{
+
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 7771146077050895244L;
+       private IMAPFolder oldFolder;
+       private IMAPFolder newFolder;
+       private long messageUid;
+
+       public MoveMessage(String sessionId,IMAPFolder oldFolder, IMAPFolder 
newFolder, long messageUid) {
+               super(sessionId);
+               this.oldFolder = oldFolder;
+               this.newFolder = newFolder;
+               this.messageUid = messageUid;
+       }
+       
+       protected MoveMessage() {
+               
+       }
+       
+       public long getMessageUid() {
+               return messageUid;
+       }
+       
+       public IMAPFolder getOldFolder() {
+               return oldFolder;
+       }
+       
+       public IMAPFolder getNewFolder() {
+               return newFolder;
+       }
+}

Added: labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessageResult.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessageResult.java?rev=803894&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessageResult.java 
(added)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/rpc/MoveMessageResult.java 
Thu Aug 13 14:07:30 2009
@@ -0,0 +1,29 @@
+/****************************************************************
+ * 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.shared.rpc;
+
+public class MoveMessageResult extends EmptyResult{
+
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 341407423455525004L;
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@labs.apache.org
For additional commands, e-mail: commits-h...@labs.apache.org

Reply via email to