Author: dongxu
Date: Thu Sep 12 02:10:17 2013
New Revision: 1522123

URL: http://svn.apache.org/r1522123
Log:
As the FetchFolders RequestFactory, but can not run correctly.
Maybe the procedure is wrong somewhere.

Added:
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderProxy.java
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderRequestContext.java
    james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserDaoLocator.java
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserLocator.java
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/IMAPFolderService.java
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/UserDao.java
Modified:
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserProxy.java
    
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserRequest.java
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/domain/User.java
    
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderService.java
    
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/IMAPFolder.java

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java
 (original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/LoginActivity.java
 Thu Sep 12 02:10:17 2013
@@ -85,7 +85,6 @@ public class LoginActivity extends AppBa
 =======
 import com.google.gwt.user.client.ui.Widget;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 
 public class LoginActivity extends AbstractActivity {
 
@@ -180,6 +179,25 @@ public class LoginActivity extends Abstr
                        return;
 
                display.setLoading(true);
+//             HupaRequestFactory rf = GWT.create(HupaRequestFactory.class);
+//             rf.initialize(eventBus);
+//             UserRequest userRequest = rf.userRequest();
+//             UserProxy user1 = userRequest.create(UserProxy.class);
+//             user1.setName(user);
+//             user1.setPassword(pass);
+//             userRequest.save(user1).fire(new Receiver<UserProxy>(){
+//
+//                     @Override
+//                     public void onSuccess(UserProxy user) {
+//                             display.setLoading(false);
+//                             LoginActivity.this.placeController.goTo(new 
MailFolderPlace().with(null));
+//                             doReset();
+//                     }
+//                     
+//             });
+               
+               
+               
                dispatcher.execute(new LoginUser(user, pass), new 
HupaEvoCallback<LoginUserResult>(dispatcher, eventBus,
                                display) {
                        public void callback(LoginUserResult result) {
@@ -208,6 +226,7 @@ public class LoginActivity extends Abstr
                                doReset();
                        }
                });
+               
        }
 
        /**

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java
 (original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/activity/WestActivity.java
 Thu Sep 12 02:10:17 2013
@@ -256,6 +256,9 @@ import org.apache.hupa.client.evo.HupaEv
 import org.apache.hupa.client.place.IMAPMessagePlace;
 import org.apache.hupa.client.place.MailFolderPlace;
 import org.apache.hupa.client.place.MessageSendPlace;
+import org.apache.hupa.client.rf.HupaRequestFactory;
+import org.apache.hupa.client.rf.IMAPFolderProxy;
+import org.apache.hupa.client.rf.IMAPFolderRequestContext;
 import org.apache.hupa.client.ui.WidgetContainerDisplayable;
 import org.apache.hupa.client.widgets.HasDialog;
 import org.apache.hupa.client.widgets.IMAPTreeItem;
@@ -290,8 +293,6 @@ import org.apache.hupa.shared.events.Sen
 import org.apache.hupa.shared.events.SentMessageEventHandler;
 import org.apache.hupa.shared.rpc.CreateFolder;
 import org.apache.hupa.shared.rpc.DeleteFolder;
-import org.apache.hupa.shared.rpc.FetchFolders;
-import org.apache.hupa.shared.rpc.FetchFoldersResult;
 import org.apache.hupa.shared.rpc.GenericResult;
 import org.apache.hupa.shared.rpc.GetMessageDetails;
 import org.apache.hupa.shared.rpc.GetMessageDetailsResult;
@@ -318,6 +319,7 @@ import com.google.gwt.user.client.ui.Acc
 import com.google.gwt.user.client.ui.TreeItem;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
+import com.google.web.bindery.requestfactory.shared.Receiver;
 
 public class WestActivity extends AbstractActivity {
 
@@ -370,16 +372,44 @@ public class WestActivity extends Abstra
 
     protected void loadTreeItems() {
         display.setLoadingFolders(true);
-        dispatcher.execute(new FetchFolders(), new 
HupaEvoCallback<FetchFoldersResult>(dispatcher, eventBus, display) {
-            public void callback(FetchFoldersResult result) {
-                display.bindTreeItems(createTreeNodes(result.getFolders()));
-                // disable
-                display.getDeleteEnable().setEnabled(false);
-                display.getRenameEnable().setEnabled(false);
-                display.setLoadingFolders(false);
-
-            }
-        });
+        
+        HupaRequestFactory rf = GWT.create(HupaRequestFactory.class);
+               rf.initialize(eventBus);
+               IMAPFolderRequestContext folderRequest = rf.folderRequest();
+//             IMAPFolderProxy folder = 
folderRequest.create(IMAPFolderProxy.class);
+//             folderRequest.echo("..........Hi++++").fire(new 
Receiver<String>(){
+//
+//                     @Override
+//                     public void onSuccess(String response) {
+//                             System.out.println(response);
+//                             
+//                     }});
+               folderRequest.requestFolders().fire(new 
Receiver<List<IMAPFolderProxy>>() {
+
+                       @Override
+                       public void onSuccess(List<IMAPFolderProxy> response) {
+System.out.println("1111111"+response);
+              display.bindTreeItems(null);
+//              // disable
+              display.getDeleteEnable().setEnabled(false);
+              display.getRenameEnable().setEnabled(false);
+              display.setLoadingFolders(false);
+                               
+                       }
+                       
+               });
+        
+//        dispatcher.execute(new FetchFolders(), new 
HupaEvoCallback<FetchFoldersResult>(dispatcher, eventBus, display) {
+//            public void callback(FetchFoldersResult result) {
+//                display.bindTreeItems(createTreeNodes(result.getFolders()));
+//                // disable
+//                display.getDeleteEnable().setEnabled(false);
+//                display.getRenameEnable().setEnabled(false);
+//                display.setLoadingFolders(false);
+//
+//            }
+//        });
+        
     }
 
     /**

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java
 (original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/HupaRequestFactory.java
 Thu Sep 12 02:10:17 2013
@@ -61,5 +61,10 @@ public interface HupaRequestFactory exte
        SetFlagRequest setFlagRequest();
 =======
   SubjectRequest subjectRequest();
+<<<<<<< HEAD
 >>>>>>> first commit
+=======
+  UserRequest userRequest();
+  IMAPFolderRequestContext folderRequest();
+>>>>>>> As the FetchFolders RequestFactory, but can not run correctly.
 }
\ No newline at end of file

Added: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderProxy.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderProxy.java?rev=1522123&view=auto
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderProxy.java
 (added)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderProxy.java
 Thu Sep 12 02:10:17 2013
@@ -0,0 +1,15 @@
+package org.apache.hupa.client.rf;
+
+import java.util.List;
+
+import org.apache.hupa.shared.data.IMAPFolder;
+
+import com.google.web.bindery.requestfactory.shared.EntityProxy;
+import com.google.web.bindery.requestfactory.shared.ProxyFor;
+
+@ProxyFor(IMAPFolder.class)
+public interface IMAPFolderProxy extends EntityProxy {
+//     List<IMAPFolder> requestFolders();
+       Long getId();
+       Long getVersion();
+}

Added: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderRequestContext.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderRequestContext.java?rev=1522123&view=auto
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderRequestContext.java
 (added)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/IMAPFolderRequestContext.java
 Thu Sep 12 02:10:17 2013
@@ -0,0 +1,15 @@
+package org.apache.hupa.client.rf;
+
+import java.util.List;
+
+import org.apache.hupa.server.service.IMAPFolderService;
+
+import com.google.web.bindery.requestfactory.shared.Request;
+import com.google.web.bindery.requestfactory.shared.RequestContext;
+import com.google.web.bindery.requestfactory.shared.Service;
+
+@Service(IMAPFolderService.class)
+public interface IMAPFolderRequestContext extends RequestContext {
+       Request<List<IMAPFolderProxy>> requestFolders();
+       Request<String> echo(String s);
+}

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserProxy.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserProxy.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserProxy.java 
(original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserProxy.java 
Thu Sep 12 02:10:17 2013
@@ -1,11 +1,20 @@
 package org.apache.hupa.client.rf;
 
+
+
 import org.apache.hupa.server.domain.User;
+import org.apache.hupa.server.locator.UserLocator;
 
 import com.google.web.bindery.requestfactory.shared.EntityProxy;
 import com.google.web.bindery.requestfactory.shared.ProxyFor;
 
-@ProxyFor(value = User.class)
+@ProxyFor(value = User.class, locator=UserLocator.class)
 public interface UserProxy extends EntityProxy {
-
+       public Long getId();
+       public String getName();
+       public void setName(String name);
+       
+       public String getPassword();
+       public void setPassword(String password);
+       
 }

Modified: 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserRequest.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserRequest.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserRequest.java
 (original)
+++ 
james/hupa/trunk/client/src/main/java/org/apache/hupa/client/rf/UserRequest.java
 Thu Sep 12 02:10:17 2013
@@ -1,11 +1,15 @@
 package org.apache.hupa.client.rf;
 
-import org.apache.hupa.server.domain.User;
+import org.apache.hupa.server.locator.UserDaoLocator;
+import org.apache.hupa.server.service.UserDao;
 
+import com.google.web.bindery.requestfactory.shared.Request;
 import com.google.web.bindery.requestfactory.shared.RequestContext;
 import com.google.web.bindery.requestfactory.shared.Service;
 
-@Service(User.class)
+@Service(value = UserDao.class, locator=UserDaoLocator.class)
 public interface UserRequest extends RequestContext {
-
+       Request<UserProxy> findById(Long id);
+       Request<UserProxy> save(UserProxy user);
+       
 }

Modified: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java
 (original)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/InMemoryIMAPStoreCache.java
 Thu Sep 12 02:10:17 2013
@@ -147,6 +147,7 @@ public class InMemoryIMAPStoreCache impl
         if (cstore.getStore().isConnected() == false) {
             try {
                 cstore.getStore().connect(address, port, username, password);
+                System.out.println(address +"ImMemory"+ port);
             } catch (MessagingException e) {
                     throw (e);
             }

Modified: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/domain/User.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/domain/User.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/domain/User.java 
(original)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/domain/User.java 
Thu Sep 12 02:10:17 2013
@@ -19,7 +19,6 @@
 
 package org.apache.hupa.server.domain;
 
-import java.io.Serializable;
 import java.util.Date;
 
 
@@ -30,7 +29,6 @@ import java.util.Date;
  */
 public class User implements Identifiable, Versionable{
     
-    private static final long serialVersionUID = -573674209289821920L;
     private String name;
     private String password;
     private Date loginDate;

Added: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserDaoLocator.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserDaoLocator.java?rev=1522123&view=auto
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserDaoLocator.java
 (added)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserDaoLocator.java
 Thu Sep 12 02:10:17 2013
@@ -0,0 +1,14 @@
+package org.apache.hupa.server.locator;
+
+import org.apache.hupa.server.service.UserDao;
+
+import com.google.web.bindery.requestfactory.shared.ServiceLocator;
+
+public class UserDaoLocator implements ServiceLocator {
+
+       @Override
+       public Object getInstance(Class<?> clazz) {
+               return new UserDao();
+       }
+
+}

Added: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserLocator.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserLocator.java?rev=1522123&view=auto
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserLocator.java
 (added)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/locator/UserLocator.java
 Thu Sep 12 02:10:17 2013
@@ -0,0 +1,40 @@
+package org.apache.hupa.server.locator;
+
+import org.apache.hupa.server.domain.User;
+import org.apache.hupa.server.service.UserDao;
+
+import com.google.web.bindery.requestfactory.shared.Locator;
+
+public class UserLocator extends Locator<User, Long>{
+
+       @Override
+       public User create(Class<? extends User> clazz) {
+               return new User();
+       }
+
+       @Override
+       public User find(Class<? extends User> clazz, Long id) {
+               return new UserDao().findById(id);
+       }
+
+       @Override
+       public Class<User> getDomainType() {
+               return User.class;
+       }
+
+       @Override
+       public Long getId(User domainObject) {
+               return domainObject.getId();
+       }
+
+       @Override
+       public Class<Long> getIdType() {
+               return Long.class;
+       }
+
+       @Override
+       public Object getVersion(User domainObject) {
+               return domainObject.getVersion();
+       }
+
+}

Added: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/IMAPFolderService.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/IMAPFolderService.java?rev=1522123&view=auto
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/IMAPFolderService.java
 (added)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/IMAPFolderService.java
 Thu Sep 12 02:10:17 2013
@@ -0,0 +1,99 @@
+package org.apache.hupa.server.service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import javax.mail.Folder;
+import javax.mail.MessagingException;
+import javax.mail.NoSuchProviderException;
+import javax.mail.Session;
+import javax.servlet.http.HttpSession;
+
+import net.customware.gwt.dispatch.shared.ActionException;
+
+import org.apache.hupa.shared.SConsts;
+import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.User;
+
+import com.google.web.bindery.requestfactory.server.RequestFactoryServlet;
+import com.sun.mail.imap.IMAPStore;
+
+public class IMAPFolderService {
+
+       private static boolean useSSL = false;
+       
+       public static String echo(String s){
+               return s;
+       }
+       
+       public static List<IMAPFolder> requestFolders() throws 
MessagingException, ActionException{
+               HttpSession session = 
RequestFactoryServlet.getThreadLocalRequest().getSession();
+               Session mailSession = Session.getDefaultInstance(new 
Properties(), null);
+               IMAPStore store = (IMAPStore)mailSession.getStore(useSSL ? 
"imaps" : "imap");
+
+        User user = (User) session.getAttribute(SConsts.USER_SESS_ATTR);
+               store.connect("imap.gmail.com", 993, user.getName(), 
user.getPassword());
+               
+
+        com.sun.mail.imap.IMAPFolder folder = (com.sun.mail.imap.IMAPFolder) 
store.getDefaultFolder();
+
+        // List of mail 'root' imap folders
+        List<IMAPFolder> imapFolders = new ArrayList<IMAPFolder>();
+
+        // Create IMAPFolder tree list
+        for (Folder f : folder.list()) {
+            IMAPFolder imapFolder = createIMAPFolder(f);
+            imapFolders.add(imapFolder);
+            walkFolders(f, imapFolder);
+        }
+               return imapFolders;
+       }
+
+    /**
+     * 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 static void walkFolders(Folder folder, IMAPFolder imapFolder) 
throws  MessagingException{
+        for (Folder f : folder.list()) {
+            IMAPFolder iFolder = createIMAPFolder(f);
+            imapFolder.getChildIMAPFolders().add(iFolder);
+            walkFolders(f, iFolder);
+        }
+    }
+
+    /**
+     * Create a new IMAPFolder from the given Folder
+     * 
+     * @param folder Current folder
+     * @return imapFolder Created IMAPFolder
+     * @throws ActionException If an error occurs
+     * @throws MessagingException If an error occurs
+     */
+    private static IMAPFolder createIMAPFolder(Folder folder){
+
+        String fullName = folder.getFullName();
+        String delimiter;
+        IMAPFolder iFolder = null;
+        
+        try {
+            System.out.println("Creating folder: " + fullName + " for user: ");
+            delimiter = String.valueOf(folder.getSeparator());
+            iFolder = new IMAPFolder(fullName);
+            iFolder.setDelimiter(delimiter);
+            if("[Gmail]".equals(folder.getFullName()))
+                return iFolder;
+            iFolder.setMessageCount(folder.getMessageCount());
+            iFolder.setSubscribed(folder.isSubscribed());
+            iFolder.setUnseenMessageCount(folder.getUnreadMessageCount());
+        } catch (MessagingException e) {
+               e.printStackTrace();
+        }
+        
+        return iFolder;
+    }
+}

Modified: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderService.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderService.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderService.java
 (original)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/ImapFolderService.java
 Thu Sep 12 02:10:17 2013
@@ -1,28 +1,99 @@
-/****************************************************************
- * 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.service;
-
-import java.util.List;
-
-import org.apache.hupa.shared.domain.ImapFolder;
-
-public interface ImapFolderService {
-       List<ImapFolder> requestFolders() throws Exception;
-}
+package org.apache.hupa.server.service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import javax.mail.Folder;
+import javax.mail.MessagingException;
+import javax.mail.NoSuchProviderException;
+import javax.mail.Session;
+import javax.servlet.http.HttpSession;
+
+import net.customware.gwt.dispatch.shared.ActionException;
+
+import org.apache.hupa.shared.SConsts;
+import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.User;
+
+import com.google.web.bindery.requestfactory.server.RequestFactoryServlet;
+import com.sun.mail.imap.IMAPStore;
+
+public class IMAPFolderService {
+
+       private static boolean useSSL = false;
+       
+       public static String echo(String s){
+               return s;
+       }
+       
+       public static List<IMAPFolder> requestFolders() throws 
MessagingException, ActionException{
+               HttpSession session = 
RequestFactoryServlet.getThreadLocalRequest().getSession();
+               Session mailSession = Session.getDefaultInstance(new 
Properties(), null);
+               IMAPStore store = (IMAPStore)mailSession.getStore(useSSL ? 
"imaps" : "imap");
+
+        User user = (User) session.getAttribute(SConsts.USER_SESS_ATTR);
+               store.connect("imap.gmail.com", 993, user.getName(), 
user.getPassword());
+               
+
+        com.sun.mail.imap.IMAPFolder folder = (com.sun.mail.imap.IMAPFolder) 
store.getDefaultFolder();
+
+        // List of mail 'root' imap folders
+        List<IMAPFolder> imapFolders = new ArrayList<IMAPFolder>();
+
+        // Create IMAPFolder tree list
+        for (Folder f : folder.list()) {
+            IMAPFolder imapFolder = createIMAPFolder(f);
+            imapFolders.add(imapFolder);
+            walkFolders(f, imapFolder);
+        }
+               return imapFolders;
+       }
+
+    /**
+     * 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 static void walkFolders(Folder folder, IMAPFolder imapFolder) 
throws  MessagingException{
+        for (Folder f : folder.list()) {
+            IMAPFolder iFolder = createIMAPFolder(f);
+            imapFolder.getChildIMAPFolders().add(iFolder);
+            walkFolders(f, iFolder);
+        }
+    }
+
+    /**
+     * Create a new IMAPFolder from the given Folder
+     * 
+     * @param folder Current folder
+     * @return imapFolder Created IMAPFolder
+     * @throws ActionException If an error occurs
+     * @throws MessagingException If an error occurs
+     */
+    private static IMAPFolder createIMAPFolder(Folder folder){
+
+        String fullName = folder.getFullName();
+        String delimiter;
+        IMAPFolder iFolder = null;
+        
+        try {
+            System.out.println("Creating folder: " + fullName + " for user: ");
+            delimiter = String.valueOf(folder.getSeparator());
+            iFolder = new IMAPFolder(fullName);
+            iFolder.setDelimiter(delimiter);
+            if("[Gmail]".equals(folder.getFullName()))
+                return iFolder;
+            iFolder.setMessageCount(folder.getMessageCount());
+            iFolder.setSubscribed(folder.isSubscribed());
+            iFolder.setUnseenMessageCount(folder.getUnreadMessageCount());
+        } catch (MessagingException e) {
+               e.printStackTrace();
+        }
+        
+        return iFolder;
+    }
+}

Added: 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/UserDao.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/UserDao.java?rev=1522123&view=auto
==============================================================================
--- 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/UserDao.java
 (added)
+++ 
james/hupa/trunk/server/src/main/java/org/apache/hupa/server/service/UserDao.java
 Thu Sep 12 02:10:17 2013
@@ -0,0 +1,27 @@
+package org.apache.hupa.server.service;
+
+import javax.servlet.http.HttpSession;
+
+import org.apache.hupa.server.domain.User;
+import org.apache.hupa.server.utils.SessionUtils;
+
+import com.google.web.bindery.requestfactory.server.RequestFactoryServlet;
+
+public class UserDao {
+       
+       private HttpSession session;
+
+       public User findById(Long id) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       User save(User user){
+               System.out.println("+++++++");
+               session = 
RequestFactoryServlet.getThreadLocalRequest().getSession();
+
+        SessionUtils.cleanSessionAttributes(session);
+        return user;
+       }
+
+}

Modified: 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/IMAPFolder.java
URL: 
http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/IMAPFolder.java?rev=1522123&r1=1522122&r2=1522123&view=diff
==============================================================================
--- 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/IMAPFolder.java
 (original)
+++ 
james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/IMAPFolder.java
 Thu Sep 12 02:10:17 2013
@@ -21,14 +21,42 @@ package org.apache.hupa.shared.data;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import javax.servlet.http.HttpSession;
+
+import com.google.web.bindery.requestfactory.server.RequestFactoryServlet;
 
 /**
  * IMAPFolder
  * 
  */
 public class IMAPFolder implements Serializable {
+       
+       private Long id;
+       private Long version;
+       
+
+    public Long getId() {
+               return id;
+       }
+
+       public void setId(Long id) {
+               this.id = id;
+       }
+
+       public Long getVersion() {
+               return version;
+       }
+
+       public void setVersion(Long version) {
+               this.version = version;
+       }
+       
+       
 
-    /**
+       /**
      * 
      */
     private static final long serialVersionUID = 2084188092060266479L;



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to