You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ni...@apache.org on 2006/09/06 21:52:28 UTC

svn commit: r440852 - /james/mime4j/trunk/src/main/java/org/mime4j/field/

Author: niklas
Date: Wed Sep  6 12:52:27 2006
New Revision: 440852

URL: http://svn.apache.org/viewvc?view=rev&rev=440852
Log:
Applied patch provided by Rob Oxspring. This patch introduces a FieldParser 
interface and a DelegatingFieldParser implementation that delegates parsing
to other parsers based on the field name. The DefaultFieldParser delegates
to static inner classes of each of the existing Field implementations. The 
net result is that users can now more asily add custom field parsers.

Added:
    james/mime4j/trunk/src/main/java/org/mime4j/field/DefaultFieldParser.java   (with props)
    james/mime4j/trunk/src/main/java/org/mime4j/field/DelegatingFieldParser.java   (with props)
    james/mime4j/trunk/src/main/java/org/mime4j/field/FieldParser.java   (with props)
Modified:
    james/mime4j/trunk/src/main/java/org/mime4j/field/AddressListField.java
    james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTransferEncodingField.java
    james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTypeField.java
    james/mime4j/trunk/src/main/java/org/mime4j/field/DateTimeField.java
    james/mime4j/trunk/src/main/java/org/mime4j/field/Field.java
    james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxField.java
    james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxListField.java
    james/mime4j/trunk/src/main/java/org/mime4j/field/UnstructuredField.java

Modified: james/mime4j/trunk/src/main/java/org/mime4j/field/AddressListField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/AddressListField.java?view=diff&rev=440852&r1=440851&r2=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/AddressListField.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/AddressListField.java Wed Sep  6 12:52:27 2006
@@ -25,11 +25,15 @@
 import org.mime4j.field.address.parser.ParseException;
 
 public class AddressListField extends Field {
-    private static Log log = LogFactory.getLog(AddressListField.class);
-
     private AddressList addressList;
     private ParseException parseException;
 
+    protected AddressListField(String name, String body, String raw, AddressList addressList, ParseException parseException) {
+        super(name, body, raw);
+        this.addressList = addressList;
+        this.parseException = parseException;
+    }
+
     public AddressList getAddressList() {
         return addressList;
     }
@@ -38,15 +42,22 @@
         return parseException;
     }
 
-    protected void parseBody(String body) {
-        try {
-            addressList = AddressList.parse(body);
-        }
-        catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': "+ e.getMessage());
+    public static class Parser implements FieldParser {
+        private static Log log = LogFactory.getLog(Parser.class);
+
+        public Field parse(final String name, final String body, final String raw) {
+            AddressList addressList = null;
+            ParseException parseException = null;
+            try {
+                addressList = AddressList.parse(body);
+            }
+            catch (ParseException e) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Parsing value '" + body + "': "+ e.getMessage());
+                }
+                parseException = e;
             }
-            parseException = e;
+            return new AddressListField(name, body, raw, addressList, parseException);
         }
     }
 }

Modified: james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTransferEncodingField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTransferEncodingField.java?view=diff&rev=440852&r1=440851&r2=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTransferEncodingField.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTransferEncodingField.java Wed Sep  6 12:52:27 2006
@@ -20,6 +20,7 @@
 package org.mime4j.field;
 
 
+
 /**
  * Represents a <code>Content-Transfer-Encoding</code> field.
  *
@@ -50,13 +51,11 @@
     
     private String encoding;
     
-    protected ContentTransferEncodingField() {
+    protected ContentTransferEncodingField(String name, String body, String raw, String encoding) {
+        super(name, body, raw);
+        this.encoding = encoding;
     }
-    
-    protected void parseBody(String body) {
-        encoding = body.trim().toLowerCase();
-    }
-    
+
     /**
      * Gets the encoding defined in this field.
      * 
@@ -78,5 +77,12 @@
             return f.getEncoding();
         }
         return ENC_7BIT;
+    }
+    
+    public static class Parser implements FieldParser {
+        public Field parse(final String name, final String body, final String raw) {
+            final String encoding = body.trim().toLowerCase();
+            return new ContentTransferEncodingField(name, body, raw, encoding);
+        }
     }
 }

Modified: james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTypeField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTypeField.java?view=diff&rev=440852&r1=440851&r2=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTypeField.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/ContentTypeField.java Wed Sep  6 12:52:27 2006
@@ -31,7 +31,6 @@
 import org.mime4j.field.contenttype.parser.ParseException;
 import org.mime4j.field.contenttype.parser.TokenMgrError;
 
-
 /**
  * Represents a <code>Content-Type</code> field.
  *
@@ -41,7 +40,6 @@
  * @version $Id: ContentTypeField.java,v 1.6 2005/01/27 14:16:31 ntherning Exp $
  */
 public class ContentTypeField extends Field {
-    private static Log log = LogFactory.getLog(ContentTypeField.class);
     
     /**
      * The prefix of all <code>multipart</code> MIME types.
@@ -69,57 +67,16 @@
     public static final String PARAM_CHARSET = "charset";
     
     private String mimeType = "";
-    private HashMap parameters = null;
+    private Map parameters = null;
     private ParseException parseException;
 
-    protected ContentTypeField() {
-    }
-    
-    protected void parseBody(String body) {
-
-        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());
-        }
-
-        try {
-            final String type = parser.getType();
-            final String subType = parser.getSubType();
-
-            if (type == null || subType == null)
-                return;
-            mimeType = (type + "/" + parser.getSubType()).toLowerCase();
-
-            ArrayList paramNames = parser.getParamNames();
-            ArrayList paramValues = parser.getParamValues();
-
-            if (paramNames == null || paramValues == null)
-                return;
-            for (int i = 0; i < paramNames.size() && i < paramValues.size(); i++) {
-                if (parameters == null)
-                    parameters = new HashMap((int)(paramNames.size() * 1.3 + 1));
-                String name = ((String)paramNames.get(i)).toLowerCase();
-                String value = ((String)paramValues.get(i));
-                parameters.put(name, value);
-            }
-        }
-        catch (NullPointerException npe) {
-        }
+    protected ContentTypeField(String name, String body, String raw, String mimeType, Map parameters, ParseException parseException) {
+        super(name, body, raw);
+        this.mimeType = mimeType;
+        this.parameters = parameters;
+        this.parseException = parseException;
     }
 
-
     /**
      * Gets the exception that was raised during parsing of
      * the field value, if any; otherwise, null.
@@ -243,5 +200,57 @@
      */
     public boolean isMultipart() {
         return mimeType.startsWith(TYPE_MULTIPART_PREFIX);
+    }
+    
+    public static class Parser implements FieldParser {
+        private static Log log = LogFactory.getLog(Parser.class);
+
+        public Field parse(final String name, final String body, final String raw) {
+            ParseException parseException = null;
+            String mimeType = "";
+            Map parameters = null;
+
+            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());
+            }
+
+            try {
+                final String type = parser.getType();
+                final String subType = parser.getSubType();
+
+                if (type != null && subType != null) {
+                    mimeType = (type + "/" + parser.getSubType()).toLowerCase();
+
+                    ArrayList paramNames = parser.getParamNames();
+                    ArrayList paramValues = parser.getParamValues();
+
+                    if (paramNames != null && paramValues != null) {
+                        for (int i = 0; i < paramNames.size() && i < paramValues.size(); i++) {
+                            if (parameters == null)
+                                parameters = new HashMap((int)(paramNames.size() * 1.3 + 1));
+                            String paramName = ((String)paramNames.get(i)).toLowerCase();
+                            String paramValue = ((String)paramValues.get(i));
+                            parameters.put(paramName, paramValue);
+                        }
+                    }
+                }
+            }
+            catch (NullPointerException npe) {
+            }
+            return new ContentTypeField(name, body, raw, mimeType, parameters, parseException);
+        }
     }
 }

Modified: james/mime4j/trunk/src/main/java/org/mime4j/field/DateTimeField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/DateTimeField.java?view=diff&rev=440852&r1=440851&r2=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/DateTimeField.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/DateTimeField.java Wed Sep  6 12:52:27 2006
@@ -27,11 +27,15 @@
 import java.util.Date;
 
 public class DateTimeField extends Field {
-    private static Log log = LogFactory.getLog(DateTimeField.class);
-
     private Date date;
     private ParseException parseException;
 
+    protected DateTimeField(String name, String body, String raw, Date date, ParseException parseException) {
+        super(name, body, raw);
+        this.date = date;
+        this.parseException = parseException;
+    }
+
     public Date getDate() {
         return date;
     }
@@ -40,15 +44,22 @@
         return parseException;
     }
 
-    protected void parseBody(String body) {
-        try {
-            date = DateTime.parse(body).getDate();
-        }
-        catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': "+ e.getMessage());
+    public static class Parser implements FieldParser {
+        private static Log log = LogFactory.getLog(Parser.class);
+
+        public Field parse(final String name, final String body, final String raw) {
+            Date date = null;
+            ParseException parseException = null;
+            try {
+                date = DateTime.parse(body).getDate();
+            }
+            catch (ParseException e) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Parsing value '" + body + "': "+ e.getMessage());
+                }
+                parseException = e;
             }
-            parseException = e;
+            return new DateTimeField(name, body, raw, date, parseException);
         }
     }
 }

Added: james/mime4j/trunk/src/main/java/org/mime4j/field/DefaultFieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/DefaultFieldParser.java?view=auto&rev=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/DefaultFieldParser.java (added)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/DefaultFieldParser.java Wed Sep  6 12:52:27 2006
@@ -0,0 +1,45 @@
+/*
+ *  Copyright 2006 the mime4j project
+ *
+ *  Licensed 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.mime4j.field;
+
+public class DefaultFieldParser extends DelegatingFieldParser {
+    
+    public DefaultFieldParser() {
+        setFieldParser(Field.CONTENT_TRANSFER_ENCODING, new ContentTransferEncodingField.Parser());
+        setFieldParser(Field.CONTENT_TYPE, new ContentTypeField.Parser());
+        
+        final DateTimeField.Parser dateTimeParser = new DateTimeField.Parser();
+        setFieldParser(Field.DATE, dateTimeParser);
+        setFieldParser(Field.RESENT_DATE, dateTimeParser);
+        
+        final MailboxListField.Parser mailboxListParser = new MailboxListField.Parser();
+        setFieldParser(Field.FROM, mailboxListParser);
+        setFieldParser(Field.RESENT_FROM, mailboxListParser);
+        
+        final MailboxField.Parser mailboxParser = new MailboxField.Parser();
+        setFieldParser(Field.SENDER, mailboxParser);
+        setFieldParser(Field.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);
+    }
+}

Propchange: james/mime4j/trunk/src/main/java/org/mime4j/field/DefaultFieldParser.java
------------------------------------------------------------------------------
    svn:keywords = Id

Added: james/mime4j/trunk/src/main/java/org/mime4j/field/DelegatingFieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/DelegatingFieldParser.java?view=auto&rev=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/DelegatingFieldParser.java (added)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/DelegatingFieldParser.java Wed Sep  6 12:52:27 2006
@@ -0,0 +1,47 @@
+/*
+ *  Copyright 2006 the mime4j project
+ *
+ *  Licensed 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.mime4j.field;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class DelegatingFieldParser implements FieldParser {
+    
+    private Map parsers = new HashMap();
+    private FieldParser defaultParser = new UnstructuredField.Parser();
+    
+    /**
+     * Sets the parser used for the field named <code>name</code>.
+     * @param name the name of the field
+     * @param parser the parser for fields named <code>name</code>
+     */
+    public void setFieldParser(final String name, final FieldParser parser) {
+        parsers.put(name.toLowerCase(), parser);
+    }
+    
+    public FieldParser getParser(final String name) {
+        final FieldParser field = (FieldParser) parsers.get(name.toLowerCase());
+        if(field==null) {
+            return defaultParser;
+        }
+        return field;
+    }
+    
+    public Field parse(final String name, final String body, final String raw) {
+        final FieldParser parser = getParser(name);
+        return parser.parse(name, body, raw);
+    }
+}

Propchange: james/mime4j/trunk/src/main/java/org/mime4j/field/DelegatingFieldParser.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: james/mime4j/trunk/src/main/java/org/mime4j/field/Field.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/Field.java?view=diff&rev=440852&r1=440851&r2=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/Field.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/Field.java Wed Sep  6 12:52:27 2006
@@ -22,10 +22,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
 /**
  * The base class of all field classes.
  *
@@ -33,8 +29,6 @@
  * @version $Id: Field.java,v 1.6 2004/10/25 07:26:46 ntherning Exp $
  */
 public abstract class Field {
-    private static Log log = LogFactory.getLog(Field.class);
-    
     public static final String SENDER = "Sender";
     public static final String FROM = "From";
     public static final String TO = "To";
@@ -57,18 +51,23 @@
     
     private static final String FIELD_NAME_PATTERN = 
         "^([\\x21-\\x39\\x3b-\\x7e]+)[ \t]*:";
-    private static Pattern fieldNamePattern = 
+    private static final Pattern fieldNamePattern = 
         Pattern.compile(FIELD_NAME_PATTERN);
+        
+    private static final DefaultFieldParser parser = new DefaultFieldParser();
     
-    private String name;
-    private String body;
-    private String raw;
-    
-    protected Field() {
+    private final String name;
+    private final String body;
+    private final String raw;
+    
+    protected Field(final String name, final String body, final String raw) {
+        this.name = name;
+        this.body = body;
+        this.raw = raw;
     }
     
     /**
-     * Parsers the given string and returns an instance of the 
+     * Parses the given string and returns an instance of the 
      * <code>Field</code> class. The type of the class returned depends on
      * the field name:
      * <table>
@@ -83,64 +82,37 @@
      * @return a <code>Field</code> instance.
      * @throws IllegalArgumentException on parse errors.
      */
-    public static Field parse(String s) {
-        String raw = s;
+    public static Field parse(final String raw) {
         
         /*
          * Unfold the field.
          */
-        s = s.replaceAll("\r|\n", "");
+        final String unfolded = raw.replaceAll("\r|\n", "");
         
         /*
          * Split into name and value.
          */
-        Matcher fieldMatcher = fieldNamePattern.matcher(s);
+        final Matcher fieldMatcher = fieldNamePattern.matcher(unfolded);
         if (!fieldMatcher.find()) {
             throw new IllegalArgumentException("Invalid field in string");
         }
-        String name = fieldMatcher.group(1);
+        final String name = fieldMatcher.group(1);
         
-        String body = s.substring(fieldMatcher.end());
+        String body = unfolded.substring(fieldMatcher.end());
         if (body.length() > 0 && body.charAt(0) == ' ') {
             body = body.substring(1);
         }
         
-        Field f = null;
-
-        // TODO jcheng 2004-09-27: Clean this up
-
-        if (name.equalsIgnoreCase(CONTENT_TRANSFER_ENCODING)) {
-            f = new ContentTransferEncodingField();
-        } else if (name.equalsIgnoreCase(CONTENT_TYPE)) {
-            f = new ContentTypeField();
-        } else if (name.equalsIgnoreCase(DATE) || name.equalsIgnoreCase(RESENT_DATE)) {
-            f = new DateTimeField();
-        } else if (name.equalsIgnoreCase(FROM) || name.equalsIgnoreCase(RESENT_FROM)) {
-            f = new MailboxListField();
-        } else if (name.equalsIgnoreCase(SENDER) || name.equalsIgnoreCase(RESENT_SENDER)) {
-            f = new MailboxField();
-        } else if (name.equalsIgnoreCase(TO) || name.equalsIgnoreCase(CC) || name.equalsIgnoreCase(BCC)
-                || name.equalsIgnoreCase(RESENT_TO) || name.equalsIgnoreCase(RESENT_CC)
-                || name.equalsIgnoreCase(RESENT_BCC) || name.equalsIgnoreCase(REPLY_TO)) {
-            f = new AddressListField();
-        } else {
-            f = new UnstructuredField();
-        }
-        
-        f.name = name;
-        f.raw = raw;
-        f.body = body;
-        f.parseBody(body);
-        
-        return f;
+        return parser.parse(name, body, raw);
     }
     
     /**
-     * Parses the field body.
-     * 
-     * @param body the field unfolded body.
+     * Gets the default parser used to parse fields.
+     * @return the default field parser
      */
-    protected abstract void parseBody(String body);
+    public static DefaultFieldParser getParser() {
+        return parser;
+    }
     
     /**
      * Gets the name of the field (<code>Subject</code>, 

Added: james/mime4j/trunk/src/main/java/org/mime4j/field/FieldParser.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/FieldParser.java?view=auto&rev=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/FieldParser.java (added)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/FieldParser.java Wed Sep  6 12:52:27 2006
@@ -0,0 +1,21 @@
+/*
+ *  Copyright 2006 the mime4j project
+ *
+ *  Licensed 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.mime4j.field;
+
+public interface FieldParser {
+    
+    Field parse(final String name, final String body, final String raw);
+}

Propchange: james/mime4j/trunk/src/main/java/org/mime4j/field/FieldParser.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxField.java?view=diff&rev=440852&r1=440851&r2=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxField.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxField.java Wed Sep  6 12:52:27 2006
@@ -27,10 +27,14 @@
 import org.mime4j.field.address.parser.ParseException;
 
 public class MailboxField extends Field {
-    private static Log log = LogFactory.getLog(MailboxField.class);
+    private final Mailbox mailbox;
+    private final ParseException parseException;
 
-    private Mailbox mailbox;
-    private ParseException parseException;
+    protected MailboxField(final String name, final String body, final String raw, final Mailbox mailbox, final ParseException parseException) {
+        super(name, body, raw);
+        this.mailbox = mailbox;
+        this.parseException = parseException;
+    }
 
     public Mailbox getMailbox() {
         return mailbox;
@@ -39,25 +43,26 @@
     public ParseException getParseException() {
         return parseException;
     }
-
-    /**
-     * Attempts to parse the body into an e-mail address.
-     * If address is invalid, it will be set to null.
-     */
-    protected void parseBody(String body) {
-
-        try {
-            MailboxList mailboxList = AddressList.parse(body).flatten();
-            if (mailboxList.size() > 0) {
-                mailbox = mailboxList.get(0);
+    
+    public static class Parser implements FieldParser {
+        private static Log log = LogFactory.getLog(Parser.class);
+
+        public Field parse(final String name, final String body, final String raw) {
+            Mailbox mailbox = null;
+            ParseException parseException = null;
+            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());
+            catch (ParseException e) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Parsing value '" + body + "': "+ e.getMessage());
+                }
+                parseException = e;
             }
-            parseException = e;
+            return new MailboxField(name, body, raw, mailbox, parseException);
         }
     }
-
 }

Modified: james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxListField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxListField.java?view=diff&rev=440852&r1=440851&r2=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxListField.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/MailboxListField.java Wed Sep  6 12:52:27 2006
@@ -26,11 +26,16 @@
 import org.mime4j.field.address.parser.ParseException;
 
 public class MailboxListField extends Field {
-    private static Log log = LogFactory.getLog(MailboxListField.class);
-
+    
     private MailboxList mailboxList;
     private ParseException parseException;
 
+    protected MailboxListField(final String name, final String body, final String raw, final MailboxList mailboxList, final ParseException parseException) {
+        super(name, body, raw);
+        this.mailboxList = mailboxList;
+        this.parseException = parseException;
+    }
+
     public MailboxList getMailboxList() {
         return mailboxList;
     }
@@ -38,17 +43,23 @@
     public ParseException getParseException() {
         return parseException;
     }
+    
+    public static class Parser implements FieldParser {
+        private static Log log = LogFactory.getLog(Parser.class);
 
-    protected void parseBody(String body) {
-        try {
-            mailboxList = AddressList.parse(body).flatten();
-        }
-        catch (ParseException e) {
-            if (log.isDebugEnabled()) {
-                log.debug("Parsing value '" + body + "': "+ e.getMessage());
+        public Field parse(final String name, final String body, final String raw) {
+            MailboxList mailboxList = null;
+            ParseException parseException = null;
+            try {
+                mailboxList = AddressList.parse(body).flatten();
+            }
+            catch (ParseException e) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Parsing value '" + body + "': "+ e.getMessage());
+                }
+                parseException = e;
             }
-            parseException = e;
+            return new MailboxListField(name, body, raw, mailboxList, parseException);
         }
-
     }
 }

Modified: james/mime4j/trunk/src/main/java/org/mime4j/field/UnstructuredField.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/mime4j/field/UnstructuredField.java?view=diff&rev=440852&r1=440851&r2=440852
==============================================================================
--- james/mime4j/trunk/src/main/java/org/mime4j/field/UnstructuredField.java (original)
+++ james/mime4j/trunk/src/main/java/org/mime4j/field/UnstructuredField.java Wed Sep  6 12:52:27 2006
@@ -31,14 +31,19 @@
 public class UnstructuredField extends Field {
     private String value;
     
-    protected UnstructuredField() {
+    protected UnstructuredField(String name, String body, String raw, String value) {
+        super(name, body, raw);
+        this.value = value;
     }
-    
-    protected void parseBody(String body) {
-        value = DecoderUtil.decodeEncodedWords(body);
-    }
-    
+
     public String getValue() {
         return value;
+    }
+
+    public static class Parser implements FieldParser {
+        public Field parse(final String name, final String body, final String raw) {
+            final String value = DecoderUtil.decodeEncodedWords(body);
+            return new UnstructuredField(name, body, raw, value);
+        }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org