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