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/07/21 12:08:23 UTC
svn commit: r796230 - in /labs/hupa: ./ lib/org.columba/
src/main/java/org/apache/hupa/client/mvp/
src/main/java/org/apache/hupa/server/
src/main/java/org/apache/hupa/server/guice/
src/main/java/org/apache/hupa/shared/data/ src/main/java/org/apache/hup...
Author: norman
Date: Tue Jul 21 10:08:22 2009
New Revision: 796230
URL: http://svn.apache.org/viewvc?rev=796230&view=rev
Log:
Replace ristretto usage with javamail
Added:
labs/hupa/src/main/java/org/apache/hupa/server/IMAPStoreCache.java
- copied, changed from r795712, labs/hupa/src/main/java/org/apache/hupa/server/IMAPProtocolCache.java
Removed:
labs/hupa/lib/org.columba/
labs/hupa/src/main/java/org/apache/hupa/server/IMAPProtocolCache.java
labs/hupa/src/main/java/org/apache/hupa/server/IMAPServiceImpl.java
Modified:
labs/hupa/pom.xml
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
labs/hupa/src/main/java/org/apache/hupa/server/DeleteMessageHandler.java
labs/hupa/src/main/java/org/apache/hupa/server/ExposeMessageHandler.java
labs/hupa/src/main/java/org/apache/hupa/server/FetchFoldersHandler.java
labs/hupa/src/main/java/org/apache/hupa/server/FetchMessagesHandler.java
labs/hupa/src/main/java/org/apache/hupa/server/LoginUserHandler.java
labs/hupa/src/main/java/org/apache/hupa/server/LogoutUserHandler.java
labs/hupa/src/main/java/org/apache/hupa/server/NoopHandler.java
labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java
labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessage.java
labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessageAttachment.java
labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessage.java
labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessageResult.java
Modified: labs/hupa/pom.xml
URL: http://svn.apache.org/viewvc/labs/hupa/pom.xml?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/pom.xml (original)
+++ labs/hupa/pom.xml Tue Jul 21 10:08:22 2009
@@ -79,6 +79,11 @@
<checksumPolicy>ignore</checksumPolicy>
</releases>
</repository>
+ <repository>
+ <id>maven2-repository.dev.java.net</id>
+ <name>Java.net Repository for Maven</name>
+ <url>http://download.java.net/maven/2/</url>
+ </repository>
</repositories>
@@ -267,21 +272,10 @@
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
-
- <dependency>
- <groupId>org.columba</groupId>
- <artifactId>ristretto-common</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>org.columba</groupId>
- <artifactId>ristretto-imap</artifactId>
- <version>1.0</version>
- </dependency>
<dependency>
- <groupId>org.columba</groupId>
- <artifactId>ristretto-smtp</artifactId>
- <version>1.0</version>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.cobogw.gwt</groupId>
Modified: labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListPresenter.java Tue Jul 21 10:08:22 2009
@@ -55,10 +55,10 @@
public HasRowSelectionHandlers getDataTableSelection();
public HasPageLoadHandlers getDataTableLoad();
public HasClickHandlers getDataTableClick();
- public ArrayList<Integer> getSelectedMessagesUids();
+ public ArrayList<Long> getSelectedMessagesUids();
public com.google.gwt.event.dom.client.HasClickHandlers getDeleteClick();
public void reloadData(IMAPUser user, IMAPFolder folder,String searchValue);
- public void removeMessages(ArrayList<Integer> uids);
+ public void removeMessages(ArrayList<Long> uids);
public void reset();
}
Modified: labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessageListView.java Tue Jul 21 10:08:22 2009
@@ -97,7 +97,7 @@
private PagingScrollToolTipTable<IMAPMessage> mailTable;
private EventBus bus;
private MyFixedWidthGrid<IMAPMessage> dataTable = createDataTable();
- private ArrayList<Integer> selectedUids = new ArrayList<Integer>();
+ private ArrayList<Long> selectedUids = new ArrayList<Long>();
private Button deleteMailButton = new Button(constants.deleteMailButton());
private ListBox pageBox = new ListBox();
@@ -208,13 +208,13 @@
}
Iterator<Row> rowIt = event.getSelectedRows().iterator();
while(rowIt.hasNext()) {
- int uid = mailTable.getRowValue(rowIt.next().getRowIndex()).getUid();
- selectedUids.add(new Integer(uid));
+ long uid = mailTable.getRowValue(rowIt.next().getRowIndex()).getUid();
+ selectedUids.add(uid);
}
Iterator<Row> deselectedRowIt = event.getDeselectedRows().iterator();
while(deselectedRowIt.hasNext()) {
- int uid = mailTable.getRowValue(deselectedRowIt.next().getRowIndex()).getUid();
- selectedUids.remove(new Integer(uid));
+ long uid = mailTable.getRowValue(deselectedRowIt.next().getRowIndex()).getUid();
+ selectedUids.remove(uid);
}
}
@@ -361,7 +361,7 @@
});
}
- dispatcher.execute(new FetchMessages(user,folder,request.getStartRow(),request.getStartRow() + request.getNumRows(),searchValue), new AsyncCallback<FetchMessagesResult>() {
+ dispatcher.execute(new FetchMessages(user,folder,request.getStartRow(),request.getNumRows(),searchValue), new AsyncCallback<FetchMessagesResult>() {
public void onFailure(Throwable caught) {
setRowCount(0);
@@ -484,7 +484,7 @@
}
- public ArrayList<Integer> getSelectedMessagesUids() {
+ public ArrayList<Long> getSelectedMessagesUids() {
return selectedUids;
}
@@ -492,7 +492,7 @@
return deleteMailButton;
}
- public void removeMessages(ArrayList<Integer> uids) {
+ public void removeMessages(ArrayList<Long> uids) {
List<Integer> rows = new ArrayList<Integer>();
for (int a = 0; a < dataTable.getRowCount(); a++) {
IMAPMessage msg = mailTable.getRowValue(a);
Modified: labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/client/mvp/IMAPMessagePresenter.java Tue Jul 21 10:08:22 2009
@@ -20,7 +20,6 @@
package org.apache.hupa.client.mvp;
import java.util.ArrayList;
-import java.util.Arrays;
import net.customware.gwt.dispatch.client.DispatchAsync;
import net.customware.gwt.presenter.client.EventBus;
@@ -35,7 +34,6 @@
import org.apache.hupa.shared.events.LoadMessagesEvent;
import org.apache.hupa.shared.rpc.DeleteMessage;
import org.apache.hupa.shared.rpc.DeleteMessageResult;
-import org.apache.hupa.shared.rpc.FetchMessages;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
@@ -99,7 +97,7 @@
display.getDeleteButtonClick().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
- ArrayList<Integer> uidList = new ArrayList<Integer>();
+ ArrayList<Long> uidList = new ArrayList<Long>();
uidList.add(message.getUid());
dispatcher.execute(new DeleteMessage(user,folder,uidList), new AsyncCallback<DeleteMessageResult>() {
Modified: labs/hupa/src/main/java/org/apache/hupa/server/DeleteMessageHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/DeleteMessageHandler.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/DeleteMessageHandler.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/DeleteMessageHandler.java Tue Jul 21 10:08:22 2009
@@ -20,6 +20,10 @@
package org.apache.hupa.server;
import java.util.ArrayList;
+import java.util.List;
+
+import javax.mail.Flags;
+import javax.mail.Message;
import net.customware.gwt.dispatch.server.ActionHandler;
import net.customware.gwt.dispatch.server.ExecutionContext;
@@ -29,19 +33,17 @@
import org.apache.hupa.shared.data.IMAPFolder;
import org.apache.hupa.shared.rpc.DeleteMessage;
import org.apache.hupa.shared.rpc.DeleteMessageResult;
-import org.columba.ristretto.imap.IMAPFlags;
-import org.columba.ristretto.imap.IMAPProtocol;
-import org.columba.ristretto.imap.SequenceSet;
import com.google.inject.Inject;
+import com.sun.mail.imap.IMAPStore;
public class DeleteMessageHandler implements ActionHandler<DeleteMessage, DeleteMessageResult>{
- private IMAPProtocolCache cache;
+ private IMAPStoreCache cache;
private Log logger;
@Inject
- public DeleteMessageHandler(IMAPProtocolCache cache, Log logger) {
+ public DeleteMessageHandler(IMAPStoreCache cache, Log logger) {
this.cache = cache;
this.logger = logger;
}
@@ -53,21 +55,31 @@
public DeleteMessageResult execute(DeleteMessage action, ExecutionContext context)
throws ActionException {
IMAPFolder folder = action.getFolder();
- ArrayList<Integer> uids = action.getMessageUids();
+ ArrayList<Long> uids = action.getMessageUids();
logger.info("Deleting messages with uids "+ action.getMessageUids() + " for user " + action.getUser() + " in folder" + action.getFolder());
try {
- IMAPProtocol protocol = cache.getProtocol(action.getUser());
-
- protocol.select(folder.getFullName());
-
- SequenceSet set = new SequenceSet(uids);
+ IMAPStore store = cache.get(action.getUser());
+ com.sun.mail.imap.IMAPFolder f = (com.sun.mail.imap.IMAPFolder)store.getFolder(folder.getFullName());
+ if (f.isOpen() == false) {
+ f.open(com.sun.mail.imap.IMAPFolder.READ_WRITE);
+ }
+ List<Message> messages = new ArrayList<Message>();
+ for (int i = 0; i < uids.size();i++) {
+ messages.add(f.getMessageByUID(uids.get(i)));
+ }
+ Message[] mArray = messages.toArray(new Message[messages.size()]);
if (folder.getFullName().equalsIgnoreCase(IMAPFolder.DEFAULT_TRASH) == false) {
- protocol.uidCopy(set, IMAPFolder.DEFAULT_TRASH);
+ com.sun.mail.imap.IMAPFolder trashFolder = (com.sun.mail.imap.IMAPFolder) store.getFolder(IMAPFolder.DEFAULT_TRASH);
+ if (trashFolder.exists() == false) {
+ trashFolder.create(com.sun.mail.imap.IMAPFolder.READ_WRITE);
+ }
+ f.copyMessages(mArray,trashFolder);
}
- protocol.uidStore(set, true, new IMAPFlags(IMAPFlags.DELETED));
- protocol.expunge();
+ f.setFlags(mArray, new Flags(Flags.Flag.DELETED), true);
+ f.expunge(mArray);
+ f.close(false);
} catch (Exception e) {
logger.error("Error while deleting messages with uids "+ action.getMessageUids() + " for user " + action.getUser() + " in folder" + action.getFolder(),e);
throw new ActionException("Error while deleting messages",e);
Modified: labs/hupa/src/main/java/org/apache/hupa/server/ExposeMessageHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/ExposeMessageHandler.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/ExposeMessageHandler.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/ExposeMessageHandler.java Tue Jul 21 10:08:22 2009
@@ -19,10 +19,17 @@
package org.apache.hupa.server;
-import java.io.InputStream;
-import java.nio.charset.Charset;
+import java.util.ArrayList;
import java.util.List;
+import javax.mail.Flags;
+import javax.mail.Message;
+import javax.mail.Multipart;
+import javax.mail.Part;
+import javax.mail.Flags.Flag;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeUtility;
+
import net.customware.gwt.dispatch.server.ActionHandler;
import net.customware.gwt.dispatch.server.ExecutionContext;
import net.customware.gwt.dispatch.shared.ActionException;
@@ -31,31 +38,22 @@
import org.apache.commons.logging.Log;
import org.apache.hupa.shared.data.IMAPFolder;
import org.apache.hupa.shared.data.IMAPMessage;
+import org.apache.hupa.shared.data.IMAPMessageAttachment;
import org.apache.hupa.shared.data.IMAPMessageContent;
import org.apache.hupa.shared.data.IMAPUser;
-import org.apache.hupa.shared.data.IMAPMessage.IMAPFlag;
import org.apache.hupa.shared.rpc.ExposeMessage;
import org.apache.hupa.shared.rpc.ExposeMessageResult;
-import org.columba.ristretto.coder.Base64DecoderInputStream;
-import org.columba.ristretto.coder.CharsetDecoderInputStream;
-import org.columba.ristretto.coder.QuotedPrintableDecoderInputStream;
-import org.columba.ristretto.imap.IMAPFlags;
-import org.columba.ristretto.imap.IMAPProtocol;
-import org.columba.ristretto.imap.SequenceSet;
-import org.columba.ristretto.io.StreamUtils;
-import org.columba.ristretto.message.MimeHeader;
-import org.columba.ristretto.message.MimePart;
-import org.columba.ristretto.message.MimeTree;
import com.google.inject.Inject;
+import com.sun.mail.imap.IMAPStore;
public class ExposeMessageHandler implements ActionHandler<ExposeMessage, ExposeMessageResult>{
- private IMAPProtocolCache cache;
+ private IMAPStoreCache cache;
private Log logger;
@Inject
- public ExposeMessageHandler(IMAPProtocolCache cache, Log logger) {
+ public ExposeMessageHandler(IMAPStoreCache cache, Log logger) {
this.cache = cache;
this.logger = logger;
}
@@ -79,76 +77,80 @@
if (msg.isExposed()) {
return msg;
}
- IMAPProtocol proto = null;
+ IMAPStore store = null;
try {
- proto = cache.getProtocol(user);
-
-
- proto.select(folder.getName());
-
- IMAPMessageContent content = new IMAPMessageContent();
+ store = cache.get(user);
- MimeTree mTree = proto.uidFetchBodystructure(msg.getUid());
- MimePart textPart = mTree.getFirstTextPart("plain");
+ com.sun.mail.imap.IMAPFolder f = (com.sun.mail.imap.IMAPFolder)store.getFolder(folder.getFullName());
- if (textPart != null) {
- InputStream body = proto.uidFetchBody(msg.getUid(), textPart
- .getAddress());
- MimeHeader textHeader = textPart.getHeader();
-
- if (textHeader.getContentTransferEncoding() == MimeHeader.QUOTED_PRINTABLE) {
- body = new QuotedPrintableDecoderInputStream(body);
- } else if (textHeader.getContentTransferEncoding() == MimeHeader.BASE64) {
- body = new Base64DecoderInputStream(body);
- }
-
- String charsetName = textHeader.getContentParameter("charset");
- if (charsetName == null) {
- charsetName = System.getProperty("file.encoding");
- }
-
- body = new CharsetDecoderInputStream(body, Charset
- .forName(charsetName));
-
- if (textHeader.getMimeType().getType().equalsIgnoreCase("plain/text")) {
- String plainContent = StreamUtils.readInString(body)
- .toString();
- content.setText(StringEscapeUtils.escapeHtml(plainContent)
- .replaceAll("\n", "<br>"));
- } else {
- String plainContent = StreamUtils.readInString(body)
- .toString();
- content.setText(StringEscapeUtils.escapeHtml(plainContent)
- .replaceAll("\n", "<br>"));
- }
- }
-
- if (mTree.count() > 1 || textPart == null) {
- System.out.println("message has attachments");
- System.out.println("---");
+ if (f.isOpen() == false) {
+ f.open(com.sun.mail.imap.IMAPFolder.READ_WRITE);
}
+ MimeMessage message = (MimeMessage) f.getMessageByUID(msg.getUid());
+ IMAPMessageContent content = new IMAPMessageContent();
- msg.setIMAPMessageContent(content);
-
+ boolean isHTML = false;
+ Object con = message.getContent();
- IMAPFlags flagsRistretto = new IMAPFlags();
-
- List<IMAPFlag> flags = msg.getIMAPFlags();
-
- if (flags.contains(IMAPFlag.SEEN) == false) {
- flags.add(IMAPFlag.SEEN);
-
- flagsRistretto.setAnswered(flags.contains(IMAPFlag.ANSWERED));
- flagsRistretto.setDeleted(flags.contains(IMAPFlag.DELETED));
- flagsRistretto.setJunk(flags.contains(IMAPFlag.JUNK));
- flagsRistretto.setRecent(flags.contains(IMAPFlag.RECENT));
- flagsRistretto.setSeen(flags.contains(IMAPFlag.SEEN));
- flagsRistretto.setDraft(flags.contains(IMAPFlag.DRAFT));
-
- proto.uidStore(new SequenceSet(msg.getUid()), true, flagsRistretto);
- }
+ if (con instanceof String) {
+ content.setText(StringEscapeUtils.escapeHtml((String) con).replaceAll("\n", "<br>"));
+ content.setIsHTML(isHTML);
+
+ //fullModel.setAttachments(new ArrayList<Attachment>());
+
+ } else if (con instanceof Multipart) {
+ Multipart mp = (Multipart) con;
+ List<IMAPMessageAttachment> attachmentList = new ArrayList<IMAPMessageAttachment>();
+ boolean hasAttachment = false;
+ StringBuffer sbPlain = new StringBuffer();
+ StringBuffer sbHTML = new StringBuffer();
+ for (int i = 0; i < mp.getCount(); i++) {
+ Part part = mp.getBodyPart(i);
+
+ String contentType = part.getContentType().toLowerCase();
+ System.out.println("c: " + contentType);
+
+ if (contentType.startsWith("text/plain") && isHTML == false) {
+ sbPlain.append(StringEscapeUtils.escapeHtml((String) part.getContent()).replaceAll("\n", "<br>"));
+
+ } else if (contentType.startsWith("text/html")) {
+ isHTML = true;
+ if (sbHTML.length() > 0) {
+ sbHTML.append("<HR/>");
+ }
+
+ sbHTML.append((String) part.getContent());
+
+ } else {
+
+ if (part.getFileName() != null) {
+ hasAttachment = true;
+ IMAPMessageAttachment attachment = new IMAPMessageAttachment();
+ attachment.setName(MimeUtility.decodeText(part.getFileName()));
+ attachment.setContentType(part.getContentType());
+ double size = part.getInputStream().available();
+ attachment.setSize(new Double(size).intValue());
+
+ attachmentList.add(attachment);
+ }
+ }
+
+ }
+ if (isHTML) {
+ content.setText(sbHTML.toString());
+ } else {
+ content.setText(sbPlain.toString());
+ }
+
+ content.setIsHTML(isHTML);
+ //.setHasAttachment(hasAttachment);
+ //fullModel.setAttachments(attachmentList);
+ }
+ f.setFlags(new Message[] {message}, new Flags(Flag.SEEN), true);
+ f.close(false);
+ msg.setIMAPMessageContent(content);
return msg;
} catch (Exception e) {
logger.error("Unable to expose msg for user " + user + " in folder "+ folder + " with uid "+ msg.getUid(),e);
Modified: labs/hupa/src/main/java/org/apache/hupa/server/FetchFoldersHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/FetchFoldersHandler.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/FetchFoldersHandler.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/FetchFoldersHandler.java Tue Jul 21 10:08:22 2009
@@ -22,6 +22,8 @@
import java.util.ArrayList;
import java.util.List;
+import javax.mail.Folder;
+
import net.customware.gwt.dispatch.server.ActionHandler;
import net.customware.gwt.dispatch.server.ExecutionContext;
import net.customware.gwt.dispatch.shared.ActionException;
@@ -31,20 +33,17 @@
import org.apache.hupa.shared.data.IMAPUser;
import org.apache.hupa.shared.rpc.FetchFolders;
import org.apache.hupa.shared.rpc.FetchFoldersResult;
-import org.columba.ristretto.imap.IMAPProtocol;
-import org.columba.ristretto.imap.ListInfo;
-import org.columba.ristretto.imap.SearchKey;
-import org.columba.ristretto.message.MailboxInfo;
import com.google.inject.Inject;
+import com.sun.mail.imap.IMAPStore;
public class FetchFoldersHandler implements ActionHandler<FetchFolders, FetchFoldersResult>{
- private IMAPProtocolCache cache;
+ private IMAPStoreCache cache;
private Log logger;
@Inject
- public FetchFoldersHandler(IMAPProtocolCache cache, Log logger) {
+ public FetchFoldersHandler(IMAPStoreCache cache, Log logger) {
this.cache = cache;
this.logger = logger;
}
@@ -68,27 +67,24 @@
protected ArrayList<IMAPFolder> getFolders(IMAPUser user)
throws ActionException {
ArrayList<IMAPFolder> fList = new ArrayList<IMAPFolder>();
- IMAPProtocol protocol = null;
+ IMAPStore store = null;
try {
- protocol = cache.getProtocol(user);
- ListInfo[] infos = protocol.list("", "*");
-
- for (int i = 0; i < infos.length; i++) {
- ListInfo info = infos[i];
-
- String fullName = info.getName();
- String delimiter = info.getDelimiter();
- MailboxInfo mInfo= protocol.select(info.getName());
-
- // we are want to show the not seen flagged message count
- int unseen = protocol.search(new SearchKey[]{ new SearchKey(SearchKey.UNSEEN)}).length;
- IMAPFolder iFolder = new IMAPFolder(info.getName());
+ store = cache.get(user);
+ com.sun.mail.imap.IMAPFolder folder = (com.sun.mail.imap.IMAPFolder) store.getDefaultFolder();
+
+ Folder[] folders = folder.list();
+ for (int i = 0; i < folders.length; i++) {
+ Folder f = folders[i];
+
+ String fullName = f.getFullName();
+ String delimiter = String.valueOf(f.getSeparator());
+
+ IMAPFolder iFolder = new IMAPFolder(fullName);
iFolder.setDelimiter(delimiter);
- iFolder.setMessageCount(mInfo.getExists());
-
- iFolder.setUnseenMessageCount(unseen);
+ iFolder.setMessageCount(f.getMessageCount());
- System.out.println(mInfo.toString() + " " + mInfo.getRecent());
+ iFolder.setUnseenMessageCount(f.getUnreadMessageCount());
+
int index = fullName.lastIndexOf(delimiter);
if (index > -1) {
String parentFullName = fullName.substring(0, index);
Modified: labs/hupa/src/main/java/org/apache/hupa/server/FetchMessagesHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/FetchMessagesHandler.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/FetchMessagesHandler.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/FetchMessagesHandler.java Tue Jul 21 10:08:22 2009
@@ -20,10 +20,18 @@
package org.apache.hupa.server;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
+import javax.mail.Address;
+import javax.mail.FetchProfile;
+import javax.mail.Flags;
+import javax.mail.Message;
+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.SearchTerm;
+
import net.customware.gwt.dispatch.server.ActionHandler;
import net.customware.gwt.dispatch.server.ExecutionContext;
import net.customware.gwt.dispatch.shared.ActionException;
@@ -36,24 +44,18 @@
import org.apache.hupa.shared.data.IMAPMessage.IMAPFlag;
import org.apache.hupa.shared.rpc.FetchMessages;
import org.apache.hupa.shared.rpc.FetchMessagesResult;
-import org.columba.ristretto.imap.IMAPFlags;
-import org.columba.ristretto.imap.IMAPProtocol;
-import org.columba.ristretto.imap.SearchKey;
-import org.columba.ristretto.imap.SequenceSet;
-import org.columba.ristretto.message.Address;
-import org.columba.ristretto.message.BasicHeader;
-import org.columba.ristretto.message.MailboxInfo;
import com.google.inject.Inject;
+import com.sun.mail.imap.IMAPStore;
public class FetchMessagesHandler implements ActionHandler<FetchMessages, FetchMessagesResult>{
- private IMAPProtocolCache cache;
+ private IMAPStoreCache cache;
private Log logger;
@Inject
- public FetchMessagesHandler(IMAPProtocolCache cache, Log logger) {
+ public FetchMessagesHandler(IMAPStoreCache cache, Log logger) {
this.cache = cache;
this.logger = logger;
}
@@ -76,12 +78,16 @@
protected FetchMessagesResult getMessages(IMAPUser user,IMAPFolder folder, int start, int offset,String searchString) throws ActionException {
ArrayList<IMAPMessage> mList = new ArrayList<IMAPMessage>();
int end = start + offset;
- IMAPProtocol proto = null;
+ IMAPStore store = null;
try {
- proto = cache.getProtocol(user);
- MailboxInfo mInfo = proto.select(folder.getFullName());
+ 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(com.sun.mail.imap.IMAPFolder.READ_ONLY);
+ }
- int exists = mInfo.getExists();
+ int exists = f.getMessageCount();
if (exists == 0) {
@@ -91,74 +97,82 @@
if (end > exists) {
end = exists -1;
}
- SequenceSet sSet;
+
+ Message[] messages;
+
if (searchString == null) {
- sSet = new SequenceSet(exists - end, exists - start);
+ messages = f.getMessages(exists - end, exists - start);
} else {
-
- List<Integer> matchedList = new ArrayList<Integer>();
- matchedList.addAll(Arrays.asList(proto.search(new SearchKey[]{new SearchKey(SearchKey.FROM,searchString)})));
- matchedList.addAll(Arrays.asList(proto.search(new SearchKey[]{new SearchKey(SearchKey.TEXT,searchString)})));
- Collections.sort(matchedList);
-
- if (matchedList.size() == 0) {
- return new FetchMessagesResult(mList,start,offset,exists);
- }
- sSet = new SequenceSet(matchedList);
+ SearchTerm term = new BodyTerm(searchString);
+ messages = f.search(term);
}
- org.columba.ristretto.imap.IMAPHeader[] headers = proto
- .fetchHeader(sSet);
- IMAPFlags[] flags = proto.fetchFlags(sSet);
- Integer[] uids = proto.fetchUid(sSet);
- for (int i = 0; i < headers.length; i++) {
- BasicHeader header = new BasicHeader(headers[i].getHeader());
+
+ FetchProfile fp = new FetchProfile();
+ fp.add(FetchProfile.Item.ENVELOPE);
+ fp.add(FetchProfile.Item.FLAGS);
+ f.fetch(messages, fp);
+
+ for (int i = 0; i < messages.length; i++) {
+ Message m = messages[i];
IMAPHeader newHeader = new IMAPHeader();
- newHeader.setRawHeader(header.toString());
- newHeader.setFrom(header.getFrom().toString().trim());
+ newHeader.setRawHeader(m.getAllHeaders().toString());
+ newHeader.setFrom(m.getFrom()[0].toString().trim());
StringBuffer toBuf = new StringBuffer();
- Address[] toArray = header.getTo();
- for (int b =0; b < toArray.length;b++) {
- toBuf.append(toArray[b].toString().trim());
- if (b != toArray.length -1) {
- toBuf.append(", ");
+ Address[] toArray = m.getRecipients(RecipientType.TO);
+ if (toArray != null) {
+ for (int b =0; b < toArray.length;b++) {
+ toBuf.append(toArray[b].toString().trim());
+ if (b != toArray.length -1) {
+ toBuf.append(", ");
+ }
}
}
newHeader.setTo(toBuf.toString());
- newHeader.setSubject(header.getSubject());
+ newHeader.setSubject(MimeUtility.decodeText(m.getSubject()));
StringBuffer ccBuf = new StringBuffer();
- Address[] ccArray = header.getCc();
- for (int b =0; b < ccArray.length;b++) {
- toBuf.append(ccArray[b].toString().trim());
- if (b != ccArray.length -1) {
- ccBuf.append(", ");
+ Address[] ccArray = m.getRecipients(RecipientType.CC);
+ if (ccArray != null) {
+ for (int b =0; b < ccArray.length;b++) {
+ toBuf.append(ccArray[b].toString().trim());
+ if (b != ccArray.length -1) {
+ ccBuf.append(", ");
+ }
}
}
newHeader.setCc(ccBuf.toString());
- newHeader.setReceivedDate(header.getDate());
+ newHeader.setReceivedDate(m.getReceivedDate());
List<IMAPFlag> iFlags = new ArrayList<IMAPFlag>();
- IMAPFlags imapFlags = flags[i];
- if (imapFlags.getDeleted()) {
- iFlags.add(IMAPMessage.IMAPFlag.DELETED);
- }
- if (imapFlags.getSeen()) {
- iFlags.add(IMAPFlag.SEEN);
- }
- if (imapFlags.getRecent()) {
- iFlags.add(IMAPFlag.RECENT);
+ 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(IMAPMessage.IMAPFlag.DELETED);
+ }
+ if (flag == Flag.SEEN) {
+ iFlags.add(IMAPFlag.SEEN);
+ }
+ if (flag == Flag.RECENT) {
+ iFlags.add(IMAPFlag.RECENT);
+
+ }
}
+
IMAPMessage msg = new IMAPMessage();
msg.setIMAPHeader(newHeader);
- msg.setUid(uids[i]);
+ msg.setUid(f.getUID(m));
msg.setIMAPFlags(iFlags);
mList.add(0, msg);
}
+ f.close(false);
+
return new FetchMessagesResult(mList,start,offset,exists);
} catch (Exception e) {
logger.error("Error while fetching headers for user " + user.getName() + " in folder " + folder,e);
Copied: labs/hupa/src/main/java/org/apache/hupa/server/IMAPStoreCache.java (from r795712, labs/hupa/src/main/java/org/apache/hupa/server/IMAPProtocolCache.java)
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/IMAPStoreCache.java?p2=labs/hupa/src/main/java/org/apache/hupa/server/IMAPStoreCache.java&p1=labs/hupa/src/main/java/org/apache/hupa/server/IMAPProtocolCache.java&r1=795712&r2=796230&rev=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/IMAPProtocolCache.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/IMAPStoreCache.java Tue Jul 21 10:08:22 2009
@@ -19,57 +19,56 @@
package org.apache.hupa.server;
-import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
+
+import javax.mail.MessagingException;
+import javax.mail.Session;
import org.apache.commons.logging.Log;
import org.apache.hupa.shared.data.IMAPUser;
-import org.columba.ristretto.imap.IMAPException;
-import org.columba.ristretto.imap.IMAPProtocol;
import com.google.inject.Inject;
import com.google.inject.Singleton;
+import com.sun.mail.imap.IMAPStore;
@Singleton
-public class IMAPProtocolCache {
+public class IMAPStoreCache {
+ private Properties props = new Properties();
+ private Session session;
protected Log logger;
- private final Map<String,IMAPProtocol> pool = new HashMap<String ,IMAPProtocol>();
+ private final Map<String,IMAPStore> pool = new HashMap<String ,IMAPStore>();
@Inject
- public IMAPProtocolCache(Log logger) {
+ public IMAPStoreCache(Log logger) {
this.logger = logger;
+
+ props.setProperty("mail.mime.decodetext.strict", "false");
+ session = Session.getDefaultInstance(props, null);
+ System.setProperty("mail.mime.decodetext.strict", "false");
}
- public synchronized IMAPProtocol getProtocol(IMAPUser user) throws IOException,
- IMAPException {
- IMAPProtocol protocol = pool.get(user.getName());
- if (protocol == null) {
- logger.debug("No cached protocol found for user " +user);
- protocol = new IMAPProtocol("myblog.kicks-ass.org",
- IMAPProtocol.DEFAULT_PORT);
- }
- if (protocol.getState() == IMAPProtocol.NOT_CONNECTED) {
- logger.debug("Protocol is not connected for user " +user);
- protocol.openPort();
- }
- if (protocol.getState() == IMAPProtocol.NON_AUTHENTICATED) {
- logger.debug("Authenticate user " +user);
- protocol.login(user.getName(), user.getPassword().toCharArray());
+ public synchronized IMAPStore get(IMAPUser user) throws MessagingException {
+ IMAPStore store = pool.get(user.getName());
+ if (store == null) {
+ logger.debug("No cached store found for user " +user);
+ store = (IMAPStore) session.getStore("imap");
+ store.connect("myblog.kicks-ass.org", 143, user.getName(),user.getPassword());
}
- pool.put(user.getName(),protocol);
- return protocol;
+ pool.put(user.getName(),store);
+ return store;
}
- public synchronized void deleteProcotol(IMAPUser user) {
- IMAPProtocol protocol = pool.get(user.getName());
- if (protocol.getState() == IMAPProtocol.AUTHENTICATED) {
+ public synchronized void delete(IMAPUser user) {
+ IMAPStore store = pool.get(user.getName());
+ if (store.isConnected()) {
try {
- protocol.logout();
- } catch (Exception e) {
- logger.error("Error while logout user "+ user);
- }
+ store.close();
+ } catch (MessagingException e) {
+ // Ignore on close
+ }
}
pool.remove(user.getName());
}
Modified: labs/hupa/src/main/java/org/apache/hupa/server/LoginUserHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/LoginUserHandler.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/LoginUserHandler.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/LoginUserHandler.java Tue Jul 21 10:08:22 2009
@@ -35,11 +35,11 @@
public class LoginUserHandler implements
ActionHandler<LoginUser, LoginUserResult> {
- private IMAPProtocolCache cache;
+ private IMAPStoreCache cache;
private Log logger;
@Inject
- public LoginUserHandler(IMAPProtocolCache cache, Log logger) {
+ public LoginUserHandler(IMAPStoreCache cache, Log logger) {
this.cache = cache;
this.logger = logger;
}
@@ -67,7 +67,7 @@
IMAPUser user = new IMAPUser();
user.setName(username);
user.setPassword(password);
- cache.getProtocol(user);
+ cache.get(user);
user.setLoginDate(new Date());
user.setAuthenticated(true);
Modified: labs/hupa/src/main/java/org/apache/hupa/server/LogoutUserHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/LogoutUserHandler.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/LogoutUserHandler.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/LogoutUserHandler.java Tue Jul 21 10:08:22 2009
@@ -33,11 +33,11 @@
public class LogoutUserHandler implements ActionHandler<LogoutUser, LogoutUserResult> {
- private IMAPProtocolCache cache;
+ private IMAPStoreCache cache;
private Log logger;
@Inject
- public LogoutUserHandler(IMAPProtocolCache cache, Log logger) {
+ public LogoutUserHandler(IMAPStoreCache cache, Log logger) {
this.cache = cache;
this.logger = logger;
}
@@ -47,12 +47,8 @@
throws ActionException {
IMAPUser user = action.getUser();
user.setAuthenticated(false);
- try {
- cache.getProtocol(user).expunge();
- } catch (Exception e) {
- logger.error("Error while expunge for user " + user);
- }
- cache.deleteProcotol(user);
+
+ cache.delete(user);
return new LogoutUserResult(user);
}
Modified: labs/hupa/src/main/java/org/apache/hupa/server/NoopHandler.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/NoopHandler.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/NoopHandler.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/NoopHandler.java Tue Jul 21 10:08:22 2009
@@ -32,18 +32,18 @@
public class NoopHandler implements ActionHandler<Noop, NoopResult>{
- private IMAPProtocolCache cache;
+ private IMAPStoreCache cache;
private Log logger;
@Inject
- public NoopHandler(IMAPProtocolCache cache, Log logger) {
+ public NoopHandler(IMAPStoreCache cache, Log logger) {
this.cache = cache;
this.logger = logger;
}
public NoopResult execute(Noop action, ExecutionContext context)
throws ActionException {
try {
- cache.getProtocol(action.getUser()).noop();
+ cache.get(action.getUser()).idle();
return new NoopResult();
} catch (Exception e) {
logger.error("Error while sending NOOP for user " + action.getUser(),e);
Modified: labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/server/guice/ServerModul.java Tue Jul 21 10:08:22 2009
@@ -26,7 +26,7 @@
import org.apache.hupa.server.ExposeMessageHandler;
import org.apache.hupa.server.FetchFoldersHandler;
import org.apache.hupa.server.FetchMessagesHandler;
-import org.apache.hupa.server.IMAPProtocolCache;
+import org.apache.hupa.server.IMAPStoreCache;
import org.apache.hupa.server.LoginUserHandler;
import org.apache.hupa.server.LogoutUserHandler;
import org.apache.hupa.server.NoopHandler;
@@ -52,7 +52,7 @@
bindHandler(DeleteMessageHandler.class);
bindHandler(NoopHandler.class);
- bind(IMAPProtocolCache.class).in(Singleton.class);
+ bind(IMAPStoreCache.class).in(Singleton.class);
bind(Log.class).toProvider(LogProvider.class).in(Singleton.class);
}
}
Modified: labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessage.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessage.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessage.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessage.java Tue Jul 21 10:08:22 2009
@@ -28,7 +28,7 @@
*/
private static final long serialVersionUID = 7331361994526216161L;
private IMAPHeader header;
- private int uid;
+ private long uid;
private IMAPMessageContent content;
private List<IMAPFlag> flags;
@@ -52,11 +52,11 @@
return header;
}
- public int getUid() {
+ public long getUid() {
return uid;
}
- public void setUid(int uid) {
+ public void setUid(long uid) {
this.uid = uid;
}
Modified: labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessageAttachment.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessageAttachment.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessageAttachment.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/data/IMAPMessageAttachment.java Tue Jul 21 10:08:22 2009
@@ -27,6 +27,8 @@
*
*/
private static final long serialVersionUID = -6896197131104882424L;
+ private String cType;
+ private int size;
private String name;
public void setName(String name) {
@@ -38,4 +40,19 @@
return name;
}
+ public void setContentType(String cType) {
+ this.cType = cType;
+ }
+
+ public String getContentType() {
+ return cType;
+ }
+
+ public void setSize(int size) {
+ this.size = size;
+ }
+
+ public int getSize() {
+ return size;
+ }
}
Modified: labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessage.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessage.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessage.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessage.java Tue Jul 21 10:08:22 2009
@@ -34,13 +34,13 @@
private static final long serialVersionUID = 801294103124082592L;
private IMAPUser user;
private IMAPFolder folder;
- private ArrayList<Integer> messageUids;
+ private ArrayList<Long> messageUids;
@SuppressWarnings("unused")
private DeleteMessage() {
}
- public DeleteMessage(IMAPUser user,IMAPFolder folder, ArrayList<Integer> messageUids) {
+ public DeleteMessage(IMAPUser user,IMAPFolder folder, ArrayList<Long> messageUids) {
this.user = user;
this.folder = folder;
this.messageUids = messageUids;
@@ -54,7 +54,7 @@
return folder;
}
- public ArrayList<Integer> getMessageUids() {
+ public ArrayList<Long> getMessageUids() {
return messageUids;
}
Modified: labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessageResult.java
URL: http://svn.apache.org/viewvc/labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessageResult.java?rev=796230&r1=796229&r2=796230&view=diff
==============================================================================
--- labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessageResult.java (original)
+++ labs/hupa/src/main/java/org/apache/hupa/shared/rpc/DeleteMessageResult.java Tue Jul 21 10:08:22 2009
@@ -34,7 +34,7 @@
private static final long serialVersionUID = -5149203502019947912L;
private IMAPUser user;
private IMAPFolder folder;
- private ArrayList<Integer> messageUids;
+ private ArrayList<Long> messageUids;
@@ -43,7 +43,7 @@
}
- public DeleteMessageResult(IMAPUser user,IMAPFolder folder, ArrayList<Integer> messageUids) {
+ public DeleteMessageResult(IMAPUser user,IMAPFolder folder, ArrayList<Long> messageUids) {
this.user = user;
this.folder = folder;
this.messageUids = messageUids;
@@ -57,7 +57,7 @@
return folder;
}
- public ArrayList<Integer> getMessageUids() {
+ public ArrayList<Long> getMessageUids() {
return messageUids;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org