You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by no...@apache.org on 2009/09/04 16:39:19 UTC

svn commit: r811427 - in /labs/hupa/trunk: client/src/main/java/org/apache/hupa/client/mvp/ server/src/main/java/org/apache/hupa/server/guice/ server/src/main/java/org/apache/hupa/server/handler/ shared/src/main/java/org/apache/hupa/shared/rpc/

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