You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by ro...@apache.org on 2006/12/17 04:03:06 UTC
svn commit: r487932 -
/labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java
Author: rooneg
Date: Sat Dec 16 19:03:05 2006
New Revision: 487932
URL: http://svn.apache.org/viewvc?view=rev&rev=487932
Log:
Implement buffering of data from Atom feeds so it can be served.
Still totally untested, but looks like it should work...
* src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java
(passThroughStream): Removed.
(outputStream): New field.
(checkContentType): Fill in buffer version of output stream.
(write, write): Implement.
(close): Implement some more of the close logic.
Modified:
labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java
Modified: labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java
URL: http://svn.apache.org/viewvc/labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java?view=diff&rev=487932&r1=487931&r2=487932
==============================================================================
--- labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java (original)
+++ labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java Sat Dec 16 19:03:05 2006
@@ -19,18 +19,25 @@
package org.apache.speedyfeed;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.abdera.Abdera;
+import org.apache.abdera.model.Feed;
+import org.apache.abdera.model.Document;
import org.apache.abdera.parser.Parser;
+import org.apache.abdera.parser.ParseException;
+import org.apache.abdera.util.iri.IRISyntaxException;
class SpeedyfeedResponseStream extends ServletOutputStream {
SpeedyfeedResponseWrapper response = null;
- ServletOutputStream passThroughStream = null;
+ OutputStream outputStream = null;
boolean checkedContentType = false;
boolean isAtomContent = false;
@@ -49,21 +56,19 @@
isAtomContent = response.isAtomContent();
if (! isAtomContent) {
- passThroughStream = response.createOutputStream();
+ outputStream = response.createOutputStream();
} else {
- // XXX
+ outputStream = new ByteArrayOutputStream();
}
}
public void write(int b) throws IOException
{
- if (checkedContentType && ! isAtomContent) {
- passThroughStream.write(b);
- } else if (! checkedContentType) {
+ if (! checkedContentType) {
checkContentType();
write(b);
} else {
- // XXX write to buffer
+ outputStream.write(b);
}
}
@@ -74,13 +79,11 @@
public void write(byte b[], int off, int len) throws IOException
{
- if (checkedContentType && ! isAtomContent) {
- passThroughStream.write(b, off, len);
- } else if (! checkedContentType) {
+ if (! checkedContentType) {
checkContentType();
write(b, off, len);
} else {
- // XXX write to buffer
+ outputStream.write(b, off, len);
}
}
@@ -91,16 +94,35 @@
public void close() throws IOException
{
- if (checkedContentType && isAtomContent) {
- passThroughStream.close();
+ if (checkedContentType && ! isAtomContent) {
+ outputStream.close();
} else if (! checkedContentType) {
checkContentType();
close();
} else {
+ byte buf[] = ((ByteArrayOutputStream) outputStream).toByteArray();
+
+ InputStream is = new ByteArrayInputStream(buf);
+
Parser p = Abdera.getNewParser();
- // XXX parse buffered data, filter out entries that aren't
- // needed, write to output and close
+ boolean parseFailed = false;
+
+ try {
+ Document<Feed> d = p.parse(is); // XXX calculate and pass base href
+
+ // XXX filter
+
+ // XXX write to servlet output stream
+ } catch (ParseException pe) {
+ parseFailed = true;
+ } catch (IRISyntaxException irise) {
+ parseFailed = true;
+ }
+
+ if (parseFailed) {
+ // XXX write contents of outputStream to servlet output stream
+ }
}
closed = true;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org