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 mw...@apache.org on 2009/02/04 14:32:13 UTC

svn commit: r740733 - in /james/mime4j/trunk/src: main/java/org/apache/james/mime4j/field/address/ main/jjtree/org/apache/james/mime4j/field/address/ test/java/org/apache/james/mime4j/field/address/

Author: mwiederkehr
Date: Wed Feb  4 13:32:12 2009
New Revision: 740733

URL: http://svn.apache.org/viewvc?rev=740733&view=rev
Log:
MIME4J-107: added Address.parse(String); optimized Group.parse and Mailbox.parse

Modified:
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Address.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/AddressList.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Builder.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Group.java
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Mailbox.java
    james/mime4j/trunk/src/main/jjtree/org/apache/james/mime4j/field/address/AddressListParser.jjt
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Address.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Address.java?rev=740733&r1=740732&r2=740733&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Address.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Address.java Wed Feb  4 13:32:12 2009
@@ -20,8 +20,12 @@
 package org.apache.james.mime4j.field.address;
 
 import java.io.Serializable;
+import java.io.StringReader;
 import java.util.List;
 
+import org.apache.james.mime4j.field.address.parser.AddressListParser;
+import org.apache.james.mime4j.field.address.parser.ParseException;
+
 /**
  * The abstract base for classes that represent RFC2822 addresses. This includes
  * groups and mailboxes.
@@ -91,6 +95,25 @@
      */
     public abstract String getEncodedString();
 
+    /**
+     * Parses the specified raw string into an address.
+     * 
+     * @param rawAddressString
+     *            string to parse.
+     * @return an <code>Address</code> object for the specified string.
+     * @throws IllegalArgumentException
+     *             if the raw string does not represent a single address.
+     */
+    public static Address parse(String rawAddressString) {
+        AddressListParser parser = new AddressListParser(new StringReader(
+                rawAddressString));
+        try {
+            return Builder.getInstance().buildAddress(parser.parseAddress());
+        } catch (ParseException e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
     @Override
     public String toString() {
         return getDisplayString(false);

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/AddressList.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/AddressList.java?rev=740733&r1=740732&r2=740733&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/AddressList.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/AddressList.java Wed Feb  4 13:32:12 2009
@@ -119,7 +119,7 @@
             throws ParseException {
         AddressListParser parser = new AddressListParser(new StringReader(
                 rawAddressList));
-        return Builder.getInstance().buildAddressList(parser.parse());
+        return Builder.getInstance().buildAddressList(parser.parseAddressList());
     }
 
     /**

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Builder.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Builder.java?rev=740733&r1=740732&r2=740733&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Builder.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Builder.java Wed Feb  4 13:32:12 2009
@@ -61,7 +61,7 @@
         return new AddressList(list, true);
     }
 
-    private Address buildAddress(ASTaddress node) {
+    public Address buildAddress(ASTaddress node) {
         ChildNodeIterator it = new ChildNodeIterator(node);
         Node n = it.next();
         if (n instanceof ASTaddr_spec) {
@@ -97,7 +97,7 @@
         return new MailboxList(results, true);
     }
 
-    private Mailbox buildMailbox(ASTmailbox node) {
+    public Mailbox buildMailbox(ASTmailbox node) {
         ChildNodeIterator it = new ChildNodeIterator(node);
         Node n = it.next();
         if (n instanceof ASTaddr_spec) {

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Group.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Group.java?rev=740733&r1=740732&r2=740733&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Group.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Group.java Wed Feb  4 13:32:12 2009
@@ -25,7 +25,6 @@
 import java.util.List;
 
 import org.apache.james.mime4j.codec.EncoderUtil;
-import org.apache.james.mime4j.field.address.parser.ParseException;
 
 /**
  * A named group of zero or more mailboxes.
@@ -83,17 +82,11 @@
      *             if the raw string does not represent a single group address.
      */
     public static Group parse(String rawGroupString) {
-        try {
-            AddressList addressList = AddressList.parse(rawGroupString);
-            if (addressList.size() != 1)
-                throw new IllegalArgumentException("Not a single address");
-            Address address = addressList.get(0);
-            if (!(address instanceof Group))
-                throw new IllegalArgumentException("Not a group address");
-            return (Group) address;
-        } catch (ParseException e) {
-            throw new IllegalArgumentException(e);
-        }
+        Address address = Address.parse(rawGroupString);
+        if (!(address instanceof Group))
+            throw new IllegalArgumentException("Not a group address");
+
+        return (Group) address;
     }
 
     /**

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Mailbox.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Mailbox.java?rev=740733&r1=740732&r2=740733&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Mailbox.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/address/Mailbox.java Wed Feb  4 13:32:12 2009
@@ -19,11 +19,13 @@
 
 package org.apache.james.mime4j.field.address;
 
+import java.io.StringReader;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 
 import org.apache.james.mime4j.codec.EncoderUtil;
+import org.apache.james.mime4j.field.address.parser.AddressListParser;
 import org.apache.james.mime4j.field.address.parser.ParseException;
 
 /**
@@ -126,14 +128,10 @@
      *             address.
      */
     public static Mailbox parse(String rawMailboxString) {
+        AddressListParser parser = new AddressListParser(new StringReader(
+                rawMailboxString));
         try {
-            AddressList addressList = AddressList.parse(rawMailboxString);
-            if (addressList.size() != 1)
-                throw new IllegalArgumentException("Not a single address");
-            Address address = addressList.get(0);
-            if (!(address instanceof Mailbox))
-                throw new IllegalArgumentException("Not a mailbox address");
-            return (Mailbox) address;
+            return Builder.getInstance().buildMailbox(parser.parseMailbox());
         } catch (ParseException e) {
             throw new IllegalArgumentException(e);
         }

Modified: james/mime4j/trunk/src/main/jjtree/org/apache/james/mime4j/field/address/AddressListParser.jjt
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/jjtree/org/apache/james/mime4j/field/address/AddressListParser.jjt?rev=740733&r1=740732&r2=740733&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/jjtree/org/apache/james/mime4j/field/address/AddressListParser.jjt (original)
+++ james/mime4j/trunk/src/main/jjtree/org/apache/james/mime4j/field/address/AddressListParser.jjt Wed Feb  4 13:32:12 2009
@@ -60,38 +60,51 @@
 
 public class AddressListParser {
     public static void main(String args[]) throws ParseException {
-		while (true) {
-		    try {
-				AddressListParser parser = new AddressListParser(System.in);
-		    	parser.parseLine();
-		    	((SimpleNode)parser.jjtree.rootNode()).dump("> ");
-		    } catch (Exception x) {
-				x.printStackTrace();
-				return;
-		    }
-		}
+        while (true) {
+            try {
+                AddressListParser parser = new AddressListParser(System.in);
+                parser.parseLine();
+                ((SimpleNode) parser.jjtree.rootNode()).dump("> ");
+            } catch (Exception x) {
+                x.printStackTrace();
+                return;
+            }
+        }
     }
-    
-    private static void log(String msg) {
-    	System.out.print(msg);
+
+    public ASTaddress_list parseAddressList() throws ParseException {
+        try {
+            parseAddressList0();
+            return (ASTaddress_list) jjtree.rootNode();
+        } catch (TokenMgrError tme) {
+            throw new ParseException(tme.getMessage());
+        }
     }
-    
-    public ASTaddress_list parse() throws ParseException {
+
+    public ASTaddress parseAddress() throws ParseException {
         try {
-    	    parseAll();
-    	    return (ASTaddress_list)jjtree.rootNode();
-    	} catch (TokenMgrError tme) {
-    	    throw new ParseException(tme.getMessage());
-    	}
+            parseAddress0();
+            return (ASTaddress) jjtree.rootNode();
+        } catch (TokenMgrError tme) {
+            throw new ParseException(tme.getMessage());
+        }
     }
-    
-    
+
+    public ASTmailbox parseMailbox() throws ParseException {
+        try {
+            parseMailbox0();
+            return (ASTmailbox) jjtree.rootNode();
+        } catch (TokenMgrError tme) {
+            throw new ParseException(tme.getMessage());
+        }
+    }
+
     void jjtreeOpenNodeScope(Node n) {
-    	((SimpleNode)n).firstToken = getToken(1);
+        ((SimpleNode) n).firstToken = getToken(1);
     }
-    
+
     void jjtreeCloseNodeScope(Node n) {
-    	((SimpleNode)n).lastToken = getToken(0);
+        ((SimpleNode) n).lastToken = getToken(0);
     }
 }
 
@@ -103,12 +116,24 @@
 	address_list() ["\r"] "\n"
 }
 
-void parseAll() #void :
+void parseAddressList0() #void :
 {}
 {
 	address_list() <EOF>
 }
 
+void parseAddress0() #void :
+{}
+{
+	address() <EOF>
+}
+
+void parseMailbox0() #void :
+{}
+{
+	mailbox() <EOF>
+}
+
 void address_list() :
 {}
 {

Modified: james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java?rev=740733&r1=740732&r2=740733&view=diff
==============================================================================
--- james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java (original)
+++ james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/address/AddressTest.java Wed Feb  4 13:32:12 2009
@@ -403,6 +403,27 @@
         Group g = new Group("Undisclosed recipients", emptyMailboxes);
         assertEquals("Undisclosed recipients:;", g.getEncodedString());
     }
+
+    public void testParseAddress() throws Exception {
+        Address address = Address.parse("Mary Smith <ma...@example.net>");
+        assertTrue(address instanceof Mailbox);
+        assertEquals("Mary Smith", ((Mailbox) address).getName());
+        assertEquals("mary@example.net", ((Mailbox) address).getAddress());
+
+        address = Address.parse("group: Mary Smith <ma...@example.net>;");
+        assertTrue(address instanceof Group);
+        assertEquals("group", ((Group) address).getName());
+        assertEquals("Mary Smith", ((Group) address).getMailboxes().get(0)
+                .getName());
+        assertEquals("mary@example.net", ((Group) address).getMailboxes()
+                .get(0).getAddress());
+
+        try {
+            Group.parse("john.doe@acme.org, jane.doe@acme.org");
+            fail();
+        } catch (IllegalArgumentException expected) {
+        }
+    }
     
     public void testParseGroup() throws Exception {
         Group group = Group
@@ -419,6 +440,18 @@
         Mailbox mailbox2 = mailboxes.get(1);
         assertEquals("Mary Smith", mailbox2.getName());
         assertEquals("mary@example.net", mailbox2.getAddress());
+
+        try {
+            Group.parse("john.doe@acme.org");
+            fail();
+        } catch (IllegalArgumentException expected) {
+        }
+
+        try {
+            Group.parse("g1: john.doe@acme.org;, g2: mary@example.net;");
+            fail();
+        } catch (IllegalArgumentException expected) {
+        }
     }
 
     public void testParseMailbox() throws Exception {
@@ -435,6 +468,18 @@
                 .parse("\"Hans M\374ller\" <ha...@acme.org>");
         assertEquals("Hans M\374ller", mailbox3.getName());
         assertEquals("hans.mueller@acme.org", mailbox3.getAddress());
+
+        try {
+            Mailbox.parse("g: Mary Smith <ma...@example.net>;");
+            fail();
+        } catch (IllegalArgumentException expected) {
+        }
+
+        try {
+            Mailbox.parse("Mary Smith <ma...@example.net>, hans.mueller@acme.org");
+            fail();
+        } catch (IllegalArgumentException expected) {
+        }
     }
     
 }