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 ba...@apache.org on 2010/06/28 22:47:31 UTC

svn commit: r958719 - in /james/jdkim/trunk: main/pom.xml main/src/main/java/org/apache/james/jdkim/impl/Message.java main/src/test/java/org/apache/james/jdkim/MessageTest.java main/src/test/java/org/apache/james/jdkim/impl/ pom.xml

Author: bago
Date: Mon Jun 28 20:47:31 2010
New Revision: 958719

URL: http://svn.apache.org/viewvc?rev=958719&view=rev
Log:
Make use of new mime4j (0.7-SNAPSHOT) DOM interfaces (JDKIM-16)

Added:
    james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/impl/
Removed:
    james/jdkim/trunk/main/src/test/java/org/apache/james/jdkim/MessageTest.java
Modified:
    james/jdkim/trunk/main/pom.xml
    james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java
    james/jdkim/trunk/pom.xml

Modified: james/jdkim/trunk/main/pom.xml
URL: http://svn.apache.org/viewvc/james/jdkim/trunk/main/pom.xml?rev=958719&r1=958718&r2=958719&view=diff
==============================================================================
--- james/jdkim/trunk/main/pom.xml (original)
+++ james/jdkim/trunk/main/pom.xml Mon Jun 28 20:47:31 2010
@@ -93,6 +93,10 @@
       <artifactId>apache-mime4j-core</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>apache-mime4j-dom</artifactId>
+    </dependency>
+    <dependency>
     	<groupId>log4j</groupId>
     	<artifactId>log4j</artifactId>
     	<scope>runtime</scope>
@@ -332,7 +336,7 @@
         <artifactId>maven-pmd-plugin</artifactId>
         <version>2.4</version>
         <configuration>
-          <targetjdk>1.4</targetjdk>
+          <targetjdk>1.5</targetjdk>
           <rulesets>
             <ruleset>/rulesets/basic.xml</ruleset>
             <ruleset>/rulesets/controversial.xml</ruleset>

Modified: james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java
URL: http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java?rev=958719&r1=958718&r2=958719&view=diff
==============================================================================
--- james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java (original)
+++ james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/impl/Message.java Mon Jun 28 20:47:31 2010
@@ -19,37 +19,35 @@
 
 package org.apache.james.jdkim.impl;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.james.jdkim.api.Headers;
 import org.apache.james.mime4j.MimeException;
+import org.apache.james.mime4j.MimeIOException;
+import org.apache.james.mime4j.dom.MessageBuilder;
+import org.apache.james.mime4j.dom.MessageBuilderFactory;
+import org.apache.james.mime4j.dom.SingleBody;
+import org.apache.james.mime4j.dom.field.Field;
 import org.apache.james.mime4j.io.EOLConvertingInputStream;
-import org.apache.james.mime4j.parser.AbstractContentHandler;
-import org.apache.james.mime4j.parser.MimeStreamParser;
-import org.apache.james.mime4j.stream.BodyDescriptor;
 import org.apache.james.mime4j.stream.MimeEntityConfig;
-import org.apache.james.mime4j.stream.RawField;
 
 /**
  * The header of an entity (see RFC 2045).
  */
-public class Message extends AbstractContentHandler implements Headers {
+public class Message implements Headers {
 
-    private List<String> fields = new LinkedList<String>();
-    private Map<String, List<String>> fieldMap = new HashMap<String, List<String>>();
-    private InputStream bodyIs = null;
+    private org.apache.james.mime4j.dom.Message message;
 
     /**
      * Creates a new empty <code>Header</code>.
+     * @throws MimeException 
      */
-    public Message() {
+    protected Message() throws MimeException {
+        this.message = newMessageBuilder().newMessage();
     }
 
     /**
@@ -64,69 +62,61 @@ public class Message extends AbstractCon
      *                 on MIME protocol violations.
      */
     public Message(InputStream is) throws IOException, MimeException {
-        MimeEntityConfig mec = new MimeEntityConfig();
-        mec.setMaxLineLen(10000);
+        MessageBuilder mb = newMessageBuilder();
+        org.apache.james.mime4j.dom.Message mImpl = mb.parse(new EOLConvertingInputStream(is));
         
-        final MimeStreamParser parser = new MimeStreamParser(mec);
-        parser.setFlat(true);
-        parser.setContentDecoding(false);
-        parser.setContentHandler(this);
-        parser.parse(new EOLConvertingInputStream(is));
+        this.message = mImpl;
     }
 
-    public InputStream getBodyInputStream() {
-        return bodyIs;
-    }
-
-    public void field(RawField rawField) throws MimeException {
-        addField(rawField.getName(), new String(rawField.getRaw().toByteArray()));
-    }
-    
-    public void body(BodyDescriptor bd, InputStream is) throws MimeException,
-            IOException {
-        setBodyInputStream(is);
-    }
+    private MessageBuilder newMessageBuilder() throws MimeException {
+        MimeEntityConfig mec = new MimeEntityConfig();
+        mec.setMaxLineLen(10000);
 
-    public void setBodyInputStream(InputStream is) {
-        bodyIs = is;
+        MessageBuilderFactory mbf = MessageBuilderFactory.newInstance();
+        mbf.setAttribute("MimeEntityConfig", mec);
+        // mbf.setProperty("MaxLineLength", 10000);
+        MessageBuilder mb = mbf.newMessageBuilder();
+        mb.setContentDecoding(false);
+        mb.setFlatMode();
+        return mb;
     }
 
-    /**
-     * Adds a field to the end of the list of fields.
-     * 
-     * @param field
-     *                the field to add.
-     */
-    public void addField(String fieldName, String field) {
-        List<String> values = fieldMap.get(fieldName.toLowerCase());
-        if (values == null) {
-            values = new LinkedList<String>();
-            fieldMap.put(fieldName.toLowerCase(), values);
+    public InputStream getBodyInputStream() {
+        try {
+            return ((SingleBody) message.getBody()).getInputStream();
+        } catch (IOException e) {
+            return null;
         }
-        values.add(field);
-        fields.add(field);
     }
 
     /**
      * @see org.apache.james.jdkim.api.Headers#getFields()
      */
     public List<String> getFields() {
-        return Collections.unmodifiableList(fields);
+        List<Field> res = message.getHeader().getFields();
+        return convertFields(res);
+    }
+
+    private List<String> convertFields(List<Field> res) {
+        List<String> res2 = new LinkedList<String>();
+        for (Field f : res) {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            String field = null;
+            try {
+                f.writeTo(bos);
+                field = new String(bos.toByteArray());
+            } catch (IOException e) {
+            }
+            res2.add(field);
+        }
+        return res2;
     }
 
     /**
      * @see org.apache.james.jdkim.api.Headers#getFields(java.lang.String)
      */
     public List<String> getFields(final String name) {
-        final String lowerCaseName = name.toLowerCase();
-        final List<String> l = fieldMap.get(lowerCaseName);
-        final List<String> results;
-        if (l == null || l.isEmpty()) {
-            results = null;
-        } else {
-            results = Collections.unmodifiableList(l);
-        }
-        return results;
+        return convertFields(message.getHeader().getFields(name));
     }
 
     /**
@@ -136,24 +126,7 @@ public class Message extends AbstractCon
      * @return headers
      */
     public String toString() {
-        StringBuffer str = new StringBuffer(128);
-        for (Iterator<String> i = fields.iterator(); i.hasNext();) {
-            String field = i.next();
-            str.append(field);
-        }
-        InputStream is = getBodyInputStream();
-        if (is != null) {
-            str.append("\r\n");
-            byte[] buff = new byte[128];
-            int read;
-            try {
-                while ((read = is.read(buff)) > 0) {
-                    str.append(new String(buff, 0, read));
-                }
-            } catch (IOException e) {
-            }
-        }
-        return str.toString();
+        return message.toString();
     }
 
 }
\ No newline at end of file

Modified: james/jdkim/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/jdkim/trunk/pom.xml?rev=958719&r1=958718&r2=958719&view=diff
==============================================================================
--- james/jdkim/trunk/pom.xml (original)
+++ james/jdkim/trunk/pom.xml Mon Jun 28 20:47:31 2010
@@ -188,6 +188,11 @@
         <artifactId>apache-mime4j-core</artifactId>
         <version>0.7-SNAPSHOT</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.james</groupId>
+        <artifactId>apache-mime4j-dom</artifactId>
+        <version>0.7-SNAPSHOT</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
 



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