You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jb...@apache.org on 2005/02/20 18:59:49 UTC

svn commit: r154539 - in geronimo/trunk/specs/javamail/src: java/javax/mail/internet/InternetHeaders.java test/javax/mail/internet/InternetHeadersTest.java

Author: jboynes
Date: Sun Feb 20 09:59:48 2005
New Revision: 154539

URL: http://svn.apache.org/viewcvs?view=rev&rev=154539
Log:
support load and nonmatching headers

Added:
    geronimo/trunk/specs/javamail/src/test/javax/mail/internet/InternetHeadersTest.java
Modified:
    geronimo/trunk/specs/javamail/src/java/javax/mail/internet/InternetHeaders.java

Modified: geronimo/trunk/specs/javamail/src/java/javax/mail/internet/InternetHeaders.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/java/javax/mail/internet/InternetHeaders.java?view=diff&r1=154538&r2=154539
==============================================================================
--- geronimo/trunk/specs/javamail/src/java/javax/mail/internet/InternetHeaders.java (original)
+++ geronimo/trunk/specs/javamail/src/java/javax/mail/internet/InternetHeaders.java Sun Feb 20 09:59:48 2005
@@ -28,6 +28,8 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.HashSet;
+import java.util.Set;
 import javax.mail.Address;
 import javax.mail.Header;
 import javax.mail.MessagingException;
@@ -97,8 +99,66 @@
      * @throws MessagingException if there is a problem pasring the stream
      */
     public void load(InputStream in) throws MessagingException {
-        // todo implement
-        throw new UnsupportedOperationException();
+        try {
+            StringBuffer name = new StringBuffer(32);
+            StringBuffer value = new StringBuffer(128);
+            done: while (true) {
+                int c = in.read();
+                char ch = (char) c;
+                if (c == -1) {
+                    break;
+                } else if (c == 13) {
+                    // empty line terminates header
+                    in.read(); // skip LF
+                    break;
+                } else if (Character.isWhitespace(ch)) {
+                    // handle continuation
+                    do {
+                        c = in.read();
+                        if (c == -1) {
+                            break done;
+                        }
+                        ch = (char) c;
+                    } while (Character.isWhitespace(ch));
+                }  else {
+                    // new header
+                    if (name.length() > 0) {
+                        addHeader(name.toString().trim(), value.toString().trim());
+                    }
+                    name.setLength(0);
+                    value.setLength(0);
+                    while (true) {
+                        name.append((char)c);
+                        c = in.read();
+                        if (c == -1) {
+                            break done;
+                        } else if (c == ':') {
+                            break;
+                        }
+                    }
+                    c = in.read();
+                    if (c == -1) {
+                        break done;
+                    }
+                }
+
+                while (c != 13) {
+                    ch = (char) c;
+                    value.append(ch);
+                    c = in.read();
+                    if (c == -1) {
+                        break done;
+                    }
+                }
+                // skip LF
+                in.read();
+            }
+            if (name.length() > 0) {
+                addHeader(name.toString().trim(), value.toString().trim());
+            }
+        } catch (IOException e) {
+            throw new MessagingException("Error loading headers", e);
+        }
     }
 
     /**
@@ -172,6 +232,7 @@
         List list = getHeaderList(name);
         if (list == null) {
             list = new ArrayList();
+            headers.put(name.toLowerCase(), list);
         }
         list.add(new InternetHeader(name, value));
     }
@@ -209,8 +270,19 @@
     }
 
     public Enumeration getNonMatchingHeaders(String[] names) {
-        // todo implement
-        throw new UnsupportedOperationException();
+        Set exclude = new HashSet(names.length);
+        for (int i = 0; i < names.length; i++) {
+            String name = names[i];
+            exclude.add(name.toLowerCase());
+        }
+        List result = new ArrayList(headers.size());
+        for (Iterator i = headers.entrySet().iterator(); i.hasNext();) {
+            Map.Entry entry = (Map.Entry) i.next();
+            if (!exclude.contains(((String)entry.getKey()).toLowerCase())) {
+                result.addAll((List)entry.getValue());
+            }
+        }
+        return Collections.enumeration(result);
     }
 
     public void addHeaderLine(String line) {

Added: geronimo/trunk/specs/javamail/src/test/javax/mail/internet/InternetHeadersTest.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/specs/javamail/src/test/javax/mail/internet/InternetHeadersTest.java?view=auto&rev=154539
==============================================================================
--- geronimo/trunk/specs/javamail/src/test/javax/mail/internet/InternetHeadersTest.java (added)
+++ geronimo/trunk/specs/javamail/src/test/javax/mail/internet/InternetHeadersTest.java Sun Feb 20 09:59:48 2005
@@ -0,0 +1,48 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation
+ *
+ *  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.
+ */
+
+//
+// This source code implements specifications defined by the Java
+// Community Process. In order to remain compliant with the specification
+// DO NOT add / change / or delete method signatures!
+//
+package javax.mail.internet;
+
+import java.io.ByteArrayInputStream;
+
+import javax.mail.MessagingException;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class InternetHeadersTest extends TestCase {
+    private InternetHeaders headers;
+
+    public void testLoadSingleHeader() throws MessagingException {
+        String stream = "content-type: text/plain\r\n\r\n";
+        headers.load(new ByteArrayInputStream(stream.getBytes()));
+        String[] header = headers.getHeader("content-type");
+        assertNotNull(header);
+        assertEquals("text/plain", header[0]);
+    }
+
+    protected void setUp() throws Exception {
+        headers = new InternetHeaders();
+    }
+}