You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jl...@apache.org on 2006/03/08 18:57:37 UTC

svn commit: r384286 - in /geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet: InternetHeaders.java MimeMessage.java

Author: jlaskowski
Date: Wed Mar  8 09:57:35 2006
New Revision: 384286

URL: http://svn.apache.org/viewcvs?rev=384286&view=rev
Log:
GERONIMO-1708 javax.mail.internet.MimeMessage use of private methods short circuits lazy loading by MimeMessage subclasses

Modified:
    geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java
    geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java

Modified: geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java
URL: http://svn.apache.org/viewcvs/geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java?rev=384286&r1=384285&r2=384286&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java (original)
+++ geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java Wed Mar  8 09:57:35 2006
@@ -363,44 +363,6 @@
         return new HeaderLineEnumeration(getNonMatchingHeaders(names));
     }
 
-
-    /**
-     * Return a header as a list of InternetAddresses
-     *
-     * @param name   the header to get
-     * @param strict whether the header should be strictly parser; see {@link InternetAddress#parseHeader(java.util.List, String, boolean, boolean)}
-     * @return
-     */
-    Address[] getHeaderAsAddresses(String name, boolean strict) throws MessagingException {
-        List addrs = new ArrayList();
-        List headers = getHeaderList(name);
-        if (headers == null) {
-            return null;
-        }
-        // news groups are a special case.  Those are NewsAddress items, not InternetAddress.
-        boolean isNewsGroup = name.equals("Newsgroups");
-
-        for (Iterator i = headers.iterator(); i.hasNext();) {
-            InternetHeader header = (InternetHeader) i.next();
-            Address[] addresses = null;
-            // removed headers may show up as value-less entities, so we need to make
-            // sure this is real before attempting to parse the value.
-            String headerValue = header.getValue();
-            if (headerValue != null) {
-                if (isNewsGroup) {
-                    addresses = NewsAddress.parse(header.getValue());
-                }
-                else {
-                    addresses = InternetAddress.parseHeader(header.getValue(), strict);
-                }
-                for (int j = 0; j < addresses.length; j++) {
-                    addrs.add(addresses[j]);
-                }
-            }
-        }
-        return (Address[]) addrs.toArray(new Address[addrs.size()]);
-    }
-
     void setHeader(String name, Address[] addresses) {
         List list = new ArrayList(addresses.length);
         for (int i = 0; i < addresses.length; i++) {

Modified: geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java
URL: http://svn.apache.org/viewcvs/geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java?rev=384286&r1=384285&r2=384286&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java (original)
+++ geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java Wed Mar  8 09:57:35 2006
@@ -266,9 +266,9 @@
     public Address[] getFrom() throws MessagingException {
         // strict addressing controls this.
         boolean strict = isStrictAddressing();
-        Address[] result = getHeaderAsAddresses("From", strict);
+        Address[] result = getHeaderAsInternetAddresses("From", strict);
         if (result == null) {
-            result = getHeaderAsAddresses("Sender", strict);
+            result = getHeaderAsInternetAddresses("Sender", strict);
         }
         return result;
     }
@@ -318,7 +318,7 @@
      * @throws MessagingException if there was a problem parsing the header
      */
     public Address getSender() throws MessagingException {
-        Address[] addrs = getHeaderAsAddresses("Sender", isStrictAddressing());
+        Address[] addrs = getHeaderAsInternetAddresses("Sender", isStrictAddressing());
         return addrs.length > 0 ? addrs[0] : null;
     }
 
@@ -350,7 +350,13 @@
      * @exception MessagingException
      */
     public Address[] getRecipients(Message.RecipientType type) throws MessagingException {
-        return getHeaderAsAddresses(getHeaderForRecipientType(type), isStrictAddressing());
+        // is this a NEWSGROUP request?  We need to handle this as a special case here, because
+        // this needs to return NewsAddress instances instead of InternetAddress items.
+        if (type == RecipientType.NEWSGROUPS) {
+            return getHeaderAsNewsAddresses(getHeaderForRecipientType(type));
+        }
+        // the other types are all internet addresses.
+        return getHeaderAsInternetAddresses(getHeaderForRecipientType(type), isStrictAddressing());
     }
 
     /**
@@ -386,7 +392,14 @@
      * @exception MessagingException
      */
     private void addRecipientsToList(List list, Message.RecipientType type) throws MessagingException {
-        Address[] recipients = getHeaderAsAddresses(getHeaderForRecipientType(type), isStrictAddressing());
+
+        Address[] recipients;
+        if (type == RecipientType.NEWSGROUPS) {
+            recipients = getHeaderAsNewsAddresses(getHeaderForRecipientType(type));
+        }
+        else {
+            recipients = getHeaderAsInternetAddresses(getHeaderForRecipientType(type), isStrictAddressing());
+        }
         if (recipients != null) {
             list.addAll(Arrays.asList(recipients));
         }
@@ -454,7 +467,7 @@
      * @exception MessagingException
      */
     public Address[] getReplyTo() throws MessagingException {
-         Address[] addresses = getHeaderAsAddresses("Reply-To", isStrictAddressing());
+         Address[] addresses = getHeaderAsInternetAddresses("Reply-To", isStrictAddressing());
          if (addresses == null) {
              addresses = getFrom();
          }
@@ -1355,8 +1368,32 @@
         return new InternetHeaders(in);
     }
 
-    private Address[] getHeaderAsAddresses(String header, boolean strict) throws MessagingException {
-        return headers.getHeaderAsAddresses(header, strict);
+    /**
+     * Convert a header into an array of NewsAddress items.
+     *
+     * @param header The name of the source header.
+     *
+     * @return The parsed array of addresses.
+     * @exception MessagingException
+     */
+    private Address[] getHeaderAsNewsAddresses(String header) throws MessagingException {
+        // NB:  We're using getHeader() here to allow subclasses an opportunity to perform lazy loading
+        // of the headers.
+        String mergedHeader = getHeader(header, ",");
+        if (mergedHeader != null) {
+            return NewsAddress.parse(mergedHeader);
+        }
+        return null;
+    }
+
+    private Address[] getHeaderAsInternetAddresses(String header, boolean strict) throws MessagingException {
+        // NB:  We're using getHeader() here to allow subclasses an opportunity to perform lazy loading
+        // of the headers.
+        String mergedHeader = getHeader(header, ",");
+        if (mergedHeader != null) {
+            return InternetAddress.parseHeader(mergedHeader, strict);
+        }
+        return null;
     }
 
     /**