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 16:57:03 UTC

svn commit: r487994 - in /labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed: SpeedyfeedFilter.java SpeedyfeedResponseStream.java SpeedyfeedResponseWrapper.java

Author: rooneg
Date: Sun Dec 17 07:57:02 2006
New Revision: 487994

URL: http://svn.apache.org/viewvc?view=rev&rev=487994
Log:
Flesh out enough of this that it should basically work.  Still untested ;-)

* src/main/java/org/apache/speedyfeed/SpeedyfeedFilter.java
  (doFilter): Grab the I-M-S header from the request.  If there isn't one
   then just pass through.  Otherwise pass on to the response wrapper.

* src/main/java/org/apache/speedyfeed/SpeedyfeedResponseWrapper.java
  (SpeedyfeedResponseWrapper): Take the I-M-S header as an argument.
  (ifModifiedSince): New field.
  (getIfModifiedSince): Accessor, returns ifModifiedSince as a j.u.Date.

* src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java
  (close): Actually do the filtering, and flesh out the fallback case.

Modified:
    labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedFilter.java
    labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseStream.java
    labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseWrapper.java

Modified: labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedFilter.java
URL: http://svn.apache.org/viewvc/labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedFilter.java?view=diff&rev=487994&r1=487993&r2=487994
==============================================================================
--- labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedFilter.java (original)
+++ labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedFilter.java Sun Dec 17 07:57:02 2006
@@ -21,6 +21,7 @@
 import java.io.IOException;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
@@ -51,9 +52,17 @@
       return;
 
     if (response instanceof HttpServletResponse) {
-      HttpServletResponse hsr = (HttpServletResponse) response;
+      HttpServletResponse hsresp = (HttpServletResponse) response;
+      HttpServletRequest hsreq = (HttpServletRequest) request;
 
-      chain.doFilter(request, new SpeedyfeedResponseWrapper(hsr));
+      String ifModifiedSince = hsreq.getHeader("If-Modified-Since");
+
+      if (ifModifiedSince != null) {
+        chain.doFilter(request,
+                       new SpeedyfeedResponseWrapper(hsresp, ifModifiedSince));
+      } else {
+        chain.doFilter(request, response);
+      }
     } else {
       chain.doFilter(request, response);
     }

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=487994&r1=487993&r2=487994
==============================================================================
--- 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 Sun Dec 17 07:57:02 2006
@@ -18,6 +18,7 @@
 
 package org.apache.speedyfeed;
 
+import java.util.Date;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -29,6 +30,7 @@
 
 import org.apache.abdera.Abdera;
 import org.apache.abdera.model.Feed;
+import org.apache.abdera.model.Entry;
 import org.apache.abdera.model.Document;
 import org.apache.abdera.parser.Parser;
 import org.apache.abdera.parser.ParseException;
@@ -108,20 +110,38 @@
 
       boolean parseFailed = false;
 
+      Date ifModifiedSince = response.getIfModifiedSince();
+
+      // At this point we're done with buffered data, so just create the
+      // final output stream so we can write either our modified version
+      // or the original to it.
+      outputStream = response.createOutputStream();
+
       try {
-        Document<Feed> d = p.parse(is); // XXX calculate and pass base href
+        Document<Feed> doc = p.parse(is); // XXX calculate and pass base href
 
-        // XXX filter
+        for (Entry e : doc.getRoot().getEntries()) {
+          Date d = e.getUpdated();
+          if (d == null) {
+            d = e.getPublished();
+          }
+
+          if (d != null && d.before(ifModifiedSince)) {
+            e.discard();
+          }
+        }
 
-        // XXX write to servlet output stream
+        doc.writeTo(outputStream);
       } catch (ParseException pe) {
         parseFailed = true;
       } catch (IRISyntaxException irise) {
         parseFailed = true;
-      }
+      } finally {
+        if (parseFailed) {
+          outputStream.write(buf);
+        }
 
-      if (parseFailed) {
-        // XXX write contents of outputStream to servlet output stream
+        outputStream.close();
       }
     }
 

Modified: labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseWrapper.java
URL: http://svn.apache.org/viewvc/labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseWrapper.java?view=diff&rev=487994&r1=487993&r2=487994
==============================================================================
--- labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseWrapper.java (original)
+++ labs/speedyfeed/servlet/trunk/src/main/java/org/apache/speedyfeed/SpeedyfeedResponseWrapper.java Sun Dec 17 07:57:02 2006
@@ -18,21 +18,27 @@
 
 package org.apache.speedyfeed;
 
+import java.util.Date;
 import java.io.IOException;
 
 import javax.servlet.http.HttpServletResponseWrapper;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.ServletOutputStream;
 
+import org.apache.abdera.model.AtomDate;
+
 class SpeedyfeedResponseWrapper extends HttpServletResponseWrapper {
   HttpServletResponse wrapped = null;
 
+  String ifModifiedSince = null;
   String contentType = null;
 
-  public SpeedyfeedResponseWrapper(HttpServletResponse wrapped)
+  public SpeedyfeedResponseWrapper(HttpServletResponse wrapped,
+                                   String ifModifiedSince)
   {
     super(wrapped);
     this.wrapped = wrapped;
+    this.ifModifiedSince = ifModifiedSince;
   }
 
   public void setContentType(String contentType)
@@ -44,6 +50,11 @@
   boolean isAtomContent()
   {
     return "application/atom+xml".equals(contentType);
+  }
+
+  Date getIfModifiedSince()
+  {
+    return AtomDate.parse(ifModifiedSince);
   }
 
   public ServletOutputStream createOutputStream()



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org