Author: norman
Date: Fri Sep  4 14:39:19 2009
New Revision: 811427

URL: http://svn.apache.org/viewvc?rev=811427&view=rev
Log:
Rename ExposeMessage* to GetMessageDetails* to better match the usage
Start to add Handler to only fetch recent messages. This will improve the 
overall performance

Added:
    
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java
    
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchRecentMessagesHandler.java
    
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchRecentMessages.java
    
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetails.java
      - copied, changed from r811312, 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessage.java
    
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetailsResult.java
      - copied, changed from r811312, 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessageResult.java
Removed:
    
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessage.java
    
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessageResult.java
Modified:
    
labs/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java
    
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java
    
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchMessagesHandler.java
    
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java
    
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchMessages.java

Modified: 
labs/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java?rev=811427&r1=811426&r2=811427&view=diff
==============================================================================
--- 
labs/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java
 (original)
+++ 
labs/hupa/trunk/client/src/main/java/org/apache/hupa/client/mvp/MainPresenter.java
 Fri Sep  4 14:39:19 2009
@@ -54,8 +54,8 @@
 import org.apache.hupa.shared.events.ReplyMessageEventHandler;
 import org.apache.hupa.shared.events.SentMessageEvent;
 import org.apache.hupa.shared.events.SentMessageEventHandler;
-import org.apache.hupa.shared.rpc.ExposeMessage;
-import org.apache.hupa.shared.rpc.ExposeMessageResult;
+import org.apache.hupa.shared.rpc.GetMessageDetails;
+import org.apache.hupa.shared.rpc.GetMessageDetailsResult;
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -206,7 +206,7 @@
                                } else {
                                        decreaseUnseen = false;
                                }
-                               cachingDispatcher.executeWithCache(new 
ExposeMessage(event.getUser().getSessionId(),event.getFolder(),message.getUid()),
 new DisplayCallback<ExposeMessageResult>(display) {
+                               cachingDispatcher.executeWithCache(new 
GetMessageDetails(event.getUser().getSessionId(),event.getFolder(),message.getUid()),
 new DisplayCallback<GetMessageDetailsResult>(display) {
 
                                        @Override
                                        protected void handleFailure(Throwable 
e) {
@@ -214,7 +214,7 @@
                                        }
 
                                        @Override
-                                       protected void 
handleSuccess(ExposeMessageResult result) {
+                                       protected void 
handleSuccess(GetMessageDetailsResult result) {
                                                // decrease the unseen count if 
we were able to expose the message
                                                if (decreaseUnseen) {
                                                        eventBus.fireEvent(new 
DecreaseUnseenEvent(user,folder));

Modified: 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java?rev=811427&r1=811426&r2=811427&view=diff
==============================================================================
--- 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java
 (original)
+++ 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/guice/ServerModul.java
 Fri Sep  4 14:39:19 2009
@@ -36,6 +36,7 @@
 import org.apache.hupa.server.handler.GetMessageDetailsHandler;
 import org.apache.hupa.server.handler.FetchFoldersHandler;
 import org.apache.hupa.server.handler.FetchMessagesHandler;
+import org.apache.hupa.server.handler.FetchRecentMessagesHandler;
 import org.apache.hupa.server.handler.ForwardMessageHandler;
 import org.apache.hupa.server.handler.LoginSessionHandler;
 import org.apache.hupa.server.handler.LoginUserHandler;
@@ -67,6 +68,7 @@
                bindHandler(LoginUserHandler.class);
                bindHandler(FetchFoldersHandler.class);
                bindHandler(FetchMessagesHandler.class);
+               bindHandler(FetchRecentMessagesHandler.class);
                bindHandler(LogoutUserHandler.class);
                bindHandler(GetMessageDetailsHandler.class);
                bindHandler(DeleteMessageHandler.class);

Added: 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java?rev=811427&view=auto
==============================================================================
--- 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java
 (added)
+++ 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java
 Fri Sep  4 14:39:19 2009
@@ -0,0 +1,204 @@
+package org.apache.hupa.server.handler;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+
+import javax.mail.Address;
+import javax.mail.FetchProfile;
+import javax.mail.Flags;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Part;
+import javax.mail.Flags.Flag;
+import javax.mail.internet.MimeUtility;
+import javax.mail.internet.MimeMessage.RecipientType;
+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.Tag;
+import org.apache.hupa.shared.data.User;
+import org.apache.hupa.shared.data.Message.IMAPFlag;
+import org.apache.hupa.shared.rpc.FetchMessagesResult;
+import org.apache.hupa.shared.rpc.FetchMessages;
+
+import com.google.inject.Provider;
+import com.sun.mail.imap.IMAPStore;
+
+public abstract class AbstractFetchMessagesHandler <A extends FetchMessages> 
extends AbstractSessionHandler<A, FetchMessagesResult>{
+
+       public AbstractFetchMessagesHandler(IMAPStoreCache cache, Log logger,
+                       Provider<HttpSession> sessionProvider) {
+               super(cache, logger, sessionProvider);
+       }
+
+       @Override
+       protected FetchMessagesResult executeInternal(A action,
+                       ExecutionContext context) throws ActionException {
+               User user = getUser(action.getSessionId());
+               IMAPFolder folder = action.getFolder();
+               try {
+                       IMAPStore store = cache.get(user);
+                       int start = action.getStart();
+                       int offset = action.getOffset();
+                       
+                       com.sun.mail.imap.IMAPFolder f =  
(com.sun.mail.imap.IMAPFolder)store.getFolder(folder.getFullName());
+
+                       // check if the folder is open, if not open it read only
+                        if (f.isOpen() == false) {
+                    f.open(com.sun.mail.imap.IMAPFolder.READ_ONLY);
+                }
+
+                       int exists = f.getMessageCount();
+                       
+                       // if the folder is empty we have no need to process 
+                       if (exists == 0) {
+                               return new FetchMessagesResult(new 
ArrayList<org.apache.hupa.shared.data.Message>(),start,offset,exists);
+                       }               
+                       
+                       Message[] messages = getMessagesToConvert(f,action);
+                       
+                       return new FetchMessagesResult(convert(action, f, 
messages),start,offset,exists);
+                       
+               } catch (Exception e) {
+                       logger.error("Error while fetching headers for user " + 
user.getName() + " in folder " + folder,e);
+                       throw new ActionException(
+                                       "Error while fetching headers for user 
" + user.getName() + " in folder " + folder);
+               
+               }
+       }
+       
+       protected abstract Message[] 
getMessagesToConvert(com.sun.mail.imap.IMAPFolder f, A action) throws 
MessagingException;
+       
+       protected ArrayList<org.apache.hupa.shared.data.Message> 
convert(FetchMessages action, com.sun.mail.imap.IMAPFolder f, Message[] 
messages) throws MessagingException {
+               ArrayList<org.apache.hupa.shared.data.Message> mList = new 
ArrayList<org.apache.hupa.shared.data.Message>();
+               // Setup fetchprofile to limit the stuff which is fetched 
+               FetchProfile fp = new FetchProfile();
+        fp.add(FetchProfile.Item.ENVELOPE);
+        fp.add(FetchProfile.Item.FLAGS);
+        fp.add(FetchProfile.Item.CONTENT_INFO);
+        f.fetch(messages, fp);
+
+        // loop over the fetched messages
+               for (int i = 0; i < messages.length; i++) {
+                       org.apache.hupa.shared.data.Message msg = new 
org.apache.hupa.shared.data.Message();
+                       Message m = messages[i];                                
+                       String from = null;
+                       if (m.getFrom() != null && m.getFrom().length >0 ) {
+                               try {
+                                       from = 
MimeUtility.decodeText(m.getFrom()[0].toString().trim());
+                               } catch (UnsupportedEncodingException e) {
+                                       e.printStackTrace();
+                               }
+                       }
+                       msg.setFrom(from);
+                       
+                       ArrayList<String> to = new ArrayList<String>();
+                       // Add to addresses
+                       Address[] toArray = m.getRecipients(RecipientType.TO);
+                       if (toArray != null) {
+                               for (int b =0; b < toArray.length;b++) {
+                                       to.add(toArray[b].toString());
+                               }
+                       }
+                       msg.setTo(to);
+                       
+                       // Check if a subject exist and if so decode it
+                       String subject = m.getSubject();
+                       if (subject != null) {
+                               try {
+                                       subject = 
MimeUtility.decodeText(subject);
+                               } catch (UnsupportedEncodingException e) {
+                                       e.printStackTrace();
+                               }
+                       }
+                       msg.setSubject(subject);
+                       
+                       // Add cc addresses
+                       Address[] ccArray = m.getRecipients(RecipientType.CC);
+                       ArrayList<String> cc = new ArrayList<String>();
+
+                       if (ccArray != null) {
+                               for (int b =0; b < ccArray.length;b++) {
+                                       cc.add(ccArray[b].toString());
+                               }
+                       }
+                       msg.setCc(cc);
+
+                       msg.setReceivedDate(m.getReceivedDate());
+
+                       // Add flags
+                       ArrayList<IMAPFlag> iFlags = new ArrayList<IMAPFlag>();
+                       Flags flags = m.getFlags();
+                       Flag[] systemFlags = flags.getSystemFlags();
+                       for (int a = 0; a < systemFlags.length;a++) {
+                               Flag flag = systemFlags[a];
+                               if (flag == Flag.DELETED) {
+                                       iFlags.add(IMAPFlag.DELETED);
+                               }
+                               if (flag == Flag.SEEN) {
+                                       iFlags.add(IMAPFlag.SEEN);
+                               }
+                               if (flag == Flag.RECENT) {
+                                       iFlags.add(IMAPFlag.RECENT);
+
+                               }
+                       }
+                 
+                       ArrayList<Tag> tags = new ArrayList<Tag>();
+                       String[] userFlags = flags.getUserFlags();
+                       for (int a = 0; a < userFlags.length;a++) {
+                               String flag = userFlags[a];
+                               if (flag.startsWith(Tag.PREFIX)) {
+                                       tags.add(new 
Tag(flag.substring(Tag.PREFIX.length())));
+                               }
+                       }
+                       
+                       msg.setUid(f.getUID(m));
+                       msg.setFlags(iFlags);
+                       msg.setTags(tags);
+                       msg.setHasAttachments(hasAttachment(m));
+                       
+                       mList.add(0, msg);
+                       if (i > action.getOffset()) {
+                               break;
+                       }
+               }
+               f.close(false);
+               return mList;
+       }
+       
+       private boolean hasAttachment(Message message) throws 
MessagingException {
+               if (message.getContentType().startsWith("multipart/")) {
+                       try {
+                               Object content;
+
+                               content = message.getContent();
+
+                               if (content instanceof Multipart) {
+                                       Multipart mp = (Multipart) content;
+                                       if (mp.getCount() > 1) {
+                                               for (int i = 0; i < 
mp.getCount(); i++) {
+                                                       String disp = 
mp.getBodyPart(i).getDisposition();
+                                                       if (disp != null
+                                                                       && 
disp.equalsIgnoreCase(Part.ATTACHMENT)) {
+                                                               return true;
+                                                       }
+                                               }
+                                       }
+
+                               }
+                       } catch (IOException e) {
+                               logger.error("Error while get content of 
message " + message.getMessageNumber());
+                       }
+                       
+               }
+               return false;
+       }
+}

Modified: 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchMessagesHandler.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchMessagesHandler.java?rev=811427&r1=811426&r2=811427&view=diff
==============================================================================
--- 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchMessagesHandler.java
 (original)
+++ 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchMessagesHandler.java
 Fri Sep  4 14:39:19 2009
@@ -19,19 +19,8 @@
 
 package org.apache.hupa.server.handler;
 
-import java.io.IOException;
-import java.util.ArrayList;
-
-import javax.mail.Address;
-import javax.mail.FetchProfile;
-import javax.mail.Flags;
 import javax.mail.Message;
 import javax.mail.MessagingException;
-import javax.mail.Multipart;
-import javax.mail.Part;
-import javax.mail.Flags.Flag;
-import javax.mail.internet.MimeUtility;
-import javax.mail.internet.MimeMessage.RecipientType;
 import javax.mail.search.BodyTerm;
 import javax.mail.search.FromStringTerm;
 import javax.mail.search.OrTerm;
@@ -39,217 +28,72 @@
 import javax.mail.search.SubjectTerm;
 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.Tag;
-import org.apache.hupa.shared.data.User;
-import org.apache.hupa.shared.data.Message.IMAPFlag;
 import org.apache.hupa.shared.rpc.FetchMessages;
-import org.apache.hupa.shared.rpc.FetchMessagesResult;
 
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-import com.sun.mail.imap.IMAPStore;
 
 /**
- * Fetch Messages for a user. The Messages don't contain any body, just some 
fields of the headers are fetched for perfomance reasons
+ * Fetch Messages for a user. The Messages don't contain any body, just some
+ * fields of the headers are fetched for perfomance reasons
  * 
  */
-public class FetchMessagesHandler extends 
AbstractSessionHandler<FetchMessages, FetchMessagesResult>{
+public class FetchMessagesHandler extends
+               AbstractFetchMessagesHandler<FetchMessages> {
 
        @Inject
-       public FetchMessagesHandler(IMAPStoreCache cache, Log 
logger,Provider<HttpSession> provider) {
-               super(cache,logger,provider);
+       public FetchMessagesHandler(IMAPStoreCache cache, Log logger,
+                       Provider<HttpSession> provider) {
+               super(cache, logger, provider);
        }
-       
+
        /*
         * (non-Javadoc)
-        * @see 
org.apache.hupa.server.handler.AbstractSessionHandler#executeInternal(org.apache.hupa.shared.rpc.Session,
 net.customware.gwt.dispatch.server.ExecutionContext)
+        * 
+        * @see net.customware.gwt.dispatch.server.ActionHandler#getActionType()
         */
-       public FetchMessagesResult executeInternal(FetchMessages action, 
ExecutionContext arg1)
-                       throws ActionException {
-               User user = getUser(action.getSessionId());
-               IMAPFolder folder = action.getFolder();
+       public Class<FetchMessages> getActionType() {
+               return FetchMessages.class;
+       }
+
+       @Override
+       protected Message[] getMessagesToConvert(com.sun.mail.imap.IMAPFolder f,
+                       FetchMessages action) throws MessagingException {
                String searchString = action.getSearchString();
-               ArrayList<org.apache.hupa.shared.data.Message> mList = new 
ArrayList<org.apache.hupa.shared.data.Message>();
                int start = action.getStart();
                int offset = action.getOffset();
                int end = start + offset;
-               try {
-                       IMAPStore store = cache.get(user);
-                       com.sun.mail.imap.IMAPFolder f =  
(com.sun.mail.imap.IMAPFolder)store.getFolder(folder.getFullName());
-
-                       // check if the folder is open, if not open it read only
-                        if (f.isOpen() == false) {
-                 f.open(com.sun.mail.imap.IMAPFolder.READ_ONLY);
-             }
-
-                       int exists = f.getMessageCount();
-
-                       // if the folder is empty we have no need to process 
-                       if (exists == 0) {
-                               return new 
FetchMessagesResult(mList,start,offset,exists);
-                       }
 
-                       if (end > exists) {
-                               end =  exists;
-                       }
-                       
-                       int firstIndex = exists - end;
-                       if (firstIndex < 1) {
-                               firstIndex = 1;
-                       }
-                       int lastIndex = exists - start;
-                       Message[] messages;
-                       
-                       // check if a searchString was given, and if so use it
-                       if (searchString == null) {
-                               messages = f.getMessages(firstIndex,lastIndex);
-                       } else {
-                               SearchTerm subjectTerm = new 
SubjectTerm(searchString);
-                               SearchTerm fromTerm = new 
FromStringTerm(searchString);
-                               SearchTerm bodyTerm = new 
BodyTerm(searchString);
-                               SearchTerm orTerm = new OrTerm(new 
SearchTerm[]{subjectTerm,fromTerm,bodyTerm});
-                               messages = f.search(orTerm);
-                               if (end > messages.length) {
-                                       end =  messages.length;
-                               }
-                               exists = messages.length;
-                       }
-                       
-                       // Setup fetchprofile to limit the stuff which is 
fetched 
-                   FetchProfile fp = new FetchProfile();
-            fp.add(FetchProfile.Item.ENVELOPE);
-            fp.add(FetchProfile.Item.FLAGS);
-            fp.add(FetchProfile.Item.CONTENT_INFO);
-            f.fetch(messages, fp);
-
-            // loop over the fetched messages
-                       for (int i = 0; i < messages.length; i++) {
-                               org.apache.hupa.shared.data.Message msg = new 
org.apache.hupa.shared.data.Message();
-                               Message m = messages[i];                        
        
-                               String from = null;
-                               if (m.getFrom() != null && m.getFrom().length 
>0 ) {
-                                       from = 
MimeUtility.decodeText(m.getFrom()[0].toString().trim());
-                               }
-                               msg.setFrom(from);
-                               
-                               ArrayList<String> to = new ArrayList<String>();
-                               // Add to addresses
-                               Address[] toArray = 
m.getRecipients(RecipientType.TO);
-                               if (toArray != null) {
-                                       for (int b =0; b < toArray.length;b++) {
-                                               to.add(toArray[b].toString());
-                                       }
-                               }
-                               msg.setTo(to);
-                               
-                               // Check if a subject exist and if so decode it
-                               String subject = m.getSubject();
-                               if (subject != null) {
-                                       subject = 
MimeUtility.decodeText(subject);
-                               }
-                               msg.setSubject(subject);
-                               
-                               // Add cc addresses
-                               Address[] ccArray = 
m.getRecipients(RecipientType.CC);
-                               ArrayList<String> cc = new ArrayList<String>();
-
-                               if (ccArray != null) {
-                                       for (int b =0; b < ccArray.length;b++) {
-                                               cc.add(ccArray[b].toString());
-                                       }
-                               }
-                               msg.setCc(cc);
-       
-                               msg.setReceivedDate(m.getReceivedDate());
-
-                               // Add flags
-                               ArrayList<IMAPFlag> iFlags = new 
ArrayList<IMAPFlag>();
-                               Flags flags = m.getFlags();
-                               Flag[] systemFlags = flags.getSystemFlags();
-                               for (int a = 0; a < systemFlags.length;a++) {
-                                       Flag flag = systemFlags[a];
-                                       if (flag == Flag.DELETED) {
-                                               iFlags.add(IMAPFlag.DELETED);
-                                       }
-                                       if (flag == Flag.SEEN) {
-                                               iFlags.add(IMAPFlag.SEEN);
-                                       }
-                                       if (flag == Flag.RECENT) {
-                                               iFlags.add(IMAPFlag.RECENT);
-
-                                       }
-                               }
-                         
-                               ArrayList<Tag> tags = new ArrayList<Tag>();
-                               String[] userFlags = flags.getUserFlags();
-                               for (int a = 0; a < userFlags.length;a++) {
-                                       String flag = userFlags[a];
-                                       if (flag.startsWith(Tag.PREFIX)) {
-                                               tags.add(new 
Tag(flag.substring(Tag.PREFIX.length())));
-                                       }
-                               }
-                               
-                               msg.setUid(f.getUID(m));
-                               msg.setFlags(iFlags);
-                               msg.setTags(tags);
-                               msg.setHasAttachments(hasAttachment(m));
-                               
-                               mList.add(0, msg);
-                               if (i > action.getOffset()) {
-                                       break;
-                               }
-                       }
-                       f.close(false);
+               int exists = f.getMessageCount();
 
-                       // return result
-                       return new 
FetchMessagesResult(mList,start,offset,exists);
-               } catch (Exception e) {
-                       logger.error("Error while fetching headers for user " + 
user.getName() + " in folder " + folder,e);
-                       throw new ActionException(
-                                       "Error while fetching headers for user 
" + user.getName() + " in folder " + folder);
+               if (end > exists) {
+                       end = exists;
                }
-       }
-       
-       private boolean hasAttachment(Message message) throws 
MessagingException {
-               if (message.getContentType().startsWith("multipart/")) {
-                       try {
-                               Object content;
-
-                               content = message.getContent();
-
-                               if (content instanceof Multipart) {
-                                       Multipart mp = (Multipart) content;
-                                       if (mp.getCount() > 1) {
-                                               for (int i = 0; i < 
mp.getCount(); i++) {
-                                                       String disp = 
mp.getBodyPart(i).getDisposition();
-                                                       if (disp != null
-                                                                       && 
disp.equalsIgnoreCase(Part.ATTACHMENT)) {
-                                                               return true;
-                                                       }
-                                               }
-                                       }
-
-                               }
-                       } catch (IOException e) {
-                               logger.error("Error while get content of 
message " + message.getMessageNumber());
-                       }
-                       
+
+               int firstIndex = exists - end;
+               if (firstIndex < 1) {
+                       firstIndex = 1;
                }
-               return false;
-       }
+               int lastIndex = exists - start;
+               Message[] messages;
 
-       /*
-        * (non-Javadoc)
-        * @see net.customware.gwt.dispatch.server.ActionHandler#getActionType()
-        */
-       public Class<FetchMessages> getActionType() {
-               return FetchMessages.class;
+               // check if a searchString was given, and if so use it
+               if (searchString == null) {
+                       messages = f.getMessages(firstIndex, lastIndex);
+               } else {
+                       SearchTerm subjectTerm = new SubjectTerm(searchString);
+                       SearchTerm fromTerm = new FromStringTerm(searchString);
+                       SearchTerm bodyTerm = new BodyTerm(searchString);
+                       SearchTerm orTerm = new OrTerm(new SearchTerm[] { 
subjectTerm,
+                                       fromTerm, bodyTerm });
+                       messages = f.search(orTerm);
+                       if (end > messages.length) {
+                               end = messages.length;
+                       }
+                       exists = messages.length;
+               }
+               return messages;
        }
 }

Added: 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchRecentMessagesHandler.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchRecentMessagesHandler.java?rev=811427&view=auto
==============================================================================
--- 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchRecentMessagesHandler.java
 (added)
+++ 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/FetchRecentMessagesHandler.java
 Fri Sep  4 14:39:19 2009
@@ -0,0 +1,61 @@
+/****************************************************************
+ * 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.Message;
+import javax.mail.MessagingException;
+import javax.mail.Flags.Flag;
+import javax.mail.search.FlagTerm;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.logging.Log;
+import org.apache.hupa.server.IMAPStoreCache;
+import org.apache.hupa.shared.rpc.FetchRecentMessages;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class FetchRecentMessagesHandler extends 
AbstractFetchMessagesHandler<FetchRecentMessages> {
+
+       @Inject
+       public FetchRecentMessagesHandler(IMAPStoreCache cache, Log logger,
+                       Provider<HttpSession> provider) {
+               super(cache, logger, provider);
+       }
+
+       
+       @Override
+       protected Message[] getMessagesToConvert(com.sun.mail.imap.IMAPFolder f,
+                       FetchRecentMessages action) throws MessagingException {
+               Message[] messages = f.search(new FlagTerm(new 
Flags(Flag.RECENT), true));
+               return messages;
+       }
+
+       /*
+        * (non-Javadoc)
+        * @see net.customware.gwt.dispatch.server.ActionHandler#getActionType()
+        */
+       public Class<FetchRecentMessages> getActionType() {
+               return FetchRecentMessages.class;
+       }
+
+}

Modified: 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java?rev=811427&r1=811426&r2=811427&view=diff
==============================================================================
--- 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java
 (original)
+++ 
labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/GetMessageDetailsHandler.java
 Fri Sep  4 14:39:19 2009
@@ -39,14 +39,14 @@
 import org.apache.hupa.shared.data.MessageAttachment;
 import org.apache.hupa.shared.data.MessageDetails;
 import org.apache.hupa.shared.data.User;
-import org.apache.hupa.shared.rpc.ExposeMessage;
-import org.apache.hupa.shared.rpc.ExposeMessageResult;
+import org.apache.hupa.shared.rpc.GetMessageDetails;
+import org.apache.hupa.shared.rpc.GetMessageDetailsResult;
 
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.sun.mail.imap.IMAPStore;
 
-public class GetMessageDetailsHandler extends 
AbstractSessionHandler<ExposeMessage, ExposeMessageResult>{
+public class GetMessageDetailsHandler extends 
AbstractSessionHandler<GetMessageDetails, GetMessageDetailsResult>{
 
        @Inject
        public GetMessageDetailsHandler(IMAPStoreCache cache, Log 
logger,Provider<HttpSession> sProvider) {
@@ -57,17 +57,17 @@
         * (non-Javadoc)
         * @see 
org.apache.hupa.server.handler.AbstractSessionHandler#executeInternal(org.apache.hupa.shared.rpc.Session,
 net.customware.gwt.dispatch.server.ExecutionContext)
         */
-       public ExposeMessageResult executeInternal(ExposeMessage action, 
ExecutionContext arg1)
+       public GetMessageDetailsResult executeInternal(GetMessageDetails 
action, ExecutionContext arg1)
                        throws ActionException {
-                       return new 
ExposeMessageResult(exposeMessage(getUser(action.getSessionId()), 
action.getFolder(), action.getUid()));
+                       return new 
GetMessageDetailsResult(exposeMessage(getUser(action.getSessionId()), 
action.getFolder(), action.getUid()));
        }
 
        /*
         * (non-Javadoc)
         * @see net.customware.gwt.dispatch.server.ActionHandler#getActionType()
         */
-       public Class<ExposeMessage> getActionType() {
-               return ExposeMessage.class;
+       public Class<GetMessageDetails> getActionType() {
+               return GetMessageDetails.class;
        }
        
        protected MessageDetails exposeMessage(User user, IMAPFolder folder, 
long uid) throws ActionException {

Modified: 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchMessages.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchMessages.java?rev=811427&r1=811426&r2=811427&view=diff
==============================================================================
--- 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchMessages.java
 (original)
+++ 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchMessages.java
 Fri Sep  4 14:39:19 2009
@@ -32,9 +32,7 @@
        private int offset;
        private String searchString;
 
-       @SuppressWarnings("unused")
-       private FetchMessages() {
-               
+       protected FetchMessages() {
        }
        
        public FetchMessages(String sessionId, IMAPFolder folder,int start, int 
offset,String searchString) {

Added: 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchRecentMessages.java
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchRecentMessages.java?rev=811427&view=auto
==============================================================================
--- 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchRecentMessages.java
 (added)
+++ 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/FetchRecentMessages.java
 Fri Sep  4 14:39:19 2009
@@ -0,0 +1,40 @@
+/****************************************************************
+ * 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 FetchRecentMessages extends FetchMessages{
+
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 4380357285905033821L;
+
+       protected FetchRecentMessages() {
+               
+       }
+       
+       public FetchRecentMessages(String sessionId, IMAPFolder folder, int 
start,
+                       int offset, String searchString) {
+               super(sessionId, folder, start, offset, searchString);
+       }
+
+}

Copied: 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetails.java
 (from r811312, 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessage.java)
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetails.java?p2=labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetails.java&p1=labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessage.java&r1=811312&r2=811427&rev=811427&view=diff
==============================================================================
--- 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessage.java
 (original)
+++ 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetails.java
 Fri Sep  4 14:39:19 2009
@@ -22,7 +22,7 @@
 
 import org.apache.hupa.shared.data.IMAPFolder;
 
-public class ExposeMessage extends Session<ExposeMessageResult>{
+public class GetMessageDetails extends Session<GetMessageDetailsResult>{
 
        /**
         * 
@@ -31,14 +31,14 @@
        private IMAPFolder folder;
        private long uid;
 
-       public ExposeMessage(String sessionId, IMAPFolder folder, long uid) {
+       public GetMessageDetails(String sessionId, IMAPFolder folder, long uid) 
{
                super(sessionId);
                this.folder = folder;
                this.uid = uid;
        }
 
        @SuppressWarnings("unused")
-       private ExposeMessage() {
+       private GetMessageDetails() {
        }
        
        public IMAPFolder getFolder() {
@@ -50,8 +50,8 @@
        }
        
        public boolean equals(Object obj) {
-               if (obj instanceof ExposeMessage) {
-                       ExposeMessage action = (ExposeMessage) obj;
+               if (obj instanceof GetMessageDetails) {
+                       GetMessageDetails action = (GetMessageDetails) obj;
                        if (action.getSessionId().equals(getSessionId()) && 
action.getFolder().equals(getFolder()) && action.getUid() == getUid()) {
                                return true;
                        }

Copied: 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetailsResult.java
 (from r811312, 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessageResult.java)
URL: 
http://svn.apache.org/viewvc/labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetailsResult.java?p2=labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetailsResult.java&p1=labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessageResult.java&r1=811312&r2=811427&rev=811427&view=diff
==============================================================================
--- 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/ExposeMessageResult.java
 (original)
+++ 
labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/GetMessageDetailsResult.java
 Fri Sep  4 14:39:19 2009
@@ -23,7 +23,7 @@
 
 import net.customware.gwt.dispatch.shared.Result;
 
-public class ExposeMessageResult implements Result{
+public class GetMessageDetailsResult implements Result{
 
        /**
         * 
@@ -32,11 +32,11 @@
        private MessageDetails message;
        
        @SuppressWarnings("unused")
-       private ExposeMessageResult() {
+       private GetMessageDetailsResult() {
                
        }
        
-       public ExposeMessageResult(MessageDetails message) {
+       public GetMessageDetailsResult(MessageDetails message) {
                this.message = message;
        }
        



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

Reply via email to