You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rd...@apache.org on 2009/01/18 20:03:53 UTC
svn commit: r735521 - in /james/protocols/imap/trunk:
api/src/main/java/org/apache/james/api/imap/imap4rev1/
decode/src/main/java/org/apache/james/imap/decode/base/
decode/src/main/java/org/apache/james/imap/decode/imap4rev1/
mailbox/src/main/java/org/...
Author: rdonkin
Date: Sun Jan 18 11:03:53 2009
New Revision: 735521
URL: http://svn.apache.org/viewvc?rev=735521&view=rev
Log:
Step one to MimeMessage replacement: alter interface and move usage inside mailboxes. Also, lose string creation.
Modified:
james/protocols/imap/trunk/api/src/main/java/org/apache/james/api/imap/imap4rev1/Imap4Rev1MessageFactory.java
james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java
james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/imap4rev1/AppendCommandParser.java
james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java
james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/AppendRequest.java
james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/BaseImap4Rev1MessageFactory.java
james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/imap4rev1/AppendProcessor.java
james/protocols/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
Modified: james/protocols/imap/trunk/api/src/main/java/org/apache/james/api/imap/imap4rev1/Imap4Rev1MessageFactory.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/api/src/main/java/org/apache/james/api/imap/imap4rev1/Imap4Rev1MessageFactory.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/api/src/main/java/org/apache/james/api/imap/imap4rev1/Imap4Rev1MessageFactory.java (original)
+++ james/protocols/imap/trunk/api/src/main/java/org/apache/james/api/imap/imap4rev1/Imap4Rev1MessageFactory.java Sun Jan 18 11:03:53 2009
@@ -21,7 +21,6 @@
import java.util.Date;
import javax.mail.Flags;
-import javax.mail.internet.MimeMessage;
import org.apache.james.api.imap.ImapCommand;
import org.apache.james.api.imap.ImapMessage;
@@ -56,7 +55,7 @@
public ImapMessage createAppendMessage(ImapCommand command,
String mailboxName, Flags flags, Date datetime,
- MimeMessage message, String tag);
+ byte[] message, String tag);
public ImapMessage createAuthenticateMessage(final ImapCommand command,
final String authType, final String tag);
Modified: james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java (original)
+++ james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java Sun Jan 18 11:03:53 2009
@@ -324,45 +324,50 @@
if (charset == null) {
return consumeLiteral(request, US_ASCII);
} else {
- // The 1st character must be '{'
- consumeChar(request, '{');
-
- StringBuffer digits = new StringBuffer();
- char next = request.nextChar();
- while (next != '}' && next != '+') {
- digits.append(next);
- request.consume();
- next = request.nextChar();
- }
-
- // If the number is *not* suffixed with a '+', we *are* using a
- // synchronized literal,
- // and we need to send command continuation request before reading
- // data.
- boolean synchronizedLiteral = true;
- // '+' indicates a non-synchronized literal (no command continuation
- // request)
- if (next == '+') {
- synchronizedLiteral = false;
- consumeChar(request, '+');
- }
-
- // Consume the '}' and the newline
- consumeChar(request, '}');
- consumeCRLF(request);
-
- if (synchronizedLiteral) {
- request.commandContinuationRequest();
- }
-
- final int size = Integer.parseInt(digits.toString());
- final byte[] bytes = new byte[size];
- request.read(bytes);
+ final byte[] bytes = consumeLiteral(request);
final ByteBuffer buffer = ByteBuffer.wrap(bytes);
return decode(charset, buffer);
}
}
+ protected byte[] consumeLiteral(final ImapRequestLineReader request) throws ProtocolException {
+ // The 1st character must be '{'
+ consumeChar(request, '{');
+
+ StringBuffer digits = new StringBuffer();
+ char next = request.nextChar();
+ while (next != '}' && next != '+') {
+ digits.append(next);
+ request.consume();
+ next = request.nextChar();
+ }
+
+ // If the number is *not* suffixed with a '+', we *are* using a
+ // synchronized literal,
+ // and we need to send command continuation request before reading
+ // data.
+ boolean synchronizedLiteral = true;
+ // '+' indicates a non-synchronized literal (no command continuation
+ // request)
+ if (next == '+') {
+ synchronizedLiteral = false;
+ consumeChar(request, '+');
+ }
+
+ // Consume the '}' and the newline
+ consumeChar(request, '}');
+ consumeCRLF(request);
+
+ if (synchronizedLiteral) {
+ request.commandContinuationRequest();
+ }
+
+ final int size = Integer.parseInt(digits.toString());
+ final byte[] bytes = new byte[size];
+ request.read(bytes);
+ return bytes;
+ }
+
private String decode(final Charset charset, final ByteBuffer buffer)
throws ProtocolException {
try {
Modified: james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/imap4rev1/AppendCommandParser.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/imap4rev1/AppendCommandParser.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/imap4rev1/AppendCommandParser.java (original)
+++ james/protocols/imap/trunk/decode/src/main/java/org/apache/james/imap/decode/imap4rev1/AppendCommandParser.java Sun Jan 18 11:03:53 2009
@@ -18,11 +18,9 @@
****************************************************************/
package org.apache.james.imap.decode.imap4rev1;
-import java.io.ByteArrayInputStream;
import java.util.Date;
import javax.mail.Flags;
-import javax.mail.internet.MimeMessage;
import org.apache.james.api.imap.ImapCommand;
import org.apache.james.api.imap.ImapMessage;
@@ -76,32 +74,6 @@
}
}
- /**
- * Reads a MimeMessage encoded as a string literal from the request. TODO
- * shouldn't need to read as a string and write out bytes use
- * FixedLengthInputStream instead. Hopefully it can then be dynamic.
- *
- * @param request
- * The Imap APPEND request
- * @return A MimeMessage read off the request.
- */
- public MimeMessage mimeMessage(ImapRequestLineReader request)
- throws ProtocolException {
- request.nextWordChar();
- String mailString = consumeLiteral(request, null);
- MimeMessage mm = null;
-
- try {
- byte[] messageBytes = mailString.getBytes("US-ASCII");
- mm = new MimeMessage(null, new ByteArrayInputStream(messageBytes));
- } catch (Exception e) {
- throw new ProtocolException("UnexpectedException: "
- + e.getMessage(), e);
-
- }
- return mm;
- }
-
protected ImapMessage decode(ImapCommand command,
ImapRequestLineReader request, String tag) throws ProtocolException {
String mailboxName = mailbox(request);
@@ -113,7 +85,8 @@
if (datetime == null) {
datetime = new Date();
}
- MimeMessage message = mimeMessage(request);
+ request.nextWordChar();
+ final byte[] message = consumeLiteral(request);
endLine(request);
final Imap4Rev1MessageFactory factory = getMessageFactory();
final ImapMessage result = factory.createAppendMessage(command,
Modified: james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java (original)
+++ james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java Sun Jan 18 11:03:53 2009
@@ -23,7 +23,6 @@
import java.util.Iterator;
import javax.mail.Flags;
-import javax.mail.internet.MimeMessage;
import org.apache.james.imap.mailbox.MessageResult.FetchGroup;
@@ -147,6 +146,7 @@
* minimal fetch group only
* @param mailboxSession
* TODO
+ * @param isRecent TODO
* @return MessageResult with the fields defined by <b>result</b>
* <ul>
* <li> IMAP, Javamail Folder: nothing required </li>
@@ -156,8 +156,8 @@
* @throws MailboxException
* if anything went wrong
*/
- MessageResult appendMessage(MimeMessage message, Date internalDate,
- FetchGroup fetchGroup, MailboxSession mailboxSession)
+ MessageResult appendMessage(byte[] message, Date internalDate,
+ FetchGroup fetchGroup, MailboxSession mailboxSession, boolean isRecent)
throws MailboxException;
/**
Modified: james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/AppendRequest.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/AppendRequest.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/AppendRequest.java (original)
+++ james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/AppendRequest.java Sun Jan 18 11:03:53 2009
@@ -21,7 +21,6 @@
import java.util.Date;
import javax.mail.Flags;
-import javax.mail.internet.MimeMessage;
import org.apache.james.api.imap.ImapCommand;
@@ -32,10 +31,10 @@
private final Date datetime;
- private final MimeMessage message;
+ private final byte[] message;
public AppendRequest(ImapCommand command, String mailboxName, Flags flags,
- Date datetime, MimeMessage message, String tag) {
+ Date datetime, byte[] message, String tag) {
super(tag, command);
this.mailboxName = mailboxName;
this.flags = flags;
@@ -55,7 +54,7 @@
return mailboxName;
}
- public MimeMessage getMessage() {
+ public byte[] getMessage() {
return message;
}
}
Modified: james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/BaseImap4Rev1MessageFactory.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/BaseImap4Rev1MessageFactory.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/BaseImap4Rev1MessageFactory.java (original)
+++ james/protocols/imap/trunk/message/src/main/java/org/apache/james/imap/message/request/imap4rev1/BaseImap4Rev1MessageFactory.java Sun Jan 18 11:03:53 2009
@@ -21,7 +21,6 @@
import java.util.Date;
import javax.mail.Flags;
-import javax.mail.internet.MimeMessage;
import org.apache.james.api.imap.ImapCommand;
import org.apache.james.api.imap.ImapMessage;
@@ -49,7 +48,7 @@
public ImapMessage createAppendMessage(ImapCommand command,
String mailboxName, Flags flags, Date datetime,
- MimeMessage message, String tag) {
+ byte[] message, String tag) {
return new AppendRequest(command, mailboxName, flags, datetime,
message, tag);
}
Modified: james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/imap4rev1/AppendProcessor.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/imap4rev1/AppendProcessor.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/imap4rev1/AppendProcessor.java (original)
+++ james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/imap4rev1/AppendProcessor.java Sun Jan 18 11:03:53 2009
@@ -21,10 +21,6 @@
import java.util.Date;
-import javax.mail.MessagingException;
-import javax.mail.Flags.Flag;
-import javax.mail.internet.MimeMessage;
-
import org.apache.commons.logging.Log;
import org.apache.james.api.imap.ImapCommand;
import org.apache.james.api.imap.ImapMessage;
@@ -64,7 +60,7 @@
String tag, ImapCommand command, Responder responder) {
final AppendRequest request = (AppendRequest) message;
final String mailboxName = request.getMailboxName();
- final MimeMessage mimeMessage = request.getMessage();
+ final byte[] messageBytes = request.getMessage();
final Date datetime = request.getDatetime();
// TODO: Flags are ignore: check whether the specification says that
// they should be processed
@@ -73,7 +69,7 @@
final String fullMailboxName = buildFullName(session, mailboxName);
final MailboxManager mailboxManager = getMailboxManager();
final Mailbox mailbox = mailboxManager.getMailbox(fullMailboxName);
- appendToMailbox(mimeMessage, datetime, session, tag, command,
+ appendToMailbox(messageBytes, datetime, session, tag, command,
mailbox, responder, fullMailboxName);
} catch (MailboxException mme) {
@@ -96,7 +92,7 @@
}
- private void appendToMailbox(final MimeMessage message, final Date datetime,
+ private void appendToMailbox(final byte[] message, final Date datetime,
final ImapSession session, final String tag, final ImapCommand command,
final Mailbox mailbox, Responder responder, final String fullMailboxName) {
try {
@@ -105,11 +101,8 @@
final SelectedMailbox selectedMailbox = session.getSelected();
final boolean isSelectedMailbox = selectedMailbox != null
&& fullMailboxName.equals(selectedMailbox.getName());
- if (!isSelectedMailbox) {
- message.setFlag(Flag.RECENT, true);
- }
final MessageResult result = mailbox.appendMessage(message,
- datetime, FetchGroupImpl.MINIMAL, mailboxSession);
+ datetime, FetchGroupImpl.MINIMAL, mailboxSession, !isSelectedMailbox);
final long uid = result.getUid();
if (isSelectedMailbox) {
selectedMailbox.addRecent(uid);
@@ -119,9 +112,6 @@
} catch (MailboxException e) {
// TODO why not TRYCREATE?
no(command, tag, responder, e);
- } catch (MessagingException e) {
- no(command, tag, responder, e);
}
-
}
}
Modified: james/protocols/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java (original)
+++ james/protocols/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java Sun Jan 18 11:03:53 2009
@@ -19,6 +19,7 @@
package org.apache.james.imap.store;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -86,8 +87,8 @@
return (int) messageMapper.countMessagesInMailbox(mailboxId);
}
- public MessageResult appendMessage(MimeMessage mimeMessage, Date internalDate,
- FetchGroup fetchGroup, MailboxSession mailboxSession)
+ public MessageResult appendMessage(byte[] messageBytes, Date internalDate,
+ FetchGroup fetchGroup, MailboxSession mailboxSession, boolean isRecent)
throws MailboxException {
final Mailbox mailbox = reserveNextUid();
@@ -103,6 +104,10 @@
// is
// inserted long before 4, when
// mail 4 is big and comes over a slow connection.
+ final MimeMessage mimeMessage = new MimeMessage(null, new ByteArrayInputStream(messageBytes));
+ if (isRecent) {
+ mimeMessage.setFlag(Flags.Flag.RECENT, true);
+ }
final long uid = mailbox.getLastUid();
final int size = size(mimeMessage);
final byte[] body = body(mimeMessage);
Modified: james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?rev=735521&r1=735520&r2=735521&view=diff
==============================================================================
--- james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java (original)
+++ james/protocols/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java Sun Jan 18 11:03:53 2009
@@ -19,6 +19,7 @@
package org.apache.james.mailboxmanager.torque;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -115,8 +116,8 @@
}
}
- public MessageResult appendMessage(MimeMessage message, Date internalDate,
- FetchGroup fetchGroup, MailboxSession mailboxSession)
+ public MessageResult appendMessage(byte[] message, Date internalDate,
+ FetchGroup fetchGroup, MailboxSession mailboxSession, boolean isRecent)
throws MailboxException {
try {
@@ -141,14 +142,17 @@
messageRow.setMailboxId(getMailboxRow().getMailboxId());
messageRow.setUid(uid);
messageRow.setInternalDate(internalDate);
-
- final int size = size(message);
+ final MimeMessage mimeMessage = new MimeMessage(null, new ByteArrayInputStream(message));
+ if (isRecent) {
+ mimeMessage.setFlag(Flags.Flag.RECENT, true);
+ }
+ final int size = size(mimeMessage);
messageRow.setSize(size);
- populateFlags(message, messageRow);
+ populateFlags(mimeMessage, messageRow);
- addHeaders(message, messageRow);
+ addHeaders(mimeMessage, messageRow);
- MessageBody mb = populateBody(message);
+ MessageBody mb = populateBody(mimeMessage);
messageRow.addMessageBody(mb);
save(messageRow);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org