Author: felixk
Date: Fri Sep 23 09:29:47 2011
New Revision: 1174611

URL: http://svn.apache.org/viewvc?rev=1174611&view=rev
Log:
Fetch and create folders recursive (HUPA-77)

Modified:
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java

Modified: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java?rev=1174611&r1=1174610&r2=1174611&view=diff
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java
 (original)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchFoldersHandler.java
 Fri Sep 23 09:29:47 2011
@@ -58,19 +58,27 @@ public class FetchFoldersHandler extends
     public FetchFoldersResult executeInternal(FetchFolders action, 
ExecutionContext arg1)
     throws ActionException {
         User user = getUser();
-        ArrayList<IMAPFolder> fList = new ArrayList<IMAPFolder>();
         try {
 
             // get the store for the user
             IMAPStore store = cache.get(user);
             com.sun.mail.imap.IMAPFolder folder = 
(com.sun.mail.imap.IMAPFolder) store.getDefaultFolder();
             
-            // loop over all folders
+            // List of mail 'root' imap folders
+            List<IMAPFolder> imapFolders = new ArrayList<IMAPFolder>();
+
+            // Create IMAPFolder tree list
             for (Folder f : folder.list()) {
-                createIMAPFolderTree(fList, createFolder(f), f.list());
+                IMAPFolder imapFolder = createIMAPFolder(f);
+                imapFolders.add(imapFolder);
+                walkFolders(f, imapFolder);
             }
-            logger.debug("Fetching folders for user: " + user + " returns: " + 
fList.size() + " folders");
-            return new FetchFoldersResult(fList);
+            
+            // Create the tree and return the result
+            FetchFoldersResult fetchFolderResult = new 
FetchFoldersResult(imapFolders);
+            logger.debug("Fetching folders for user: " + user + " returns:\n" 
+ fetchFolderResult.toString());
+
+            return fetchFolderResult;
         } catch (Exception e) {
             e.printStackTrace();
             logger.error("Unable to get folders for User " + user,e);
@@ -79,7 +87,21 @@ public class FetchFoldersHandler extends
         }
     }
 
-
+    /**
+     * Walk through the folder's sub-folders and add sub-folders to current 
imapFolder
+     *   
+     * @param folder Folder to walk
+     * @param imapFolder Current IMAPFolder
+     * @throws ActionException If an error occurs
+     * @throws MessagingException If an error occurs
+     */
+    private void walkFolders(Folder folder, IMAPFolder imapFolder) throws 
ActionException, MessagingException{
+        for (Folder f : folder.list()) {
+            IMAPFolder iFolder = createIMAPFolder(f);
+            imapFolder.getChildIMAPFolders().add(iFolder);
+            walkFolders(f, iFolder);
+        }
+    }
     /*
      * (non-Javadoc)
      * @see net.customware.gwt.dispatch.server.ActionHandler#getActionType()
@@ -91,12 +113,12 @@ public class FetchFoldersHandler extends
     /**
      * Create a new IMAPFolder from the given Folder
      * 
-     * @param folder
-     * @return imapFolder
-     * @throws ActionException 
-     * @throws MessagingException
+     * @param folder Current folder
+     * @return imapFolder Created IMAPFolder
+     * @throws ActionException If an error occurs
+     * @throws MessagingException If an error occurs
      */
-    private IMAPFolder createFolder(Folder folder) throws ActionException {
+    private IMAPFolder createIMAPFolder(Folder folder) throws ActionException {
 
         String fullName = folder.getFullName();
         String delimiter;
@@ -116,28 +138,7 @@ public class FetchFoldersHandler extends
             logger.error("Unable to construct folder " + 
folder.getFullName(),e);
         }
         
-        
         return iFolder;
     }
-    
-    /**
-     * Create a folder tree 
-     * 
-     * @param fList
-     * @param iFolder
-     * @param childFolders
-     * @throws MessagingException
-     */
-    private void createIMAPFolderTree(List<IMAPFolder> fList,
-            IMAPFolder iFolder, Folder[] childFolders) throws 
MessagingException, ActionException {
-
-        for (Folder f : childFolders) {
-            IMAPFolder folder = createFolder(f);
-            if (folder != null) {
-                iFolder.getChildIMAPFolders().add(createFolder(f));
-            }
-        }
-        fList.add(iFolder);
-    }
 
 }



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

Reply via email to