Author: norman
Date: Thu Jul 28 19:32:31 2011
New Revision: 1151980
URL: http://svn.apache.org/viewvc?rev=1151980&view=rev
Log:
Move to mime4j 0.7. See MAILBOX-112
Removed:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/ConfigurableMimeTokenStream.java
Modified:
james/mailbox/trunk/lucene/pom.xml
james/mailbox/trunk/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
james/mailbox/trunk/maildir/pom.xml
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
james/mailbox/trunk/pom.xml
james/mailbox/trunk/store/pom.xml
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearcher.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java
Modified: james/mailbox/trunk/lucene/pom.xml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/lucene/pom.xml?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
--- james/mailbox/trunk/lucene/pom.xml (original)
+++ james/mailbox/trunk/lucene/pom.xml Thu Jul 28 19:32:31 2011
@@ -38,7 +38,11 @@
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
- <artifactId>apache-mime4j</artifactId>
+ <artifactId>apache-mime4j-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-mime4j-dom</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
Modified:
james/mailbox/trunk/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
(original)
+++
james/mailbox/trunk/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
Thu Jul 28 19:32:31 2011
@@ -63,18 +63,20 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
import org.apache.james.mailbox.store.search.SearchUtil;
import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.descriptor.BodyDescriptor;
-import org.apache.james.mime4j.field.DateTimeField;
-import org.apache.james.mime4j.field.address.Address;
-import org.apache.james.mime4j.field.address.AddressList;
-import org.apache.james.mime4j.field.address.Group;
-import org.apache.james.mime4j.field.address.MailboxList;
-import org.apache.james.mime4j.field.datetime.DateTime;
+import org.apache.james.mime4j.dom.Header;
+import org.apache.james.mime4j.dom.address.Address;
+import org.apache.james.mime4j.dom.address.AddressList;
+import org.apache.james.mime4j.dom.address.Group;
+import org.apache.james.mime4j.dom.address.MailboxList;
+import org.apache.james.mime4j.dom.datetime.DateTime;
+import org.apache.james.mime4j.dom.field.DateTimeField;
+import org.apache.james.mime4j.field.address.AddressFormatter;
+import org.apache.james.mime4j.field.address.LenientAddressBuilder;
import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
-import org.apache.james.mime4j.message.Header;
import org.apache.james.mime4j.message.SimpleContentHandler;
-import org.apache.james.mime4j.parser.MimeEntityConfig;
import org.apache.james.mime4j.parser.MimeStreamParser;
+import org.apache.james.mime4j.stream.BodyDescriptor;
+import org.apache.james.mime4j.stream.MimeConfig;
import org.apache.james.mime4j.util.MimeUtil;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.DateTools;
@@ -478,9 +480,9 @@ public class LuceneMessageSearchIndex<Id
String firstFromDisplay = "";
String firstToDisplay = "";
- Iterator<org.apache.james.mime4j.parser.Field> fields =
header.iterator();
+ Iterator<org.apache.james.mime4j.stream.Field> fields =
header.iterator();
while(fields.hasNext()) {
- org.apache.james.mime4j.parser.Field f = fields.next();
+ org.apache.james.mime4j.stream.Field f = fields.next();
String headerName =
f.getName().toUpperCase(Locale.ENGLISH);
String headerValue =
f.getBody().toUpperCase(Locale.ENGLISH);
String fullValue =
f.toString().toUpperCase(Locale.ENGLISH);
@@ -517,15 +519,14 @@ public class LuceneMessageSearchIndex<Id
// Check if we can index the the address in the right
manner
if (field != null) {
- try {
// not sure if we really should reparse it. It
maybe be better to check just for the right type.
// But this impl was easier in the first place
- AddressList aList =
AddressList.parse(MimeUtil.unfold(f.getBody()));
+ AddressList aList =
LenientAddressBuilder.DEFAULT.parseAddressList(MimeUtil.unfold(f.getBody()));
for (int i = 0; i < aList.size(); i++) {
Address address = aList.get(i);
- if (address instanceof
org.apache.james.mime4j.field.address.Mailbox) {
-
org.apache.james.mime4j.field.address.Mailbox mailbox =
(org.apache.james.mime4j.field.address.Mailbox) address;
- String value =
mailbox.getEncodedString().toUpperCase(Locale.ENGLISH);
+ if (address instanceof
org.apache.james.mime4j.dom.address.Mailbox) {
+
org.apache.james.mime4j.dom.address.Mailbox mailbox =
(org.apache.james.mime4j.dom.address.Mailbox) address;
+ String value =
AddressFormatter.DEFAULT.encode(mailbox).toUpperCase(Locale.ENGLISH);
doc.add(new Field(field, value,
Store.NO, Index.ANALYZED));
if (i == 0) {
String mailboxAddress =
SearchUtil.getMailboxAddress(mailbox);
@@ -546,8 +547,8 @@ public class LuceneMessageSearchIndex<Id
} else if (address instanceof Group) {
MailboxList mList = ((Group)
address).getMailboxes();
for (int a = 0; a < mList.size(); a++)
{
-
org.apache.james.mime4j.field.address.Mailbox mailbox = mList.get(a);
- String value =
mailbox.getEncodedString().toUpperCase(Locale.ENGLISH);
+
org.apache.james.mime4j.dom.address.Mailbox mailbox = mList.get(a);
+ String value =
AddressFormatter.DEFAULT.encode(mailbox).toUpperCase(Locale.ENGLISH);
doc.add(new Field(field, value,
Store.NO, Index.ANALYZED));
if (i == 0 && a == 0) {
@@ -569,9 +570,7 @@ public class LuceneMessageSearchIndex<Id
}
}
- } catch
(org.apache.james.mime4j.field.address.parser.ParseException e) {
- session.getLog().debug("Unable to parse
address from header " + headerName + " for indexing", e);
- }
+
doc.add(new Field(field, headerValue, Store.NO,
Index.ANALYZED));
} else if (headerName.equalsIgnoreCase("Subject")) {
@@ -600,11 +599,9 @@ public class LuceneMessageSearchIndex<Id
doc.add(new Field(FIRST_TO_MAILBOX_DISPLAY_FIELD,
firstToDisplay, Store.YES, Index.NOT_ANALYZED));
}
- /*
- * (non-Javadoc)
- * @see
org.apache.james.mime4j.message.SimpleContentHandler#bodyDecoded(org.apache.james.mime4j.descriptor.BodyDescriptor,
java.io.InputStream)
- */
- public void bodyDecoded(BodyDescriptor desc, InputStream in)
throws IOException {
+
+ @Override
+ public void body(BodyDescriptor desc, InputStream in) throws
MimeException, IOException {
String mediaType = desc.getMediaType();
if (MEDIA_TYPE_TEXT.equalsIgnoreCase(mediaType) ||
MEDIA_TYPE_MESSAGE.equalsIgnoreCase(mediaType)) {
String cset = desc.getCharset();
@@ -628,12 +625,14 @@ public class LuceneMessageSearchIndex<Id
}
}
+
};
- MimeEntityConfig config = new MimeEntityConfig();
+ MimeConfig config = new MimeConfig();
config.setMaxLineLen(-1);
//config.setStrictParsing(false);
config.setMaxContentLen(-1);
MimeStreamParser parser = new MimeStreamParser(config);
+ parser.setContentDecoding(true);
parser.setContentHandler(handler);
try {
Modified: james/mailbox/trunk/maildir/pom.xml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/pom.xml?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/pom.xml (original)
+++ james/mailbox/trunk/maildir/pom.xml Thu Jul 28 19:32:31 2011
@@ -38,7 +38,11 @@
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
- <artifactId>apache-mime4j</artifactId>
+ <artifactId>apache-mime4j-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-mime4j-dom</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
Modified:
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
(original)
+++
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
Thu Jul 28 19:32:31 2011
@@ -38,13 +38,15 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
-import org.apache.james.mailbox.store.streaming.ConfigurableMimeTokenStream;
import org.apache.james.mailbox.store.streaming.CountingInputStream;
import org.apache.james.mailbox.store.streaming.LazySkippingInputStream;
import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.descriptor.MaximalBodyDescriptor;
-import org.apache.james.mime4j.parser.MimeEntityConfig;
-import org.apache.james.mime4j.parser.MimeTokenStream;
+import org.apache.james.mime4j.message.DefaultBodyDescriptorBuilder;
+import org.apache.james.mime4j.message.MaximalBodyDescriptor;
+import org.apache.james.mime4j.stream.EntityState;
+import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.stream.MimeTokenStream;
+import org.apache.james.mime4j.stream.RecursionMode;
public class MaildirMessage extends AbstractMessage<Integer> {
@@ -246,16 +248,14 @@ public class MaildirMessage extends Abst
// Disable line length... This should be handled by the smtp server
// component and not the parser itself
// https://issues.apache.org/jira/browse/IMAP-122
- MimeEntityConfig config = new MimeEntityConfig();
- config.setMaximalBodyDescriptor(true);
+ MimeConfig config = new MimeConfig();
config.setMaxLineLen(-1);
- final ConfigurableMimeTokenStream parser = new
ConfigurableMimeTokenStream(config);
-
- parser.setRecursionMode(MimeTokenStream.M_NO_RECURSE);
+ final MimeTokenStream parser = new MimeTokenStream(config, new
DefaultBodyDescriptorBuilder());
+ parser.setRecursionMode(RecursionMode.M_NO_RECURSE);
parser.parse(tmpMsgIn.newStream(0, -1));
- int next = parser.next();
- while (next != MimeTokenStream.T_BODY && next !=
MimeTokenStream.T_END_OF_STREAM && next != MimeTokenStream.T_START_MULTIPART) {
+ EntityState next = parser.next();
+ while (next != EntityState.T_BODY && next !=
EntityState.T_END_OF_STREAM && next != EntityState.T_START_MULTIPART) {
next = parser.next();
}
final MaximalBodyDescriptor descriptor = (MaximalBodyDescriptor)
parser.getBodyDescriptor();
@@ -305,7 +305,7 @@ public class MaildirMessage extends Abst
}
next = parser.next();
- if (next == MimeTokenStream.T_EPILOGUE) {
+ if (next == EntityState.T_EPILOGUE) {
final CountingInputStream epilogueStream = new
CountingInputStream(parser.getInputStream());
try {
epilogueStream.readAll();
Modified: james/mailbox/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/pom.xml?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
--- james/mailbox/trunk/pom.xml (original)
+++ james/mailbox/trunk/pom.xml Thu Jul 28 19:32:31 2011
@@ -516,7 +516,12 @@
-->
<dependency>
<groupId>org.apache.james</groupId>
- <artifactId>apache-mime4j</artifactId>
+ <artifactId>apache-mime4j-core</artifactId>
+ <version>${version.apache-mime4j}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-mime4j-dom</artifactId>
<version>${version.apache-mime4j}</version>
</dependency>
<!-- Declare javamail as provided to be able to easily switch -->
@@ -803,7 +808,7 @@
<version.javax.persistence>1.0.2</version.javax.persistence>
<version.javax.inject>1</version.javax.inject>
<version.commons-lang>2.4</version.commons-lang>
- <version.apache-mime4j>0.6.1</version.apache-mime4j>
+ <version.apache-mime4j>0.7</version.apache-mime4j>
<version.javax.mail>1.4.3</version.javax.mail>
<version.activation>1.1.1</version.activation>
<version.jmock>2.5.1</version.jmock>
Modified: james/mailbox/trunk/store/pom.xml
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/pom.xml?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
--- james/mailbox/trunk/store/pom.xml (original)
+++ james/mailbox/trunk/store/pom.xml Thu Jul 28 19:32:31 2011
@@ -34,7 +34,11 @@
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
- <artifactId>apache-mime4j</artifactId>
+ <artifactId>apache-mime4j-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-mime4j-dom</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java
Thu Jul 28 19:32:31 2011
@@ -33,13 +33,14 @@ import org.apache.james.mailbox.MimeDesc
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
-import org.apache.james.mailbox.store.streaming.ConfigurableMimeTokenStream;
import org.apache.james.mailbox.store.streaming.CountingInputStream;
import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.descriptor.MaximalBodyDescriptor;
-import org.apache.james.mime4j.parser.MimeEntityConfig;
-import org.apache.james.mime4j.parser.MimeTokenStream;
-import org.apache.james.mime4j.parser.RecursionMode;
+import org.apache.james.mime4j.message.DefaultBodyDescriptorBuilder;
+import org.apache.james.mime4j.message.MaximalBodyDescriptor;
+import org.apache.james.mime4j.stream.EntityState;
+import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.stream.MimeTokenStream;
+import org.apache.james.mime4j.stream.RecursionMode;
public class MimeDescriptorImpl implements MimeDescriptor {
@@ -89,24 +90,27 @@ public class MimeDescriptorImpl implemen
public static MimeDescriptorImpl build(final InputStream stream) throws
IOException, MimeException {
// Disable line length limit
// See https://issues.apache.org/jira/browse/IMAP-132
- MimeEntityConfig config = new MimeEntityConfig();
- config.setMaximalBodyDescriptor(true);
+ MimeConfig config = new MimeConfig();
config.setMaxLineLen(-1);
- final ConfigurableMimeTokenStream parser = new
ConfigurableMimeTokenStream(config);
-
+
+ //
+ final MimeTokenStream parser = new MimeTokenStream(config, new
DefaultBodyDescriptorBuilder());
+
parser.parse(stream);
+
+ // TODO: Shouldn't this get set before we call the parse ?
parser.setRecursionMode(RecursionMode.M_NO_RECURSE);
return createDescriptor(parser);
}
private static MimeDescriptorImpl createDescriptor(
final MimeTokenStream parser) throws IOException, MimeException {
- int next = parser.next();
+ EntityState next = parser.next();
final Collection<MessageResult.Header> headers = new
ArrayList<MessageResult.Header>();
- while (next != MimeTokenStream.T_BODY
- && next != MimeTokenStream.T_END_OF_STREAM
- && next != MimeTokenStream.T_START_MULTIPART) {
- if (next == MimeTokenStream.T_FIELD) {
+ while (next != EntityState.T_BODY
+ && next != EntityState.T_END_OF_STREAM
+ && next != EntityState.T_START_MULTIPART) {
+ if (next == EntityState.T_FIELD) {
headers.add(new ResultHeader(parser.getField().getName(),
parser
.getField().getBody().trim()));
}
@@ -115,13 +119,13 @@ public class MimeDescriptorImpl implemen
final MimeDescriptorImpl mimeDescriptorImpl;
switch (next) {
- case MimeTokenStream.T_BODY:
+ case T_BODY:
mimeDescriptorImpl = simplePartDescriptor(parser, headers);
break;
- case MimeTokenStream.T_START_MULTIPART:
+ case T_START_MULTIPART:
mimeDescriptorImpl = compositePartDescriptor(parser, headers);
break;
- case MimeTokenStream.T_END_OF_STREAM:
+ case T_END_OF_STREAM:
throw new MimeException("Premature end of stream");
default:
throw new MimeException("Unexpected parse state");
@@ -136,10 +140,10 @@ public class MimeDescriptorImpl implemen
.getBodyDescriptor();
MimeDescriptorImpl mimeDescriptor = createDescriptor(0, 0, descriptor,
null, headers);
- int next = parser.next();
- while (next != MimeTokenStream.T_END_MULTIPART
- && next != MimeTokenStream.T_END_OF_STREAM) {
- if (next == MimeTokenStream.T_START_BODYPART) {
+ EntityState next = parser.next();
+ while (next != EntityState.T_END_MULTIPART
+ && next != EntityState.T_END_OF_STREAM) {
+ if (next == EntityState.T_START_BODYPART) {
mimeDescriptor.addPart(createDescriptor(parser));
}
next = parser.next();
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java
Thu Jul 28 19:32:31 2011
@@ -42,9 +42,9 @@ import org.apache.james.mailbox.store.st
import org.apache.james.mailbox.store.streaming.PartContentBuilder;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.parser.AbstractContentHandler;
-import org.apache.james.mime4j.parser.Field;
-import org.apache.james.mime4j.parser.MimeEntityConfig;
import org.apache.james.mime4j.parser.MimeStreamParser;
+import org.apache.james.mime4j.stream.Field;
+import org.apache.james.mime4j.stream.MimeConfig;
/**
*
@@ -59,7 +59,7 @@ public class ResultUtils {
public static List<MessageResult.Header> createHeaders(final Message<?>
document) throws IOException {
final List<MessageResult.Header> results = new
ArrayList<MessageResult.Header>();
- MimeEntityConfig config = new MimeEntityConfig();
+ MimeConfig config = new MimeConfig();
config.setMaxLineLen(-1);
final MimeStreamParser parser = new MimeStreamParser(config);
parser.setContentHandler(new AbstractContentHandler() {
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
Thu Jul 28 19:32:31 2011
@@ -59,16 +59,16 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.impl.SimpleMessage;
import org.apache.james.mailbox.store.search.MessageSearchIndex;
import org.apache.james.mailbox.store.streaming.BodyOffsetInputStream;
-import org.apache.james.mailbox.store.streaming.ConfigurableMimeTokenStream;
import org.apache.james.mailbox.store.streaming.CountingInputStream;
import org.apache.james.mailbox.store.transaction.Mapper;
import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.descriptor.MaximalBodyDescriptor;
-import org.apache.james.mime4j.message.Header;
-import org.apache.james.mime4j.parser.MimeEntityConfig;
-import org.apache.james.mime4j.parser.MimeTokenStream;
-
-import com.sun.mail.imap.protocol.MessageSet;
+import org.apache.james.mime4j.message.DefaultBodyDescriptorBuilder;
+import org.apache.james.mime4j.message.HeaderImpl;
+import org.apache.james.mime4j.message.MaximalBodyDescriptor;
+import org.apache.james.mime4j.stream.EntityState;
+import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.stream.MimeTokenStream;
+import org.apache.james.mime4j.stream.RecursionMode;
/**
* Base class for {@link org.apache.james.mailbox.MessageManager}
implementations.
@@ -214,20 +214,19 @@ public class StoreMessageManager<Id> imp
bIn = new BodyOffsetInputStream(tmpMsgIn);
// Disable line length... This should be handled by the smtp
server component and not the parser itself
// https://issues.apache.org/jira/browse/IMAP-122
- MimeEntityConfig config = new MimeEntityConfig();
- config.setMaximalBodyDescriptor(true);
+ MimeConfig config = new MimeConfig();
config.setMaxLineLen(-1);
- final ConfigurableMimeTokenStream parser = new
ConfigurableMimeTokenStream(config);
+ final MimeTokenStream parser = new MimeTokenStream(config, new
DefaultBodyDescriptorBuilder());
- parser.setRecursionMode(MimeTokenStream.M_NO_RECURSE);
+ parser.setRecursionMode(RecursionMode.M_NO_RECURSE);
parser.parse(bIn);
- final Header header = new Header();
+ final HeaderImpl header = new HeaderImpl();
- int next = parser.next();
- while (next != MimeTokenStream.T_BODY
- && next != MimeTokenStream.T_END_OF_STREAM
- && next != MimeTokenStream.T_START_MULTIPART) {
- if (next == MimeTokenStream.T_FIELD) {
+ EntityState next = parser.next();
+ while (next != EntityState.T_BODY
+ && next != EntityState.T_END_OF_STREAM
+ && next != EntityState.T_START_MULTIPART) {
+ if (next == EntityState.T_FIELD) {
header.addField(parser.getField());
}
next = parser.next();
@@ -275,7 +274,7 @@ public class StoreMessageManager<Id> imp
long lines = bodyStream.getLineCount();
bodyStream.close();
next = parser.next();
- if (next == MimeTokenStream.T_EPILOGUE) {
+ if (next == EntityState.T_EPILOGUE) {
final CountingInputStream epilogueStream = new
CountingInputStream(parser.getInputStream());
epilogueStream.readAll();
lines+=epilogueStream.getLineCount();
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearcher.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearcher.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearcher.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearcher.java
Thu Jul 28 19:32:31 2011
@@ -27,10 +27,11 @@ import java.nio.CharBuffer;
import java.nio.charset.IllegalCharsetNameException;
import java.nio.charset.UnsupportedCharsetException;
-import org.apache.james.mailbox.store.streaming.ConfigurableMimeTokenStream;
import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.parser.MimeEntityConfig;
-import org.apache.james.mime4j.parser.MimeTokenStream;
+import org.apache.james.mime4j.stream.EntityState;
+import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.stream.MimeTokenStream;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -154,20 +155,20 @@ public class MessageSearcher {
final CharBuffer buffer) throws IOException, MimeException {
try {
boolean result = false;
- MimeEntityConfig config = new MimeEntityConfig();
+ MimeConfig config = new MimeConfig();
config.setMaxLineLen(-1);
- ConfigurableMimeTokenStream parser = new
ConfigurableMimeTokenStream(config); parser.parse(input);
- while (!result && parser.next() !=
MimeTokenStream.T_END_OF_STREAM) {
- final int state = parser.getState();
+ MimeTokenStream parser = new MimeTokenStream(config);
parser.parse(input);
+ while (!result && parser.next() != EntityState.T_END_OF_STREAM) {
+ final EntityState state = parser.getState();
switch (state) {
- case MimeTokenStream.T_BODY:
- case MimeTokenStream.T_PREAMBLE:
- case MimeTokenStream.T_EPILOGUE:
+ case T_BODY:
+ case T_PREAMBLE:
+ case T_EPILOGUE:
result = checkBody(isCaseInsensitive, buffer, result,
parser);
break;
- case MimeTokenStream.T_FIELD:
+ case T_FIELD:
if (includeHeaders) {
result = checkHeader(isCaseInsensitive, buffer,
result, parser);
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
Thu Jul 28 19:32:31 2011
@@ -47,12 +47,14 @@ import org.apache.james.mailbox.store.Re
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.search.comparator.CombinedComparator;
import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.field.address.Address;
-import org.apache.james.mime4j.field.address.AddressList;
-import org.apache.james.mime4j.field.address.Group;
-import org.apache.james.mime4j.field.address.Mailbox;
-import org.apache.james.mime4j.field.address.MailboxList;
-import org.apache.james.mime4j.field.datetime.DateTime;
+import org.apache.james.mime4j.dom.address.Address;
+import org.apache.james.mime4j.dom.address.AddressList;
+import org.apache.james.mime4j.dom.address.Group;
+import org.apache.james.mime4j.dom.address.Mailbox;
+import org.apache.james.mime4j.dom.address.MailboxList;
+import org.apache.james.mime4j.dom.datetime.DateTime;
+import org.apache.james.mime4j.field.address.AddressFormatter;
+import org.apache.james.mime4j.field.address.LenientAddressBuilder;
import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
import org.apache.james.mime4j.field.datetime.parser.ParseException;
import org.slf4j.Logger;
@@ -353,27 +355,24 @@ public class MessageSearches implements
final String name = header.getName();
if (headerName.equalsIgnoreCase(name)) {
final String value = header.getValue();
- try {
- AddressList aList = AddressList.parse(value);
+ AddressList aList =
LenientAddressBuilder.DEFAULT.parseAddressList(value);
for (int i = 0; i < aList.size(); i++) {
Address address = aList.get(i);
if (address instanceof Mailbox) {
- if (((Mailbox)
address).getEncodedString().toUpperCase(Locale.ENGLISH).contains(text)) {
+ if (AddressFormatter.DEFAULT.encode((Mailbox)
address).toUpperCase(Locale.ENGLISH).contains(text)) {
return true;
}
} else if (address instanceof Group) {
MailboxList mList = ((Group)
address).getMailboxes();
for (int a = 0; a < mList.size(); a++) {
- if
(mList.get(a).getEncodedString().toUpperCase(Locale.ENGLISH).contains(text)) {
+ if
(AddressFormatter.DEFAULT.encode(mList.get(a)).toUpperCase(Locale.ENGLISH).contains(text))
{
return true;
}
}
}
}
- } catch
(org.apache.james.mime4j.field.address.parser.ParseException e) {
- log.debug("Unable to parse address from header " +
headerName, e);
- }
+
// Also try to match against raw header now
return value.toUpperCase(Locale.ENGLISH).contains(text);
}
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
Thu Jul 28 19:32:31 2011
@@ -21,13 +21,14 @@ package org.apache.james.mailbox.store.s
import java.nio.charset.Charset;
import java.util.Locale;
+import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.codec.DecoderUtil;
-import org.apache.james.mime4j.field.address.Address;
-import org.apache.james.mime4j.field.address.AddressList;
-import org.apache.james.mime4j.field.address.Group;
-import org.apache.james.mime4j.field.address.Mailbox;
-import org.apache.james.mime4j.field.address.MailboxList;
-import org.apache.james.mime4j.field.address.parser.ParseException;
+import org.apache.james.mime4j.dom.address.Address;
+import org.apache.james.mime4j.dom.address.AddressList;
+import org.apache.james.mime4j.dom.address.Group;
+import org.apache.james.mime4j.dom.address.Mailbox;
+import org.apache.james.mime4j.dom.address.MailboxList;
+import org.apache.james.mime4j.field.address.LenientAddressBuilder;
import org.apache.james.mime4j.util.MimeUtil;
/**
@@ -106,26 +107,21 @@ public class SearchUtil {
* @return display
*/
public static String getDisplayAddress(String headerValue) {
- try {
- AddressList addressList =
AddressList.parse(MimeUtil.unfold(headerValue));
- if (addressList != null && addressList.isEmpty() == false) {
- Address address = addressList.get(0);
- if (address instanceof Mailbox) {
- return getDisplayAddress((Mailbox) address);
- } else if (address instanceof Group) {
- Group group = (Group) address;
- if (group != null) {
- MailboxList mList = group.getMailboxes();
- if (mList != null && mList.isEmpty() == false) {
- return getDisplayAddress(mList.get(0));
- }
+ AddressList addressList =
LenientAddressBuilder.DEFAULT.parseAddressList(MimeUtil.unfold(headerValue));
+ if (addressList != null && addressList.isEmpty() == false) {
+ Address address = addressList.get(0);
+ if (address instanceof Mailbox) {
+ return getDisplayAddress((Mailbox) address);
+ } else if (address instanceof Group) {
+ Group group = (Group) address;
+ if (group != null) {
+ MailboxList mList = group.getMailboxes();
+ if (mList != null && mList.isEmpty() == false) {
+ return getDisplayAddress(mList.get(0));
}
}
- }
- } catch (ParseException e) {
- // just catch and return an empty String
+ }
}
-
return "";
}
@@ -153,31 +149,26 @@ public class SearchUtil {
* @return mailbox
*/
public static String getMailboxAddress(String headerValue) {
- try {
- AddressList aList = AddressList.parse(headerValue);
- for (int i = 0; i < aList.size(); i++) {
- Address address = aList.get(i);
- if (address instanceof Mailbox) {
- Mailbox m = (Mailbox) address;
- String mailboxName = m.getLocalPart();
+ AddressList aList =
LenientAddressBuilder.DEFAULT.parseAddressList(headerValue);
+ for (int i = 0; i < aList.size(); i++) {
+ Address address = aList.get(i);
+ if (address instanceof Mailbox) {
+ Mailbox m = (Mailbox) address;
+ String mailboxName = m.getLocalPart();
+ if (mailboxName == null) {
+ mailboxName = "";
+ }
+ return mailboxName;
+ } else if (address instanceof Group) {
+ MailboxList mList = ((Group) address).getMailboxes();
+ for (int a = 0; a < mList.size();) {
+ String mailboxName = mList.get(a).getLocalPart();
if (mailboxName == null) {
- mailboxName ="";
+ mailboxName = "";
}
return mailboxName;
- } else if (address instanceof Group) {
- MailboxList mList = ((Group) address).getMailboxes();
- for (int a = 0; a < mList.size(); ) {
- String mailboxName = mList.get(a).getLocalPart();
- if (mailboxName == null) {
- mailboxName ="";
- }
- return mailboxName;
- }
}
}
-
- } catch (org.apache.james.mime4j.field.address.parser.ParseException
e) {
- // Just catch and return an empty string
}
return "";
}
@@ -238,7 +229,7 @@ public class SearchUtil {
// as described in "Internationalization Considerations".
// Convert all tabs and continuations to space. Convert all
// multiple spaces to a single space.
- String decodedSubject =
MimeUtil.unfold(DecoderUtil.decodeEncodedWords(subject));
+ String decodedSubject =
MimeUtil.unfold(DecoderUtil.decodeEncodedWords(subject, DecodeMonitor.SILENT));
decodedSubject = new String(decodedSubject.getBytes(UTF8), UTF8);
// replace all tabs with spaces and replace multiple spaces with
one space
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
Thu Jul 28 19:32:31 2011
@@ -23,7 +23,7 @@ import java.util.Comparator;
import java.util.Date;
import org.apache.james.mailbox.store.mail.model.Message;
-import org.apache.james.mime4j.field.datetime.DateTime;
+import org.apache.james.mime4j.dom.datetime.DateTime;
import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
import org.apache.james.mime4j.field.datetime.parser.ParseException;
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java?rev=1151980&r1=1151979&r2=1151980&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java
Thu Jul 28 19:32:31 2011
@@ -32,24 +32,27 @@ import org.apache.james.mailbox.MessageR
import org.apache.james.mailbox.MessageResult.Header;
import org.apache.james.mailbox.store.ResultHeader;
import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.parser.MimeEntityConfig;
-import org.apache.james.mime4j.parser.MimeTokenStream;
+import org.apache.james.mime4j.stream.EntityState;
+import org.apache.james.mime4j.stream.MimeConfig;
+import org.apache.james.mime4j.stream.MimeTokenStream;
+import org.apache.james.mime4j.stream.RecursionMode;
+
public class PartContentBuilder {
private static final byte[] EMPTY = {};
- private ConfigurableMimeTokenStream parser;
+ private MimeTokenStream parser;
private boolean empty = false;
private boolean topLevel = true;
public PartContentBuilder() {
- MimeEntityConfig config = new MimeEntityConfig();
+ MimeConfig config = new MimeConfig();
config.setMaxLineLen(-1);
- parser = new ConfigurableMimeTokenStream(config);
+ parser = new MimeTokenStream(config);
}
public void markEmpty() {
@@ -58,21 +61,21 @@ public class PartContentBuilder {
public void parse(final InputStream in) {
- parser.setRecursionMode(MimeTokenStream.M_RECURSE);
+ parser.setRecursionMode(RecursionMode.M_RECURSE);
parser.parse(in);
topLevel = true;
}
private void skipToStartOfInner(int position) throws IOException,
MimeException {
- final int state = parser.next();
+ final EntityState state = parser.next();
switch (state) {
- case MimeTokenStream.T_START_MULTIPART:
+ case T_START_MULTIPART:
break;
- case MimeTokenStream.T_START_MESSAGE:
+ case T_START_MESSAGE:
break;
- case MimeTokenStream.T_END_OF_STREAM:
+ case T_END_OF_STREAM:
throw new PartNotFoundException(position);
- case MimeTokenStream.T_END_BODYPART:
+ case T_END_BODYPART:
throw new PartNotFoundException(position);
default:
skipToStartOfInner(position);
@@ -87,22 +90,22 @@ public class PartContentBuilder {
skipToStartOfInner(position);
}
for (int count = 0; count < position;) {
- final int state = parser.next();
+ final EntityState state = parser.next();
switch (state) {
- case MimeTokenStream.T_BODY:
+ case T_BODY:
if (position == 1) {
count++;
}
break;
- case MimeTokenStream.T_START_BODYPART:
+ case T_START_BODYPART:
count++;
break;
- case MimeTokenStream.T_START_MULTIPART:
+ case T_START_MULTIPART:
if (count > 0 && count < position) {
ignoreInnerMessage();
}
break;
- case MimeTokenStream.T_END_OF_STREAM:
+ case T_END_OF_STREAM:
throw new PartNotFoundException(position);
}
}
@@ -112,13 +115,13 @@ public class PartContentBuilder {
}
private void ignoreInnerMessage() throws IOException,
UnexpectedEOFException, MimeException {
- for (int state = parser.next(); state !=
MimeTokenStream.T_END_MULTIPART; state = parser
+ for (EntityState state = parser.next(); state !=
EntityState.T_END_MULTIPART; state = parser
.next()) {
switch (state) {
- case MimeTokenStream.T_END_OF_STREAM:
+ case T_END_OF_STREAM:
throw new UnexpectedEOFException();
- case MimeTokenStream.T_START_MULTIPART:
+ case T_START_MULTIPART:
ignoreInnerMessage();
break;
}
@@ -150,11 +153,11 @@ public class PartContentBuilder {
valid = false;
}
if (valid) {
- parser.setRecursionMode(MimeTokenStream.M_FLAT);
- for (int state = parser.getState(); state !=
MimeTokenStream.T_BODY
- && state != MimeTokenStream.T_START_MULTIPART; state =
parser
+ parser.setRecursionMode(RecursionMode.M_FLAT);
+ for (EntityState state = parser.getState(); state !=
EntityState.T_BODY
+ && state != EntityState.T_START_MULTIPART; state =
parser
.next()) {
- if (state == MimeTokenStream.T_END_OF_STREAM) {
+ if (state == EntityState.T_END_OF_STREAM) {
valid = false;
break;
}
@@ -181,12 +184,12 @@ public class PartContentBuilder {
if (empty) {
content = EMPTY;
} else {
- parser.setRecursionMode(MimeTokenStream.M_FLAT);
+ parser.setRecursionMode(RecursionMode.M_FLAT);
boolean valid = true;
- for (int state = parser.getState(); state != MimeTokenStream.T_BODY
- && state != MimeTokenStream.T_START_MULTIPART; state =
parser
+ for (EntityState state = parser.getState(); state !=
EntityState.T_BODY
+ && state != EntityState.T_START_MULTIPART; state = parser
.next()) {
- if (state == MimeTokenStream.T_END_OF_STREAM) {
+ if (state == EntityState.T_END_OF_STREAM) {
valid = false;
break;
}
@@ -207,13 +210,13 @@ public class PartContentBuilder {
results = Collections.EMPTY_LIST;
} else {
results = new ArrayList<MessageResult.Header>();
- for (int state = parser.getState(); state !=
MimeTokenStream.T_END_HEADER; state = parser
+ for (EntityState state = parser.getState(); state !=
EntityState.T_END_HEADER; state = parser
.next()) {
switch (state) {
- case MimeTokenStream.T_END_OF_STREAM:
+ case T_END_OF_STREAM:
throw new UnexpectedEOFException();
- case MimeTokenStream.T_FIELD:
+ case T_FIELD:
final String fieldValue =
parser.getField().getBody().trim();
final String fieldName = parser.getField().getName();
ResultHeader header = new ResultHeader(fieldName,
fieldValue);
@@ -235,13 +238,13 @@ public class PartContentBuilder {
try {
advancedToMessage();
- for (int state = parser.getState(); state !=
MimeTokenStream.T_END_HEADER; state = parser
+ for (EntityState state = parser.getState(); state !=
EntityState.T_END_HEADER; state = parser
.next()) {
switch (state) {
- case MimeTokenStream.T_END_OF_STREAM:
+ case T_END_OF_STREAM:
throw new IOException("Unexpected EOF");
- case MimeTokenStream.T_FIELD:
+ case T_FIELD:
final String fieldValue =
parser.getField().getBody().trim();
final String fieldName =
parser.getField().getName();
ResultHeader header = new ResultHeader(fieldName,
fieldValue);
@@ -257,9 +260,9 @@ public class PartContentBuilder {
}
private void advancedToMessage() throws IOException,
UnexpectedEOFException, MimeException {
- for (int state = parser.getState(); state !=
MimeTokenStream.T_START_MESSAGE; state = parser
+ for (EntityState state = parser.getState(); state !=
EntityState.T_START_MESSAGE; state = parser
.next()) {
- if (state == MimeTokenStream.T_END_OF_STREAM) {
+ if (state == EntityState.T_END_OF_STREAM) {
throw new UnexpectedEOFException();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]