Author: norman
Date: Wed Aug 19 07:20:48 2009
New Revision: 805688

URL: http://svn.apache.org/viewvc?rev=805688&view=rev
Log:
Support deletion of folder

Added:
    
labs/hupa/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java
    labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteFolder.java
Modified:
    labs/hupa/src/main/java/org/apache/hupa/client/HupaMessages.java
    labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
    labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderView.java
    labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java

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=805688&r1=805687&r2=805688&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 Wed Aug 19 
07:20:48 2009
@@ -28,4 +28,8 @@
        
        @DefaultMessage("Moving message")
        public String moveMessage();
+       
+       @DefaultMessage("Are you sure you want to delete the selected folder ?")
+       public String confirmDeleteFolder();
+       
 }

Modified: 
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java?rev=805688&r1=805687&r2=805688&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java 
(original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPFolderPresenter.java 
Wed Aug 19 07:20:48 2009
@@ -34,6 +34,7 @@
 
 import org.apache.hupa.client.widgets.EditEvent;
 import org.apache.hupa.client.widgets.EditHandler;
+import org.apache.hupa.client.widgets.HasDialog;
 import org.apache.hupa.client.widgets.HasEnable;
 import org.apache.hupa.client.widgets.IMAPTreeItem;
 import org.apache.hupa.shared.data.IMAPFolder;
@@ -43,6 +44,7 @@
 import org.apache.hupa.shared.events.LoadMessagesEvent;
 import org.apache.hupa.shared.events.LoginEvent;
 import org.apache.hupa.shared.events.LoginEventHandler;
+import org.apache.hupa.shared.rpc.DeleteFolder;
 import org.apache.hupa.shared.rpc.EmptyResult;
 import org.apache.hupa.shared.rpc.FetchFolders;
 import org.apache.hupa.shared.rpc.FetchFoldersResult;
@@ -77,9 +79,14 @@
                public HasSelectionHandlers<TreeItem> getTree();
                public void bindTreeItems(List<IMAPTreeItem> treeList);
                public HasClickHandlers getRenameClick();       
+               public HasClickHandlers getDeleteClick();
+               public HasClickHandlers getNewClick();
+               public HasDialog getDeleteConfirmDialog();
+               public HasClickHandlers getDeleteConfirmClick();
                public HasEnable getRenameEnable();
                public HasEnable getDeleteEnable();
                public HasEnable getNewEnable();
+               public void deleteSelectedFolder();
        }
 
        protected void loadTreeItems() {
@@ -224,8 +231,6 @@
                        
                });
                
-               
-               
                display.getRenameClick().addClickHandler(new ClickHandler() {
 
                        public void onClick(ClickEvent event) {
@@ -234,6 +239,31 @@
                        
                });
                
+               display.getDeleteClick().addClickHandler(new ClickHandler() {
+
+                       public void onClick(ClickEvent event) {
+                               display.getDeleteConfirmDialog().show();
+                       }
+                       
+               });
+               
+               display.getDeleteConfirmClick().addClickHandler(new 
ClickHandler() {
+
+                       public void onClick(ClickEvent event) {
+                               dispatcher.execute(new 
DeleteFolder(user.getSessionId(),folder), new AsyncCallback<EmptyResult>() {
+
+                                       public void onFailure(Throwable caught) 
{
+                                               GWT.log("ERROR while deleting", 
caught);
+                                       }
+
+                                       public void onSuccess(EmptyResult 
result) {
+                                               display.deleteSelectedFolder();
+                                       }
+                                       
+                               });
+                       }
+                       
+               });
        }
 
        @Override

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=805688&r1=805687&r2=805688&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 Wed 
Aug 19 07:20:48 2009
@@ -25,10 +25,13 @@
 import net.customware.gwt.presenter.client.EventBus;
 
 import org.apache.hupa.client.HupaConstants;
+import org.apache.hupa.client.HupaMessages;
 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.ConfirmDialogBox;
 import org.apache.hupa.client.widgets.EditableTree;
+import org.apache.hupa.client.widgets.HasDialog;
 import org.apache.hupa.client.widgets.HasEnable;
 import org.apache.hupa.client.widgets.IMAPTreeItem;
 import org.apache.hupa.client.widgets.Loading;
@@ -42,6 +45,7 @@
 import org.apache.hupa.shared.events.LogoutEvent;
 import org.apache.hupa.shared.events.LogoutEventHandler;
 import org.apache.hupa.shared.events.MoveMessageEvent;
+import org.cobogw.gwt.user.client.ui.RoundedPanel;
 
 
 import com.allen_sauer.gwt.dnd.client.DragContext;
@@ -61,6 +65,7 @@
 
 public class IMAPFolderView extends Composite implements Display{
        private HupaConstants constants = GWT.create(HupaConstants.class);
+       private HupaMessages messages = GWT.create(HupaMessages.class);
        private IMAPTreeImages tImages = GWT.create(IMAPTreeImages.class);
        private EditableTree folderTree = new EditableTree(tImages,true);
        private VerticalPanel folderPanel = new VerticalPanel();
@@ -69,7 +74,7 @@
        private EnableHyperlink newFolderButton = new 
EnableHyperlink(constants.newFolder(),"");
        private EnableHyperlink renameFolderButton = new 
EnableHyperlink(constants.renameFolder(),"");
        private EnableHyperlink deleteFolderButton = new 
EnableHyperlink(constants.deleteFolder(),"");
-
+       private ConfirmDialogBox confirmFolderDeleteBox = new 
ConfirmDialogBox();
        private Loading loader = new Loading(false);
        private List<DropController> dropControllerList = new 
ArrayList<DropController>();
        private EventBus bus;
@@ -78,18 +83,27 @@
        
        @Inject
        public IMAPFolderView(EventBus bus, PagingScrollTableRowDragController 
controllerProvider) {
+               this.controller = controllerProvider;
+               this.bus = bus;
+               
                folderTree.setAnimationEnabled(true);   
                folderPanel.setSpacing(5);
-               folderPanel.add(folderButtonBar);
-               folderPanel.add(folderTree);
+               
+               
                folderButtonBar.setSpacing(3);
                folderButtonBar.add(newFolderButton);
                folderButtonBar.add(renameFolderButton);
                folderButtonBar.add(deleteFolderButton);
-               panel.add(loader);
+               RoundedPanel buttonPanel = new RoundedPanel(RoundedPanel.ALL,1);
+               buttonPanel.setBorder();
+               buttonPanel.add(folderButtonBar);
                
-               this.controller = controllerProvider;
-               this.bus = bus;
+               folderPanel.add(buttonPanel);
+               folderPanel.add(folderTree);
+
+               panel.add(loader);
+               confirmFolderDeleteBox.setText(messages.confirmDeleteFolder());
+
                bus.addHandler(LoginEvent.TYPE,new LoginEventHandler() {
 
                        public void onLogin(LoginEvent event) {
@@ -104,6 +118,7 @@
                        }
                        
                });
+               
                initWidget(panel);
        }
 
@@ -238,20 +253,85 @@
                }
        }
 
+       /*
+        * (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(IMAPFolder.DEFAULT_INBOX)) 
{
+                               folderTree.setSelectedItem(item, true);
+                               break;
+                       }
+               }
+       }
        
 }

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=805688&r1=805687&r2=805688&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 Wed 
Aug 19 07:20:48 2009
@@ -27,6 +27,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.hupa.server.FileItemRegistry;
 import org.apache.hupa.server.IMAPStoreCache;
+import org.apache.hupa.server.handler.DeleteFolderHandler;
 import org.apache.hupa.server.handler.DeleteMessageHandler;
 import org.apache.hupa.server.handler.ExposeMessageHandler;
 import org.apache.hupa.server.handler.FetchFoldersHandler;
@@ -70,6 +71,7 @@
                bindHandler(LoginSessionHandler.class);
                bindHandler(MoveMessageHandler.class);
                bindHandler(RenameFolderHandler.class);
+               bindHandler(DeleteFolderHandler.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/DeleteFolderHandler.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java?rev=805688&view=auto
==============================================================================
--- 
labs/hupa/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java 
(added)
+++ 
labs/hupa/src/main/java/org/apache/hupa/server/handler/DeleteFolderHandler.java 
Wed Aug 19 07:20:48 2009
@@ -0,0 +1,94 @@
+/****************************************************************
+ * 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.Folder;
+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.IMAPFolder;
+import org.apache.hupa.shared.data.User;
+import org.apache.hupa.shared.rpc.DeleteFolder;
+import org.apache.hupa.shared.rpc.EmptyResult;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.sun.mail.imap.IMAPStore;
+
+/**
+ * Handle delete requests for a folder
+ * 
+ *
+ */
+public class DeleteFolderHandler extends AbstractSessionHandler<DeleteFolder, 
EmptyResult>{
+
+       @Inject
+       public DeleteFolderHandler(IMAPStoreCache cache, Log logger,
+                       Provider<HttpSession> sessionProvider) {
+               super(cache, logger, sessionProvider);
+       }
+
+       @Override
+       protected EmptyResult executeInternal(DeleteFolder action,
+                       ExecutionContext context) throws ActionException {
+               User user = getUser(action.getSessionId());
+               IMAPFolder folder = action.getFolder();
+               try {
+                       IMAPStore store = cache.get(user);
+                       
+                       Folder f = store.getFolder(folder.getFullName());
+                       
+                       // close the folder if its open
+                       if (f.isOpen()) {
+                               f.close(false);
+                       }
+                       
+                       // recursive delete the folder
+                       if (f.delete(true)) {
+                               logger.info("Successfully delete folder " + 
folder + " for user " + user);
+                               return new EmptyResult();
+                       } else {
+                               throw new ActionException("Unable to delete 
folder " + folder + " for user " + user);
+                       }
+               } catch (Exception e) {
+                       logger.error("Error while deleting folder " + folder + 
" for user " + user,e);
+                       throw new ActionException("Error while deleting folder 
" + folder + " for user " + user,e);
+               }
+       }
+
+       /*
+        * (non-Javadoc)
+        * @see net.customware.gwt.dispatch.server.ActionHandler#getActionType()
+        */
+       public Class<DeleteFolder> getActionType() {
+               return DeleteFolder.class;
+       }
+
+       public void rollback(DeleteFolder arg0, EmptyResult arg1,
+                       ExecutionContext arg2) throws ActionException {
+               // TODO Auto-generated method stub
+               
+       }
+
+}

Added: labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteFolder.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteFolder.java?rev=805688&view=auto
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteFolder.java (added)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteFolder.java Wed 
Aug 19 07:20:48 2009
@@ -0,0 +1,42 @@
+/****************************************************************
+ * 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 DeleteFolder extends Session<EmptyResult>{
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 7921329310932404439L;
+       private IMAPFolder folder;
+
+       public DeleteFolder(String sessionId, IMAPFolder folder) {
+               super(sessionId);
+               this.folder = folder;
+       }
+
+       protected DeleteFolder() {
+       }
+       
+       public IMAPFolder getFolder() {
+               return folder;
+       }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to