You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by ba...@apache.org on 2011/06/21 22:01:20 UTC

svn commit: r1138155 [1/2] - in /james/mime4j/branches/mime4j-116-refactoring: core/src/main/java/org/apache/james/mime4j/parser/ core/src/main/java/org/apache/james/mime4j/stream/ core/src/test/java/org/apache/james/mime4j/stream/ dom/src/main/java/or...

Author: bago
Date: Tue Jun 21 20:01:18 2011
New Revision: 1138155

URL: http://svn.apache.org/viewvc?rev=1138155&view=rev
Log:
Proposed refactoring for MIME4J-116.
FieldParser has been moved to the dom package and field parsing is expected to happen inside the MutableBodyDescriptor implementation.
Minimal/MaximalBodyDescriptor implementations takes a FieldParser instance and a boolean saying if they are expected to parse every field supported by the FieldParser or only the one used for the descriptor results, so that EntityBuilder doesn't have to know the FieldParser again.

Added:
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/FieldParser.java   (contents, props changed)
      - copied, changed from r1137798, james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/FieldParser.java
Removed:
    james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/FieldParser.java
Modified:
    james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/parser/MimeStreamParser.java
    james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/AbstractEntity.java
    james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java
    james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java
    james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java
    james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java
    james/mime4j/branches/mime4j-116-refactoring/core/src/test/java/org/apache/james/mime4j/stream/MimeEntityTest.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDescriptionFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentIdFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLengthFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentMD5FieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/Fields.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/LenientFieldParser.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldLenientImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/UnstructuredFieldImpl.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractEntity.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractMessage.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/EntityBuilder.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java
    james/mime4j/branches/mime4j-116-refactoring/dom/src/test/java/org/apache/james/mime4j/message/MaximalBodyDescriptorTest.java

Modified: james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/parser/MimeStreamParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/parser/MimeStreamParser.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/parser/MimeStreamParser.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/parser/MimeStreamParser.java Tue Jun 21 20:01:18 2011
@@ -26,7 +26,7 @@ import org.apache.james.mime4j.MimeExcep
 import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.stream.BodyDescriptor;
 import org.apache.james.mime4j.stream.EntityState;
-import org.apache.james.mime4j.stream.FieldParser;
+import org.apache.james.mime4j.stream.Field;
 import org.apache.james.mime4j.stream.MimeEntityConfig;
 import org.apache.james.mime4j.stream.MimeTokenStream;
 import org.apache.james.mime4j.stream.MutableBodyDescriptorFactory;
@@ -66,9 +66,8 @@ public class MimeStreamParser {
             final MimeEntityConfig config, 
             boolean clone,
             final DecodeMonitor monitor,
-            final FieldParser<?> fieldParser,
             final MutableBodyDescriptorFactory bodyDescFactory) {
-        this(new MimeTokenStream(clone ? config.clone() : config, monitor, fieldParser, bodyDescFactory));
+        this(new MimeTokenStream(clone ? config.clone() : config, monitor, bodyDescFactory));
     }
 
     public MimeStreamParser(final MimeEntityConfig config, boolean clone) {
@@ -78,18 +77,17 @@ public class MimeStreamParser {
     public MimeStreamParser(
             final MimeEntityConfig config,
             final DecodeMonitor monitor,
-            final FieldParser<?> fieldParser,
             final MutableBodyDescriptorFactory bodyDescFactory) {
         this(config != null ? config : new MimeEntityConfig(), config != null, 
-                monitor, fieldParser, bodyDescFactory);
+                monitor, bodyDescFactory);
     }
 
     public MimeStreamParser(final MimeEntityConfig config) {
-        this(config, null, null, null);
+        this(config, null, null);
     }
 
     public MimeStreamParser() {
-        this(new MimeEntityConfig(), false, null, null, null);
+        this(new MimeEntityConfig(), false, null, null);
     }
     
     /**
@@ -119,10 +117,10 @@ public class MimeStreamParser {
      */
     public void parse(InputStream inputStream) throws MimeException, IOException {
         if (mimeEntityConfig.getHeadlessParsing() != null) {
-            mimeTokenStream.parseHeadless(inputStream, mimeEntityConfig.getHeadlessParsing());
+            Field contentType = mimeTokenStream.parseHeadless(inputStream, mimeEntityConfig.getHeadlessParsing());
             handler.startMessage();
             handler.startHeader();
-            handler.field(new RawField("Content-Type", mimeEntityConfig.getHeadlessParsing()));
+            handler.field(contentType);
             handler.endHeader();
         } else {
             mimeTokenStream.parse(inputStream);

Modified: james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/AbstractEntity.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/AbstractEntity.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/AbstractEntity.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/AbstractEntity.java Tue Jun 21 20:01:18 2011
@@ -39,7 +39,6 @@ abstract class AbstractEntity implements
     protected final MimeEntityConfig config;
     protected final DecodeMonitor monitor;
     protected final FieldBuilder fieldBuilder;
-    protected final FieldParser<?> fieldParser;
     protected final MutableBodyDescriptor body;
 
     private final ByteArrayBuffer linebuf;
@@ -56,7 +55,6 @@ abstract class AbstractEntity implements
             EntityState endState,
             DecodeMonitor monitor,
             FieldBuilder fieldBuilder,
-            FieldParser<?> fieldParser,
             MutableBodyDescriptor body) {
         this.config = config;
         this.state = startState;
@@ -64,7 +62,6 @@ abstract class AbstractEntity implements
         this.endState = endState;
         this.monitor = monitor;
         this.fieldBuilder = fieldBuilder;
-        this.fieldParser = fieldParser;
         this.body = body;
         this.linebuf = new ByteArrayBuffer(64);
         this.lineCount = 0;
@@ -149,12 +146,9 @@ abstract class AbstractEntity implements
                 if (rawfield.getDelimiterIdx() != rawfield.getName().length()) {
                     monitor(Event.OBSOLETE_HEADER);
                 }
-                if (fieldParser != null) {
-                    field = fieldParser.parse(rawfield, monitor);
-                } else {
-                    field = rawfield;
-                }
-                body.addField(field);
+                Field newfield = body.addField(rawfield);
+                if (newfield != null) field = newfield;
+                else field = rawfield;
                 return true;
             } catch (MimeException e) {
                 monitor(Event.INVALID_HEADER);

Modified: james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/DefaultBodyDescriptor.java Tue Jun 21 20:01:18 2011
@@ -101,7 +101,7 @@ class DefaultBodyDescriptor implements M
      * 
      * @param field the MIME field.
      */
-    public void addField(Field field) throws MimeException {
+    public Field addField(RawField field) throws MimeException {
         String name = field.getName().toLowerCase(Locale.US);
         
         if (name.equals("content-transfer-encoding") && !contentTransferEncSet) {
@@ -129,6 +129,7 @@ class DefaultBodyDescriptor implements M
         } else if (name.equals("content-type") && !contentTypeSet) {
             parseContentType(field);
         }
+        return null;
     }
 
     private void parseContentType(Field field) throws MimeException {

Modified: james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeEntity.java Tue Jun 21 20:01:18 2011
@@ -53,9 +53,8 @@ class MimeEntity extends AbstractEntity 
             EntityState endState,
             DecodeMonitor monitor,
             FieldBuilder fieldBuilder,
-            FieldParser<?> fieldParser,
             MutableBodyDescriptor body) {
-        super(config, startState, endState, monitor, fieldBuilder, fieldParser, body);
+        super(config, startState, endState, monitor, fieldBuilder, body);
         this.lineSource = lineSource;
         this.inbuffer = new BufferedLineReaderInputStream(
                 instream,
@@ -75,7 +74,7 @@ class MimeEntity extends AbstractEntity 
             MutableBodyDescriptor body) {
         this(lineSource, instream, config, startState, endState,
                 config.isStrictParsing() ? DecodeMonitor.STRICT : DecodeMonitor.SILENT,
-                new DefaultFieldBuilder(config.getMaxHeaderLen()), null, body);
+                new DefaultFieldBuilder(config.getMaxHeaderLen()), body);
     }
 
     MimeEntity(
@@ -86,19 +85,18 @@ class MimeEntity extends AbstractEntity 
         this(lineSource, instream, config,
                 EntityState.T_START_MESSAGE, EntityState.T_END_MESSAGE,
                 config.isStrictParsing() ? DecodeMonitor.STRICT : DecodeMonitor.SILENT,
-                new DefaultFieldBuilder(config.getMaxHeaderLen()), null, body);
+                new DefaultFieldBuilder(config.getMaxHeaderLen()), body);
     }
 
     MimeEntity(
             LineNumberSource lineSource,
             InputStream instream,
             FieldBuilder fieldBuilder,
-            FieldParser<?> fieldParser,
             MutableBodyDescriptor body) {
         this(lineSource, instream, new MimeEntityConfig(),
                 EntityState.T_START_MESSAGE, EntityState.T_END_MESSAGE,
                 DecodeMonitor.SILENT,
-                fieldBuilder, fieldParser, body);
+                fieldBuilder, body);
     }
 
     MimeEntity(
@@ -108,7 +106,7 @@ class MimeEntity extends AbstractEntity 
         this(lineSource, instream, new MimeEntityConfig(),
                 EntityState.T_START_MESSAGE, EntityState.T_END_MESSAGE,
                 DecodeMonitor.SILENT,
-                new DefaultFieldBuilder(-1), null, body);
+                new DefaultFieldBuilder(-1), body);
     }
 
     public RecursionMode getRecursionMode() {
@@ -279,7 +277,6 @@ class MimeEntity extends AbstractEntity 
                     endState,
                     monitor,
                     fieldBuilder,
-                    fieldParser,
                     body.newChild());
             mimeentity.setRecursionMode(recursionMode);
             return mimeentity;

Modified: james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MimeTokenStream.java Tue Jun 21 20:01:18 2011
@@ -75,7 +75,6 @@ public class MimeTokenStream {
     private final MimeEntityConfig config;
     private final DecodeMonitor monitor;
     private final FieldBuilder fieldBuilder;
-    private final FieldParser<?> fieldParser;
     private final MutableBodyDescriptorFactory bodyDescFactory;
     private final LinkedList<EntityStateMachine> entities = new LinkedList<EntityStateMachine>();
     
@@ -97,35 +96,31 @@ public class MimeTokenStream {
     }
 
     public MimeTokenStream(final MimeEntityConfig config) {
-        this(config, null, null, null, null);
+        this(config, null, null, null);
     }
         
     public MimeTokenStream(
             final MimeEntityConfig config, 
-            final FieldParser<?> fieldParser,
             final MutableBodyDescriptorFactory bodyDescFactory) {
-        this(config, null, null, fieldParser, bodyDescFactory);
+        this(config, null, null, bodyDescFactory);
     }
 
     public MimeTokenStream(
             final MimeEntityConfig config, 
             final DecodeMonitor monitor,
-            final FieldParser<?> fieldParser,
             final MutableBodyDescriptorFactory bodyDescFactory) {
-        this(config, monitor, null, fieldParser, bodyDescFactory);
+        this(config, monitor, null, bodyDescFactory);
     }
 
     public MimeTokenStream(
             final MimeEntityConfig config, 
             final DecodeMonitor monitor,
             final FieldBuilder fieldBuilder,
-            final FieldParser<?> fieldParser,
             final MutableBodyDescriptorFactory bodyDescFactory) {
         super();
         this.config = config;
         this.fieldBuilder = fieldBuilder != null ? fieldBuilder : 
             new DefaultFieldBuilder(config.getMaxHeaderLen());
-        this.fieldParser = fieldParser;
         this.monitor = monitor != null ? monitor : 
             (config.isStrictParsing() ? DecodeMonitor.STRICT : DecodeMonitor.SILENT);
         this.bodyDescFactory = bodyDescFactory;
@@ -139,26 +134,31 @@ public class MimeTokenStream {
         doParse(stream, newBodyDescriptor(), EntityState.T_START_MESSAGE);
     }
 
-    /** Instructs the {@code MimeTokenStream} to parse the given content with 
+    /** 
+     * <p>Instructs the {@code MimeTokenStream} to parse the given content with 
      * the content type. The message stream is assumed to have no message header
      * and is expected to begin with a message body. This can be the case when 
      * the message content is transmitted using a different transport protocol 
-     * such as HTTP.
-     * <p/>
-     * If the {@code MimeTokenStream} has already been in use, resets the streams
-     * internal state.
+     * such as HTTP.</p>
+     * <p>If the {@code MimeTokenStream} has already been in use, resets the 
+     * streams internal state.</p>
+     * @return a parsed Field representing the input contentType
      */    
-    public void parseHeadless(InputStream stream, String contentType) {
+    public Field parseHeadless(InputStream stream, String contentType) {
         if (contentType == null) {
             throw new IllegalArgumentException("Content type may not be null");
         }
+        Field newContentType;
         MutableBodyDescriptor newBodyDescriptor = newBodyDescriptor();
         try {
-            newBodyDescriptor.addField(new RawField("Content-Type", contentType));
+            RawField rawContentType = new RawField("Content-Type", contentType);
+            newContentType = newBodyDescriptor.addField(rawContentType);
+            if (newContentType == null) newContentType = rawContentType;
         } catch (MimeException ex) {
             // should never happen
             throw new IllegalArgumentException(ex.getMessage());
         }
+        
         doParse(stream, newBodyDescriptor, EntityState.T_END_HEADER);
         try {
             next();
@@ -169,6 +169,7 @@ public class MimeTokenStream {
             // This should never happen
             throw new IllegalStateException(e);
         }
+        return newContentType;
     }
 
     /**
@@ -203,7 +204,6 @@ public class MimeTokenStream {
                 EntityState.T_END_MESSAGE,
                 monitor,
                 fieldBuilder,
-                fieldParser,
                 newBodyDescriptor);
 
         rootentity.setRecursionMode(recursionMode);

Modified: james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/core/src/main/java/org/apache/james/mime4j/stream/MutableBodyDescriptor.java Tue Jun 21 20:01:18 2011
@@ -30,8 +30,10 @@ public interface MutableBodyDescriptor e
     /**
      * Adds a field to the body descriptor.
      * @param field the MIME field.
+     * 
+     * @return null or an elaborated field representing the same data.
      */
-    void addField(Field field) throws MimeException;
+    Field addField(RawField field) throws MimeException;
     
     MutableBodyDescriptor newChild();
 

Modified: james/mime4j/branches/mime4j-116-refactoring/core/src/test/java/org/apache/james/mime4j/stream/MimeEntityTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/core/src/test/java/org/apache/james/mime4j/stream/MimeEntityTest.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/core/src/test/java/org/apache/james/mime4j/stream/MimeEntityTest.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/core/src/test/java/org/apache/james/mime4j/stream/MimeEntityTest.java Tue Jun 21 20:01:18 2011
@@ -666,7 +666,7 @@ public class MimeEntityTest extends Test
 
         MimeEntity entity = new MimeEntity(
                 lineInput,
-                rawstream, fieldBuilder, null, new DefaultBodyDescriptor());
+                rawstream, fieldBuilder, new DefaultBodyDescriptor());
 
 
         assertEquals(EntityState.T_START_MESSAGE, entity.getState());

Copied: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/FieldParser.java (from r1137798, james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/FieldParser.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/FieldParser.java?p2=james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/FieldParser.java&p1=james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/FieldParser.java&r1=1137798&r2=1138155&rev=1138155&view=diff
==============================================================================
--- james/mime4j/trunk/core/src/main/java/org/apache/james/mime4j/stream/FieldParser.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/FieldParser.java Tue Jun 21 20:01:18 2011
@@ -17,11 +17,13 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.stream;
+package org.apache.james.mime4j.dom;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.field.ParsedField;
+import org.apache.james.mime4j.stream.Field;
 
-public interface FieldParser<T extends Field> {
+public interface FieldParser<T extends ParsedField> {
     
     T parse(Field rawField, DecodeMonitor monitor);
     

Propchange: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/FieldParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -20,12 +20,12 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.AddressList;
 import org.apache.james.mime4j.dom.field.AddressListField;
 import org.apache.james.mime4j.field.address.AddressBuilder;
 import org.apache.james.mime4j.field.address.ParseException;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Address list field such as <code>To</code> or <code>Reply-To</code>.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -22,12 +22,12 @@ package org.apache.james.mime4j.field;
 import java.util.Collections;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.AddressList;
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.field.AddressListField;
 import org.apache.james.mime4j.field.address.LenientAddressBuilder;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.util.ByteSequence;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDescriptionFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDescriptionFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDescriptionFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDescriptionFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -20,9 +20,9 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentDescriptionField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>Content-Description</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -28,13 +28,13 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentDispositionField;
 import org.apache.james.mime4j.field.contentdisposition.parser.ContentDispositionParser;
 import org.apache.james.mime4j.field.contentdisposition.parser.ParseException;
 import org.apache.james.mime4j.field.contentdisposition.parser.TokenMgrError;
 import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>Content-Disposition</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentDispositionFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -32,9 +32,9 @@ import java.util.Map;
 import java.util.TimeZone;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentDispositionField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.NameValuePair;
 import org.apache.james.mime4j.stream.RawBody;
 import org.apache.james.mime4j.stream.RawField;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentIdFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentIdFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentIdFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentIdFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -20,9 +20,9 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentIdField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>Content-Transfer-Encoding</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -25,11 +25,11 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentLanguageField;
 import org.apache.james.mime4j.field.language.parser.ContentLanguageParser;
 import org.apache.james.mime4j.field.language.parser.ParseException;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>Content-Transfer-Encoding</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLanguageFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -24,9 +24,9 @@ import java.util.BitSet;
 import java.util.List;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentLanguageField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.stream.RawFieldParser;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLengthFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLengthFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLengthFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLengthFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -20,9 +20,9 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentLengthField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>Content-Length</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -22,11 +22,11 @@ package org.apache.james.mime4j.field;
 import java.io.StringReader;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentLocationField;
 import org.apache.james.mime4j.field.structured.parser.ParseException;
 import org.apache.james.mime4j.field.structured.parser.StructuredFieldParser;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>Content-Location</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -20,9 +20,9 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentLocationField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.stream.RawFieldParser;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentMD5FieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentMD5FieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentMD5FieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentMD5FieldImpl.java Tue Jun 21 20:01:18 2011
@@ -20,9 +20,9 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentMD5Field;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>Content-MD5</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -22,9 +22,9 @@ package org.apache.james.mime4j.field;
 import java.util.Locale;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentTransferEncodingField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.util.MimeUtil;
 
 /**

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -26,12 +26,12 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentTypeField;
 import org.apache.james.mime4j.field.contenttype.parser.ContentTypeParser;
 import org.apache.james.mime4j.field.contenttype.parser.ParseException;
 import org.apache.james.mime4j.field.contenttype.parser.TokenMgrError;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>Content-Type</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/ContentTypeFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -25,9 +25,9 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentTypeField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.NameValuePair;
 import org.apache.james.mime4j.stream.RawBody;
 import org.apache.james.mime4j.stream.RawField;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -23,12 +23,12 @@ import java.io.StringReader;
 import java.util.Date;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.DateTimeField;
 import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
 import org.apache.james.mime4j.field.datetime.parser.ParseException;
 import org.apache.james.mime4j.field.datetime.parser.TokenMgrError;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Date-time field such as <code>Date</code> or <code>Resent-Date</code>.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DateTimeFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -29,9 +29,9 @@ import java.util.Locale;
 import java.util.TimeZone;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.DateTimeField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Date-time field such as <code>Date</code> or <code>Resent-Date</code>.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java Tue Jun 21 20:01:18 2011
@@ -21,6 +21,7 @@ package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.AddressListField;
 import org.apache.james.mime4j.dom.field.DateTimeField;
 import org.apache.james.mime4j.dom.field.FieldName;
@@ -28,7 +29,6 @@ import org.apache.james.mime4j.dom.field
 import org.apache.james.mime4j.dom.field.MailboxListField;
 import org.apache.james.mime4j.dom.field.ParsedField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.stream.RawFieldParser;
 import org.apache.james.mime4j.util.ByteSequence;
@@ -113,7 +113,7 @@ public class DefaultFieldParser extends 
         setFieldParser(FieldName.CONTENT_DISPOSITION,
                 ContentDispositionFieldImpl.PARSER);
         setFieldParser(FieldName.CONTENT_ID,
-                ContentDispositionFieldImpl.PARSER);
+                ContentIdFieldImpl.PARSER);
         setFieldParser(FieldName.CONTENT_MD5,
                 ContentMD5FieldImpl.PARSER);
         setFieldParser(FieldName.CONTENT_DESCRIPTION,

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java Tue Jun 21 20:01:18 2011
@@ -23,9 +23,9 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ParsedField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 public class DelegatingFieldParser implements FieldParser<ParsedField> {
 

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/Fields.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/Fields.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/Fields.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/Fields.java Tue Jun 21 20:01:18 2011
@@ -29,6 +29,7 @@ import java.util.regex.Pattern;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.codec.EncoderUtil;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.Address;
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.field.AddressListField;
@@ -43,7 +44,6 @@ import org.apache.james.mime4j.dom.field
 import org.apache.james.mime4j.dom.field.UnstructuredField;
 import org.apache.james.mime4j.field.address.AddressFormatter;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.util.MimeUtil;
 

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/LenientFieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/LenientFieldParser.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/LenientFieldParser.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/LenientFieldParser.java Tue Jun 21 20:01:18 2011
@@ -21,6 +21,7 @@ package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.AddressListField;
 import org.apache.james.mime4j.dom.field.DateTimeField;
 import org.apache.james.mime4j.dom.field.FieldName;
@@ -28,7 +29,6 @@ import org.apache.james.mime4j.dom.field
 import org.apache.james.mime4j.dom.field.MailboxListField;
 import org.apache.james.mime4j.dom.field.ParsedField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.stream.RawFieldParser;
 import org.apache.james.mime4j.util.ByteSequence;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -20,12 +20,12 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.field.MailboxField;
 import org.apache.james.mime4j.field.address.AddressBuilder;
 import org.apache.james.mime4j.field.address.ParseException;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Mailbox field such as <code>Sender</code> or <code>Resent-Sender</code>.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -20,11 +20,11 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.field.MailboxField;
 import org.apache.james.mime4j.field.address.LenientAddressBuilder;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.util.ByteSequence;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -20,12 +20,12 @@
 package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.MailboxList;
 import org.apache.james.mime4j.dom.field.MailboxListField;
 import org.apache.james.mime4j.field.address.AddressBuilder;
 import org.apache.james.mime4j.field.address.ParseException;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Mailbox-list field such as <code>From</code> or <code>Resent-From</code>.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -22,12 +22,12 @@ package org.apache.james.mime4j.field;
 import java.util.Collections;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.address.MailboxList;
 import org.apache.james.mime4j.dom.field.MailboxListField;
 import org.apache.james.mime4j.field.address.LenientAddressBuilder;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.util.ByteSequence;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -23,11 +23,11 @@ import java.io.StringReader;
 
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.MimeVersionField;
 import org.apache.james.mime4j.field.mimeversion.parser.MimeVersionParser;
 import org.apache.james.mime4j.field.mimeversion.parser.ParseException;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Represents a <code>MIME-Version</code> field.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldLenientImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldLenientImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldLenientImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/MimeVersionFieldLenientImpl.java Tue Jun 21 20:01:18 2011
@@ -22,9 +22,9 @@ package org.apache.james.mime4j.field;
 import java.util.BitSet;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.MimeVersionField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.stream.RawFieldParser;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/UnstructuredFieldImpl.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/UnstructuredFieldImpl.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/UnstructuredFieldImpl.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/field/UnstructuredFieldImpl.java Tue Jun 21 20:01:18 2011
@@ -21,9 +21,9 @@ package org.apache.james.mime4j.field;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.codec.DecoderUtil;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.UnstructuredField;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 
 /**
  * Simple unstructured field such as <code>Subject</code>.

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractEntity.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractEntity.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractEntity.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractEntity.java Tue Jun 21 20:01:18 2011
@@ -35,7 +35,7 @@ import org.apache.james.mime4j.dom.field
 import org.apache.james.mime4j.dom.field.ContentTransferEncodingField;
 import org.apache.james.mime4j.dom.field.ContentTypeField;
 import org.apache.james.mime4j.dom.field.FieldName;
-import org.apache.james.mime4j.stream.Field;
+import org.apache.james.mime4j.dom.field.ParsedField;
 
 /**
  * MIME entity. An entity has a header and a body (see RFC 2045).
@@ -524,7 +524,7 @@ public abstract class AbstractEntity imp
      * @return the header field or <code>null</code> if this entity has no
      *         header or the header contains no such field.
      */
-    <F extends Field> F obtainField(String fieldName) {
+    <F extends ParsedField> F obtainField(String fieldName) {
         Header header = getHeader();
         if (header == null)
             return null;

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractMessage.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractMessage.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractMessage.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/AbstractMessage.java Tue Jun 21 20:01:18 2011
@@ -36,6 +36,7 @@ import org.apache.james.mime4j.dom.field
 import org.apache.james.mime4j.dom.field.FieldName;
 import org.apache.james.mime4j.dom.field.MailboxField;
 import org.apache.james.mime4j.dom.field.MailboxListField;
+import org.apache.james.mime4j.dom.field.ParsedField;
 import org.apache.james.mime4j.dom.field.UnstructuredField;
 import org.apache.james.mime4j.stream.Field;
 
@@ -70,7 +71,7 @@ public abstract class AbstractMessage ex
         header.setField(newMessageId(hostname));
     }
 
-    protected abstract Field newMessageId(String hostname);
+    protected abstract ParsedField newMessageId(String hostname);
 
     /**
      * Returns the (decoded) value of the <i>Subject</i> header field of this

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/DefaultMessageBuilder.java Tue Jun 21 20:01:18 2011
@@ -28,6 +28,7 @@ import org.apache.james.mime4j.codec.Dec
 import org.apache.james.mime4j.dom.Body;
 import org.apache.james.mime4j.dom.Disposable;
 import org.apache.james.mime4j.dom.Entity;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.Header;
 import org.apache.james.mime4j.dom.Message;
 import org.apache.james.mime4j.dom.MessageBuilder;
@@ -39,7 +40,6 @@ import org.apache.james.mime4j.field.Len
 import org.apache.james.mime4j.parser.AbstractContentHandler;
 import org.apache.james.mime4j.parser.MimeStreamParser;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.MimeEntityConfig;
 import org.apache.james.mime4j.stream.MutableBodyDescriptorFactory;
 
@@ -298,10 +298,12 @@ public class DefaultMessageBuilder imple
             FieldParser<? extends ParsedField> fp = fieldParser != null ? fieldParser : 
                 strict ? DefaultFieldParser.getParser() : LenientFieldParser.getParser();
             MutableBodyDescriptorFactory bdf = bodyDescFactory != null ? bodyDescFactory :
-                new MinimalBodyDescriptorFactory();
-            BodyFactory bf = bodyFactory != null ? bodyFactory : new BasicBodyFactory(); 
-            MimeStreamParser parser = new MimeStreamParser(cfg, mon, fp, bdf);
-            parser.setContentHandler(new EntityBuilder(message, mon, fp, bf));
+                new MinimalBodyDescriptorFactory(fp, true);
+            BodyFactory bf = bodyFactory != null ? bodyFactory : new BasicBodyFactory();
+            MimeStreamParser parser = new MimeStreamParser(cfg, mon, bdf);
+            // EntityBuilder expect the parser will send ParserFields for the well known fields
+            // It will throw exceptions, otherwise.
+            parser.setContentHandler(new EntityBuilder(message, bf));
             parser.setContentDecoding(contentDecoding);
             if (flatMode) {
                 parser.setFlat();

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/EntityBuilder.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/EntityBuilder.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/EntityBuilder.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/EntityBuilder.java Tue Jun 21 20:01:18 2011
@@ -24,17 +24,14 @@ import java.io.InputStream;
 import java.util.Stack;
 
 import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.dom.Body;
 import org.apache.james.mime4j.dom.Entity;
 import org.apache.james.mime4j.dom.Header;
 import org.apache.james.mime4j.dom.Message;
 import org.apache.james.mime4j.dom.Multipart;
-import org.apache.james.mime4j.dom.field.ParsedField;
 import org.apache.james.mime4j.parser.ContentHandler;
 import org.apache.james.mime4j.stream.BodyDescriptor;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.util.ByteArrayBuffer;
 import org.apache.james.mime4j.util.ByteSequence;
@@ -46,19 +43,13 @@ import org.apache.james.mime4j.util.Byte
 class EntityBuilder implements ContentHandler {
 
     private final Entity entity;
-    private final DecodeMonitor monitor;
-    private final FieldParser<? extends ParsedField> fieldParser; 
     private final BodyFactory bodyFactory;
     private final Stack<Object> stack;
     
     EntityBuilder(
             final Entity entity,
-            final DecodeMonitor monitor,
-            final FieldParser<? extends ParsedField> fieldParser, 
             final BodyFactory bodyFactory) {
         this.entity = entity;
-        this.monitor = monitor;
-        this.fieldParser = fieldParser;
         this.bodyFactory = bodyFactory;
         this.stack = new Stack<Object>();
     }
@@ -105,13 +96,7 @@ class EntityBuilder implements ContentHa
      */
     public void field(Field field) throws MimeException {
         expect(Header.class);
-        ParsedField parsedField;
-        if (field instanceof ParsedField) {
-            parsedField = (ParsedField) field;
-        } else {
-            parsedField = fieldParser.parse(field, monitor);
-        }
-        ((Header) stack.peek()).addField(parsedField);
+        ((Header) stack.peek()).addField(field);
     }
     
     /**

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptor.java Tue Jun 21 20:01:18 2011
@@ -26,6 +26,7 @@ import java.util.Map;
 
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentDescriptionField;
 import org.apache.james.mime4j.dom.field.ContentDispositionField;
 import org.apache.james.mime4j.dom.field.ContentIdField;
@@ -34,16 +35,12 @@ import org.apache.james.mime4j.dom.field
 import org.apache.james.mime4j.dom.field.ContentMD5Field;
 import org.apache.james.mime4j.dom.field.FieldName;
 import org.apache.james.mime4j.dom.field.MimeVersionField;
-import org.apache.james.mime4j.field.ContentDescriptionFieldImpl;
-import org.apache.james.mime4j.field.ContentDispositionFieldImpl;
-import org.apache.james.mime4j.field.ContentIdFieldImpl;
-import org.apache.james.mime4j.field.ContentLanguageFieldImpl;
-import org.apache.james.mime4j.field.ContentLocationFieldImpl;
-import org.apache.james.mime4j.field.ContentMD5FieldImpl;
+import org.apache.james.mime4j.dom.field.ParsedField;
 import org.apache.james.mime4j.field.MimeVersionFieldImpl;
 import org.apache.james.mime4j.stream.BodyDescriptor;
 import org.apache.james.mime4j.stream.Field;
 import org.apache.james.mime4j.stream.MutableBodyDescriptor;
+import org.apache.james.mime4j.stream.RawField;
 
 /**
  * Parses and stores values for standard MIME header values.
@@ -60,101 +57,77 @@ public class MaximalBodyDescriptor exten
     private ContentMD5Field contentMD5Field;
     
     protected MaximalBodyDescriptor() {
-        this(null, null);
+        this(null);
+    }
+    
+    protected MaximalBodyDescriptor(final BodyDescriptor parent) {
+        this(parent, null, true, null);
     }
 
-    public MaximalBodyDescriptor(final BodyDescriptor parent, final DecodeMonitor monitor) {
-        super(parent, monitor);
+    public MaximalBodyDescriptor(final BodyDescriptor parent, final FieldParser<?> fieldParser, final boolean parseAllFields, final DecodeMonitor monitor) {
+        super(parent, fieldParser, parseAllFields, monitor);
     }
 
     @Override
     public MutableBodyDescriptor newChild() {
-        return new MaximalBodyDescriptor(this, getDecodeMonitor());
+        return new MaximalBodyDescriptor(this, getFieldParser(), getParseAllFields(), getDecodeMonitor());
     }
 
     @Override
-    public void addField(Field field) throws MimeException {
+    public Field addField(RawField field) throws MimeException {
         String name = field.getName();
         if (name.equalsIgnoreCase(FieldName.MIME_VERSION) && mimeVersionField == null) {
-            parseMimeVersion(field);
+            return parseMimeVersion(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_ID) && contentIdField == null) {
-            parseContentId(field);
+            return parseContentId(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_DESCRIPTION) && contentDescriptionField == null) {
-            parseContentDescription(field);
+            return parseContentDescription(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_DISPOSITION) && contentDispositionField == null) {
-            parseContentDisposition(field);
+            return parseContentDisposition(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_LANGUAGE) && contentLanguageField == null) {
-            parseLanguage(field);
+            return parseLanguage(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_LOCATION) && contentLocationField == null) {
-            parseLocation(field);
+            return parseLocation(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_MD5) && contentMD5Field == null) {
-            parseMD5(field);
+            return parseMD5(field);
         } else {
-            super.addField(field);
+            return super.addField(field);
         }
     }
     
-    private void parseMD5(final Field field) {
-        if (field instanceof ContentMD5Field) {
-            contentMD5Field = (ContentMD5Field) field;
-        } else {
-            contentMD5Field = ContentMD5FieldImpl.PARSER.parse(
-                    field, getDecodeMonitor());
-        }
+    private ContentMD5Field parseMD5(final Field field) {
+        contentMD5Field = (ContentMD5Field) getFieldParser().parse(field, getDecodeMonitor());
+        return contentMD5Field;
     }
 
-    private void parseLocation(final Field field) {
-        if (field instanceof ContentLocationField) {
-            contentLocationField = (ContentLocationField) field;
-        } else {
-            contentLocationField = ContentLocationFieldImpl.PARSER.parse(
-                    field, getDecodeMonitor());
-        }
+    private ContentLocationField parseLocation(final Field field) {
+        contentLocationField = (ContentLocationField) getFieldParser().parse(field, getDecodeMonitor());
+        return contentLocationField;
     }
     
-    private void parseLanguage(final Field field) {
-        if (field instanceof ContentLanguageField) {
-            contentLanguageField = (ContentLanguageField) field;
-        } else {
-            contentLanguageField = ContentLanguageFieldImpl.PARSER.parse(
-                    field, getDecodeMonitor());
-        }
+    private ParsedField parseLanguage(final Field field) {
+        contentLanguageField = (ContentLanguageField) getFieldParser().parse(field, getDecodeMonitor());
+        return contentLanguageField;
     }
 
-    private void parseContentDisposition(final Field field) throws MimeException {
-        if (field instanceof ContentDispositionField) {
-            contentDispositionField = (ContentDispositionField) field;
-        } else {
-            contentDispositionField = ContentDispositionFieldImpl.PARSER.parse(
-                    field, getDecodeMonitor());
-        }
+    private ParsedField parseContentDisposition(final Field field) throws MimeException {
+        contentDispositionField = (ContentDispositionField) getFieldParser().parse(field, getDecodeMonitor());
+        return contentDispositionField;
     }
 
-    private void parseContentDescription(final Field field) {
-        if (field instanceof ContentDescriptionField) {
-            contentDescriptionField = (ContentDescriptionField) field;
-        } else {
-            contentDescriptionField = ContentDescriptionFieldImpl.PARSER.parse(
-                    field, getDecodeMonitor());
-        }
+    private ParsedField parseContentDescription(final Field field) {
+        contentDescriptionField = (ContentDescriptionField) getFieldParser().parse(field, getDecodeMonitor());
+        return contentDescriptionField;
     }
 
-    private void parseContentId(final Field field) {
-        if (field instanceof ContentIdField) {
-            contentIdField = (ContentIdField) field;
-        } else {
-            contentIdField = ContentIdFieldImpl.PARSER.parse(
-                    field, getDecodeMonitor());
-        }
+    private ContentIdField parseContentId(final Field field) {
+        contentIdField = (ContentIdField) getFieldParser().parse(field, getDecodeMonitor());
+        return contentIdField;
     }
 
-    private void parseMimeVersion(final Field field) {
-        if (field instanceof MimeVersionField) {
-            mimeVersionField = (MimeVersionField) field;
-        } else {
-            mimeVersionField = MimeVersionFieldImpl.PARSER.parse(
-                    field, getDecodeMonitor());
-        }
+    private MimeVersionField parseMimeVersion(final Field field) {
+        mimeVersionField = (MimeVersionField) getFieldParser().parse(field, getDecodeMonitor());
+        return mimeVersionField;
     }
     
     /**

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MaximalBodyDescriptorFactory.java Tue Jun 21 20:01:18 2011
@@ -20,13 +20,27 @@
 package org.apache.james.mime4j.message;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.stream.MutableBodyDescriptor;
 import org.apache.james.mime4j.stream.MutableBodyDescriptorFactory;
 
 public class MaximalBodyDescriptorFactory implements MutableBodyDescriptorFactory {
 
+    private final FieldParser<?> fieldParser;
+    private final boolean parseAllFields;
+
+    public MaximalBodyDescriptorFactory() {
+        this(null, false);
+    }
+
+    public MaximalBodyDescriptorFactory(final 
+            FieldParser<?> fieldParser, final boolean parseAllFields) {
+        this.fieldParser = fieldParser;
+        this.parseAllFields = parseAllFields;
+    }
+
     public MutableBodyDescriptor newInstance(DecodeMonitor monitor) {
-        return new MaximalBodyDescriptor(null, monitor);
+        return new MaximalBodyDescriptor(null, fieldParser, parseAllFields, monitor);
     }
     
 } 

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptor.java Tue Jun 21 20:01:18 2011
@@ -24,16 +24,17 @@ import java.util.Map;
 
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.field.ContentLengthField;
 import org.apache.james.mime4j.dom.field.ContentTransferEncodingField;
 import org.apache.james.mime4j.dom.field.ContentTypeField;
 import org.apache.james.mime4j.dom.field.FieldName;
-import org.apache.james.mime4j.field.ContentLengthFieldImpl;
-import org.apache.james.mime4j.field.ContentTransferEncodingFieldImpl;
-import org.apache.james.mime4j.field.ContentTypeFieldImpl;
+import org.apache.james.mime4j.dom.field.ParsedField;
+import org.apache.james.mime4j.field.DefaultFieldParser;
 import org.apache.james.mime4j.stream.BodyDescriptor;
 import org.apache.james.mime4j.stream.Field;
 import org.apache.james.mime4j.stream.MutableBodyDescriptor;
+import org.apache.james.mime4j.stream.RawField;
 import org.apache.james.mime4j.util.MimeUtil;
 
 /**
@@ -70,12 +71,23 @@ public class MinimalBodyDescriptor imple
     private ContentTypeField contentTypeField;
     private ContentLengthField contentLengthField;
     private ContentTransferEncodingField contentTransferEncodingField;
+
+    private final FieldParser<?> fieldParser;
+
+    private final boolean parseAllFields;
     
     /**
      * Creates a new root <code>BodyDescriptor</code> instance.
      */
     public MinimalBodyDescriptor() {
-        this(null, null);
+        this(null);
+    }
+
+    /**
+     * Creates a new root <code>BodyDescriptor</code> instance with the given parent
+     */
+    public MinimalBodyDescriptor(final BodyDescriptor parent) {
+        this(parent, null, false, null);
     }
 
     /**
@@ -84,7 +96,7 @@ public class MinimalBodyDescriptor imple
      * @param parent the descriptor of the parent or <code>null</code> if this
      *        is the root descriptor.
      */
-    public MinimalBodyDescriptor(final BodyDescriptor parent, final DecodeMonitor monitor) {
+    public MinimalBodyDescriptor(final BodyDescriptor parent, final FieldParser<?> fieldParser, boolean parseAllFields, final DecodeMonitor monitor) {
         if (parent != null && MimeUtil.isSameMimeType("multipart/digest", parent.getMimeType())) {
             this.mimeType = EMAIL_MESSAGE_MIME_TYPE;
             this.subType = SUB_TYPE_EMAIL;
@@ -94,6 +106,8 @@ public class MinimalBodyDescriptor imple
             this.subType = DEFAULT_SUB_TYPE;
             this.mediaType = DEFAULT_MEDIA_TYPE;
         }
+        this.fieldParser = fieldParser != null ? fieldParser : DefaultFieldParser.getParser();
+        this.parseAllFields = parseAllFields;
         this.monitor = monitor != null ? monitor : DecodeMonitor.SILENT;
     }
     
@@ -101,8 +115,16 @@ public class MinimalBodyDescriptor imple
         return monitor;
     }
     
+    protected FieldParser<?> getFieldParser() {
+        return fieldParser;
+    }
+    
+    protected boolean getParseAllFields() {
+        return parseAllFields;
+    }
+    
     public MutableBodyDescriptor newChild() {
-		return new MinimalBodyDescriptor(this, getDecodeMonitor());
+        return new MinimalBodyDescriptor(this, getFieldParser(), getParseAllFields(), getDecodeMonitor());
     }
     
     /**
@@ -111,42 +133,32 @@ public class MinimalBodyDescriptor imple
      * 
      * @param field the MIME field.
      */
-    public void addField(Field field) throws MimeException {
+    public Field addField(RawField field) throws MimeException {
         String name = field.getName();
         if (name.equalsIgnoreCase(FieldName.CONTENT_TRANSFER_ENCODING)&& contentTransferEncodingField == null) {
-            parseContentTransferEncoding(field);
+            return parseContentTransferEncoding(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_LENGTH) && contentLengthField == null) {
-            parseContentLength(field);
+            return parseContentLength(field);
         } else if (name.equalsIgnoreCase(FieldName.CONTENT_TYPE) && contentTypeField == null) {
-            parseContentType(field);
-        }
+            return parseContentType(field);
+        } else if (getParseAllFields()) {
+            return getFieldParser().parse(field, monitor);
+        } else return null;
     }
 
-    private void parseContentTransferEncoding(Field field) throws MimeException {
-        if (field instanceof ContentTransferEncodingField) {
-            contentTransferEncodingField = (ContentTransferEncodingField) field;
-        } else {
-            contentTransferEncodingField = ContentTransferEncodingFieldImpl.PARSER.parse(
-                    field, monitor);
-        }
+    private ParsedField parseContentTransferEncoding(Field field) throws MimeException {
+        contentTransferEncodingField = (ContentTransferEncodingField) fieldParser.parse(field, monitor);
+        return contentTransferEncodingField;
     }
 
-    private void parseContentLength(Field field) throws MimeException {
-        if (field instanceof ContentLengthField) {
-            contentLengthField = (ContentLengthField) field;
-        } else {
-            contentLengthField = ContentLengthFieldImpl.PARSER.parse(
-                    field, monitor);
-        }
+    private ParsedField parseContentLength(Field field) throws MimeException {
+        contentLengthField = (ContentLengthField) fieldParser.parse(field, monitor);
+        return contentLengthField;
     }
 
-    private void parseContentType(Field field) throws MimeException {
-        if (field instanceof ContentTypeField) {
-            contentTypeField = (ContentTypeField) field;
-        } else {
-            contentTypeField = ContentTypeFieldImpl.PARSER.parse(
-                    field, monitor);
-        }
+    private ParsedField parseContentType(Field field) throws MimeException {
+        contentTypeField = (ContentTypeField) fieldParser.parse(field, monitor);
+
         String mimetype = contentTypeField.getMimeType();
         if (mimetype != null) {
             mimeType = mimetype;
@@ -163,6 +175,7 @@ public class MinimalBodyDescriptor imple
         parameters.putAll(contentTypeField.getParameters());
         parameters.remove("charset");
         parameters.remove("boundary");
+        return contentTypeField;
     }
 
     /**

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MinimalBodyDescriptorFactory.java Tue Jun 21 20:01:18 2011
@@ -20,13 +20,23 @@
 package org.apache.james.mime4j.message;
 
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.stream.MutableBodyDescriptor;
 import org.apache.james.mime4j.stream.MutableBodyDescriptorFactory;
 
 public class MinimalBodyDescriptorFactory implements MutableBodyDescriptorFactory {
 
+    private final FieldParser<?> fieldParser;
+    private final boolean parseAllFields;
+
+    public MinimalBodyDescriptorFactory(final 
+            FieldParser<?> fieldParser, final boolean parseAllFields) {
+        this.fieldParser = fieldParser;
+        this.parseAllFields = parseAllFields;
+    }
+
     public MutableBodyDescriptor newInstance(DecodeMonitor monitor) {
-        return new MinimalBodyDescriptor(null, monitor);
+        return new MinimalBodyDescriptor(null, fieldParser, parseAllFields, monitor);
     }
     
 } 

Modified: james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java?rev=1138155&r1=1138154&r2=1138155&view=diff
==============================================================================
--- james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java (original)
+++ james/mime4j/branches/mime4j-116-refactoring/dom/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java Tue Jun 21 20:01:18 2011
@@ -21,12 +21,12 @@ package org.apache.james.mime4j.message;
 
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.Header;
 import org.apache.james.mime4j.dom.field.ParsedField;
 import org.apache.james.mime4j.field.LenientFieldParser;
 import org.apache.james.mime4j.parser.AbstractContentHandler;
 import org.apache.james.mime4j.stream.Field;
-import org.apache.james.mime4j.stream.FieldParser;
 import org.apache.james.mime4j.stream.RawField;
 
 /**