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 2009/12/31 18:52:57 UTC

svn commit: r894910 [1/2] - in /james/mime4j/branches/cycleclean/core/src: main/java/org/apache/james/mime4j/field/ main/java/org/apache/james/mime4j/field/impl/ main/java/org/apache/james/mime4j/message/ main/java/org/apache/james/mime4j/message/impl/...

Author: bago
Date: Thu Dec 31 17:52:56 2009
New Revision: 894910

URL: http://svn.apache.org/viewvc?rev=894910&view=rev
Log:
Moved field implementations and DefaultFieldParser/DelegatingFieldParser/Fields to the field.impl package. Extrapolated their interfaces and created interface placeholders in the original package. (MIME4J-156)
(Entity api should not reference Impl fields: will need further refactoring later)

Added:
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AbstractField.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AbstractField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AddressListFieldImpl.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentDispositionFieldImpl.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTransferEncodingFieldImpl.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTypeFieldImpl.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DateTimeFieldImpl.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DefaultFieldParser.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DelegatingFieldParser.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/Fields.java   (contents, props changed)
      - copied, changed from r894881, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/Fields.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/MailboxFieldImpl.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/MailboxListFieldImpl.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxListField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/UnstructuredFieldImpl.java   (contents, props changed)
      - copied, changed from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java
Removed:
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AbstractField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/Fields.java
Modified:
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxListField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/Entity.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/impl/BodyPart.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/impl/HeaderImpl.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/impl/MessageBuilder.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/impl/MessageImpl.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/impl/SimpleContentHandler.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/field/ContentDispositionFieldTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/field/ContentTransferEncodingFieldTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/field/ContentTypeFieldTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/field/FieldTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/field/FieldsTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/field/UnstructuredFieldTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/message/CopyConstructorTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/message/EntityTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/message/HeaderTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/message/MessageTest.java
    james/mime4j/branches/cycleclean/core/src/test/java/org/apache/james/mime4j/message/MultipartFormTest.java

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java?rev=894910&r1=894909&r2=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java Thu Dec 31 17:52:56 2009
@@ -19,61 +19,13 @@
 
 package org.apache.james.mime4j.field;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.james.mime4j.field.address.AddressList;
 import org.apache.james.mime4j.field.address.parser.ParseException;
-import org.apache.james.mime4j.util.ByteSequence;
 
-/**
- * Address list field such as <code>To</code> or <code>Reply-To</code>.
- */
-public class AddressListField extends AbstractField {
-    private static Log log = LogFactory.getLog(AddressListField.class);
-
-    private boolean parsed = false;
-
-    private AddressList addressList;
-    private ParseException parseException;
-
-    AddressListField(String name, String body, ByteSequence raw) {
-        super(name, body, raw);
-    }
-
-    public AddressList getAddressList() {
-        if (!parsed)
-            parse();
-
-        return addressList;
-    }
-
-    @Override
-    public ParseException getParseException() {
-        if (!parsed)
-            parse();
-
-        return parseException;
-    }
-
-    private void parse() {
-        String body = getBody();
-
-        try {
-            addressList = AddressList.parse(body);
-        } catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = e;
-        }
-
-        parsed = true;
-    }
-
-    static final FieldParser<AddressListField> PARSER = new FieldParser<AddressListField>() {
-        public AddressListField parse(final String name, final String body,
-                final ByteSequence raw) {
-            return new AddressListField(name, body, raw);
-        }
-    };
-}
+public interface AddressListField extends ParsedField {
+
+    public abstract AddressList getAddressList();
+
+    public abstract ParseException getParseException();
+
+}
\ No newline at end of file

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java?rev=894910&r1=894909&r2=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java Thu Dec 31 17:52:56 2009
@@ -1,108 +1,37 @@
-/****************************************************************
- * 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.field;
 
-import java.io.StringReader;
-import java.util.Collections;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
 import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.james.mime4j.field.contentdisposition.parser.ContentDispositionParser;
-import org.apache.james.mime4j.field.contentdisposition.parser.TokenMgrError;
-import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
-import org.apache.james.mime4j.util.ByteSequence;
-
-/**
- * Represents a <code>Content-Disposition</code> field.
- */
-public class ContentDispositionField extends AbstractField {
-    private static Log log = LogFactory.getLog(ContentDispositionField.class);
+public interface ContentDispositionField extends ParsedField {
 
     /** The <code>inline</code> disposition type. */
     public static final String DISPOSITION_TYPE_INLINE = "inline";
-
     /** The <code>attachment</code> disposition type. */
     public static final String DISPOSITION_TYPE_ATTACHMENT = "attachment";
-
     /** The name of the <code>filename</code> parameter. */
     public static final String PARAM_FILENAME = "filename";
-
     /** The name of the <code>creation-date</code> parameter. */
     public static final String PARAM_CREATION_DATE = "creation-date";
-
     /** The name of the <code>modification-date</code> parameter. */
     public static final String PARAM_MODIFICATION_DATE = "modification-date";
-
     /** The name of the <code>read-date</code> parameter. */
     public static final String PARAM_READ_DATE = "read-date";
-
     /** The name of the <code>size</code> parameter. */
     public static final String PARAM_SIZE = "size";
 
-    private boolean parsed = false;
-
-    private String dispositionType = "";
-    private Map<String, String> parameters = new HashMap<String, String>();
-    private ParseException parseException;
-
-    private boolean creationDateParsed;
-    private Date creationDate;
-
-    private boolean modificationDateParsed;
-    private Date modificationDate;
-
-    private boolean readDateParsed;
-    private Date readDate;
-
-    ContentDispositionField(String name, String body, ByteSequence raw) {
-        super(name, body, raw);
-    }
-
     /**
      * Gets the exception that was raised during parsing of the field value, if
      * any; otherwise, null.
      */
-    @Override
-    public ParseException getParseException() {
-        if (!parsed)
-            parse();
-
-        return parseException;
-    }
+    public abstract ParseException getParseException();
 
     /**
      * Gets the disposition type defined in this Content-Disposition field.
      * 
      * @return the disposition type or an empty string if not set.
      */
-    public String getDispositionType() {
-        if (!parsed)
-            parse();
-
-        return dispositionType;
-    }
+    public abstract String getDispositionType();
 
     /**
      * Gets the value of a parameter. Parameter names are case-insensitive.
@@ -111,24 +40,14 @@
      *            the name of the parameter to get.
      * @return the parameter value or <code>null</code> if not set.
      */
-    public String getParameter(String name) {
-        if (!parsed)
-            parse();
-
-        return parameters.get(name.toLowerCase());
-    }
+    public abstract String getParameter(String name);
 
     /**
      * Gets all parameters.
      * 
      * @return the parameters.
      */
-    public Map<String, String> getParameters() {
-        if (!parsed)
-            parse();
-
-        return Collections.unmodifiableMap(parameters);
-    }
+    public abstract Map<String, String> getParameters();
 
     /**
      * Determines if the disposition type of this field matches the given one.
@@ -138,12 +57,7 @@
      * @return <code>true</code> if the disposition type of this field
      *         matches, <code>false</code> otherwise.
      */
-    public boolean isDispositionType(String dispositionType) {
-        if (!parsed)
-            parse();
-
-        return this.dispositionType.equalsIgnoreCase(dispositionType);
-    }
+    public abstract boolean isDispositionType(String dispositionType);
 
     /**
      * Return <code>true</code> if the disposition type of this field is
@@ -152,12 +66,7 @@
      * @return <code>true</code> if the disposition type of this field is
      *         <i>inline</i>, <code>false</code> otherwise.
      */
-    public boolean isInline() {
-        if (!parsed)
-            parse();
-
-        return dispositionType.equals(DISPOSITION_TYPE_INLINE);
-    }
+    public abstract boolean isInline();
 
     /**
      * Return <code>true</code> if the disposition type of this field is
@@ -166,12 +75,7 @@
      * @return <code>true</code> if the disposition type of this field is
      *         <i>attachment</i>, <code>false</code> otherwise.
      */
-    public boolean isAttachment() {
-        if (!parsed)
-            parse();
-
-        return dispositionType.equals(DISPOSITION_TYPE_ATTACHMENT);
-    }
+    public abstract boolean isAttachment();
 
     /**
      * Gets the value of the <code>filename</code> parameter if set.
@@ -179,9 +83,7 @@
      * @return the <code>filename</code> parameter value or <code>null</code>
      *         if not set.
      */
-    public String getFilename() {
-        return getParameter(PARAM_FILENAME);
-    }
+    public abstract String getFilename();
 
     /**
      * Gets the value of the <code>creation-date</code> parameter if set and
@@ -190,14 +92,7 @@
      * @return the <code>creation-date</code> parameter value or
      *         <code>null</code> if not set or invalid.
      */
-    public Date getCreationDate() {
-        if (!creationDateParsed) {
-            creationDate = parseDate(PARAM_CREATION_DATE);
-            creationDateParsed = true;
-        }
-
-        return creationDate;
-    }
+    public abstract Date getCreationDate();
 
     /**
      * Gets the value of the <code>modification-date</code> parameter if set
@@ -206,14 +101,7 @@
      * @return the <code>modification-date</code> parameter value or
      *         <code>null</code> if not set or invalid.
      */
-    public Date getModificationDate() {
-        if (!modificationDateParsed) {
-            modificationDate = parseDate(PARAM_MODIFICATION_DATE);
-            modificationDateParsed = true;
-        }
-
-        return modificationDate;
-    }
+    public abstract Date getModificationDate();
 
     /**
      * Gets the value of the <code>read-date</code> parameter if set and
@@ -222,14 +110,7 @@
      * @return the <code>read-date</code> parameter value or <code>null</code>
      *         if not set or invalid.
      */
-    public Date getReadDate() {
-        if (!readDateParsed) {
-            readDate = parseDate(PARAM_READ_DATE);
-            readDateParsed = true;
-        }
-
-        return readDate;
-    }
+    public abstract Date getReadDate();
 
     /**
      * Gets the value of the <code>size</code> parameter if set and valid.
@@ -237,90 +118,6 @@
      * @return the <code>size</code> parameter value or <code>-1</code> if
      *         not set or invalid.
      */
-    public long getSize() {
-        String value = getParameter(PARAM_SIZE);
-        if (value == null)
-            return -1;
-
-        try {
-            long size = Long.parseLong(value);
-            return size < 0 ? -1 : size;
-        } catch (NumberFormatException e) {
-            return -1;
-        }
-    }
-
-    private Date parseDate(String paramName) {
-        String value = getParameter(paramName);
-        if (value == null) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing " + paramName + " null");
-            }
-            return null;
-        }
-
-        try {
-            return new DateTimeParser(new StringReader(value)).parseAll()
-                    .getDate();
-        } catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing " + paramName + " '" + value + "': "
-                        + e.getMessage());
-            }
-            return null;
-        } catch (org.apache.james.mime4j.field.datetime.parser.TokenMgrError e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing " + paramName + " '" + value + "': "
-                        + e.getMessage());
-            }
-            return null;
-        }
-    }
-
-    private void parse() {
-        String body = getBody();
-
-        ContentDispositionParser parser = new ContentDispositionParser(
-                new StringReader(body));
-        try {
-            parser.parseAll();
-        } catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = e;
-        } catch (TokenMgrError e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = new ParseException(e.getMessage());
-        }
-
-        final String dispositionType = parser.getDispositionType();
-
-        if (dispositionType != null) {
-            this.dispositionType = dispositionType.toLowerCase(Locale.US);
-
-            List<String> paramNames = parser.getParamNames();
-            List<String> paramValues = parser.getParamValues();
-
-            if (paramNames != null && paramValues != null) {
-                final int len = Math.min(paramNames.size(), paramValues.size());
-                for (int i = 0; i < len; i++) {
-                    String paramName = paramNames.get(i).toLowerCase(Locale.US);
-                    String paramValue = paramValues.get(i);
-                    parameters.put(paramName, paramValue);
-                }
-            }
-        }
-
-        parsed = true;
-    }
-
-    static final FieldParser<ContentDispositionField> PARSER = new FieldParser<ContentDispositionField>() {
-        public ContentDispositionField parse(final String name, final String body,
-                final ByteSequence raw) {
-            return new ContentDispositionField(name, body, raw);
-        }
-    };
-}
+    public abstract long getSize();
+
+}
\ No newline at end of file

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java?rev=894910&r1=894909&r2=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java Thu Dec 31 17:52:56 2009
@@ -19,47 +19,13 @@
 
 package org.apache.james.mime4j.field;
 
-import org.apache.james.mime4j.util.ByteSequence;
-import org.apache.james.mime4j.util.MimeUtil;
-
-/**
- * Represents a <code>Content-Transfer-Encoding</code> field.
- */
-public class ContentTransferEncodingField extends AbstractField {
-    private String encoding;
-
-    ContentTransferEncodingField(String name, String body, ByteSequence raw) {
-        super(name, body, raw);
-        encoding = body.trim().toLowerCase();
-    }
+public interface ContentTransferEncodingField extends ParsedField {
 
     /**
      * Gets the encoding defined in this field.
      * 
      * @return the encoding or an empty string if not set.
      */
-    public String getEncoding() {
-        return encoding;
-    }
-
-    /**
-     * Gets the encoding of the given field if. Returns the default
-     * <code>7bit</code> if not set or if <code>f</code> is
-     * <code>null</code>.
-     * 
-     * @return the encoding.
-     */
-    public static String getEncoding(ContentTransferEncodingField f) {
-        if (f != null && f.getEncoding().length() != 0) {
-            return f.getEncoding();
-        }
-        return MimeUtil.ENC_7BIT;
-    }
+    public abstract String getEncoding();
 
-    static final FieldParser<ContentTransferEncodingField> PARSER = new FieldParser<ContentTransferEncodingField>() {
-        public ContentTransferEncodingField parse(final String name, final String body,
-                final ByteSequence raw) {
-            return new ContentTransferEncodingField(name, body, raw);
-        }
-    };
-}
+}
\ No newline at end of file

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java?rev=894910&r1=894909&r2=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java Thu Dec 31 17:52:56 2009
@@ -19,76 +19,37 @@
 
 package org.apache.james.mime4j.field;
 
-import java.io.StringReader;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-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.util.ByteSequence;
 
-/**
- * Represents a <code>Content-Type</code> field.
- */
-public class ContentTypeField extends AbstractField {
-    private static Log log = LogFactory.getLog(ContentTypeField.class);
+public interface ContentTypeField extends ParsedField {
 
     /** The prefix of all <code>multipart</code> MIME types. */
     public static final String TYPE_MULTIPART_PREFIX = "multipart/";
-
     /** The <code>multipart/digest</code> MIME type. */
     public static final String TYPE_MULTIPART_DIGEST = "multipart/digest";
-
     /** The <code>text/plain</code> MIME type. */
     public static final String TYPE_TEXT_PLAIN = "text/plain";
-
     /** The <code>message/rfc822</code> MIME type. */
     public static final String TYPE_MESSAGE_RFC822 = "message/rfc822";
-
     /** The name of the <code>boundary</code> parameter. */
     public static final String PARAM_BOUNDARY = "boundary";
-
     /** The name of the <code>charset</code> parameter. */
     public static final String PARAM_CHARSET = "charset";
 
-    private boolean parsed = false;
-
-    private String mimeType = "";
-    private Map<String, String> parameters = new HashMap<String, String>();
-    private ParseException parseException;
-
-    ContentTypeField(String name, String body, ByteSequence raw) {
-        super(name, body, raw);
-    }
-
     /**
      * Gets the exception that was raised during parsing of the field value, if
      * any; otherwise, null.
      */
-    @Override
-    public ParseException getParseException() {
-        if (!parsed)
-            parse();
-
-        return parseException;
-    }
+    public abstract ParseException getParseException();
 
     /**
      * Gets the MIME type defined in this Content-Type field.
      * 
      * @return the MIME type or an empty string if not set.
      */
-    public String getMimeType() {
-        if (!parsed)
-            parse();
-
-        return mimeType;
-    }
+    public abstract String getMimeType();
 
     /**
      * Gets the value of a parameter. Parameter names are case-insensitive.
@@ -97,24 +58,14 @@
      *            the name of the parameter to get.
      * @return the parameter value or <code>null</code> if not set.
      */
-    public String getParameter(String name) {
-        if (!parsed)
-            parse();
-
-        return parameters.get(name.toLowerCase());
-    }
+    public abstract String getParameter(String name);
 
     /**
      * Gets all parameters.
      * 
      * @return the parameters.
      */
-    public Map<String, String> getParameters() {
-        if (!parsed)
-            parse();
-
-        return Collections.unmodifiableMap(parameters);
-    }
+    public abstract Map<String, String> getParameters();
 
     /**
      * Determines if the MIME type of this field matches the given one.
@@ -124,12 +75,7 @@
      * @return <code>true</code> if the MIME type of this field matches,
      *         <code>false</code> otherwise.
      */
-    public boolean isMimeType(String mimeType) {
-        if (!parsed)
-            parse();
-
-        return this.mimeType.equalsIgnoreCase(mimeType);
-    }
+    public abstract boolean isMimeType(String mimeType);
 
     /**
      * Determines if the MIME type of this field is <code>multipart/*</code>.
@@ -138,12 +84,7 @@
      *         <code>multipart/*</code> MIME type, <code>false</code>
      *         otherwise.
      */
-    public boolean isMultipart() {
-        if (!parsed)
-            parse();
-
-        return mimeType.startsWith(TYPE_MULTIPART_PREFIX);
-    }
+    public abstract boolean isMultipart();
 
     /**
      * Gets the value of the <code>boundary</code> parameter if set.
@@ -151,9 +92,7 @@
      * @return the <code>boundary</code> parameter value or <code>null</code>
      *         if not set.
      */
-    public String getBoundary() {
-        return getParameter(PARAM_BOUNDARY);
-    }
+    public abstract String getBoundary();
 
     /**
      * Gets the value of the <code>charset</code> parameter if set.
@@ -161,98 +100,6 @@
      * @return the <code>charset</code> parameter value or <code>null</code>
      *         if not set.
      */
-    public String getCharset() {
-        return getParameter(PARAM_CHARSET);
-    }
-
-    /**
-     * Gets the MIME type defined in the child's Content-Type field or derives a
-     * MIME type from the parent if child is <code>null</code> or hasn't got a
-     * MIME type value set. If child's MIME type is multipart but no boundary
-     * has been set the MIME type of child will be derived from the parent.
-     * 
-     * @param child
-     *            the child.
-     * @param parent
-     *            the parent.
-     * @return the MIME type.
-     */
-    public static String getMimeType(ContentTypeField child,
-            ContentTypeField parent) {
-        if (child == null || child.getMimeType().length() == 0
-                || child.isMultipart() && child.getBoundary() == null) {
-
-            if (parent != null && parent.isMimeType(TYPE_MULTIPART_DIGEST)) {
-                return TYPE_MESSAGE_RFC822;
-            } else {
-                return TYPE_TEXT_PLAIN;
-            }
-        }
-
-        return child.getMimeType();
-    }
-
-    /**
-     * Gets the value of the <code>charset</code> parameter if set for the
-     * given field. Returns the default <code>us-ascii</code> if not set or if
-     * <code>f</code> is <code>null</code>.
-     * 
-     * @return the <code>charset</code> parameter value.
-     */
-    public static String getCharset(ContentTypeField f) {
-        if (f != null) {
-            String charset = f.getCharset();
-            if (charset != null && charset.length() > 0) {
-                return charset;
-            }
-        }
-        return "us-ascii";
-    }
-
-    private void parse() {
-        String body = getBody();
-
-        ContentTypeParser parser = new ContentTypeParser(new StringReader(body));
-        try {
-            parser.parseAll();
-        } catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = e;
-        } catch (TokenMgrError e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = new ParseException(e.getMessage());
-        }
-
-        final String type = parser.getType();
-        final String subType = parser.getSubType();
-
-        if (type != null && subType != null) {
-            mimeType = (type + "/" + subType).toLowerCase();
-
-            List<String> paramNames = parser.getParamNames();
-            List<String> paramValues = parser.getParamValues();
-
-            if (paramNames != null && paramValues != null) {
-                final int len = Math.min(paramNames.size(), paramValues.size());
-                for (int i = 0; i < len; i++) {
-                    String paramName = paramNames.get(i).toLowerCase();
-                    String paramValue = paramValues.get(i);
-                    parameters.put(paramName, paramValue);
-                }
-            }
-        }
-
-        parsed = true;
-    }
-
-    static final FieldParser<ContentTypeField> PARSER = new FieldParser<ContentTypeField>() {
-        public ContentTypeField parse(final String name, final String body,
-                final ByteSequence raw) {
-            return new ContentTypeField(name, body, raw);
-        }
-    };
-}
+    public abstract String getCharset();
+
+}
\ No newline at end of file

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java?rev=894910&r1=894909&r2=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java Thu Dec 31 17:52:56 2009
@@ -1,89 +1,13 @@
-/****************************************************************
- * 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.field;
 
-import java.io.StringReader;
 import java.util.Date;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-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.util.ByteSequence;
 
-/**
- * Date-time field such as <code>Date</code> or <code>Resent-Date</code>.
- */
-public class DateTimeField extends AbstractField {
-    private static Log log = LogFactory.getLog(DateTimeField.class);
-
-    private boolean parsed = false;
-
-    private Date date;
-    private ParseException parseException;
-
-    DateTimeField(String name, String body, ByteSequence raw) {
-        super(name, body, raw);
-    }
-
-    public Date getDate() {
-        if (!parsed)
-            parse();
-
-        return date;
-    }
-
-    @Override
-    public ParseException getParseException() {
-        if (!parsed)
-            parse();
-
-        return parseException;
-    }
-
-    private void parse() {
-        String body = getBody();
-
-        try {
-            date = new DateTimeParser(new StringReader(body)).parseAll()
-                    .getDate();
-        } catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = e;
-        } catch (TokenMgrError e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = new ParseException(e.getMessage());
-        }
-
-        parsed = true;
-    }
-
-    static final FieldParser<DateTimeField> PARSER = new FieldParser<DateTimeField>() {
-        public DateTimeField parse(final String name, final String body,
-                final ByteSequence raw) {
-            return new DateTimeField(name, body, raw);
-        }
-    };
-}
+public interface DateTimeField extends ParsedField {
+
+    public abstract Date getDate();
+
+    public abstract ParseException getParseException();
+
+}
\ No newline at end of file

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxField.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxField.java?rev=894910&r1=894909&r2=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxField.java Thu Dec 31 17:52:56 2009
@@ -19,66 +19,13 @@
 
 package org.apache.james.mime4j.field;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.james.mime4j.field.address.AddressList;
 import org.apache.james.mime4j.field.address.Mailbox;
-import org.apache.james.mime4j.field.address.MailboxList;
 import org.apache.james.mime4j.field.address.parser.ParseException;
-import org.apache.james.mime4j.util.ByteSequence;
 
-/**
- * Mailbox field such as <code>Sender</code> or <code>Resent-Sender</code>.
- */
-public class MailboxField extends AbstractField {
-    private static Log log = LogFactory.getLog(MailboxField.class);
-
-    private boolean parsed = false;
-
-    private Mailbox mailbox;
-    private ParseException parseException;
-
-    MailboxField(final String name, final String body, final ByteSequence raw) {
-        super(name, body, raw);
-    }
-
-    public Mailbox getMailbox() {
-        if (!parsed)
-            parse();
-
-        return mailbox;
-    }
-
-    @Override
-    public ParseException getParseException() {
-        if (!parsed)
-            parse();
-
-        return parseException;
-    }
-
-    private void parse() {
-        String body = getBody();
-
-        try {
-            MailboxList mailboxList = AddressList.parse(body).flatten();
-            if (mailboxList.size() > 0) {
-                mailbox = mailboxList.get(0);
-            }
-        } catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = e;
-        }
-
-        parsed = true;
-    }
-
-    static final FieldParser<MailboxField> PARSER = new FieldParser<MailboxField>() {
-        public MailboxField parse(final String name, final String body,
-                final ByteSequence raw) {
-            return new MailboxField(name, body, raw);
-        }
-    };
-}
+public interface MailboxField extends ParsedField {
+
+    public abstract Mailbox getMailbox();
+
+    public abstract ParseException getParseException();
+
+}
\ No newline at end of file

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxListField.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxListField.java?rev=894910&r1=894909&r2=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxListField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/MailboxListField.java Thu Dec 31 17:52:56 2009
@@ -19,62 +19,13 @@
 
 package org.apache.james.mime4j.field;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.james.mime4j.field.address.AddressList;
 import org.apache.james.mime4j.field.address.MailboxList;
 import org.apache.james.mime4j.field.address.parser.ParseException;
-import org.apache.james.mime4j.util.ByteSequence;
 
-/**
- * Mailbox-list field such as <code>From</code> or <code>Resent-From</code>.
- */
-public class MailboxListField extends AbstractField {
-    private static Log log = LogFactory.getLog(MailboxListField.class);
-
-    private boolean parsed = false;
-
-    private MailboxList mailboxList;
-    private ParseException parseException;
-
-    MailboxListField(final String name, final String body, final ByteSequence raw) {
-        super(name, body, raw);
-    }
-
-    public MailboxList getMailboxList() {
-        if (!parsed)
-            parse();
-
-        return mailboxList;
-    }
-
-    @Override
-    public ParseException getParseException() {
-        if (!parsed)
-            parse();
-
-        return parseException;
-    }
-
-    private void parse() {
-        String body = getBody();
-
-        try {
-            mailboxList = AddressList.parse(body).flatten();
-        } catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': " + e.getMessage());
-            }
-            parseException = e;
-        }
-
-        parsed = true;
-    }
-
-    static final FieldParser<MailboxListField> PARSER = new FieldParser<MailboxListField>() {
-        public MailboxListField parse(final String name, final String body,
-                final ByteSequence raw) {
-            return new MailboxListField(name, body, raw);
-        }
-    };
-}
+public interface MailboxListField extends ParsedField {
+
+    public abstract MailboxList getMailboxList();
+
+    public abstract ParseException getParseException();
+
+}
\ No newline at end of file

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java?rev=894910&r1=894909&r2=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/UnstructuredField.java Thu Dec 31 17:52:56 2009
@@ -19,40 +19,8 @@
 
 package org.apache.james.mime4j.field;
 
-import org.apache.james.mime4j.codec.DecoderUtil;
-import org.apache.james.mime4j.util.ByteSequence;
+public interface UnstructuredField extends ParsedField {
 
-/**
- * Simple unstructured field such as <code>Subject</code>.
- */
-public class UnstructuredField extends AbstractField {
-    private boolean parsed = false;
+    public abstract String getValue();
 
-    private String value;
-
-    UnstructuredField(String name, String body, ByteSequence raw) {
-        super(name, body, raw);
-    }
-
-    public String getValue() {
-        if (!parsed)
-            parse();
-
-        return value;
-    }
-
-    private void parse() {
-        String body = getBody();
-
-        value = DecoderUtil.decodeEncodedWords(body);
-
-        parsed = true;
-    }
-
-    static final FieldParser<UnstructuredField> PARSER = new FieldParser<UnstructuredField>() {
-        public UnstructuredField parse(final String name, final String body,
-                final ByteSequence raw) {
-            return new UnstructuredField(name, body, raw);
-        }
-    };
-}
+}
\ No newline at end of file

Copied: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AbstractField.java (from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AbstractField.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AbstractField.java?p2=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AbstractField.java&p1=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AbstractField.java&r1=894746&r2=894910&rev=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AbstractField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AbstractField.java Thu Dec 31 17:52:56 2009
@@ -17,8 +17,10 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.field;
+package org.apache.james.mime4j.field.impl;
 
+import org.apache.james.mime4j.field.ParseException;
+import org.apache.james.mime4j.field.ParsedField;
 import org.apache.james.mime4j.util.ByteSequence;
 
 /**

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AbstractField.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AbstractField.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AddressListFieldImpl.java (from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AddressListFieldImpl.java?p2=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AddressListFieldImpl.java&p1=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java&r1=894746&r2=894910&rev=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/AddressListField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AddressListFieldImpl.java Thu Dec 31 17:52:56 2009
@@ -17,10 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.field;
+package org.apache.james.mime4j.field.impl;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.james.mime4j.field.FieldParser;
 import org.apache.james.mime4j.field.address.AddressList;
 import org.apache.james.mime4j.field.address.parser.ParseException;
 import org.apache.james.mime4j.util.ByteSequence;
@@ -28,18 +29,21 @@
 /**
  * Address list field such as <code>To</code> or <code>Reply-To</code>.
  */
-public class AddressListField extends AbstractField {
-    private static Log log = LogFactory.getLog(AddressListField.class);
+public class AddressListFieldImpl extends AbstractField implements org.apache.james.mime4j.field.AddressListField {
+    private static Log log = LogFactory.getLog(AddressListFieldImpl.class);
 
     private boolean parsed = false;
 
     private AddressList addressList;
     private ParseException parseException;
 
-    AddressListField(String name, String body, ByteSequence raw) {
+    AddressListFieldImpl(String name, String body, ByteSequence raw) {
         super(name, body, raw);
     }
 
+    /**
+     * @see org.apache.james.mime4j.field.AddressListField#getAddressList()
+     */
     public AddressList getAddressList() {
         if (!parsed)
             parse();
@@ -47,6 +51,9 @@
         return addressList;
     }
 
+    /**
+     * @see org.apache.james.mime4j.field.AddressListField#getParseException()
+     */
     @Override
     public ParseException getParseException() {
         if (!parsed)
@@ -70,10 +77,10 @@
         parsed = true;
     }
 
-    static final FieldParser<AddressListField> PARSER = new FieldParser<AddressListField>() {
-        public AddressListField parse(final String name, final String body,
+    static final FieldParser<AddressListFieldImpl> PARSER = new FieldParser<AddressListFieldImpl>() {
+        public AddressListFieldImpl parse(final String name, final String body,
                 final ByteSequence raw) {
-            return new AddressListField(name, body, raw);
+            return new AddressListFieldImpl(name, body, raw);
         }
     };
 }

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/AddressListFieldImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentDispositionFieldImpl.java (from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentDispositionFieldImpl.java?p2=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentDispositionFieldImpl.java&p1=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java&r1=894746&r2=894910&rev=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentDispositionField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentDispositionFieldImpl.java Thu Dec 31 17:52:56 2009
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.field;
+package org.apache.james.mime4j.field.impl;
 
 import java.io.StringReader;
 import java.util.Collections;
@@ -29,7 +29,9 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.james.mime4j.field.FieldParser;
 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.util.ByteSequence;
@@ -37,29 +39,8 @@
 /**
  * Represents a <code>Content-Disposition</code> field.
  */
-public class ContentDispositionField extends AbstractField {
-    private static Log log = LogFactory.getLog(ContentDispositionField.class);
-
-    /** The <code>inline</code> disposition type. */
-    public static final String DISPOSITION_TYPE_INLINE = "inline";
-
-    /** The <code>attachment</code> disposition type. */
-    public static final String DISPOSITION_TYPE_ATTACHMENT = "attachment";
-
-    /** The name of the <code>filename</code> parameter. */
-    public static final String PARAM_FILENAME = "filename";
-
-    /** The name of the <code>creation-date</code> parameter. */
-    public static final String PARAM_CREATION_DATE = "creation-date";
-
-    /** The name of the <code>modification-date</code> parameter. */
-    public static final String PARAM_MODIFICATION_DATE = "modification-date";
-
-    /** The name of the <code>read-date</code> parameter. */
-    public static final String PARAM_READ_DATE = "read-date";
-
-    /** The name of the <code>size</code> parameter. */
-    public static final String PARAM_SIZE = "size";
+public class ContentDispositionFieldImpl extends AbstractField implements org.apache.james.mime4j.field.ContentDispositionField {
+    private static Log log = LogFactory.getLog(ContentDispositionFieldImpl.class);
 
     private boolean parsed = false;
 
@@ -76,7 +57,7 @@
     private boolean readDateParsed;
     private Date readDate;
 
-    ContentDispositionField(String name, String body, ByteSequence raw) {
+    ContentDispositionFieldImpl(String name, String body, ByteSequence raw) {
         super(name, body, raw);
     }
 
@@ -93,9 +74,7 @@
     }
 
     /**
-     * Gets the disposition type defined in this Content-Disposition field.
-     * 
-     * @return the disposition type or an empty string if not set.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#getDispositionType()
      */
     public String getDispositionType() {
         if (!parsed)
@@ -105,11 +84,7 @@
     }
 
     /**
-     * Gets the value of a parameter. Parameter names are case-insensitive.
-     * 
-     * @param name
-     *            the name of the parameter to get.
-     * @return the parameter value or <code>null</code> if not set.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#getParameter(java.lang.String)
      */
     public String getParameter(String name) {
         if (!parsed)
@@ -119,9 +94,7 @@
     }
 
     /**
-     * Gets all parameters.
-     * 
-     * @return the parameters.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#getParameters()
      */
     public Map<String, String> getParameters() {
         if (!parsed)
@@ -131,12 +104,7 @@
     }
 
     /**
-     * Determines if the disposition type of this field matches the given one.
-     * 
-     * @param dispositionType
-     *            the disposition type to match against.
-     * @return <code>true</code> if the disposition type of this field
-     *         matches, <code>false</code> otherwise.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#isDispositionType(java.lang.String)
      */
     public boolean isDispositionType(String dispositionType) {
         if (!parsed)
@@ -146,11 +114,7 @@
     }
 
     /**
-     * Return <code>true</code> if the disposition type of this field is
-     * <i>inline</i>, <code>false</code> otherwise.
-     * 
-     * @return <code>true</code> if the disposition type of this field is
-     *         <i>inline</i>, <code>false</code> otherwise.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#isInline()
      */
     public boolean isInline() {
         if (!parsed)
@@ -160,11 +124,7 @@
     }
 
     /**
-     * Return <code>true</code> if the disposition type of this field is
-     * <i>attachment</i>, <code>false</code> otherwise.
-     * 
-     * @return <code>true</code> if the disposition type of this field is
-     *         <i>attachment</i>, <code>false</code> otherwise.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#isAttachment()
      */
     public boolean isAttachment() {
         if (!parsed)
@@ -174,21 +134,14 @@
     }
 
     /**
-     * Gets the value of the <code>filename</code> parameter if set.
-     * 
-     * @return the <code>filename</code> parameter value or <code>null</code>
-     *         if not set.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#getFilename()
      */
     public String getFilename() {
         return getParameter(PARAM_FILENAME);
     }
 
     /**
-     * Gets the value of the <code>creation-date</code> parameter if set and
-     * valid.
-     * 
-     * @return the <code>creation-date</code> parameter value or
-     *         <code>null</code> if not set or invalid.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#getCreationDate()
      */
     public Date getCreationDate() {
         if (!creationDateParsed) {
@@ -200,11 +153,7 @@
     }
 
     /**
-     * Gets the value of the <code>modification-date</code> parameter if set
-     * and valid.
-     * 
-     * @return the <code>modification-date</code> parameter value or
-     *         <code>null</code> if not set or invalid.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#getModificationDate()
      */
     public Date getModificationDate() {
         if (!modificationDateParsed) {
@@ -216,11 +165,7 @@
     }
 
     /**
-     * Gets the value of the <code>read-date</code> parameter if set and
-     * valid.
-     * 
-     * @return the <code>read-date</code> parameter value or <code>null</code>
-     *         if not set or invalid.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#getReadDate()
      */
     public Date getReadDate() {
         if (!readDateParsed) {
@@ -232,10 +177,7 @@
     }
 
     /**
-     * Gets the value of the <code>size</code> parameter if set and valid.
-     * 
-     * @return the <code>size</code> parameter value or <code>-1</code> if
-     *         not set or invalid.
+     * @see org.apache.james.mime4j.field.ContentDispositionField#getSize()
      */
     public long getSize() {
         String value = getParameter(PARAM_SIZE);
@@ -262,7 +204,7 @@
         try {
             return new DateTimeParser(new StringReader(value)).parseAll()
                     .getDate();
-        } catch (ParseException e) {
+        } catch (org.apache.james.mime4j.field.datetime.parser.ParseException e) {
             if (log.isDebugEnabled()) {
                 log.debug("Parsing " + paramName + " '" + value + "': "
                         + e.getMessage());
@@ -317,10 +259,10 @@
         parsed = true;
     }
 
-    static final FieldParser<ContentDispositionField> PARSER = new FieldParser<ContentDispositionField>() {
-        public ContentDispositionField parse(final String name, final String body,
+    static final FieldParser<ContentDispositionFieldImpl> PARSER = new FieldParser<ContentDispositionFieldImpl>() {
+        public ContentDispositionFieldImpl parse(final String name, final String body,
                 final ByteSequence raw) {
-            return new ContentDispositionField(name, body, raw);
+            return new ContentDispositionFieldImpl(name, body, raw);
         }
     };
 }

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentDispositionFieldImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTransferEncodingFieldImpl.java (from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTransferEncodingFieldImpl.java?p2=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTransferEncodingFieldImpl.java&p1=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java&r1=894746&r2=894910&rev=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTransferEncodingField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTransferEncodingFieldImpl.java Thu Dec 31 17:52:56 2009
@@ -17,26 +17,26 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.field;
+package org.apache.james.mime4j.field.impl;
 
+import org.apache.james.mime4j.field.ContentTransferEncodingField;
+import org.apache.james.mime4j.field.FieldParser;
 import org.apache.james.mime4j.util.ByteSequence;
 import org.apache.james.mime4j.util.MimeUtil;
 
 /**
  * Represents a <code>Content-Transfer-Encoding</code> field.
  */
-public class ContentTransferEncodingField extends AbstractField {
+public class ContentTransferEncodingFieldImpl extends AbstractField implements ContentTransferEncodingField {
     private String encoding;
 
-    ContentTransferEncodingField(String name, String body, ByteSequence raw) {
+    ContentTransferEncodingFieldImpl(String name, String body, ByteSequence raw) {
         super(name, body, raw);
         encoding = body.trim().toLowerCase();
     }
 
     /**
-     * Gets the encoding defined in this field.
-     * 
-     * @return the encoding or an empty string if not set.
+     * @see org.apache.james.mime4j.field.ContentTransferEncodingField#getEncoding()
      */
     public String getEncoding() {
         return encoding;
@@ -56,10 +56,10 @@
         return MimeUtil.ENC_7BIT;
     }
 
-    static final FieldParser<ContentTransferEncodingField> PARSER = new FieldParser<ContentTransferEncodingField>() {
-        public ContentTransferEncodingField parse(final String name, final String body,
+    static final FieldParser<ContentTransferEncodingFieldImpl> PARSER = new FieldParser<ContentTransferEncodingFieldImpl>() {
+        public ContentTransferEncodingFieldImpl parse(final String name, final String body,
                 final ByteSequence raw) {
-            return new ContentTransferEncodingField(name, body, raw);
+            return new ContentTransferEncodingFieldImpl(name, body, raw);
         }
     };
 }

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTransferEncodingFieldImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTypeFieldImpl.java (from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTypeFieldImpl.java?p2=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTypeFieldImpl.java&p1=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java&r1=894746&r2=894910&rev=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/ContentTypeField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTypeFieldImpl.java Thu Dec 31 17:52:56 2009
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.field;
+package org.apache.james.mime4j.field.impl;
 
 import java.io.StringReader;
 import java.util.Collections;
@@ -27,6 +27,8 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.james.mime4j.field.ContentTypeField;
+import org.apache.james.mime4j.field.FieldParser;
 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;
@@ -35,26 +37,8 @@
 /**
  * Represents a <code>Content-Type</code> field.
  */
-public class ContentTypeField extends AbstractField {
-    private static Log log = LogFactory.getLog(ContentTypeField.class);
-
-    /** The prefix of all <code>multipart</code> MIME types. */
-    public static final String TYPE_MULTIPART_PREFIX = "multipart/";
-
-    /** The <code>multipart/digest</code> MIME type. */
-    public static final String TYPE_MULTIPART_DIGEST = "multipart/digest";
-
-    /** The <code>text/plain</code> MIME type. */
-    public static final String TYPE_TEXT_PLAIN = "text/plain";
-
-    /** The <code>message/rfc822</code> MIME type. */
-    public static final String TYPE_MESSAGE_RFC822 = "message/rfc822";
-
-    /** The name of the <code>boundary</code> parameter. */
-    public static final String PARAM_BOUNDARY = "boundary";
-
-    /** The name of the <code>charset</code> parameter. */
-    public static final String PARAM_CHARSET = "charset";
+public class ContentTypeFieldImpl extends AbstractField implements ContentTypeField {
+    private static Log log = LogFactory.getLog(ContentTypeFieldImpl.class);
 
     private boolean parsed = false;
 
@@ -62,13 +46,12 @@
     private Map<String, String> parameters = new HashMap<String, String>();
     private ParseException parseException;
 
-    ContentTypeField(String name, String body, ByteSequence raw) {
+    ContentTypeFieldImpl(String name, String body, ByteSequence raw) {
         super(name, body, raw);
     }
 
     /**
-     * Gets the exception that was raised during parsing of the field value, if
-     * any; otherwise, null.
+     * @see org.apache.james.mime4j.field.impl.ContentTypeField#getParseException()
      */
     @Override
     public ParseException getParseException() {
@@ -79,9 +62,7 @@
     }
 
     /**
-     * Gets the MIME type defined in this Content-Type field.
-     * 
-     * @return the MIME type or an empty string if not set.
+     * @see org.apache.james.mime4j.field.ContentTypeField#getMimeType()
      */
     public String getMimeType() {
         if (!parsed)
@@ -91,11 +72,7 @@
     }
 
     /**
-     * Gets the value of a parameter. Parameter names are case-insensitive.
-     * 
-     * @param name
-     *            the name of the parameter to get.
-     * @return the parameter value or <code>null</code> if not set.
+     * @see org.apache.james.mime4j.field.ContentTypeField#getParameter(java.lang.String)
      */
     public String getParameter(String name) {
         if (!parsed)
@@ -105,9 +82,7 @@
     }
 
     /**
-     * Gets all parameters.
-     * 
-     * @return the parameters.
+     * @see org.apache.james.mime4j.field.ContentTypeField#getParameters()
      */
     public Map<String, String> getParameters() {
         if (!parsed)
@@ -117,12 +92,7 @@
     }
 
     /**
-     * Determines if the MIME type of this field matches the given one.
-     * 
-     * @param mimeType
-     *            the MIME type to match against.
-     * @return <code>true</code> if the MIME type of this field matches,
-     *         <code>false</code> otherwise.
+     * @see org.apache.james.mime4j.field.ContentTypeField#isMimeType(java.lang.String)
      */
     public boolean isMimeType(String mimeType) {
         if (!parsed)
@@ -132,11 +102,7 @@
     }
 
     /**
-     * Determines if the MIME type of this field is <code>multipart/*</code>.
-     * 
-     * @return <code>true</code> if this field is has a
-     *         <code>multipart/*</code> MIME type, <code>false</code>
-     *         otherwise.
+     * @see org.apache.james.mime4j.field.ContentTypeField#isMultipart()
      */
     public boolean isMultipart() {
         if (!parsed)
@@ -146,20 +112,14 @@
     }
 
     /**
-     * Gets the value of the <code>boundary</code> parameter if set.
-     * 
-     * @return the <code>boundary</code> parameter value or <code>null</code>
-     *         if not set.
+     * @see org.apache.james.mime4j.field.ContentTypeField#getBoundary()
      */
     public String getBoundary() {
         return getParameter(PARAM_BOUNDARY);
     }
 
     /**
-     * Gets the value of the <code>charset</code> parameter if set.
-     * 
-     * @return the <code>charset</code> parameter value or <code>null</code>
-     *         if not set.
+     * @see org.apache.james.mime4j.field.ContentTypeField#getCharset()
      */
     public String getCharset() {
         return getParameter(PARAM_CHARSET);
@@ -249,10 +209,10 @@
         parsed = true;
     }
 
-    static final FieldParser<ContentTypeField> PARSER = new FieldParser<ContentTypeField>() {
-        public ContentTypeField parse(final String name, final String body,
+    static final FieldParser<ContentTypeFieldImpl> PARSER = new FieldParser<ContentTypeFieldImpl>() {
+        public ContentTypeFieldImpl parse(final String name, final String body,
                 final ByteSequence raw) {
-            return new ContentTypeField(name, body, raw);
+            return new ContentTypeFieldImpl(name, body, raw);
         }
     };
 }

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/ContentTypeFieldImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DateTimeFieldImpl.java (from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DateTimeFieldImpl.java?p2=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DateTimeFieldImpl.java&p1=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java&r1=894746&r2=894910&rev=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DateTimeField.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DateTimeFieldImpl.java Thu Dec 31 17:52:56 2009
@@ -17,13 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.field;
+package org.apache.james.mime4j.field.impl;
 
 import java.io.StringReader;
 import java.util.Date;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.james.mime4j.field.FieldParser;
 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;
@@ -32,18 +33,21 @@
 /**
  * Date-time field such as <code>Date</code> or <code>Resent-Date</code>.
  */
-public class DateTimeField extends AbstractField {
-    private static Log log = LogFactory.getLog(DateTimeField.class);
+public class DateTimeFieldImpl extends AbstractField implements org.apache.james.mime4j.field.DateTimeField {
+    private static Log log = LogFactory.getLog(DateTimeFieldImpl.class);
 
     private boolean parsed = false;
 
     private Date date;
     private ParseException parseException;
 
-    DateTimeField(String name, String body, ByteSequence raw) {
+    DateTimeFieldImpl(String name, String body, ByteSequence raw) {
         super(name, body, raw);
     }
 
+    /**
+     * @see org.apache.james.mime4j.field.DateTimeField#getDate()
+     */
     public Date getDate() {
         if (!parsed)
             parse();
@@ -51,6 +55,9 @@
         return date;
     }
 
+    /**
+     * @see org.apache.james.mime4j.field.DateTimeField#getParseException()
+     */
     @Override
     public ParseException getParseException() {
         if (!parsed)
@@ -80,10 +87,10 @@
         parsed = true;
     }
 
-    static final FieldParser<DateTimeField> PARSER = new FieldParser<DateTimeField>() {
-        public DateTimeField parse(final String name, final String body,
+    static final FieldParser<DateTimeFieldImpl> PARSER = new FieldParser<DateTimeFieldImpl>() {
+        public DateTimeFieldImpl parse(final String name, final String body,
                 final ByteSequence raw) {
-            return new DateTimeField(name, body, raw);
+            return new DateTimeFieldImpl(name, body, raw);
         }
     };
 }

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DateTimeFieldImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DefaultFieldParser.java (from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DefaultFieldParser.java?p2=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DefaultFieldParser.java&p1=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java&r1=894746&r2=894910&rev=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DefaultFieldParser.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DefaultFieldParser.java Thu Dec 31 17:52:56 2009
@@ -17,9 +17,20 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.field;
+package org.apache.james.mime4j.field.impl;
 
 import org.apache.james.mime4j.MimeException;
+import org.apache.james.mime4j.field.impl.AddressListFieldImpl;
+import org.apache.james.mime4j.field.impl.ContentDispositionFieldImpl;
+import org.apache.james.mime4j.field.impl.ContentTransferEncodingFieldImpl;
+import org.apache.james.mime4j.field.impl.ContentTypeFieldImpl;
+import org.apache.james.mime4j.field.impl.DateTimeFieldImpl;
+import org.apache.james.mime4j.field.FieldName;
+import org.apache.james.mime4j.field.FieldParser;
+import org.apache.james.mime4j.field.impl.MailboxFieldImpl;
+import org.apache.james.mime4j.field.impl.MailboxListFieldImpl;
+import org.apache.james.mime4j.field.ParsedField;
+import org.apache.james.mime4j.field.impl.UnstructuredFieldImpl;
 import org.apache.james.mime4j.parser.RawField;
 import org.apache.james.mime4j.util.ByteSequence;
 import org.apache.james.mime4j.util.ContentUtil;
@@ -62,14 +73,14 @@
      * <p>
      * <table>
      *   <tr><th>Class returned</th><th>Field names</th></tr>
-     *   <tr><td>{@link ContentTypeField}</td><td>Content-Type</td></tr>
-     *   <tr><td>{@link ContentTransferEncodingField}</td><td>Content-Transfer-Encoding</td></tr>
-     *   <tr><td>{@link ContentDispositionField}</td><td>Content-Disposition</td></tr>
-     *   <tr><td>{@link DateTimeField}</td><td>Date, Resent-Date</td></tr>
-     *   <tr><td>{@link MailboxField}</td><td>Sender, Resent-Sender</td></tr>
-     *   <tr><td>{@link MailboxListField}</td><td>From, Resent-From</td></tr>
-     *   <tr><td>{@link AddressListField}</td><td>To, Cc, Bcc, Reply-To, Resent-To, Resent-Cc, Resent-Bcc</td></tr>
-     *   <tr><td>{@link UnstructuredField}</td><td>Subject and others</td></tr>
+     *   <tr><td>{@link ContentTypeFieldImpl}</td><td>Content-Type</td></tr>
+     *   <tr><td>{@link ContentTransferEncodingFieldImpl}</td><td>Content-Transfer-Encoding</td></tr>
+     *   <tr><td>{@link ContentDispositionFieldImpl}</td><td>Content-Disposition</td></tr>
+     *   <tr><td>{@link DateTimeFieldImpl}</td><td>Date, Resent-Date</td></tr>
+     *   <tr><td>{@link MailboxFieldImpl}</td><td>Sender, Resent-Sender</td></tr>
+     *   <tr><td>{@link MailboxListFieldImpl}</td><td>From, Resent-From</td></tr>
+     *   <tr><td>{@link AddressListFieldImpl}</td><td>To, Cc, Bcc, Reply-To, Resent-To, Resent-Cc, Resent-Bcc</td></tr>
+     *   <tr><td>{@link UnstructuredFieldImpl}</td><td>Subject and others</td></tr>
      * </table>
      * 
      * @param rawStr the string to parse.
@@ -84,24 +95,24 @@
 
     public DefaultFieldParser() {
         setFieldParser(FieldName.CONTENT_TRANSFER_ENCODING,
-                ContentTransferEncodingField.PARSER);
-        setFieldParser(FieldName.CONTENT_TYPE, ContentTypeField.PARSER);
+                ContentTransferEncodingFieldImpl.PARSER);
+        setFieldParser(FieldName.CONTENT_TYPE, ContentTypeFieldImpl.PARSER);
         setFieldParser(FieldName.CONTENT_DISPOSITION,
-                ContentDispositionField.PARSER);
+                ContentDispositionFieldImpl.PARSER);
 
-        final FieldParser<DateTimeField> dateTimeParser = DateTimeField.PARSER;
+        final FieldParser<DateTimeFieldImpl> dateTimeParser = DateTimeFieldImpl.PARSER;
         setFieldParser(FieldName.DATE, dateTimeParser);
         setFieldParser(FieldName.RESENT_DATE, dateTimeParser);
 
-        final FieldParser<MailboxListField> mailboxListParser = MailboxListField.PARSER;
+        final FieldParser<MailboxListFieldImpl> mailboxListParser = MailboxListFieldImpl.PARSER;
         setFieldParser(FieldName.FROM, mailboxListParser);
         setFieldParser(FieldName.RESENT_FROM, mailboxListParser);
 
-        final FieldParser<MailboxField> mailboxParser = MailboxField.PARSER;
+        final FieldParser<MailboxFieldImpl> mailboxParser = MailboxFieldImpl.PARSER;
         setFieldParser(FieldName.SENDER, mailboxParser);
         setFieldParser(FieldName.RESENT_SENDER, mailboxParser);
 
-        final FieldParser<AddressListField> addressListParser = AddressListField.PARSER;
+        final FieldParser<AddressListFieldImpl> addressListParser = AddressListFieldImpl.PARSER;
         setFieldParser(FieldName.TO, addressListParser);
         setFieldParser(FieldName.RESENT_TO, addressListParser);
         setFieldParser(FieldName.CC, addressListParser);

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DefaultFieldParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DelegatingFieldParser.java (from r894746, james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java)
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DelegatingFieldParser.java?p2=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DelegatingFieldParser.java&p1=james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java&r1=894746&r2=894910&rev=894910&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/DelegatingFieldParser.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DelegatingFieldParser.java Thu Dec 31 17:52:56 2009
@@ -17,15 +17,18 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mime4j.field;
+package org.apache.james.mime4j.field.impl;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.james.mime4j.field.FieldParser;
+import org.apache.james.mime4j.field.ParsedField;
+import org.apache.james.mime4j.field.impl.UnstructuredFieldImpl;
 import org.apache.james.mime4j.util.ByteSequence;
 
 public class DelegatingFieldParser implements FieldParser<ParsedField> {
-    private static final FieldParser<UnstructuredField> DEFAULT_PARSER = UnstructuredField.PARSER;
+    private static final FieldParser<UnstructuredFieldImpl> DEFAULT_PARSER = UnstructuredFieldImpl.PARSER;
 
     private Map<String, FieldParser<? extends ParsedField>> parsers = new HashMap<String, FieldParser<? extends ParsedField>>();
 

Propchange: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/field/impl/DelegatingFieldParser.java
------------------------------------------------------------------------------
    svn:eol-style = native