You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by do...@apache.org on 2013/09/12 04:10:18 UTC

svn commit: r1522123 - in /james/hupa/trunk: client/src/main/java/org/apache/hupa/client/activity/ client/src/main/java/org/apache/hupa/client/rf/ server/src/main/java/org/apache/hupa/server/ server/src/main/java/org/apache/hupa/server/domain/ server/s...

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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org