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 Stefano Bagnara <ap...@bago.org> on 2011/01/20 16:04:41 UTC

Re: svn commit: r1061321 - in /james/mime4j/branches/dom-api-refactoring: dom/src/main/java/org/apache/james/mime4j/dom/ dom/src/main/java/org/apache/james/mime4j/message/ dom/src/test/java/org/apache/james/mime4j/dom/ examples/src/main/java/org/apac

2011/1/20  <ol...@apache.org>:
> Author: olegk
> Date: Thu Jan 20 14:45:01 2011
> New Revision: 1061321
>
> URL: http://svn.apache.org/viewvc?rev=1061321&view=rev
> Log:
> Removed #writeTo method from the Message interface; added option of using a different MimeWriter / MimeBuilder implementations with MessageBuilderImpl

This remove "output/writing" capability from the public dom api: do
you plan to introduce an alternative method in the dom package or you
think this feature should not be present in a dom api?

Stefano

> Modified:
>    james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/Message.java
>    james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/MessageBuilder.java
>    james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilderImpl.java
>    james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageImpl.java
>    james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MimeWriter.java
>    james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java
>    james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageTest.java
>    james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageWriteToTest.java
>    james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/MultipartMessage.java
>    james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/TextPlainMessage.java
>    james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/transform/TransformMessage.java
>
> Modified: james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/Message.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/Message.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/Message.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/Message.java Thu Jan 20 14:45:01 2011
> @@ -19,8 +19,6 @@
>
>  package org.apache.james.mime4j.dom;
>
> -import java.io.IOException;
> -import java.io.OutputStream;
>  import java.util.Collection;
>  import java.util.Date;
>  import java.util.TimeZone;
> @@ -33,16 +31,6 @@ import org.apache.james.mime4j.dom.addre
>  public interface Message extends Entity, Body {
>
>     /**
> -     * Write the content to the given output stream.
> -     *
> -     * @param out
> -     *            the output stream to write to.
> -     * @throws IOException
> -     *             in case of an I/O error
> -     */
> -    void writeTo(OutputStream out) throws IOException;
> -
> -    /**
>      * Returns the value of the <i>Message-ID</i> header field of this message
>      * or <code>null</code> if it is not present.
>      *
>
> Modified: james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/MessageBuilder.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/MessageBuilder.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/MessageBuilder.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/dom/MessageBuilder.java Thu Jan 20 14:45:01 2011
> @@ -21,6 +21,7 @@ package org.apache.james.mime4j.dom;
>
>  import java.io.IOException;
>  import java.io.InputStream;
> +import java.io.OutputStream;
>
>  import org.apache.james.mime4j.MimeException;
>  import org.apache.james.mime4j.codec.DecodeMonitor;
> @@ -36,6 +37,8 @@ public abstract class MessageBuilder {
>
>     public abstract Message parse(InputStream source) throws MimeException, IOException;
>
> +    public abstract void writeTo(Message message, OutputStream out) throws IOException;
> +
>     public abstract void setDecodeMonitor(
>             DecodeMonitor decodeMonitor);
>
>
> Modified: james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilderImpl.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilderImpl.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilderImpl.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilderImpl.java Thu Jan 20 14:45:01 2011
> @@ -2,6 +2,7 @@ package org.apache.james.mime4j.message;
>
>  import java.io.IOException;
>  import java.io.InputStream;
> +import java.io.OutputStream;
>
>  import org.apache.james.mime4j.MimeException;
>  import org.apache.james.mime4j.codec.DecodeMonitor;
> @@ -17,6 +18,8 @@ import org.apache.james.mime4j.stream.Mu
>  */
>  public class MessageBuilderImpl extends MessageBuilder {
>
> +    private MimeWriter mimeWriter;
> +    private MimeBuilder mimeBuilder;
>     private StorageProvider storageProvider = null;
>     private DecodeMonitor decodeMonitor = null;
>     private MimeEntityConfig mimeEntityConfig = null;
> @@ -32,14 +35,32 @@ public class MessageBuilderImpl extends
>         return new MessageImpl();
>     }
>
> +    private MimeBuilder getMimeBuilder() {
> +        if (this.mimeBuilder != null) {
> +            return this.mimeBuilder;
> +        } else {
> +            return MimeBuilder.DEFAULT;
> +        }
> +
> +    }
> +
> +    private MimeWriter getMimeWriter() {
> +        if (this.mimeWriter != null) {
> +            return this.mimeWriter;
> +        } else {
> +            return MimeWriter.DEFAULT;
> +        }
> +
> +    }
> +
>     @Override
>     public Message newMessage(Message source) {
> -        return MimeBuilder.DEFAULT.copy(source);
> +        return getMimeBuilder().copy(source);
>     }
>
>     @Override
>     public Message parse(InputStream source) throws MimeException, IOException {
> -        return MimeBuilder.DEFAULT.parse(source,
> +        return getMimeBuilder().parse(source,
>                 mimeEntityConfig,
>                 storageProvider,
>                 mutableBodyDescriptorFactory,
> @@ -49,6 +70,11 @@ public class MessageBuilderImpl extends
>     }
>
>     @Override
> +    public void writeTo(Message message, OutputStream out) throws IOException {
> +        getMimeWriter().writeMessage(message, out);
> +    }
> +
> +    @Override
>     public void setDecodeMonitor(DecodeMonitor decodeMonitor) {
>         this.decodeMonitor = decodeMonitor;
>     }
> @@ -76,4 +102,12 @@ public class MessageBuilderImpl extends
>         this.flatMode = true;
>     }
>
> +    public void setMimeWriter(MimeWriter mimeWriter) {
> +        this.mimeWriter = mimeWriter;
> +    }
> +
> +    public void setMimeBuilder(MimeBuilder mimeBuilder) {
> +        this.mimeBuilder = mimeBuilder;
> +    }
> +
>  }
>
> Modified: james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageImpl.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageImpl.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageImpl.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MessageImpl.java Thu Jan 20 14:45:01 2011
> @@ -19,8 +19,6 @@
>
>  package org.apache.james.mime4j.message;
>
> -import java.io.IOException;
> -import java.io.OutputStream;
>  import java.util.Collection;
>  import java.util.Date;
>  import java.util.Map;
> @@ -53,13 +51,6 @@ public class MessageImpl extends Abstrac
>     public MessageImpl() {
>     }
>
> -    /**
> -     * @see org.apache.james.mime4j.dom.Message#writeTo(java.io.OutputStream)
> -     */
> -    public void writeTo(OutputStream out) throws IOException {
> -        MimeWriter.DEFAULT.writeEntity(this, out);
> -    }
> -
>     @Override
>     protected String newUniqueBoundary() {
>         return MimeUtil.createUniqueBoundary();
>
> Modified: james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MimeWriter.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MimeWriter.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MimeWriter.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/dom/src/main/java/org/apache/james/mime4j/message/MimeWriter.java Thu Jan 20 14:45:01 2011
> @@ -119,6 +119,21 @@ public class MimeWriter {
>     }
>
>     /**
> +     * Write the specified <code>Message</code> to the specified
> +     * <code>OutputStream</code>.
> +     *
> +     * @param entity
> +     *            the <code>Message</code> to write.
> +     * @param out
> +     *            the OutputStream to write to.
> +     * @throws IOException
> +     *             if an I/O error occurs.
> +     */
> +    public void writeMessage(Message message, OutputStream out) throws IOException {
> +        writeEntity(message, out);
> +    }
> +
> +    /**
>      * Write the specified <code>Multipart</code> to the specified
>      * <code>OutputStream</code>.
>      *
>
> Modified: james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/ExampleMessagesRoundtripTest.java Thu Jan 20 14:45:01 2011
> @@ -36,6 +36,7 @@ import junit.framework.TestSuite;
>  import org.apache.james.mime4j.codec.CodecUtil;
>  import org.apache.james.mime4j.dom.Message;
>  import org.apache.james.mime4j.message.MimeBuilder;
> +import org.apache.james.mime4j.message.MimeWriter;
>  import org.apache.james.mime4j.stream.MimeEntityConfig;
>
>  /**
> @@ -60,7 +61,7 @@ public class ExampleMessagesRoundtripTes
>         config.setMaxLineLen(-1);
>         Message inputMessage = MimeBuilder.DEFAULT.parse(url.openStream(), config);
>         ByteArrayOutputStream out = new ByteArrayOutputStream();
> -        inputMessage.writeTo(out);
> +        MimeWriter.DEFAULT.writeMessage(inputMessage, out);
>
>         String s = url.toString();
>         URL msgout = new URL(s.substring(0, s.lastIndexOf('.')) + ".out");
>
> Modified: james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageTest.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageTest.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageTest.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageTest.java Thu Jan 20 14:45:01 2011
> @@ -45,6 +45,7 @@ import org.apache.james.mime4j.message.B
>  import org.apache.james.mime4j.message.HeaderImpl;
>  import org.apache.james.mime4j.message.MessageImpl;
>  import org.apache.james.mime4j.message.MimeBuilder;
> +import org.apache.james.mime4j.message.MimeWriter;
>  import org.apache.james.mime4j.message.MultipartImpl;
>
>  public class MessageTest extends TestCase {
> @@ -136,7 +137,7 @@ public class MessageTest extends TestCas
>         Message m = MimeBuilder.DEFAULT.parse(new ByteArrayInputStream(inputByte));
>         ByteArrayOutputStream out = new ByteArrayOutputStream();
>
> -        m.writeTo(out);
> +        MimeWriter.DEFAULT.writeMessage(m, out);
>
>         InputStream output = new ByteArrayInputStream(out.toByteArray());
>
> @@ -162,7 +163,7 @@ public class MessageTest extends TestCas
>                 .getBody(), headerValue);
>
>         ByteArrayOutputStream out = new ByteArrayOutputStream();
> -        m.writeTo(out);
> +        MimeWriter.DEFAULT.writeMessage(m, out);
>         List<?> lines = IOUtils.readLines((new BufferedReader(
>                 new InputStreamReader(new ByteArrayInputStream(out
>                         .toByteArray())))));
>
> Modified: james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageWriteToTest.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageWriteToTest.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageWriteToTest.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/dom/src/test/java/org/apache/james/mime4j/dom/MessageWriteToTest.java Thu Jan 20 14:45:01 2011
> @@ -24,6 +24,7 @@ import java.io.ByteArrayOutputStream;
>
>  import org.apache.james.mime4j.ExampleMail;
>  import org.apache.james.mime4j.message.MimeBuilder;
> +import org.apache.james.mime4j.message.MimeWriter;
>
>  import junit.framework.TestCase;
>
> @@ -43,7 +44,7 @@ public class MessageWriteToTest extends
>         Message message = createMessage(ExampleMail.RFC822_SIMPLE_BYTES);
>         assertFalse("Not multipart", message.isMultipart());
>         ByteArrayOutputStream out = new ByteArrayOutputStream();
> -        message.writeTo(out);
> +        MimeWriter.DEFAULT.writeMessage(message, out);
>         assertEquals(out.toByteArray(), ExampleMail.RFC822_SIMPLE_BYTES);
>     }
>
> @@ -61,7 +62,7 @@ public class MessageWriteToTest extends
>         Message message = createMessage(ExampleMail.MULTIPART_WITH_BINARY_ATTACHMENTS_BYTES);
>         assertTrue("Is multipart", message.isMultipart());
>         ByteArrayOutputStream out = new ByteArrayOutputStream();
> -        message.writeTo(out);
> +        MimeWriter.DEFAULT.writeMessage(message, out);
>         assertEquals(ExampleMail.MULTIPART_WITH_BINARY_ATTACHMENTS_BYTES, out.toByteArray());
>     }
>
> @@ -69,7 +70,7 @@ public class MessageWriteToTest extends
>         Message message = createMessage(ExampleMail.MULTIPART_WITH_BINARY_ATTACHMENTS_NOPREAMBLE_BYTES);
>         assertTrue("Is multipart", message.isMultipart());
>         ByteArrayOutputStream out = new ByteArrayOutputStream();
> -        message.writeTo(out);
> +        MimeWriter.DEFAULT.writeMessage(message, out);
>         assertEquals(ExampleMail.MULTIPART_WITH_BINARY_ATTACHMENTS_NOPREAMBLE_BYTES, out.toByteArray());
>     }
>
> @@ -77,7 +78,7 @@ public class MessageWriteToTest extends
>         Message message = createMessage(ExampleMail.MULTIPART_WITH_BINARY_ATTACHMENTS_PREAMBLE_EPILOGUE_BYTES);
>         assertTrue("Is multipart", message.isMultipart());
>         ByteArrayOutputStream out = new ByteArrayOutputStream();
> -        message.writeTo(out);
> +        MimeWriter.DEFAULT.writeMessage(message, out);
>         assertEquals(ExampleMail.MULTIPART_WITH_BINARY_ATTACHMENTS_PREAMBLE_EPILOGUE_BYTES, out.toByteArray());
>     }
>
>
> Modified: james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/MultipartMessage.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/MultipartMessage.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/MultipartMessage.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/MultipartMessage.java Thu Jan 20 14:45:01 2011
> @@ -36,6 +36,7 @@ import org.apache.james.mime4j.field.add
>  import org.apache.james.mime4j.message.BodyFactory;
>  import org.apache.james.mime4j.message.BodyPart;
>  import org.apache.james.mime4j.message.MessageImpl;
> +import org.apache.james.mime4j.message.MimeWriter;
>  import org.apache.james.mime4j.message.MultipartImpl;
>  import org.apache.james.mime4j.storage.Storage;
>  import org.apache.james.mime4j.storage.StorageOutputStream;
> @@ -88,7 +89,7 @@ public class MultipartMessage {
>
>         // 4) print message to standard output
>
> -        message.writeTo(System.out);
> +        MimeWriter.DEFAULT.writeMessage(message, System.out);
>
>         // 5) message is no longer needed and should be disposed of
>
>
> Modified: james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/TextPlainMessage.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/TextPlainMessage.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/TextPlainMessage.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/dom/TextPlainMessage.java Thu Jan 20 14:45:01 2011
> @@ -27,6 +27,7 @@ import org.apache.james.mime4j.field.add
>  import org.apache.james.mime4j.field.address.ParseException;
>  import org.apache.james.mime4j.message.BodyFactory;
>  import org.apache.james.mime4j.message.MessageImpl;
> +import org.apache.james.mime4j.message.MimeWriter;
>
>  /**
>  * This example generates a message very similar to the one from RFC 5322
> @@ -62,7 +63,7 @@ public class TextPlainMessage {
>
>         // 4) print message to standard output
>
> -        message.writeTo(System.out);
> +        MimeWriter.DEFAULT.writeMessage(message, System.out);
>
>         // 5) message is no longer needed and should be disposed of
>
>
> Modified: james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/transform/TransformMessage.java
> URL: http://svn.apache.org/viewvc/james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/transform/TransformMessage.java?rev=1061321&r1=1061320&r2=1061321&view=diff
> ==============================================================================
> --- james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/transform/TransformMessage.java (original)
> +++ james/mime4j/branches/dom-api-refactoring/examples/src/main/java/org/apache/james/mime4j/samples/transform/TransformMessage.java Thu Jan 20 14:45:01 2011
> @@ -35,6 +35,7 @@ import org.apache.james.mime4j.message.B
>  import org.apache.james.mime4j.message.BodyPart;
>  import org.apache.james.mime4j.message.MessageImpl;
>  import org.apache.james.mime4j.message.MimeBuilder;
> +import org.apache.james.mime4j.message.MimeWriter;
>  import org.apache.james.mime4j.message.MultipartImpl;
>  import org.apache.james.mime4j.storage.DefaultStorageProvider;
>  import org.apache.james.mime4j.storage.StorageProvider;
> @@ -65,7 +66,7 @@ public class TransformMessage {
>
>         // Print transformed message.
>         System.out.println("\n\nTransformed message:\n--------------------\n");
> -        transformed.writeTo(System.out);
> +        MimeWriter.DEFAULT.writeMessage(transformed, System.out);
>
>         // Messages should be disposed of when they are no longer needed.
>         // Disposing of a message also disposes of all child elements (e.g. body
> @@ -75,7 +76,7 @@ public class TransformMessage {
>         // Print original message to illustrate that it was not affected by the
>         // transformation.
>         System.out.println("\n\nOriginal template:\n------------------\n");
> -        template.writeTo(System.out);
> +        MimeWriter.DEFAULT.writeMessage(template, System.out);
>
>         // Original message is no longer needed.
>         template.dispose();
>
>
>

Re: svn commit: r1061321

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Thu, 2011-01-20 at 16:04 +0100, Stefano Bagnara wrote:
> 2011/1/20  <ol...@apache.org>:
> > Author: olegk
> > Date: Thu Jan 20 14:45:01 2011
> > New Revision: 1061321
> >
> > URL: http://svn.apache.org/viewvc?rev=1061321&view=rev
> > Log:
> > Removed #writeTo method from the Message interface; added option of using a different MimeWriter / MimeBuilder implementations with MessageBuilderImpl
> 
> This remove "output/writing" capability from the public dom api: do
> you plan to introduce an alternative method in the dom package or you
> think this feature should not be present in a dom api?
> 
> Stefano

Stefano,

Please see MessageBuilder#writeTo. I admit that moving #writeTo to
MessageBuilder makes the class somewhat a misnomer. I am currently
trying to think of a better design / name for MessageBuilder and
friends.

Oleg