Author: norman
Date: Wed Apr 6 19:31:06 2011
New Revision: 1089596
URL: http://svn.apache.org/viewvc?rev=1089596&view=rev
Log:
Allow to get an Inputstream of the content of a Literal
Modified:
james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/FetchResponse.java
james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/Literal.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/ContentBodyElement.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/HeaderBodyElement.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElement.java
Modified:
james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/FetchResponse.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/FetchResponse.java?rev=1089596&r1=1089595&r2=1089596&view=diff
==============================================================================
---
james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/FetchResponse.java
(original)
+++
james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/FetchResponse.java
Wed Apr 6 19:31:06 2011
@@ -19,7 +19,7 @@
package org.apache.james.imap.message.response;
import java.io.IOException;
-import java.nio.channels.WritableByteChannel;
+import java.io.InputStream;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -295,22 +295,6 @@ public final class FetchResponse impleme
*/
public String getName();
- /**
- * Size of the literal content data.
- *
- * @return number of octets which {@link #writeTo(WritableByteChannel)}
- * will put onto the channel
- */
- public long size();
-
- /**
- * Writes the contents of this body element to the channel.
- *
- * @param channel
- * <code>Channel</code>, not null
- * @throws IOException
- */
- public void writeTo(WritableByteChannel channel) throws IOException;
}
/**
Modified:
james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/Literal.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/Literal.java?rev=1089596&r1=1089595&r2=1089596&view=diff
==============================================================================
---
james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/Literal.java
(original)
+++
james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/Literal.java
Wed Apr 6 19:31:06 2011
@@ -20,6 +20,7 @@
package org.apache.james.imap.message.response;
import java.io.IOException;
+import java.io.InputStream;
import java.nio.channels.WritableByteChannel;
public interface Literal {
@@ -39,4 +40,14 @@ public interface Literal {
* @throws IOException
*/
public void writeTo(WritableByteChannel channel) throws IOException;
+
+
+
+ /**
+ * Return the Literal as {@link InputStream}
+ *
+ * @return elementIn
+ * @throws IOException
+ */
+ public InputStream getInputStream() throws IOException;
}
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/ContentBodyElement.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/ContentBodyElement.java?rev=1089596&r1=1089595&r2=1089596&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/ContentBodyElement.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/ContentBodyElement.java
Wed Apr 6 19:31:06 2011
@@ -22,11 +22,16 @@
*/
package org.apache.james.imap.processor.fetch;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.nio.channels.Channels;
import java.nio.channels.WritableByteChannel;
import org.apache.james.imap.message.response.FetchResponse.BodyElement;
import org.apache.james.mailbox.Content;
+import org.apache.james.mailbox.InputStreamContent;
final class ContentBodyElement implements BodyElement {
private final String name;
@@ -59,4 +64,13 @@ final class ContentBodyElement implement
public void writeTo(WritableByteChannel channel) throws IOException {
content.writeTo(channel);
}
+
+ public InputStream getInputStream() throws IOException {
+ if (content instanceof InputStreamContent) {
+ return ((InputStreamContent) content).getInputStream();
+ }
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ writeTo(Channels.newChannel(out));
+ return new ByteArrayInputStream(out.toByteArray());
+ }
}
\ No newline at end of file
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/HeaderBodyElement.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/HeaderBodyElement.java?rev=1089596&r1=1089595&r2=1089596&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/HeaderBodyElement.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/HeaderBodyElement.java
Wed Apr 6 19:31:06 2011
@@ -22,8 +22,12 @@
*/
package org.apache.james.imap.processor.fetch;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
import java.nio.channels.WritableByteChannel;
import java.util.Iterator;
import java.util.List;
@@ -96,4 +100,14 @@ final class HeaderBodyElement implements
}
}
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.imap.message.response.FetchResponse.BodyElement#getInputStream()
+ */
+ public InputStream getInputStream() throws IOException {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ writeTo(Channels.newChannel(out));
+ return new ByteArrayInputStream(out.toByteArray());
+ }
+
}
\ No newline at end of file
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElement.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElement.java?rev=1089596&r1=1089595&r2=1089596&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElement.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElement.java
Wed Apr 6 19:31:06 2011
@@ -19,7 +19,9 @@
package org.apache.james.imap.processor.fetch;
+import java.io.FilterInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.nio.channels.WritableByteChannel;
import org.apache.james.imap.message.response.FetchResponse.BodyElement;
@@ -70,4 +72,89 @@ final class PartialFetchBodyElement impl
delegate.writeTo(partialChannel);
}
+ public InputStream getInputStream() throws IOException {
+ return new LimitingInputStream(delegate.getInputStream(), firstOctet,
size());
+ }
+
+ private final class LimitingInputStream extends FilterInputStream {
+ private long pos = 0;
+ private long length;
+ private long offset;
+
+ public LimitingInputStream(InputStream in, long offset, long length) {
+ super(in);
+ this.length = length;
+ this.offset = offset;
+
+ }
+
+ private void checkOffset() throws IOException {
+ if (offset > -1) {
+ while (offset > 0) {
+ read();
+ offset--;
+ }
+ offset = -1;
+ }
+ }
+ public int read() throws IOException {
+ checkOffset();
+ if (pos >= length) {
+ return -1;
+ }
+ pos++;
+ return super.read();
+ }
+
+ public int read(byte b[]) throws IOException {
+
+ return read(b, 0, b.length);
+ }
+
+ public int read(byte b[], int off, int len) throws IOException {
+ checkOffset();
+
+ if (pos >= length) {
+ return -1;
+ }
+
+ if (pos + len >= length) {
+ int readLimit = (int) length - (int) pos;
+ pos = length;
+
+ return super.read(b, off, readLimit);
+ }
+
+
+ int i = super.read(b, off, len);
+ pos += i;
+ return i;
+
+ }
+
+ public long skip(long n) throws IOException {
+ throw new IOException("Not implemented");
+ }
+
+ public int available() throws IOException {
+ int a = in.available() - (int)offset;
+ if (a < -1) {
+ throw new IOException("Unable to calculate size");
+ }
+ return a;
+ }
+
+ public void mark(int readlimit) {
+ // Don't do anything.
+ }
+
+ public synchronized void reset() throws IOException {
+ throw new IOException("mark not supported");
+ }
+
+ public boolean markSupported() {
+ return false;
+ }
+ }
+
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]