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