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]

Reply via email to