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 ol...@apache.org on 2009/02/20 13:28:05 UTC

svn commit: r746223 [1/2] - in /james/mime4j/trunk: examples/src/java/org/apache/james/mime4j/samples/tree/ src/main/java/org/apache/james/mime4j/descriptor/ src/main/java/org/apache/james/mime4j/field/ src/main/java/org/apache/james/mime4j/message/ sr...

Author: olegk
Date: Fri Feb 20 12:28:04 2009
New Revision: 746223

URL: http://svn.apache.org/viewvc?rev=746223&view=rev
Log:
MIME4J-118: immutable Field interface to represent an abstract MIME field

Added:
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AbstractField.java   (contents, props changed)
      - copied, changed from r744866, james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Field.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/Field.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawField.java   (with props)
Removed:
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Field.java
Modified:
    james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/tree/MessageTree.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/DefaultBodyDescriptor.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MaximalBodyDescriptor.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MutableBodyDescriptor.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AddressListField.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DateTimeField.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/FieldParser.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxField.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxListField.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Header.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageWriter.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractContentHandler.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractEntity.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/ContentHandler.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/EntityStateMachine.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeEntity.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeTokenStream.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawEntity.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/StringArrayMap.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/descriptor/BaseTestForBodyDescriptors.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/ContentDispositionFieldTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/ContentTransferEncodingFieldTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/ContentTypeFieldTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/UnstructuredFieldTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/CopyConstructorTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/EntityTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/HeaderTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/MessageParserTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/MessageTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/message/MultipartFormTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/parser/MimeEntityTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/parser/MimeStreamParserTest.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/parser/TestHandler.java

Modified: james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/tree/MessageTree.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/tree/MessageTree.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/tree/MessageTree.java (original)
+++ james/mime4j/trunk/examples/src/java/org/apache/james/mime4j/samples/tree/MessageTree.java Fri Feb 20 12:28:04 2009
@@ -43,7 +43,7 @@
 import org.apache.james.mime4j.field.AddressListField;
 import org.apache.james.mime4j.field.ContentTypeField;
 import org.apache.james.mime4j.field.DateTimeField;
-import org.apache.james.mime4j.field.Field;
+import org.apache.james.mime4j.field.AbstractField;
 import org.apache.james.mime4j.field.UnstructuredField;
 import org.apache.james.mime4j.field.address.Mailbox;
 import org.apache.james.mime4j.field.address.MailboxList;
@@ -55,6 +55,7 @@
 import org.apache.james.mime4j.message.Message;
 import org.apache.james.mime4j.message.Multipart;
 import org.apache.james.mime4j.message.TextBody;
+import org.apache.james.mime4j.parser.Field;
 
 /**
  * Displays a parsed Message in a window. The window will be divided into
@@ -321,8 +322,8 @@
                 textView.setText(date.toString());                
             } else if (o instanceof UnstructuredField){
                 textView.setText(((UnstructuredField) o).getValue());                
-            } else if (o instanceof Field){
-                textView.setText(((Field) o).getBody());                
+            } else if (o instanceof AbstractField){
+                textView.setText(((AbstractField) o).getBody());                
             } else {
                 /*
                  * The Object should be a Header or a String containing a 

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/DefaultBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/DefaultBodyDescriptor.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/DefaultBodyDescriptor.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/DefaultBodyDescriptor.java Fri Feb 20 12:28:04 2009
@@ -24,6 +24,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.james.mime4j.parser.Field;
 import org.apache.james.mime4j.util.MimeUtil;
 
 /**
@@ -92,8 +93,10 @@
      * @param name the field name.
      * @param value the field value.
      */
-    public void addField(String name, String value) {
-        
+    public void addField(Field field) {
+        String name = field.getName();
+        String value = field.getBody();
+
         name = name.trim().toLowerCase();
         
         if (name.equals("content-transfer-encoding") && !contentTransferEncSet) {

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MaximalBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MaximalBodyDescriptor.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MaximalBodyDescriptor.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MaximalBodyDescriptor.java Fri Feb 20 12:28:04 2009
@@ -31,9 +31,9 @@
 import org.apache.james.mime4j.field.language.parser.ContentLanguageParser;
 import org.apache.james.mime4j.field.mimeversion.parser.MimeVersionParser;
 import org.apache.james.mime4j.field.structured.parser.StructuredFieldParser;
+import org.apache.james.mime4j.parser.Field;
 import org.apache.james.mime4j.util.MimeUtil;
 
-
 /**
  * Parses and stores values for standard MIME header values.
  * 
@@ -105,7 +105,9 @@
     }
     
     @Override
-    public void addField(String name, String value) {
+    public void addField(Field field) {
+        String name = field.getName();
+        String value = field.getBody();
         name = name.trim().toLowerCase();
         if (MimeUtil.MIME_HEADER_MIME_VERSION.equals(name) && !isMimeVersionSet) {
             parseMimeVersion(value);
@@ -122,7 +124,7 @@
         } else if (MimeUtil.MIME_HEADER_MD5.equals(name) && !isContentMD5Set) {
             parseMD5(value);
         } else {
-            super.addField(name, value);
+            super.addField(field);
         }
     }
     

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MutableBodyDescriptor.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MutableBodyDescriptor.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MutableBodyDescriptor.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/descriptor/MutableBodyDescriptor.java Fri Feb 20 12:28:04 2009
@@ -20,6 +20,8 @@
 
 package org.apache.james.mime4j.descriptor;
 
+import org.apache.james.mime4j.parser.Field;
+
 /**
  * Adds mutator.
  */
@@ -27,9 +29,8 @@
 
     /**
      * Adds a field to the body descriptor.
-     * @param pFieldName The fields name.
-     * @param pFieldValue The unparsed fields value.
+     * @param Field the MIME field.
      */
-    void addField(String pFieldName, String pFieldValue);
+    void addField(Field field);
 
 }

Copied: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AbstractField.java (from r744866, james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Field.java)
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AbstractField.java?p2=james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AbstractField.java&p1=james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Field.java&r1=744866&r2=746223&rev=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Field.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AbstractField.java Fri Feb 20 12:28:04 2009
@@ -23,12 +23,13 @@
 import java.util.regex.Pattern;
 
 import org.apache.james.mime4j.MimeException;
+import org.apache.james.mime4j.parser.Field;
 import org.apache.james.mime4j.util.MimeUtil;
 
 /**
  * The base class of all field classes.
  */
-public abstract class Field {
+public abstract class AbstractField implements Field {
     public static final String SENDER = "Sender";
     public static final String FROM = "From";
     public static final String TO = "To";
@@ -63,7 +64,7 @@
     private final String body;
     private final String raw;
     
-    protected Field(final String name, final String body, final String raw) {
+    protected AbstractField(final String name, final String body, final String raw) {
         this.name = name;
         this.body = body;
         this.raw = raw;

Propchange: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AbstractField.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AddressListField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AddressListField.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AddressListField.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/AddressListField.java Fri Feb 20 12:28:04 2009
@@ -27,7 +27,7 @@
 /**
  * Address list field such as <code>To</code> or <code>Reply-To</code>.
  */
-public class AddressListField extends Field {
+public class AddressListField extends AbstractField {
     private static Log log = LogFactory.getLog(AddressListField.class);
 
     private boolean parsed = false;
@@ -70,7 +70,7 @@
     }
 
     static class Parser implements FieldParser {
-        public Field parse(final String name, final String body,
+        public AbstractField parse(final String name, final String body,
                 final String raw) {
             return new AddressListField(name, body, raw);
         }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java Fri Feb 20 12:28:04 2009
@@ -37,7 +37,7 @@
 /**
  * Represents a <code>Content-Disposition</code> field.
  */
-public class ContentDispositionField extends Field {
+public class ContentDispositionField extends AbstractField {
     private static Log log = LogFactory.getLog(ContentDispositionField.class);
 
     /** The <code>inline</code> disposition type. */
@@ -318,7 +318,7 @@
     }
 
     static class Parser implements FieldParser {
-        public Field parse(final String name, final String body,
+        public AbstractField parse(final String name, final String body,
                 final String raw) {
             return new ContentDispositionField(name, body, raw);
         }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java Fri Feb 20 12:28:04 2009
@@ -24,7 +24,7 @@
 /**
  * Represents a <code>Content-Transfer-Encoding</code> field.
  */
-public class ContentTransferEncodingField extends Field {
+public class ContentTransferEncodingField extends AbstractField {
     private String encoding;
 
     ContentTransferEncodingField(String name, String body, String raw) {
@@ -56,7 +56,7 @@
     }
 
     static class Parser implements FieldParser {
-        public Field parse(final String name, final String body,
+        public AbstractField parse(final String name, final String body,
                 final String raw) {
             return new ContentTransferEncodingField(name, body, raw);
         }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java Fri Feb 20 12:28:04 2009
@@ -34,7 +34,7 @@
 /**
  * Represents a <code>Content-Type</code> field.
  */
-public class ContentTypeField extends Field {
+public class ContentTypeField extends AbstractField {
     private static Log log = LogFactory.getLog(ContentTypeField.class);
 
     /** The prefix of all <code>multipart</code> MIME types. */
@@ -249,7 +249,7 @@
     }
 
     static class Parser implements FieldParser {
-        public Field parse(final String name, final String body,
+        public AbstractField parse(final String name, final String body,
                 final String raw) {
             return new ContentTypeField(name, body, raw);
         }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DateTimeField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DateTimeField.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DateTimeField.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DateTimeField.java Fri Feb 20 12:28:04 2009
@@ -31,7 +31,7 @@
 /**
  * Date-time field such as <code>Date</code> or <code>Resent-Date</code>.
  */
-public class DateTimeField extends Field {
+public class DateTimeField extends AbstractField {
     private static Log log = LogFactory.getLog(DateTimeField.class);
 
     private boolean parsed = false;
@@ -80,7 +80,7 @@
     }
 
     static class Parser implements FieldParser {
-        public Field parse(final String name, final String body,
+        public AbstractField parse(final String name, final String body,
                 final String raw) {
             return new DateTimeField(name, body, raw);
         }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java Fri Feb 20 12:28:04 2009
@@ -22,29 +22,29 @@
 public class DefaultFieldParser extends DelegatingFieldParser {
     
     public DefaultFieldParser() {
-        setFieldParser(Field.CONTENT_TRANSFER_ENCODING, new ContentTransferEncodingField.Parser());
-        setFieldParser(Field.CONTENT_TYPE, new ContentTypeField.Parser());
-        setFieldParser(Field.CONTENT_DISPOSITION, new ContentDispositionField.Parser());
+        setFieldParser(AbstractField.CONTENT_TRANSFER_ENCODING, new ContentTransferEncodingField.Parser());
+        setFieldParser(AbstractField.CONTENT_TYPE, new ContentTypeField.Parser());
+        setFieldParser(AbstractField.CONTENT_DISPOSITION, new ContentDispositionField.Parser());
         
         final DateTimeField.Parser dateTimeParser = new DateTimeField.Parser();
-        setFieldParser(Field.DATE, dateTimeParser);
-        setFieldParser(Field.RESENT_DATE, dateTimeParser);
+        setFieldParser(AbstractField.DATE, dateTimeParser);
+        setFieldParser(AbstractField.RESENT_DATE, dateTimeParser);
         
         final MailboxListField.Parser mailboxListParser = new MailboxListField.Parser();
-        setFieldParser(Field.FROM, mailboxListParser);
-        setFieldParser(Field.RESENT_FROM, mailboxListParser);
+        setFieldParser(AbstractField.FROM, mailboxListParser);
+        setFieldParser(AbstractField.RESENT_FROM, mailboxListParser);
         
         final MailboxField.Parser mailboxParser = new MailboxField.Parser();
-        setFieldParser(Field.SENDER, mailboxParser);
-        setFieldParser(Field.RESENT_SENDER, mailboxParser);
+        setFieldParser(AbstractField.SENDER, mailboxParser);
+        setFieldParser(AbstractField.RESENT_SENDER, mailboxParser);
         
         final AddressListField.Parser addressListParser = new AddressListField.Parser();
-        setFieldParser(Field.TO, addressListParser);
-        setFieldParser(Field.RESENT_TO, addressListParser);
-        setFieldParser(Field.CC, addressListParser);
-        setFieldParser(Field.RESENT_CC, addressListParser);
-        setFieldParser(Field.BCC, addressListParser);
-        setFieldParser(Field.RESENT_BCC, addressListParser);
-        setFieldParser(Field.REPLY_TO, addressListParser);
+        setFieldParser(AbstractField.TO, addressListParser);
+        setFieldParser(AbstractField.RESENT_TO, addressListParser);
+        setFieldParser(AbstractField.CC, addressListParser);
+        setFieldParser(AbstractField.RESENT_CC, addressListParser);
+        setFieldParser(AbstractField.BCC, addressListParser);
+        setFieldParser(AbstractField.RESENT_BCC, addressListParser);
+        setFieldParser(AbstractField.REPLY_TO, addressListParser);
     }
 }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java Fri Feb 20 12:28:04 2009
@@ -22,6 +22,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.james.mime4j.parser.Field;
+
 public class DelegatingFieldParser implements FieldParser {
     
     private Map<String, FieldParser> parsers = new HashMap<String, FieldParser>();

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/FieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/FieldParser.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/FieldParser.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/FieldParser.java Fri Feb 20 12:28:04 2009
@@ -19,7 +19,10 @@
 
 package org.apache.james.mime4j.field;
 
+import org.apache.james.mime4j.parser.Field;
+
 public interface FieldParser {
     
     Field parse(final String name, final String body, final String raw);
+    
 }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java Fri Feb 20 12:28:04 2009
@@ -30,10 +30,11 @@
 import org.apache.james.mime4j.codec.EncoderUtil;
 import org.apache.james.mime4j.field.address.Address;
 import org.apache.james.mime4j.field.address.Mailbox;
+import org.apache.james.mime4j.parser.Field;
 import org.apache.james.mime4j.util.MimeUtil;
 
 /**
- * Factory for concrete {@link Field} instances.
+ * Factory for concrete {@link AbstractField} instances.
  */
 public class Fields {
 
@@ -51,7 +52,7 @@
      * @return the newly created <i>Content-Type</i> field.
      */
     public static ContentTypeField contentType(String contentType) {
-        return parse(ContentTypeField.class, Field.CONTENT_TYPE, contentType);
+        return parse(ContentTypeField.class, AbstractField.CONTENT_TYPE, contentType);
     }
 
     /**
@@ -72,7 +73,7 @@
             throw new IllegalArgumentException();
 
         if (parameters == null || parameters.isEmpty()) {
-            return parse(ContentTypeField.class, Field.CONTENT_TYPE, mimeType);
+            return parse(ContentTypeField.class, AbstractField.CONTENT_TYPE, mimeType);
         } else {
             StringBuilder sb = new StringBuilder(mimeType);
             for (Map.Entry<String, String> entry : parameters.entrySet()) {
@@ -97,7 +98,7 @@
     public static ContentTransferEncodingField contentTransferEncoding(
             String contentTransferEncoding) {
         return parse(ContentTransferEncodingField.class,
-                Field.CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
+                AbstractField.CONTENT_TRANSFER_ENCODING, contentTransferEncoding);
     }
 
     /**
@@ -112,7 +113,7 @@
      */
     public static ContentDispositionField contentDisposition(
             String contentDisposition) {
-        return parse(ContentDispositionField.class, Field.CONTENT_DISPOSITION,
+        return parse(ContentDispositionField.class, AbstractField.CONTENT_DISPOSITION,
                 contentDisposition);
     }
 
@@ -135,7 +136,7 @@
 
         if (parameters == null || parameters.isEmpty()) {
             return parse(ContentDispositionField.class,
-                    Field.CONTENT_DISPOSITION, dispositionType);
+                    AbstractField.CONTENT_DISPOSITION, dispositionType);
         } else {
             StringBuilder sb = new StringBuilder(dispositionType);
             for (Map.Entry<String, String> entry : parameters.entrySet()) {
@@ -244,7 +245,7 @@
      * @return the newly created <i>Date</i> field.
      */
     public static DateTimeField date(Date date) {
-        return date(Field.DATE, date, null);
+        return date(AbstractField.DATE, date, null);
     }
 
     /**
@@ -288,9 +289,9 @@
      *            <code>null</code> if no host name should be included.
      * @return the newly created <i>Message-ID</i> field.
      */
-    public static Field messageId(String hostname) {
+    public static AbstractField messageId(String hostname) {
         String fieldValue = MimeUtil.createUniqueMessageId(hostname);
-        return parse(UnstructuredField.class, Field.MESSAGE_ID, fieldValue);
+        return parse(UnstructuredField.class, AbstractField.MESSAGE_ID, fieldValue);
     }
 
     /**
@@ -302,11 +303,11 @@
      * @return the newly created <i>Subject</i> field.
      */
     public static UnstructuredField subject(String subject) {
-        int usedCharacters = Field.SUBJECT.length() + 2;
+        int usedCharacters = AbstractField.SUBJECT.length() + 2;
         String fieldValue = EncoderUtil.encodeIfNecessary(subject,
                 EncoderUtil.Usage.TEXT_TOKEN, usedCharacters);
 
-        return parse(UnstructuredField.class, Field.SUBJECT, fieldValue);
+        return parse(UnstructuredField.class, AbstractField.SUBJECT, fieldValue);
     }
 
     /**
@@ -317,7 +318,7 @@
      * @return the newly created <i>Sender</i> field.
      */
     public static MailboxField sender(Mailbox mailbox) {
-        return mailbox(Field.SENDER, mailbox);
+        return mailbox(AbstractField.SENDER, mailbox);
     }
 
     /**
@@ -328,7 +329,7 @@
      * @return the newly created <i>From</i> field.
      */
     public static MailboxListField from(Mailbox mailbox) {
-        return mailboxList(Field.FROM, Collections.singleton(mailbox));
+        return mailboxList(AbstractField.FROM, Collections.singleton(mailbox));
     }
 
     /**
@@ -339,7 +340,7 @@
      * @return the newly created <i>From</i> field.
      */
     public static MailboxListField from(Mailbox... mailboxes) {
-        return mailboxList(Field.FROM, Arrays.asList(mailboxes));
+        return mailboxList(AbstractField.FROM, Arrays.asList(mailboxes));
     }
 
     /**
@@ -350,7 +351,7 @@
      * @return the newly created <i>From</i> field.
      */
     public static MailboxListField from(Iterable<Mailbox> mailboxes) {
-        return mailboxList(Field.FROM, mailboxes);
+        return mailboxList(AbstractField.FROM, mailboxes);
     }
 
     /**
@@ -361,7 +362,7 @@
      * @return the newly created <i>To</i> field.
      */
     public static AddressListField to(Address address) {
-        return addressList(Field.TO, Collections.singleton(address));
+        return addressList(AbstractField.TO, Collections.singleton(address));
     }
 
     /**
@@ -372,7 +373,7 @@
      * @return the newly created <i>To</i> field.
      */
     public static AddressListField to(Address... addresses) {
-        return addressList(Field.TO, Arrays.asList(addresses));
+        return addressList(AbstractField.TO, Arrays.asList(addresses));
     }
 
     /**
@@ -383,7 +384,7 @@
      * @return the newly created <i>To</i> field.
      */
     public static AddressListField to(Iterable<Address> addresses) {
-        return addressList(Field.TO, addresses);
+        return addressList(AbstractField.TO, addresses);
     }
 
     /**
@@ -394,7 +395,7 @@
      * @return the newly created <i>Cc</i> field.
      */
     public static AddressListField cc(Address address) {
-        return addressList(Field.CC, Collections.singleton(address));
+        return addressList(AbstractField.CC, Collections.singleton(address));
     }
 
     /**
@@ -405,7 +406,7 @@
      * @return the newly created <i>Cc</i> field.
      */
     public static AddressListField cc(Address... addresses) {
-        return addressList(Field.CC, Arrays.asList(addresses));
+        return addressList(AbstractField.CC, Arrays.asList(addresses));
     }
 
     /**
@@ -416,7 +417,7 @@
      * @return the newly created <i>Cc</i> field.
      */
     public static AddressListField cc(Iterable<Address> addresses) {
-        return addressList(Field.CC, addresses);
+        return addressList(AbstractField.CC, addresses);
     }
 
     /**
@@ -427,7 +428,7 @@
      * @return the newly created <i>Bcc</i> field.
      */
     public static AddressListField bcc(Address address) {
-        return addressList(Field.BCC, Collections.singleton(address));
+        return addressList(AbstractField.BCC, Collections.singleton(address));
     }
 
     /**
@@ -438,7 +439,7 @@
      * @return the newly created <i>Bcc</i> field.
      */
     public static AddressListField bcc(Address... addresses) {
-        return addressList(Field.BCC, Arrays.asList(addresses));
+        return addressList(AbstractField.BCC, Arrays.asList(addresses));
     }
 
     /**
@@ -449,7 +450,7 @@
      * @return the newly created <i>Bcc</i> field.
      */
     public static AddressListField bcc(Iterable<Address> addresses) {
-        return addressList(Field.BCC, addresses);
+        return addressList(AbstractField.BCC, addresses);
     }
 
     /**
@@ -461,7 +462,7 @@
      * @return the newly created <i>Reply-To</i> field.
      */
     public static AddressListField replyTo(Address address) {
-        return addressList(Field.REPLY_TO, Collections.singleton(address));
+        return addressList(AbstractField.REPLY_TO, Collections.singleton(address));
     }
 
     /**
@@ -473,7 +474,7 @@
      * @return the newly created <i>Reply-To</i> field.
      */
     public static AddressListField replyTo(Address... addresses) {
-        return addressList(Field.REPLY_TO, Arrays.asList(addresses));
+        return addressList(AbstractField.REPLY_TO, Arrays.asList(addresses));
     }
 
     /**
@@ -485,7 +486,7 @@
      * @return the newly created <i>Reply-To</i> field.
      */
     public static AddressListField replyTo(Iterable<Address> addresses) {
-        return addressList(Field.REPLY_TO, addresses);
+        return addressList(AbstractField.REPLY_TO, addresses);
     }
 
     /**
@@ -565,12 +566,12 @@
         return EncoderUtil.isToken(dispositionType);
     }
 
-    private static <F extends Field> F parse(Class<F> fieldClass,
+    private static <F extends AbstractField> F parse(Class<F> fieldClass,
             String fieldName, String fieldBody) {
         try {
             String raw = MimeUtil.fold(fieldName + ": " + fieldBody, 0);
 
-            Field field = Field.parse(raw);
+            Field field = AbstractField.parse(raw);
             if (!fieldClass.isInstance(field)) {
                 throw new IllegalArgumentException("Incompatible field name: "
                         + fieldName);

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxField.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxField.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxField.java Fri Feb 20 12:28:04 2009
@@ -29,7 +29,7 @@
 /**
  * Mailbox field such as <code>Sender</code> or <code>Resent-Sender</code>.
  */
-public class MailboxField extends Field {
+public class MailboxField extends AbstractField {
     private static Log log = LogFactory.getLog(MailboxField.class);
 
     private boolean parsed = false;
@@ -75,7 +75,7 @@
     }
 
     static class Parser implements FieldParser {
-        public Field parse(final String name, final String body,
+        public AbstractField parse(final String name, final String body,
                 final String raw) {
             return new MailboxField(name, body, raw);
         }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxListField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxListField.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxListField.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/MailboxListField.java Fri Feb 20 12:28:04 2009
@@ -28,7 +28,7 @@
 /**
  * Mailbox-list field such as <code>From</code> or <code>Resent-From</code>.
  */
-public class MailboxListField extends Field {
+public class MailboxListField extends AbstractField {
     private static Log log = LogFactory.getLog(MailboxListField.class);
 
     private boolean parsed = false;
@@ -71,7 +71,7 @@
     }
 
     static class Parser implements FieldParser {
-        public Field parse(final String name, final String body,
+        public AbstractField parse(final String name, final String body,
                 final String raw) {
             return new MailboxListField(name, body, raw);
         }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java Fri Feb 20 12:28:04 2009
@@ -24,7 +24,7 @@
 /**
  * Simple unstructured field such as <code>Subject</code>.
  */
-public class UnstructuredField extends Field {
+public class UnstructuredField extends AbstractField {
     private boolean parsed = false;
 
     private String value;
@@ -49,7 +49,7 @@
     }
 
     static class Parser implements FieldParser {
-        public Field parse(final String name, final String body,
+        public AbstractField parse(final String name, final String body,
                 final String raw) {
             return new UnstructuredField(name, body, raw);
         }

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Entity.java Fri Feb 20 12:28:04 2009
@@ -27,7 +27,7 @@
 import org.apache.james.mime4j.field.ContentDispositionField;
 import org.apache.james.mime4j.field.ContentTransferEncodingField;
 import org.apache.james.mime4j.field.ContentTypeField;
-import org.apache.james.mime4j.field.Field;
+import org.apache.james.mime4j.field.AbstractField;
 import org.apache.james.mime4j.field.Fields;
 import org.apache.james.mime4j.util.MimeUtil;
 
@@ -264,10 +264,10 @@
      */
     public String getMimeType() {
         ContentTypeField child = 
-            (ContentTypeField) getHeader().getField(Field.CONTENT_TYPE);
+            (ContentTypeField) getHeader().getField(AbstractField.CONTENT_TYPE);
         ContentTypeField parent = getParent() != null 
             ? (ContentTypeField) getParent().getHeader().
-                                                getField(Field.CONTENT_TYPE)
+                                                getField(AbstractField.CONTENT_TYPE)
             : null;
         
         return ContentTypeField.getMimeType(child, parent);
@@ -280,7 +280,7 @@
      */
     public String getCharset() {
         return ContentTypeField.getCharset( 
-            (ContentTypeField) getHeader().getField(Field.CONTENT_TYPE));
+            (ContentTypeField) getHeader().getField(AbstractField.CONTENT_TYPE));
     }
     
     /**
@@ -290,7 +290,7 @@
      */
     public String getContentTransferEncoding() {
         ContentTransferEncodingField f = (ContentTransferEncodingField) 
-                        getHeader().getField(Field.CONTENT_TRANSFER_ENCODING);
+                        getHeader().getField(AbstractField.CONTENT_TRANSFER_ENCODING);
         
         return ContentTransferEncodingField.getEncoding(f);
     }
@@ -315,7 +315,7 @@
      *         type has been set.
      */
     public String getDispositionType() {
-        ContentDispositionField field = obtainField(Field.CONTENT_DISPOSITION);
+        ContentDispositionField field = obtainField(AbstractField.CONTENT_DISPOSITION);
         if (field == null)
             return null;
 
@@ -415,7 +415,7 @@
      *         <code>null</code> if the filename has not been set.
      */
     public String getFilename() {
-        ContentDispositionField field = obtainField(Field.CONTENT_DISPOSITION);
+        ContentDispositionField field = obtainField(AbstractField.CONTENT_DISPOSITION);
         if (field == null)
             return null;
 
@@ -435,7 +435,7 @@
     public void setFilename(String filename) {
         Header header = obtainHeader();
         ContentDispositionField field = (ContentDispositionField) header
-                .getField(Field.CONTENT_DISPOSITION);
+                .getField(AbstractField.CONTENT_DISPOSITION);
         if (field == null) {
             if (filename != null) {
                 header.setField(Fields.contentDisposition(
@@ -478,7 +478,7 @@
      */
     public boolean isMultipart() {
         ContentTypeField f = 
-            (ContentTypeField) getHeader().getField(Field.CONTENT_TYPE);
+            (ContentTypeField) getHeader().getField(AbstractField.CONTENT_TYPE);
         return f != null && f.getBoundary() != null 
             && getMimeType().startsWith(ContentTypeField.TYPE_MULTIPART_PREFIX);
     }
@@ -521,7 +521,7 @@
      * @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 AbstractField> F obtainField(String fieldName) {
         Header header = getHeader();
         if (header == null)
             return null;

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Header.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Header.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Header.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Header.java Fri Feb 20 12:28:04 2009
@@ -30,8 +30,8 @@
 
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.MimeIOException;
-import org.apache.james.mime4j.field.Field;
 import org.apache.james.mime4j.parser.AbstractContentHandler;
+import org.apache.james.mime4j.parser.Field;
 import org.apache.james.mime4j.parser.MimeStreamParser;
 
 /**
@@ -81,8 +81,8 @@
                 parser.stop();
             }
             @Override
-            public void field(String fieldData) throws MimeException {
-                addField(Field.parse(fieldData));
+            public void field(Field field) throws MimeException {
+                addField(field);
             }
         });
         try {

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/Message.java Fri Feb 20 12:28:04 2009
@@ -32,7 +32,7 @@
 import org.apache.james.mime4j.MimeIOException;
 import org.apache.james.mime4j.field.AddressListField;
 import org.apache.james.mime4j.field.DateTimeField;
-import org.apache.james.mime4j.field.Field;
+import org.apache.james.mime4j.field.AbstractField;
 import org.apache.james.mime4j.field.Fields;
 import org.apache.james.mime4j.field.MailboxField;
 import org.apache.james.mime4j.field.MailboxListField;
@@ -110,8 +110,9 @@
      * @throws MimeIOException
      *             on MIME protocol violations.
      */
-    public Message(InputStream is, MimeEntityConfig config) throws IOException,
-            MimeIOException {
+    public Message(
+            InputStream is, 
+            MimeEntityConfig config) throws IOException, MimeIOException {
         this(is, config, DefaultStorageProvider.getInstance());
     }
 
@@ -131,7 +132,9 @@
      * @throws MimeIOException
      *             on MIME protocol violations.
      */
-    public Message(InputStream is, MimeEntityConfig config,
+    public Message(
+            InputStream is, 
+            MimeEntityConfig config,
             StorageProvider storageProvider) throws IOException,
             MimeIOException {
         try {
@@ -166,7 +169,7 @@
      * @return the identifier of this message.
      */
     public String getMessageId() {
-        Field field = obtainField(Field.MESSAGE_ID);
+        AbstractField field = obtainField(AbstractField.MESSAGE_ID);
         if (field == null)
             return null;
 
@@ -195,7 +198,7 @@
      * @return the subject of this message.
      */
     public String getSubject() {
-        UnstructuredField field = obtainField(Field.SUBJECT);
+        UnstructuredField field = obtainField(AbstractField.SUBJECT);
         if (field == null)
             return null;
 
@@ -216,7 +219,7 @@
         Header header = obtainHeader();
 
         if (subject == null) {
-            header.removeFields(Field.SUBJECT);
+            header.removeFields(AbstractField.SUBJECT);
         } else {
             header.setField(Fields.subject(subject));
         }
@@ -229,7 +232,7 @@
      * @return the date of this message.
      */
     public Date getDate() {
-        DateTimeField dateField = obtainField(Field.DATE);
+        DateTimeField dateField = obtainField(AbstractField.DATE);
         if (dateField == null)
             return null;
 
@@ -264,9 +267,9 @@
         Header header = obtainHeader();
 
         if (date == null) {
-            header.removeFields(Field.DATE);
+            header.removeFields(AbstractField.DATE);
         } else {
-            header.setField(Fields.date(Field.DATE, date, zone));
+            header.setField(Fields.date(AbstractField.DATE, date, zone));
         }
     }
 
@@ -278,7 +281,7 @@
      * @return the sender of this message.
      */
     public Mailbox getSender() {
-        return getMailbox(Field.SENDER);
+        return getMailbox(AbstractField.SENDER);
     }
 
     /**
@@ -290,7 +293,7 @@
      *            field.
      */
     public void setSender(Mailbox sender) {
-        setMailbox(Field.SENDER, sender);
+        setMailbox(AbstractField.SENDER, sender);
     }
 
     /**
@@ -301,7 +304,7 @@
      * @return value of the from field of this message.
      */
     public MailboxList getFrom() {
-        return getMailboxList(Field.FROM);
+        return getMailboxList(AbstractField.FROM);
     }
 
     /**
@@ -313,7 +316,7 @@
      *            field.
      */
     public void setFrom(Mailbox from) {
-        setMailboxList(Field.FROM, from);
+        setMailboxList(AbstractField.FROM, from);
     }
 
     /**
@@ -325,7 +328,7 @@
      *            remove the header field.
      */
     public void setFrom(Mailbox... from) {
-        setMailboxList(Field.FROM, from);
+        setMailboxList(AbstractField.FROM, from);
     }
 
     /**
@@ -337,7 +340,7 @@
      *            to remove the header field.
      */
     public void setFrom(Collection<Mailbox> from) {
-        setMailboxList(Field.FROM, from);
+        setMailboxList(AbstractField.FROM, from);
     }
 
     /**
@@ -348,7 +351,7 @@
      * @return value of the to field of this message.
      */
     public AddressList getTo() {
-        return getAddressList(Field.TO);
+        return getAddressList(AbstractField.TO);
     }
 
     /**
@@ -360,7 +363,7 @@
      *            field.
      */
     public void setTo(Address to) {
-        setAddressList(Field.TO, to);
+        setAddressList(AbstractField.TO, to);
     }
 
     /**
@@ -372,7 +375,7 @@
      *            remove the header field.
      */
     public void setTo(Address... to) {
-        setAddressList(Field.TO, to);
+        setAddressList(AbstractField.TO, to);
     }
 
     /**
@@ -384,7 +387,7 @@
      *            to remove the header field.
      */
     public void setTo(Collection<Address> to) {
-        setAddressList(Field.TO, to);
+        setAddressList(AbstractField.TO, to);
     }
 
     /**
@@ -395,7 +398,7 @@
      * @return value of the cc field of this message.
      */
     public AddressList getCc() {
-        return getAddressList(Field.CC);
+        return getAddressList(AbstractField.CC);
     }
 
     /**
@@ -407,7 +410,7 @@
      *            field.
      */
     public void setCc(Address cc) {
-        setAddressList(Field.CC, cc);
+        setAddressList(AbstractField.CC, cc);
     }
 
     /**
@@ -419,7 +422,7 @@
      *            remove the header field.
      */
     public void setCc(Address... cc) {
-        setAddressList(Field.CC, cc);
+        setAddressList(AbstractField.CC, cc);
     }
 
     /**
@@ -431,7 +434,7 @@
      *            to remove the header field.
      */
     public void setCc(Collection<Address> cc) {
-        setAddressList(Field.CC, cc);
+        setAddressList(AbstractField.CC, cc);
     }
 
     /**
@@ -442,7 +445,7 @@
      * @return value of the bcc field of this message.
      */
     public AddressList getBcc() {
-        return getAddressList(Field.BCC);
+        return getAddressList(AbstractField.BCC);
     }
 
     /**
@@ -454,7 +457,7 @@
      *            field.
      */
     public void setBcc(Address bcc) {
-        setAddressList(Field.BCC, bcc);
+        setAddressList(AbstractField.BCC, bcc);
     }
 
     /**
@@ -466,7 +469,7 @@
      *            remove the header field.
      */
     public void setBcc(Address... bcc) {
-        setAddressList(Field.BCC, bcc);
+        setAddressList(AbstractField.BCC, bcc);
     }
 
     /**
@@ -478,7 +481,7 @@
      *            to remove the header field.
      */
     public void setBcc(Collection<Address> bcc) {
-        setAddressList(Field.BCC, bcc);
+        setAddressList(AbstractField.BCC, bcc);
     }
 
     /**
@@ -489,7 +492,7 @@
      * @return value of the reply to field of this message.
      */
     public AddressList getReplyTo() {
-        return getAddressList(Field.REPLY_TO);
+        return getAddressList(AbstractField.REPLY_TO);
     }
 
     /**
@@ -501,7 +504,7 @@
      *            field.
      */
     public void setReplyTo(Address replyTo) {
-        setAddressList(Field.REPLY_TO, replyTo);
+        setAddressList(AbstractField.REPLY_TO, replyTo);
     }
 
     /**
@@ -513,7 +516,7 @@
      *            remove the header field.
      */
     public void setReplyTo(Address... replyTo) {
-        setAddressList(Field.REPLY_TO, replyTo);
+        setAddressList(AbstractField.REPLY_TO, replyTo);
     }
 
     /**
@@ -525,7 +528,7 @@
      *            to remove the header field.
      */
     public void setReplyTo(Collection<Address> replyTo) {
-        setAddressList(Field.REPLY_TO, replyTo);
+        setAddressList(AbstractField.REPLY_TO, replyTo);
     }
 
     private Mailbox getMailbox(String fieldName) {

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java Fri Feb 20 12:28:04 2009
@@ -27,8 +27,9 @@
 import org.apache.james.mime4j.codec.Base64InputStream;
 import org.apache.james.mime4j.codec.QuotedPrintableInputStream;
 import org.apache.james.mime4j.descriptor.BodyDescriptor;
-import org.apache.james.mime4j.field.Field;
+import org.apache.james.mime4j.field.AbstractField;
 import org.apache.james.mime4j.parser.ContentHandler;
+import org.apache.james.mime4j.parser.Field;
 import org.apache.james.mime4j.parser.MimeStreamParser;
 import org.apache.james.mime4j.storage.StorageProvider;
 import org.apache.james.mime4j.util.MimeUtil;
@@ -93,9 +94,10 @@
     /**
      * @see org.apache.james.mime4j.parser.ContentHandler#field(java.lang.String)
      */
-    public void field(String fieldData) throws MimeException {
+    public void field(Field field) throws MimeException {
         expect(Header.class);
-        ((Header) stack.peek()).addField(Field.parse(fieldData));
+        Field parsedfield = AbstractField.parse(field.getRaw()); 
+        ((Header) stack.peek()).addField(parsedfield);
     }
     
     /**

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageWriter.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageWriter.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageWriter.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/MessageWriter.java Fri Feb 20 12:28:04 2009
@@ -32,7 +32,8 @@
 import org.apache.james.mime4j.MimeIOException;
 import org.apache.james.mime4j.codec.CodecUtil;
 import org.apache.james.mime4j.field.ContentTypeField;
-import org.apache.james.mime4j.field.Field;
+import org.apache.james.mime4j.field.AbstractField;
+import org.apache.james.mime4j.parser.Field;
 import org.apache.james.mime4j.util.CharsetUtil;
 import org.apache.james.mime4j.util.MimeUtil;
 
@@ -224,7 +225,7 @@
     public void writeHeader(Header header, OutputStream out)
             throws IOException, MimeIOException {
         Writer writer = getWriter((ContentTypeField) header
-                .getField(Field.CONTENT_TYPE), out);
+                .getField(AbstractField.CONTENT_TYPE), out);
 
         try {
             for (Field field : header) {
@@ -271,7 +272,7 @@
                     "Missing header in parent entity");
 
         ContentTypeField contentType = (ContentTypeField) header
-                .getField(Field.CONTENT_TYPE);
+                .getField(AbstractField.CONTENT_TYPE);
         if (contentType == null)
             throw new IllegalArgumentException(
                     "Content-Type field not specified");

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java Fri Feb 20 12:28:04 2009
@@ -23,8 +23,8 @@
 import org.apache.james.mime4j.codec.Base64InputStream;
 import org.apache.james.mime4j.codec.QuotedPrintableInputStream;
 import org.apache.james.mime4j.descriptor.BodyDescriptor;
-import org.apache.james.mime4j.field.Field;
 import org.apache.james.mime4j.parser.AbstractContentHandler;
+import org.apache.james.mime4j.parser.Field;
 import org.apache.james.mime4j.util.MimeUtil;
 
 import java.io.InputStream;
@@ -72,11 +72,11 @@
     }
 
     /**
-     * @see org.apache.james.mime4j.parser.AbstractContentHandler#field(java.lang.String)
+     * @see org.apache.james.mime4j.parser.AbstractContentHandler#field(Field)
      */
     @Override
-    public final void field(String fieldData) throws MimeException {
-        currHeader.addField(Field.parse(fieldData));
+    public final void field(Field field) throws MimeException {
+        currHeader.addField(field);
     }
 
     /**

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractContentHandler.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractContentHandler.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractContentHandler.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractContentHandler.java Fri Feb 20 12:28:04 2009
@@ -77,9 +77,9 @@
     }
     
     /**
-     * @see org.apache.james.mime4j.parser.ContentHandler#field(java.lang.String)
+     * @see org.apache.james.mime4j.parser.ContentHandler#field(Field)
      */
-    public void field(String fieldData) throws MimeException {
+    public void field(Field field) throws MimeException {
     }
     
     /**

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractEntity.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractEntity.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractEntity.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/AbstractEntity.java Fri Feb 20 12:28:04 2009
@@ -55,7 +55,7 @@
     private final CharArrayBuffer fieldbuf;
 
     private int lineCount;
-    private String field, fieldName, fieldValue;
+    private Field field;
     private boolean endOfHeader;
     private int headerCount;
 
@@ -195,7 +195,10 @@
             fieldbuf.setLength(len);
             
             boolean valid = true;
-            field = fieldbuf.toString();
+            
+            String fieldName = null;
+            String fieldValue = null;
+            
             int pos = fieldbuf.indexOf(':');
             if (pos <= 0) {
                 monitor(Event.INALID_HEADER);
@@ -212,7 +215,8 @@
                 fieldValue = fieldbuf.substring(pos + 1, fieldbuf.length());
             }
             if (valid) {
-                body.addField(fieldName, fieldValue);            
+                field = new RawField(fieldName, fieldValue, fieldbuf.toString());
+                body.addField(field);            
                 return true;
             }
         }
@@ -248,7 +252,7 @@
      * @throws IllegalStateException {@link #getState()} returns another
      *   value than {@link EntityStates#T_FIELD}.
      */
-    public String getField() {
+    public Field getField() {
         switch (getState()) {
         case EntityStates.T_FIELD:
             return field;
@@ -258,36 +262,6 @@
     }
 
     /**
-     * This method is valid, if {@link #getState()} returns {@link EntityStates#T_FIELD}.
-     * @return String with the fields name.
-     * @throws IllegalStateException {@link #getState()} returns another
-     *   value than {@link EntityStates#T_FIELD}.
-     */
-    public String getFieldName() {
-        switch (getState()) {
-        case EntityStates.T_FIELD:
-            return fieldName;
-        default:
-            throw new IllegalStateException("Invalid state :" + stateToString(state));
-        }
-    }
-
-    /**
-     * This method is valid, if {@link #getState()} returns {@link EntityStates#T_FIELD}.
-     * @return String with the fields value.
-     * @throws IllegalStateException {@link #getState()} returns another
-     *   value than {@link EntityStates#T_FIELD}.
-     */
-    public String getFieldValue() {
-        switch (getState()) {
-        case EntityStates.T_FIELD:
-            return fieldValue;
-        default:
-            throw new IllegalStateException("Invalid state :" + stateToString(state));
-        }
-    }
-
-    /**
      * Monitors the given event.
      * Subclasses may override to perform actions upon events.
      * Base implementation logs at warn.

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/ContentHandler.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/ContentHandler.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/ContentHandler.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/ContentHandler.java Fri Feb 20 12:28:04 2009
@@ -121,12 +121,10 @@
     /**
      * Called for each field of a header.
      * 
-     * @param fieldData the raw contents of the field 
-     *        (<code>Field-Name: field value</code>). The value will not be 
-     *        unfolded.
+     * @param field the MIME field.
      * @throws MimeException on processing errors
      */
-    void field(String fieldData) throws MimeException;
+    void field(Field field) throws MimeException;
 
     /**
      * Called when there are no more header fields in a message or body part.

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/EntityStateMachine.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/EntityStateMachine.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/EntityStateMachine.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/EntityStateMachine.java Fri Feb 20 12:28:04 2009
@@ -98,26 +98,6 @@
      * @throws IllegalStateException if a header field cannot be
      *  obtained at the current stage of the parsing process. 
      */
-    String getField() throws IllegalStateException;
-    
-    /**
-     * Returns name of the current header field.
-     * 
-     * @return field name
-     * 
-     * @throws IllegalStateException if a header field cannot be
-     *  obtained at the current stage of the parsing process. 
-     */
-    String getFieldName() throws IllegalStateException;
-
-    /**
-     * Returns value of the current header field.
-     * 
-     * @return field value
-     * 
-     * @throws IllegalStateException if a header field cannot be
-     *  obtained at the current stage of the parsing process. 
-     */
-    String getFieldValue() throws IllegalStateException;
+    Field getField() throws IllegalStateException;
     
 }

Added: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/Field.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/Field.java?rev=746223&view=auto
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/Field.java (added)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/Field.java Fri Feb 20 12:28:04 2009
@@ -0,0 +1,48 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mime4j.parser;
+
+/**
+ * Abstract MIME field.
+ */
+public interface Field {
+    
+    /**
+     * Gets the name of the field (<code>Subject</code>, <code>From</code>, etc).
+     * 
+     * @return the field name.
+     */
+    String getName();
+
+    /**
+     * Gets the unparsed and possibly encoded (see RFC 2047) field body string.
+     * 
+     * @return the unfolded unparsed field body string.
+     */
+    String getBody();
+
+    /**
+     * Gets the original raw field string.
+     * 
+     * @return the original raw field string.
+     */
+    String getRaw();
+    
+}

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeEntity.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeEntity.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeEntity.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeEntity.java Fri Feb 20 12:28:04 2009
@@ -94,7 +94,10 @@
             throw new IllegalStateException("Invalid state: " + stateToString(state));
         }
         skipHeader = true;
-        body.addField("Content-Type", contentType);
+        body.addField(new RawField(
+                "Content-Type", 
+                contentType,
+                "Content-Type: " +contentType));
     }
     
     @Override

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeTokenStream.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeTokenStream.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeTokenStream.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/MimeTokenStream.java Fri Feb 20 12:28:04 2009
@@ -339,31 +339,11 @@
      * @throws IllegalStateException {@link #getState()} returns another
      *   value than {@link #T_FIELD}.
      */
-    public String getField() {
+    public Field getField() {
         return currentStateMachine.getField();
     }
     
     /**
-     * This method is valid, if {@link #getState()} returns {@link #T_FIELD}.
-     * @return String with the fields name.
-     * @throws IllegalStateException {@link #getState()} returns another
-     *   value than {@link #T_FIELD}.
-     */
-    public String getFieldName() {
-        return currentStateMachine.getFieldName();
-    }
-
-    /**
-     * This method is valid, if {@link #getState()} returns {@link #T_FIELD}.
-     * @return String with the fields value.
-     * @throws IllegalStateException {@link #getState()} returns another
-     *   value than {@link #T_FIELD}.
-     */
-    public String getFieldValue() {
-        return currentStateMachine.getFieldValue();
-    }
-
-    /**
      * This method advances the token stream to the next token.
      * @throws IllegalStateException The method has been called, although
      *   {@link #getState()} was already {@link #T_END_OF_STREAM}.

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawEntity.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawEntity.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawEntity.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawEntity.java Fri Feb 20 12:28:04 2009
@@ -71,7 +71,7 @@
     /**
      * This method has no effect and always returns <code>null</code>.
      */
-    public String getField() {
+    public Field getField() {
         return null;
     }
 

Added: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawField.java?rev=746223&view=auto
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawField.java (added)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawField.java Fri Feb 20 12:28:04 2009
@@ -0,0 +1,54 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mime4j.parser;
+
+/**
+ * The basic immutable MIME field.
+ */
+public class RawField implements Field {
+    
+    private final String name;
+    private final String body;
+    private final String raw;
+    
+    public RawField(String name, String body, String raw) {
+        super();
+        this.name = name;
+        this.body = body;
+        this.raw = raw;
+    }
+    
+    public String getName() {
+        return this.name;
+    }
+
+    public String getBody() {
+        return this.body;
+    }
+
+    public String getRaw() {
+        return this.raw;
+    }
+    
+    public String toString() {
+        return this.raw;
+    }
+    
+}

Propchange: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/parser/RawField.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/StringArrayMap.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/StringArrayMap.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/StringArrayMap.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/util/StringArrayMap.java Fri Feb 20 12:28:04 2009
@@ -29,7 +29,7 @@
 import java.util.Map;
 import java.util.NoSuchElementException;
 
-import org.apache.james.mime4j.field.Field;
+import org.apache.james.mime4j.field.AbstractField;
 import org.apache.james.mime4j.message.Header;
 import org.apache.james.mime4j.parser.ContentHandler;
 
@@ -40,7 +40,7 @@
  * <p>
  * Note that this class is not directly used anywhere in Mime4j.
  * Instead a user might choose to use it instead of {@link Header}
- * and {@link Field} in a custom {@link ContentHandler} implementation.
+ * and {@link AbstractField} in a custom {@link ContentHandler} implementation.
  * See also MIME4j-24.
  */
 public class StringArrayMap implements Serializable {

Modified: james/mime4j/trunk/src/test/java/org/apache/james/mime4j/descriptor/BaseTestForBodyDescriptors.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/descriptor/BaseTestForBodyDescriptors.java?rev=746223&r1=746222&r2=746223&view=diff
==============================================================================
--- james/mime4j/trunk/src/test/java/org/apache/james/mime4j/descriptor/BaseTestForBodyDescriptors.java (original)
+++ james/mime4j/trunk/src/test/java/org/apache/james/mime4j/descriptor/BaseTestForBodyDescriptors.java Fri Feb 20 12:28:04 2009
@@ -21,6 +21,7 @@
 
 import org.apache.james.mime4j.descriptor.BodyDescriptor;
 import org.apache.james.mime4j.descriptor.MutableBodyDescriptor;
+import org.apache.james.mime4j.field.AbstractField;
 
 import junit.framework.TestCase;
 
@@ -34,25 +35,25 @@
         MutableBodyDescriptor bd = null;
         
         bd = newBodyDescriptor();
-        bd.addField("Content-Type ", "text/plain; charset=ISO-8859-1; "
-                + "boundary=foo; param1=value1; param2=value2; param3=value3");
+        bd.addField(AbstractField.parse("Content-Type ", "text/plain; charset=ISO-8859-1; "
+                + "boundary=foo; param1=value1; param2=value2; param3=value3"));
         assertEquals(3, bd.getContentTypeParameters().size());
         assertEquals("value1", bd.getContentTypeParameters().get("param1"));
         assertEquals("value2", bd.getContentTypeParameters().get("param2"));
         assertEquals("value3", bd.getContentTypeParameters().get("param3"));
         
         bd = newBodyDescriptor();
-        bd.addField("Content-Type ", "text/plain; param1=value1; param2=value2;"
-                     + " param3=value3");
+        bd.addField(AbstractField.parse("Content-Type ", "text/plain; param1=value1; param2=value2;"
+                     + " param3=value3"));
         assertEquals(3, bd.getContentTypeParameters().size());
         assertEquals("value1", bd.getContentTypeParameters().get("param1"));
         assertEquals("value2", bd.getContentTypeParameters().get("param2"));
         assertEquals("value3", bd.getContentTypeParameters().get("param3"));
         
         bd = newBodyDescriptor();
-        bd.addField("Content-Type ", "text/plain; "
+        bd.addField(AbstractField.parse("Content-Type ", "text/plain; "
                 + "param1= \" value with\tspaces \" ; "
-                + "param2=\"\\\"value4 with escaped \\\" \\\"\";");
+                + "param2=\"\\\"value4 with escaped \\\" \\\"\";"));
         assertEquals(2, bd.getContentTypeParameters().size());
         assertEquals(" value with\tspaces ", bd.getContentTypeParameters().get("param1"));
         assertEquals("\"value4 with escaped \" \"", bd.getContentTypeParameters().get("param2"));
@@ -62,7 +63,7 @@
          * The parameter value should be \n\"
          */
         bd = newBodyDescriptor();
-        bd.addField("Content-Type ", "text/plain; param=\"\\n\\\\\\\"\"");
+        bd.addField(AbstractField.parse("Content-Type ", "text/plain; param=\"\\n\\\\\\\"\""));
         assertEquals(1, bd.getContentTypeParameters().size());
         assertEquals("\\n\\\"", bd.getContentTypeParameters().get("param"));
     }
@@ -74,10 +75,10 @@
          * Make sure that only the first Content-Type header added is used.
          */
         bd = newBodyDescriptor();
-        bd.addField("Content-Type ", "text/plain; charset=ISO-8859-1");
+        bd.addField(AbstractField.parse("Content-Type ", "text/plain; charset=ISO-8859-1"));
         assertEquals("text/plain", bd.getMimeType());
         assertEquals("iso-8859-1", bd.getCharset());
-        bd.addField("Content-Type ", "text/html; charset=us-ascii");
+        bd.addField(AbstractField.parse("Content-Type ", "text/html; charset=us-ascii"));
         assertEquals("text/plain", bd.getMimeType());
         assertEquals("iso-8859-1", bd.getCharset());
     }
@@ -86,32 +87,32 @@
         MutableBodyDescriptor bd = null;
         
         bd = newBodyDescriptor();
-        bd.addField("Content-Type ", "text/PLAIN");
+        bd.addField(AbstractField.parse("Content-Type ", "text/PLAIN"));
         assertEquals("text/plain", bd.getMimeType());
         
         bd = newBodyDescriptor();
-        bd.addField("Content-Type ", "text/PLAIN;");
+        bd.addField(AbstractField.parse("Content-Type ", "text/PLAIN;"));
         assertEquals("text/plain", bd.getMimeType());
         
         bd = newBodyDescriptor();
-        bd.addField("content-type", "   TeXt / html   ");
+        bd.addField(AbstractField.parse("content-type", "   TeXt / html   "));
         assertEquals("text/html", bd.getMimeType());
         
         bd = newBodyDescriptor();
-        bd.addField("CONTENT-TYPE", "   x-app/yada ;  param = yada");
+        bd.addField(AbstractField.parse("CONTENT-TYPE", "   x-app/yada ;  param = yada"));
         assertEquals("x-app/yada", bd.getMimeType());
         
         bd = newBodyDescriptor();
-        bd.addField("CONTENT-TYPE", "   yada");
+        bd.addField(AbstractField.parse("CONTENT-TYPE", "   yada"));
         assertEquals("text/plain", bd.getMimeType());
         
         /*
          * Make sure that only the first Content-Type header added is used.
          */
         bd = newBodyDescriptor();
-        bd.addField("Content-Type ", "text/plain");
+        bd.addField(AbstractField.parse("Content-Type ", "text/plain"));
         assertEquals("text/plain", bd.getMimeType());
-        bd.addField("Content-Type ", "text/html");
+        bd.addField(AbstractField.parse("Content-Type ", "text/html"));
         assertEquals("text/plain", bd.getMimeType());
         
         /*
@@ -121,19 +122,19 @@
         MutableBodyDescriptor parent = null;
         
         parent = newBodyDescriptor();
-        parent.addField("Content-Type", "mutlipart/alternative; boundary=foo");
+        parent.addField(AbstractField.parse("Content-Type", "mutlipart/alternative; boundary=foo"));
         
         child = newBodyDescriptor(parent);
         assertEquals("text/plain", child.getMimeType());
-        child.addField("Content-Type", " child/type");
+        child.addField(AbstractField.parse("Content-Type", " child/type"));
         assertEquals("child/type", child.getMimeType());
         
         parent = newBodyDescriptor();
-        parent.addField("Content-Type", "multipart/digest; boundary=foo");
+        parent.addField(AbstractField.parse("Content-Type", "multipart/digest; boundary=foo"));
         
         child = newBodyDescriptor(parent);
         assertEquals("message/rfc822", child.getMimeType());
-        child.addField("Content-Type", " child/type");
+        child.addField(AbstractField.parse("Content-Type", " child/type"));
         assertEquals("child/type", child.getMimeType());
         
     }
@@ -146,40 +147,40 @@
          */
         bd = newBodyDescriptor();
         assertEquals("us-ascii", bd.getCharset());
-        bd.addField("Content-Type ", "text/type; charset=ISO-8859-1");
+        bd.addField(AbstractField.parse("Content-Type ", "text/type; charset=ISO-8859-1"));
         assertEquals("iso-8859-1", bd.getCharset());
         
         bd = newBodyDescriptor();
         assertEquals("us-ascii", bd.getCharset());
-        bd.addField("Content-Type ", "text/type");
+        bd.addField(AbstractField.parse("Content-Type ", "text/type"));
         assertEquals("us-ascii", bd.getCharset());
         
         /*
          * Test boundary.
          */
         bd = newBodyDescriptor();
-        bd.addField("Content-Type", "text/html; boundary=yada yada");
+        bd.addField(AbstractField.parse("Content-Type", "text/html; boundary=yada yada"));
         assertNull(bd.getBoundary());
 
         bd = newBodyDescriptor();
-        bd.addField("Content-Type", "multipart/yada; boundary=yada");
+        bd.addField(AbstractField.parse("Content-Type", "multipart/yada; boundary=yada"));
         assertEquals("yada", bd.getBoundary());
 
         /*
          * Test some weird parameters.
          */
         bd = newBodyDescriptor();
-        bd.addField("Content-Type", "multipart/yada; boundary=yada yada");
+        bd.addField(AbstractField.parse("Content-Type", "multipart/yada; boundary=yada yada"));
         assertEquals("yada", bd.getBoundary());
         
         bd = newBodyDescriptor();
-        bd.addField("Content-Type", "multipart/yada; boUNdarY= ya:*da; \tcharset\t =  big5");
+        bd.addField(AbstractField.parse("Content-Type", "multipart/yada; boUNdarY= ya:*da; \tcharset\t =  big5"));
         assertEquals("ya:*da", bd.getBoundary());
         assertEquals("big5", bd.getCharset());
         
         bd = newBodyDescriptor();
-        bd.addField("Content-Type", "multipart/yada; boUNdarY= \"ya \\\"\\\"\tda \\\"\"; "
-                            + "\tcharset\t =  \"\\\"hepp\\\"  =us\t-ascii\"");
+        bd.addField(AbstractField.parse("Content-Type", "multipart/yada; boUNdarY= \"ya \\\"\\\"\tda \\\"\"; "
+                            + "\tcharset\t =  \"\\\"hepp\\\"  =us\t-ascii\""));
         assertEquals("ya \"\"\tda \"", bd.getBoundary());
         assertEquals("\"hepp\"  =us\t-ascii", bd.getCharset());
         
@@ -191,23 +192,23 @@
         bd = newBodyDescriptor();
         assertEquals(-1, bd.getContentLength());
 
-        bd.addField("Content-Length", "9901");
+        bd.addField(AbstractField.parse("Content-Length", "9901"));
         assertEquals(9901, bd.getContentLength());
 
         // only the first content-length counts
-        bd.addField("Content-Length", "1239901");
+        bd.addField(AbstractField.parse("Content-Length", "1239901"));
         assertEquals(9901, bd.getContentLength());
     }
     
     public void testDoDefaultToUsAsciiWhenUntyped() throws Exception {
         MutableBodyDescriptor descriptor = newBodyDescriptor();
-        descriptor.addField("To", "me@example.org");
+        descriptor.addField(AbstractField.parse("To", "me@example.org"));
         assertEquals("us-ascii", descriptor.getCharset());
     }
 
     public void testDoNotDefaultToUsAsciiForNonTextTypes() throws Exception {
         MutableBodyDescriptor descriptor = newBodyDescriptor();
-        descriptor.addField("Content-Type", "image/png; name=blob.png");
+        descriptor.addField(AbstractField.parse("Content-Type", "image/png; name=blob.png"));
         assertNull(descriptor.getCharset());
     }
 }