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/20 18:14:15 UTC

svn commit: r817049 - in /labs/hupa/trunk: 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: Sun Sep 20 16:14:15 2009
New Revision: 817049

URL: http://svn.apache.org/viewvc?rev=817049&view=rev
Log:
Start to implement marking messages as SEEN/NOT SEEN (LABS-462)

Added:
    labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java
    labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java
    labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java
Modified:
    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/AbstractFetchMessagesHandler.java

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=817049&r1=817048&r2=817049&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 Sun Sep 20 16:14:15 2009
@@ -49,6 +49,7 @@
 import org.apache.hupa.server.handler.RenameFolderHandler;
 import org.apache.hupa.server.handler.ReplyMessageHandler;
 import org.apache.hupa.server.handler.SendMessageHandler;
+import org.apache.hupa.server.handler.SetFlagsHandler;
 import org.apache.hupa.server.handler.TagMessagesHandler;
 import org.apache.hupa.server.servlet.DownloadAttachmentServlet;
 import org.apache.hupa.server.servlet.UploadAttachmentServlet;
@@ -98,6 +99,7 @@
 		bindHandler(CreateFolderHandler.class);
 		bindHandler(TagMessagesHandler.class);
 		bindHandler(GetRawMessageHandler.class);
+		bindHandler(SetFlagsHandler.class);
 		bind(FileItemRegistry.class).in(Singleton.class);
 		bind(IMAPStoreCache.class).to(InMemoryIMAPStoreCache.class).in(
 				Singleton.class);

Modified: 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=817049&r1=817048&r2=817049&view=diff
==============================================================================
--- labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java (original)
+++ labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/AbstractFetchMessagesHandler.java Sun Sep 20 16:14:15 2009
@@ -1,3 +1,22 @@
+/****************************************************************
+ * 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 java.io.IOException;
@@ -6,12 +25,10 @@
 
 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;
@@ -25,8 +42,8 @@
 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 org.apache.hupa.shared.rpc.FetchMessagesResult;
 
 import com.google.inject.Provider;
 import com.sun.mail.imap.IMAPStore;
@@ -135,25 +152,11 @@
 			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<IMAPFlag> iFlags = JavamailUtil.convert(m.getFlags());
+			
 		  
 			ArrayList<Tag> tags = new ArrayList<Tag>();
-			String[] userFlags = flags.getUserFlags();
+			String[] userFlags = m.getFlags().getUserFlags();
 			for (int a = 0; a < userFlags.length;a++) {
 				String flag = userFlags[a];
 				if (flag.startsWith(Tag.PREFIX)) {

Added: labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java
URL: http://svn.apache.org/viewvc/labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java?rev=817049&view=auto
==============================================================================
--- labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java (added)
+++ labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/JavamailUtil.java Sun Sep 20 16:14:15 2009
@@ -0,0 +1,87 @@
+/****************************************************************
+ * 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 java.util.ArrayList;
+
+import javax.mail.Flags;
+import javax.mail.Flags.Flag;
+
+import org.apache.hupa.shared.data.Message.IMAPFlag;
+
+/**
+ * Util class which helps to convert from hupa internal data representation to javamaill classes
+ *
+ */
+public class JavamailUtil {
+	
+	/**
+	 * Convert the given Flags to a ArrayList of IMAPFlags
+	 * 
+	 * @param flags
+	 * @return imapFlags
+	 */
+	public static ArrayList<IMAPFlag> convert(Flags flags) {
+		ArrayList<IMAPFlag> fList = new ArrayList<IMAPFlag>();
+		Flag[] flagArray = flags.getSystemFlags();
+		for (int i = 0; i < flagArray.length; i++) {
+			Flag flag = flagArray[i];
+			if (flag.equals(Flag.SEEN)) {
+				fList.add(IMAPFlag.SEEN);
+			} else if (flag.equals(Flag.RECENT)) {
+				fList.add(IMAPFlag.RECENT);
+			} else if (flag.equals(Flag.ANSWERED)) {
+				fList.add(IMAPFlag.ANSWERED);
+			} else if (flag.equals(Flag.DELETED)) {
+				fList.add(IMAPFlag.DELETED);
+			}
+		}
+		return fList;
+		
+	}
+	
+	/**
+	 * Convert the given ArrayList of IMAPFlags to a Flags object
+	 * 
+	 * @param imapFlags
+	 * @return flags
+	 */
+	public static Flags convert(ArrayList<IMAPFlag> imapFlags) {
+		Flags iFlags = new Flags();
+		for ( int i = 0; i< imapFlags.size(); i++) {
+			Flag f = null;
+			IMAPFlag flag = imapFlags.get(i);
+			if (flag.equals(IMAPFlag.SEEN)) {
+				f = Flag.SEEN;
+			} else if (flag.equals(IMAPFlag.RECENT)) {
+				f = Flag.RECENT;
+			} else if (flag.equals(IMAPFlag.ANSWERED)) {
+				f = Flag.ANSWERED;
+			} else if (flag.equals(IMAPFlag.DELETED)) {
+				f = Flag.DELETED;
+			}
+			if (f != null) {
+				iFlags.add(f);
+			}
+		}
+		return iFlags;
+	}
+
+}

Added: labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java?rev=817049&view=auto
==============================================================================
--- labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java (added)
+++ labs/hupa/trunk/server/src/main/java/org/apache/hupa/server/handler/SetFlagsHandler.java Sun Sep 20 16:14:15 2009
@@ -0,0 +1,89 @@
+/****************************************************************
+ * 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 java.util.ArrayList;
+
+import javax.mail.Flags;
+import javax.mail.Folder;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+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.User;
+import org.apache.hupa.shared.rpc.EmptyResult;
+import org.apache.hupa.shared.rpc.SetFlag;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.sun.mail.imap.IMAPStore;
+
+public class SetFlagsHandler extends AbstractSessionHandler<SetFlag, EmptyResult>{
+
+	@Inject
+	public SetFlagsHandler(IMAPStoreCache cache, Log logger,
+			Provider<HttpSession> sessionProvider) {
+		super(cache, logger, sessionProvider);
+	}
+
+	@Override
+	protected EmptyResult executeInternal(SetFlag action,
+			ExecutionContext context) throws ActionException {
+		User user = getUser(action.getSessionId());
+		IMAPFolder folder = action.getFolder();
+		ArrayList<Long> uids = action.getUids();
+		try {
+			IMAPStore store = cache.get(user);
+
+			com.sun.mail.imap.IMAPFolder f = (com.sun.mail.imap.IMAPFolder) store.getFolder(folder.getFullName());
+			if (f.isOpen() == false) {
+				f.open(Folder.READ_WRITE);
+			}
+			Message[] msgs = f.getMessagesByUID(toArray(uids));
+			Flags flags = JavamailUtil.convert(action.getFlags());
+			f.setFlags(msgs, flags, true);
+			f.close(false);
+			return new EmptyResult();
+		} catch (MessagingException e) {
+			String errorMsg = "Error while setting flags of messages with uids " + uids + " for user " + user;
+			logger.error(errorMsg,e);
+			throw new ActionException(errorMsg,e);
+		}
+	}
+
+	public Class<SetFlag> getActionType() {
+		return SetFlag.class;
+	}
+	
+	private long[] toArray(ArrayList<Long> uids) {
+		long[] array = new long[uids.size()];
+		for (int i = 0; i < uids.size(); i++) {
+			array[i] = uids.get(i);
+		}
+		return array;
+	}
+
+}

Added: labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java
URL: http://svn.apache.org/viewvc/labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java?rev=817049&view=auto
==============================================================================
--- labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java (added)
+++ labs/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/SetFlag.java Sun Sep 20 16:14:15 2009
@@ -0,0 +1,59 @@
+/****************************************************************
+ * 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 java.util.ArrayList;
+
+import org.apache.hupa.shared.data.IMAPFolder;
+import org.apache.hupa.shared.data.Message.IMAPFlag;
+
+public class SetFlag extends Session<EmptyResult>{
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 662741801793895357L;
+	private ArrayList<IMAPFlag> flags;
+	private ArrayList<Long> uids;
+	private IMAPFolder folder;
+
+	public SetFlag(String session, IMAPFolder folder, ArrayList<IMAPFlag> flags, ArrayList<Long> uids) {
+		super(session);
+		this.flags = flags;
+		this.uids = uids;
+		this.folder = folder;
+	}
+	
+	protected SetFlag() {
+		
+	}
+	
+	public IMAPFolder getFolder() {
+		return folder;
+	}
+	
+	public ArrayList<IMAPFlag> getFlags() {
+		return flags;
+	}
+	
+	public ArrayList<Long> getUids() {
+		return uids;
+	}
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org