|
From: <bra...@us...> - 2008-07-22 02:45:26
|
Revision: 2480
http://archive-access.svn.sourceforge.net/archive-access/?rev=2480&view=rev
Author: bradtofel
Date: 2008-07-22 02:45:34 +0000 (Tue, 22 Jul 2008)
Log Message:
-----------
REFACTOR: SelectorDispatcher now used instead of hard-coded old Dispatcher, split old HTML ReplayRenderer into ClientSide and ServerSide HTMLReplayRenderer, refactored ASX and CSS ReplayRenderers to inherit from Common TextReplayRenderer base class.
Modified Paths:
--------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlASXReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlCSSReplayRenderer.java
Added Paths:
-----------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ClientSideHTMLReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ServerSideHTMLReplayRenderer.java
Removed Paths:
-------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlReplayDispatcher.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlTransparentReplayRenderer.java
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlASXReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlASXReplayRenderer.java 2008-07-22 02:42:56 UTC (rev 2479)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlASXReplayRenderer.java 2008-07-22 02:45:34 UTC (rev 2480)
@@ -1,7 +1,6 @@
package org.archive.wayback.archivalurl;
import java.io.IOException;
-import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -12,39 +11,28 @@
import org.archive.wayback.core.CaptureSearchResult;
import org.archive.wayback.core.CaptureSearchResults;
import org.archive.wayback.core.WaybackRequest;
-import org.archive.wayback.exception.BadContentException;
-import org.archive.wayback.replay.HTMLPage;
-import org.archive.wayback.replay.HttpHeaderOperation;
+import org.archive.wayback.replay.TextDocument;
+import org.archive.wayback.replay.TextReplayRenderer;
+import org.archive.wayback.replay.HttpHeaderProcessor;
-public class ArchivalUrlASXReplayRenderer extends ArchivalUrlReplayRenderer {
+public class ArchivalUrlASXReplayRenderer extends TextReplayRenderer {
+
+ /**
+ * @param httpHeaderProcessor
+ */
+ public ArchivalUrlASXReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
+ super(httpHeaderProcessor);
+ }
+
/* (non-Javadoc)
- * @see org.archive.wayback.ReplayRenderer#renderResource(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.SearchResult, org.archive.wayback.core.Resource, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.SearchResults)
+ * @see org.archive.wayback.archivalurl.ArchivalUrlReplayRenderer#updatePage(org.archive.wayback.replay.HTMLPage, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.CaptureSearchResults)
*/
- public void renderResource(HttpServletRequest httpRequest,
+ @Override
+ protected void updatePage(TextDocument page, HttpServletRequest httpRequest,
HttpServletResponse httpResponse, WaybackRequest wbRequest,
CaptureSearchResult result, Resource resource,
ResultURIConverter uriConverter, CaptureSearchResults results)
- throws ServletException, IOException, BadContentException {
-
-
- HttpHeaderOperation.copyHTTPMessageHeader(resource, httpResponse);
-
- Map<String,String> headers = HttpHeaderOperation.processHeaders(
- resource, result, uriConverter, this);
-
- // Load content into an HTML page, and resolve embedded HREF urls:
- HTMLPage page = new HTMLPage(resource,result,uriConverter);
- page.readFully();
-
+ throws ServletException, IOException {
page.resolveASXRefUrls();
-
- // set the corrected length:
- int bytes = page.getBytes().length;
- headers.put(HTTP_LENGTH_HEADER, String.valueOf(bytes));
-
- // send back the headers:
- HttpHeaderOperation.sendHeaders(headers, httpResponse);
-
- page.writeToOutputStream(httpResponse.getOutputStream());
}
}
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlCSSReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlCSSReplayRenderer.java 2008-07-22 02:42:56 UTC (rev 2479)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlCSSReplayRenderer.java 2008-07-22 02:45:34 UTC (rev 2480)
@@ -1,7 +1,6 @@
package org.archive.wayback.archivalurl;
import java.io.IOException;
-import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -12,37 +11,29 @@
import org.archive.wayback.core.CaptureSearchResult;
import org.archive.wayback.core.CaptureSearchResults;
import org.archive.wayback.core.WaybackRequest;
-import org.archive.wayback.exception.BadContentException;
-import org.archive.wayback.replay.HTMLPage;
-import org.archive.wayback.replay.HttpHeaderOperation;
+import org.archive.wayback.replay.TextDocument;
+import org.archive.wayback.replay.TextReplayRenderer;
+import org.archive.wayback.replay.HttpHeaderProcessor;
-public class ArchivalUrlCSSReplayRenderer extends ArchivalUrlReplayRenderer {
+public class ArchivalUrlCSSReplayRenderer extends TextReplayRenderer {
+
+ /**
+ * @param httpHeaderProcessor
+ */
+ public ArchivalUrlCSSReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
+ super(httpHeaderProcessor);
+ }
+
/* (non-Javadoc)
- * @see org.archive.wayback.ReplayRenderer#renderResource(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.SearchResult, org.archive.wayback.core.Resource, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.SearchResults)
+ * @see org.archive.wayback.replay.HTMLReplayRenderer#updatePage(org.archive.wayback.replay.HTMLPage, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.CaptureSearchResults)
*/
- public void renderResource(HttpServletRequest httpRequest,
+ @Override
+ protected void updatePage(TextDocument page, HttpServletRequest httpRequest,
HttpServletResponse httpResponse, WaybackRequest wbRequest,
CaptureSearchResult result, Resource resource,
ResultURIConverter uriConverter, CaptureSearchResults results)
- throws ServletException, IOException, BadContentException {
- HttpHeaderOperation.copyHTTPMessageHeader(resource, httpResponse);
+ throws ServletException, IOException {
- Map<String,String> headers = HttpHeaderOperation.processHeaders(
- resource, result, uriConverter, this);
-
- // Load content into an HTML page, and resolve @import URLs:
- HTMLPage page = new HTMLPage(resource,result,uriConverter);
- page.readFully();
-
page.resolveCSSUrls();
-
- // set the corrected length:
- int bytes = page.getBytes().length;
- headers.put(HTTP_LENGTH_HEADER, String.valueOf(bytes));
-
- // send back the headers:
- HttpHeaderOperation.sendHeaders(headers, httpResponse);
-
- page.writeToOutputStream(httpResponse.getOutputStream());
}
}
Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlReplayDispatcher.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlReplayDispatcher.java 2008-07-22 02:42:56 UTC (rev 2479)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlReplayDispatcher.java 2008-07-22 02:45:34 UTC (rev 2480)
@@ -1,165 +0,0 @@
-/* ArchivalUrlReplayRendererDispatcher
- *
- * $Id$
- *
- * Created on 11:38:02 AM Aug 9, 2007.
- *
- * Copyright (C) 2007 Internet Archive.
- *
- * This file is part of wayback-core.
- *
- * wayback-core is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * any later version.
- *
- * wayback-core is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser Public License for more details.
- *
- * You should have received a copy of the GNU Lesser Public License
- * along with wayback-core; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-package org.archive.wayback.archivalurl;
-
-import java.util.List;
-
-import org.archive.wayback.ReplayDispatcher;
-import org.archive.wayback.ReplayRenderer;
-import org.archive.wayback.core.Resource;
-import org.archive.wayback.core.CaptureSearchResult;
-import org.archive.wayback.core.WaybackRequest;
-import org.archive.wayback.replay.DateRedirectReplayRenderer;
-
-/**
- *
- *
- * @author brad
- * @version $Date$, $Revision$
- */
-public class ArchivalUrlReplayDispatcher implements ReplayDispatcher {
-
- /**
- * MIME type of documents which should be marked up with javascript to
- * rewrite URLs inside document
- */
- private final static String TEXT_HTML_MIME = "text/html";
- private final static String TEXT_XHTML_MIME = "application/xhtml";
- private final static String TEXT_CSS_MIME = "text/css";
- private final static String ASX_MIME = "video/x-ms-asf";
- private final static String ASX_EXTENSION = ".asx";
-
-
- // TODO: make this configurable
- private final static long MAX_HTML_MARKUP_LENGTH = 1024 * 1024 * 5;
-
- private ReplayRenderer transparent =
- new ArchivalUrlTransparentReplayRenderer();
-
- private ReplayRenderer redirect = new DateRedirectReplayRenderer();
- private ArchivalUrlReplayRenderer archivalHTML =
- new ArchivalUrlReplayRenderer();
- private ArchivalUrlCSSReplayRenderer archivalCSS =
- new ArchivalUrlCSSReplayRenderer();
- private ArchivalUrlASXReplayRenderer archivalASX =
- new ArchivalUrlASXReplayRenderer();
-
- /* (non-Javadoc)
- * @see org.archive.wayback.ReplayDispatcher#getRenderer(org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.SearchResult, org.archive.wayback.core.Resource)
- */
- public ReplayRenderer getRenderer(WaybackRequest wbRequest,
- CaptureSearchResult result, Resource resource) {
-
- // if the result is not for the exact date requested, redirect to the
- // exact date. some capture dates are not 14 digits, only compare as
- // many digits as are in the result date:
- String reqDateStr = wbRequest.getReplayTimestamp();
- String resDateStr = result.getCaptureTimestamp();
- if(!resDateStr.equals(reqDateStr.substring(0, resDateStr.length()))) {
- return redirect;
- }
-
- // only bother attempting markup on pages smaller than some size:
- if (resource.getRecordLength() < MAX_HTML_MARKUP_LENGTH) {
-
- String resultMime = result.getMimeType();
- // HTML and XHTML docs get marked up as HTML
- if (-1 != resultMime.indexOf(TEXT_HTML_MIME)) {
- return archivalHTML;
- }
- if (-1 != resultMime.indexOf(TEXT_XHTML_MIME)) {
- return archivalHTML;
- }
- // CSS docs get marked up as CSS
- if (-1 != resultMime.indexOf(TEXT_CSS_MIME)) {
- return archivalCSS;
- }
- if (-1 != resultMime.indexOf(ASX_MIME)) {
- return archivalASX;
- }
- String resultPath = result.getUrlKey();
- resultPath = resultPath.substring(resultPath.indexOf('/'));
- int queryIdx = resultPath.indexOf('?');
- if(queryIdx > 0) {
- resultPath = resultPath.substring(0,queryIdx-1);
- }
- if(resultPath.endsWith(ASX_EXTENSION)) {
- return archivalASX;
- }
- }
-
- // everything else goes transparently:
- return transparent;
- }
-
- /**
- * @return
- * @see org.archive.wayback.archivalurl.ArchivalUrlReplayRenderer#getJsInserts()
- */
- public List<String> getJsInserts() {
- return archivalHTML.getJsInserts();
- }
-
- /**
- * @return
- * @see org.archive.wayback.archivalurl.ArchivalUrlReplayRenderer#getJspInserts()
- */
- public List<String> getJspInserts() {
- return archivalHTML.getJspInserts();
- }
-
- /**
- * @param jsInserts
- * @see org.archive.wayback.archivalurl.ArchivalUrlReplayRenderer#setJsInserts(java.util.List)
- */
- public void setJsInserts(List<String> jsInserts) {
- archivalHTML.setJsInserts(jsInserts);
- }
-
- /**
- * @param jspInserts
- * @see org.archive.wayback.archivalurl.ArchivalUrlReplayRenderer#setJspInserts(java.util.List)
- */
- public void setJspInserts(List<String> jspInserts) {
- archivalHTML.setJspInserts(jspInserts);
- }
-
- /**
- * @return
- * @see org.archive.wayback.archivalurl.ArchivalUrlReplayRenderer#isServerSideRendering()
- */
- public boolean isServerSideRendering() {
- return archivalHTML.isServerSideRendering();
- }
-
- /**
- * @param isServerSideRendering
- * @see org.archive.wayback.archivalurl.ArchivalUrlReplayRenderer#setServerSideRendering(boolean)
- */
- public void setServerSideRendering(boolean isServerSideRendering) {
- archivalHTML.setServerSideRendering(isServerSideRendering);
- archivalCSS.setServerSideRendering(isServerSideRendering);
- }
-}
Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlReplayRenderer.java 2008-07-22 02:42:56 UTC (rev 2479)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlReplayRenderer.java 2008-07-22 02:45:34 UTC (rev 2480)
@@ -1,202 +0,0 @@
-/* ArchivalUrlReplayRenderer
- *
- * $Id$
- *
- * Created on 6:11:00 PM Aug 8, 2007.
- *
- * Copyright (C) 2007 Internet Archive.
- *
- * This file is part of wayback-core.
- *
- * wayback-core is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * any later version.
- *
- * wayback-core is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser Public License for more details.
- *
- * You should have received a copy of the GNU Lesser Public License
- * along with wayback-core; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-package org.archive.wayback.archivalurl;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.archive.wayback.ReplayRenderer;
-import org.archive.wayback.ResultURIConverter;
-import org.archive.wayback.core.Resource;
-import org.archive.wayback.core.CaptureSearchResult;
-import org.archive.wayback.core.CaptureSearchResults;
-import org.archive.wayback.core.WaybackRequest;
-import org.archive.wayback.exception.BadContentException;
-import org.archive.wayback.replay.HTMLPage;
-import org.archive.wayback.replay.HttpHeaderProcessor;
-import org.archive.wayback.replay.HttpHeaderOperation;
-import org.archive.wayback.util.url.UrlOperations;
-
-/**
- * ReplayRenderer responsible for marking up HTML pages so they replay in
- * ArchivalUrl context:
- * resolve in page URLs
- * add HTML comment and javascript to modify URLs client-side to point back
- * to this context
- *
- * @author brad
- * @version $Date$, $Revision$
- */
-public class ArchivalUrlReplayRenderer implements ReplayRenderer, HttpHeaderProcessor {
-
-
- private List<String> jsInserts = null;
- private List<String> jspInserts = null;
- private boolean serverSideRendering = false;
-
- /* (non-Javadoc)
- * @see org.archive.wayback.ReplayRenderer#renderResource(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.SearchResult, org.archive.wayback.core.Resource, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.SearchResults)
- */
- public void renderResource(HttpServletRequest httpRequest,
- HttpServletResponse httpResponse, WaybackRequest wbRequest,
- CaptureSearchResult result, Resource resource,
- ResultURIConverter uriConverter, CaptureSearchResults results)
- throws ServletException, IOException, BadContentException {
-
- StringBuilder toInsert = new StringBuilder(300);
-
- HttpHeaderOperation.copyHTTPMessageHeader(resource, httpResponse);
-
- Map<String,String> headers = HttpHeaderOperation.processHeaders(
- resource, result, uriConverter, this);
-
-
- // Load content into an HTML page, and resolve load-time URLs:
- HTMLPage page = new HTMLPage(resource,result,uriConverter);
- page.readFully();
-
- if(serverSideRendering) {
- page.resolveAllPageUrls();
- } else {
- page.resolvePageUrls();
- }
- if(jsInserts != null) {
- Iterator<String> itr = jsInserts.iterator();
- while(itr.hasNext()) {
- toInsert.append(page.getJSIncludeString(itr.next()));
- }
- }
- if(jspInserts != null) {
- Iterator<String> itr = jspInserts.iterator();
- while(itr.hasNext()) {
- toInsert.append(page.includeJspString(itr.next(), httpRequest,
- httpResponse, wbRequest, results, result, resource));
- }
- }
-
- // insert the new content:
- if(serverSideRendering) {
- page.insertAtStartOfBody(toInsert.toString());
- } else {
- page.insertAtEndOfBody(toInsert.toString());
- }
-
- // set the corrected length:
- int bytes = page.getBytes().length;
- headers.put(HTTP_LENGTH_HEADER, String.valueOf(bytes));
- // Tomcat will always send a charset... It's trying to be smarter than
- // we are. If the original page didn't include a "charset" as part of
- // the "Content-Type" HTTP header, then Tomcat will use the default..
- // who knows what that is, or what that will do to the page..
- // let's try explicitly setting it to what we used:
- httpResponse.setCharacterEncoding(page.getCharSet());
-
- // send back the headers:
- HttpHeaderOperation.sendHeaders(headers, httpResponse);
-
- page.writeToOutputStream(httpResponse.getOutputStream());
- }
-
- /* (non-Javadoc)
- * @see org.archive.wayback.replay.HttpHeaderProcessor#filter(java.util.Map, java.lang.String, java.lang.String, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.SearchResult)
- */
- public void filter(Map<String, String> output, String key, String value,
- ResultURIConverter uriConverter, CaptureSearchResult result) {
-
- String keyUp = key.toUpperCase();
-
- // omit Content-Length header
- if (keyUp.equals(HTTP_LENGTH_HEADER_UP)) {
- return;
- }
-
- // rewrite Location header URLs
- if (keyUp.startsWith(HTTP_LOCATION_HEADER_UP) ||
- keyUp.startsWith(HTTP_CONTENT_BASE_HEADER_UP)) {
-
- String baseUrl = result.getOriginalUrl();
- String cd = result.getCaptureTimestamp();
- // by the spec, these should be absolute already, but just in case:
- String u = UrlOperations.resolveUrl(baseUrl, value);
-
- output.put(key, uriConverter.makeReplayURI(cd,u));
- } else if(keyUp.startsWith(HTTP_CONTENT_TYPE_HEADER_UP)) {
- output.put("X-Wayback-Orig-" + key,value);
- output.put(key,value);
- } else {
- // others go out as-is:
-
- output.put(key, value);
- }
- }
-
- /**
- * @return the jsInserts
- */
- public List<String> getJsInserts() {
- return jsInserts;
- }
-
- /**
- * @param jsInserts the jsInserts to set
- */
- public void setJsInserts(List<String> jsInserts) {
- this.jsInserts = jsInserts;
- }
-
- /**
- * @return the jspInserts
- */
- public List<String> getJspInserts() {
- return jspInserts;
- }
-
- /**
- * @param jspInserts the jspInserts to set
- */
- public void setJspInserts(List<String> jspInserts) {
- this.jspInserts = jspInserts;
- }
-
- /**
- * @return the isServerSideRendering
- */
- public boolean isServerSideRendering() {
- return serverSideRendering;
- }
-
- /**
- * @param isServerSideRendering the isServerSideRendering to set
- */
- public void setServerSideRendering(boolean serverSideRendering) {
- this.serverSideRendering = serverSideRendering;
- }
-}
Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlTransparentReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlTransparentReplayRenderer.java 2008-07-22 02:42:56 UTC (rev 2479)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlTransparentReplayRenderer.java 2008-07-22 02:45:34 UTC (rev 2480)
@@ -1,45 +0,0 @@
-package org.archive.wayback.archivalurl;
-
-import java.util.Map;
-
-import org.archive.wayback.ResultURIConverter;
-import org.archive.wayback.core.CaptureSearchResult;
-import org.archive.wayback.replay.TransparentReplayRenderer;
-import org.archive.wayback.util.url.UrlOperations;
-
-/**
- * Slight extension to TransparentReplayRenderer, which rewrites Location and
- * Content-Base HTTP headers as they go out.
- *
- * @author brad
- * @version $Date$, $Revision$
- */
-public class ArchivalUrlTransparentReplayRenderer
-extends TransparentReplayRenderer {
-
- /* (non-Javadoc)
- * @see org.archive.wayback.replay.HeaderFilter#filter(java.util.Map, java.lang.String, java.lang.String, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.SearchResult)
- */
- public void filter(Map<String, String> output, String key, String value,
- ResultURIConverter uriConverter, CaptureSearchResult result) {
-
- String keyUp = key.toUpperCase();
-
- // rewrite Location header URLs
- if (keyUp.startsWith(HTTP_LOCATION_HEADER_UP) ||
- keyUp.startsWith(HTTP_CONTENT_BASE_HEADER_UP)) {
-
- String baseUrl = result.getOriginalUrl();
- String cd = result.getCaptureTimestamp();
- // by the spec, these should be absolute already, but just in case:
- String u = UrlOperations.resolveUrl(baseUrl, value);
-
- output.put(key, uriConverter.makeReplayURI(cd,u));
-
- } else {
- // others go out as-is:
-
- output.put(key, value);
- }
- }
-}
Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ClientSideHTMLReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ClientSideHTMLReplayRenderer.java (rev 0)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ClientSideHTMLReplayRenderer.java 2008-07-22 02:45:34 UTC (rev 2480)
@@ -0,0 +1,86 @@
+/* ClientSideHTMLReplayRenderer
+ *
+ * $Id$
+ *
+ * Created on 2:23:03 PM Jul 18, 2008.
+ *
+ * Copyright (C) 2008 Internet Archive.
+ *
+ * This file is part of wayback.
+ *
+ * wayback is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * any later version.
+ *
+ * wayback is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser Public License
+ * along with wayback; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+package org.archive.wayback.archivalurl;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.archive.wayback.ResultURIConverter;
+import org.archive.wayback.core.CaptureSearchResult;
+import org.archive.wayback.core.CaptureSearchResults;
+import org.archive.wayback.core.Resource;
+import org.archive.wayback.core.WaybackRequest;
+import org.archive.wayback.replay.TextDocument;
+import org.archive.wayback.replay.TextReplayRenderer;
+import org.archive.wayback.replay.HttpHeaderProcessor;
+
+/**
+ *
+ *
+ * @author brad
+ * @version $Date$, $Revision$
+ */
+public class ClientSideHTMLReplayRenderer extends TextReplayRenderer {
+ /**
+ * @param httpHeaderProcessor
+ */
+ public ClientSideHTMLReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
+ super(httpHeaderProcessor);
+ }
+
+ /* (non-Javadoc)
+ * @see org.archive.wayback.replay.HTMLReplayRenderer#updatePage(org.archive.wayback.replay.HTMLPage, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.CaptureSearchResults)
+ */
+ @Override
+ protected void updatePage(TextDocument page, HttpServletRequest httpRequest,
+ HttpServletResponse httpResponse, WaybackRequest wbRequest,
+ CaptureSearchResult result, Resource resource,
+ ResultURIConverter uriConverter, CaptureSearchResults results)
+ throws ServletException, IOException {
+
+ List<String> jspInserts = getJspInserts();
+
+ StringBuilder toInsert = new StringBuilder(300);
+
+ page.resolvePageUrls();
+
+ // hope we're configured to use ClientSideJSInsert.jsp!
+ if(jspInserts != null) {
+ Iterator<String> itr = jspInserts.iterator();
+ while(itr.hasNext()) {
+ toInsert.append(page.includeJspString(itr.next(), httpRequest,
+ httpResponse, wbRequest, results, result, resource));
+ }
+ }
+
+ // insert the new content:
+ page.insertAtEndOfBody(toInsert.toString());
+ }
+}
Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ServerSideHTMLReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ServerSideHTMLReplayRenderer.java (rev 0)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ServerSideHTMLReplayRenderer.java 2008-07-22 02:45:34 UTC (rev 2480)
@@ -0,0 +1,84 @@
+/* ServerSideHTMLReplayRenderer
+ *
+ * $Id$
+ *
+ * Created on 2:21:16 PM Jul 18, 2008.
+ *
+ * Copyright (C) 2008 Internet Archive.
+ *
+ * This file is part of wayback.
+ *
+ * wayback is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * any later version.
+ *
+ * wayback is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser Public License
+ * along with wayback; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+package org.archive.wayback.archivalurl;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.archive.wayback.ResultURIConverter;
+import org.archive.wayback.core.CaptureSearchResult;
+import org.archive.wayback.core.CaptureSearchResults;
+import org.archive.wayback.core.Resource;
+import org.archive.wayback.core.WaybackRequest;
+import org.archive.wayback.replay.TextDocument;
+import org.archive.wayback.replay.TextReplayRenderer;
+import org.archive.wayback.replay.HttpHeaderProcessor;
+
+/**
+ *
+ *
+ * @author brad
+ * @version $Date$, $Revision$
+ */
+public class ServerSideHTMLReplayRenderer extends TextReplayRenderer {
+ /**
+ * @param httpHeaderProcessor
+ */
+ public ServerSideHTMLReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
+ super(httpHeaderProcessor);
+ }
+
+ /* (non-Javadoc)
+ * @see org.archive.wayback.replay.HTMLReplayRenderer#updatePage(org.archive.wayback.replay.HTMLPage, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource, org.archive.wayback.ResultURIConverter, org.archive.wayback.core.CaptureSearchResults)
+ */
+ @Override
+ protected void updatePage(TextDocument page, HttpServletRequest httpRequest,
+ HttpServletResponse httpResponse, WaybackRequest wbRequest,
+ CaptureSearchResult result, Resource resource,
+ ResultURIConverter uriConverter, CaptureSearchResults results)
+ throws ServletException, IOException {
+
+ List<String> jspInserts = getJspInserts();
+
+ StringBuilder toInsert = new StringBuilder(300);
+
+ page.resolveAllPageUrls();
+ if(jspInserts != null) {
+ Iterator<String> itr = jspInserts.iterator();
+ while(itr.hasNext()) {
+ toInsert.append(page.includeJspString(itr.next(), httpRequest,
+ httpResponse, wbRequest, results, result, resource));
+ }
+ }
+
+ // insert the new content:
+ page.insertAtStartOfBody(toInsert.toString());
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bra...@us...> - 2009-05-20 02:20:50
|
Revision: 2719
http://archive-access.svn.sourceforge.net/archive-access/?rev=2719&view=rev
Author: bradtofel
Date: 2009-05-20 02:20:42 +0000 (Wed, 20 May 2009)
Log Message:
-----------
FEATURE: Now parses archival URL flags (cs_, js_, im_) from the datespec of archival URLs, enabling better handling of specific content types based on how they are included in HTML pages: We no longer need rely on the mime type of pages to determine how we mark them up as they are replayed.
Modified Paths:
--------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2009-05-20 02:18:23 UTC (rev 2718)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2009-05-20 02:20:42 UTC (rev 2719)
@@ -42,6 +42,11 @@
* @version $Date$, $Revision$
*/
public class ArchivalUrlRequestParser extends CompositeRequestParser {
+ public final static String FLAG_DELIM = "_";
+ public final static String JS_CONTEXT = "js";
+ public final static String CSS_CONTEXT = "cs";
+ public final static String IMG_CONTEXT = "im";
+
protected RequestParser[] getRequestParsers() {
RequestParser[] theParsers = {
new ReplayRequestParser(this),
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java 2009-05-20 02:18:23 UTC (rev 2718)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java 2009-05-20 02:20:42 UTC (rev 2719)
@@ -27,6 +27,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.archive.wayback.archivalurl.ArchivalUrlRequestParser;
import org.archive.wayback.core.WaybackRequest;
import org.archive.wayback.requestparser.BaseRequestParser;
import org.archive.wayback.requestparser.PathRequestParser;
@@ -41,10 +42,11 @@
*/
public class ReplayRequestParser extends PathRequestParser {
/**
- * Regex which parses Archival URL replay requests into timestamp + url
+ * Regex which parses Archival URL replay requests into:
+ * timestamp, flags, & url
*/
- private final Pattern WB_REQUEST_REGEX = Pattern
- .compile("^(\\d{1,14})/(.*)$");
+ public final static Pattern WB_REQUEST_REGEX = Pattern
+ .compile("^(\\d{1,14})(([a-z]{2}_)*)/(.*)$");
/**
* @param wrapped
@@ -60,7 +62,9 @@
if (matcher != null && matcher.matches()) {
wbRequest = new WaybackRequest();
String dateStr = matcher.group(1);
- urlStr = matcher.group(2);
+ urlStr = matcher.group(4);
+ String flags = matcher.group(2);
+ assignFlags(wbRequest,flags);
// The logic of the classic WM wrt timestamp bounding:
// if 14-digits are specified, assume min-max range boundaries
@@ -71,6 +75,11 @@
String startDate = null;
String endDate = null;
+ if (dateStr.length() == 12) {
+ // assume this is one of those old old alexa ARCs which has
+ // some 12-digit dates. Pad with "00";
+ dateStr = dateStr.concat("00");
+ }
if (dateStr.length() == 14) {
startDate = getEarliestTimestamp();
endDate = getLatestTimestamp();
@@ -100,4 +109,23 @@
return wbRequest;
}
+ /**
+ * @param wbRequest
+ * @param flagsStr : "js_", "", "cs_", "cs_js_"
+ */
+ private void assignFlags(WaybackRequest wbRequest, String flagsStr) {
+ if(flagsStr != null) {
+ String[] flags = flagsStr.split(
+ ArchivalUrlRequestParser.FLAG_DELIM);
+ for(String flag: flags) {
+ if(flag.equals(ArchivalUrlRequestParser.CSS_CONTEXT)) {
+ wbRequest.setCSSContext(true);
+ } else if(flag.equals(ArchivalUrlRequestParser.JS_CONTEXT)) {
+ wbRequest.setJSContext(true);
+ } else if(flag.equals(ArchivalUrlRequestParser.IMG_CONTEXT)) {
+ wbRequest.setIMGContext(true);
+ }
+ }
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bra...@us...> - 2009-10-23 00:58:51
|
Revision: 2828
http://archive-access.svn.sourceforge.net/archive-access/?rev=2828&view=rev
Author: bradtofel
Date: 2009-10-23 00:58:43 +0000 (Fri, 23 Oct 2009)
Log Message:
-----------
FEATURE: now parses "charset detection mode" flag ("cm#_") to specify different strategies.
Modified Paths:
--------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2009-10-23 00:46:31 UTC (rev 2827)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2009-10-23 00:58:43 UTC (rev 2828)
@@ -46,6 +46,7 @@
public final static String JS_CONTEXT = "js";
public final static String CSS_CONTEXT = "cs";
public final static String IMG_CONTEXT = "im";
+ public final static String CHARSET_MODE = "cm";
protected RequestParser[] getRequestParsers() {
RequestParser[] theParsers = {
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java 2009-10-23 00:46:31 UTC (rev 2827)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java 2009-10-23 00:58:43 UTC (rev 2828)
@@ -46,7 +46,7 @@
* timestamp, flags, & url
*/
public final static Pattern WB_REQUEST_REGEX = Pattern
- .compile("^(\\d{1,14})(([a-z]{2}_)*)/(.*)$");
+ .compile("^(\\d{1,14})(([a-z]{2}[0-9]*_)*)/(.*)$");
/**
* @param wrapped
@@ -124,6 +124,11 @@
wbRequest.setJSContext(true);
} else if(flag.equals(ArchivalUrlRequestParser.IMG_CONTEXT)) {
wbRequest.setIMGContext(true);
+ } else if(flag.startsWith(ArchivalUrlRequestParser.CHARSET_MODE)) {
+ String modeString = flag.substring(
+ ArchivalUrlRequestParser.CHARSET_MODE.length());
+ int mode = Integer.parseInt(modeString);
+ wbRequest.setCharsetMode(mode);
}
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bra...@us...> - 2009-11-05 23:50:24
|
Revision: 2882
http://archive-access.svn.sourceforge.net/archive-access/?rev=2882&view=rev
Author: bradtofel
Date: 2009-11-05 23:50:17 +0000 (Thu, 05 Nov 2009)
Log Message:
-----------
INITIAL REV: SAX based, configurable server side rewriting of HTML content.
Added Paths:
-----------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java
Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java (rev 0)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java 2009-11-05 23:50:17 UTC (rev 2882)
@@ -0,0 +1,52 @@
+/* ArchivalUrlContextResultURIConverterFactory
+ *
+ * $Id$:
+ *
+ * Created on Nov 5, 2009.
+ *
+ * Copyright (C) 2006 Internet Archive.
+ *
+ * This file is part of Wayback.
+ *
+ * Wayback is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * any later version.
+ *
+ * Wayback is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser Public License
+ * along with Wayback; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+package org.archive.wayback.archivalurl;
+
+import org.archive.wayback.ResultURIConverter;
+import org.archive.wayback.replay.html.ContextResultURIConverterFactory;
+
+/**
+ * @author brad
+ *
+ */
+public class ArchivalUrlContextResultURIConverterFactory
+ implements ContextResultURIConverterFactory {
+ private ArchivalUrlResultURIConverter converter = null;
+ public ArchivalUrlContextResultURIConverterFactory(
+ ArchivalUrlResultURIConverter converter) {
+ this.converter = converter;
+ }
+ /* (non-Javadoc)
+ * @see org.archive.wayback.replay.html.ContextResultURIConverterFactory#getContextConverter(java.lang.String)
+ */
+ public ResultURIConverter getContextConverter(String flags) {
+ if(flags == null) {
+ return converter;
+ }
+ return new ArchivalUrlSpecialContextResultURIConverter(converter,flags);
+ }
+
+}
Property changes on: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision Id
Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java (rev 0)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java 2009-11-05 23:50:17 UTC (rev 2882)
@@ -0,0 +1,174 @@
+/* ArchivalUrlSAXRewriteReplayRenderer
+ *
+ * $Id$
+ *
+ * Created on 12:15:33 PM Feb 12, 2009.
+ *
+ * Copyright (C) 2009 Internet Archive.
+ *
+ * This file is part of wayback.
+ *
+ * wayback is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * any later version.
+ *
+ * wayback is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser Public License
+ * along with wayback; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+package org.archive.wayback.archivalurl;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.archive.wayback.ReplayRenderer;
+import org.archive.wayback.ResultURIConverter;
+import org.archive.wayback.core.CaptureSearchResult;
+import org.archive.wayback.core.CaptureSearchResults;
+import org.archive.wayback.core.Resource;
+import org.archive.wayback.core.WaybackRequest;
+import org.archive.wayback.exception.WaybackException;
+import org.archive.wayback.replay.HttpHeaderOperation;
+import org.archive.wayback.replay.HttpHeaderProcessor;
+import org.archive.wayback.replay.JSPExecutor;
+import org.archive.wayback.replay.charset.CharsetDetector;
+import org.archive.wayback.replay.charset.StandardCharsetDetector;
+import org.archive.wayback.replay.html.ReplayParseEventDelegator;
+import org.archive.wayback.replay.html.ReplayParseContext;
+import org.archive.wayback.util.htmllex.ContextAwareLexer;
+import org.htmlparser.Node;
+import org.htmlparser.lexer.Lexer;
+import org.htmlparser.lexer.Page;
+import org.htmlparser.util.ParserException;
+
+public class ArchivalUrlSAXRewriteReplayRenderer implements ReplayRenderer {
+ private ReplayParseEventDelegator delegator = null;
+ private HttpHeaderProcessor httpHeaderProcessor;
+ private CharsetDetector charsetDetector = new StandardCharsetDetector();
+ private final static String OUTPUT_CHARSET = "utf-8";
+
+ public ArchivalUrlSAXRewriteReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
+ this.httpHeaderProcessor = httpHeaderProcessor;
+ }
+
+ // assume this is only called for appropriate doc types: html
+ public void renderResource(HttpServletRequest httpRequest,
+ HttpServletResponse httpResponse, WaybackRequest wbRequest,
+ CaptureSearchResult result, Resource resource,
+ ResultURIConverter uriConverter, CaptureSearchResults results)
+ throws ServletException, IOException, WaybackException {
+
+ // copy the HTTP response code:
+ HttpHeaderOperation.copyHTTPMessageHeader(resource, httpResponse);
+
+ // transform the original headers according to our headerProcessor:
+ Map<String,String> headers = HttpHeaderOperation.processHeaders(
+ resource, result, uriConverter, httpHeaderProcessor);
+
+ // prepare several objects for the parse:
+
+ // a JSPExecutor:
+ JSPExecutor jspExec = new JSPExecutor(uriConverter, httpRequest,
+ httpResponse, wbRequest, results, result, resource);
+
+ // The URL of the page, for resolving in-page relative URLs:
+ URL url = null;
+ try {
+ url = new URL(result.getOriginalUrl());
+ } catch (MalformedURLException e1) {
+ // TODO: this shouldn't happen...
+ throw new IOException(e1);
+ }
+
+ // To make sure we get the length, we have to buffer it all up...
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ ArchivalUrlContextResultURIConverterFactory fact =
+ new ArchivalUrlContextResultURIConverterFactory(
+ (ArchivalUrlResultURIConverter) uriConverter);
+ // set up the context:
+ ReplayParseContext context =
+ new ReplayParseContext(fact,url,result.getCaptureTimestamp());
+ context.setOutputCharset(OUTPUT_CHARSET);
+ context.setOutputStream(baos);
+ context.setJspExec(jspExec);
+
+ // determine the character set used to encode the document bytes:
+ String charSet = charsetDetector.getCharset(resource, wbRequest);
+
+ // and finally, parse, using the special lexer that knows how to
+ // handle javascript blocks containing unescaped HTML entities:
+ Page lexPage = new Page(resource,charSet);
+ ContextAwareLexer lex = new ContextAwareLexer(new Lexer(lexPage),
+ context);
+ Node node;
+ try {
+ while((node = lex.nextNode()) != null) {
+ delegator.handleNode(context, node);
+ }
+ delegator.handleParseComplete(context);
+ } catch (ParserException e) {
+ e.printStackTrace();
+ throw new IOException(e);
+ }
+
+ // At this point, baos contains the utf-8 encoded bytes of our result:
+ byte[] utf8Bytes = baos.toByteArray();
+ // set the corrected length:
+ headers.put(HttpHeaderOperation.HTTP_LENGTH_HEADER,
+ String.valueOf(utf8Bytes.length));
+ headers.put("X-Wayback-Guessed-Charset", charSet);
+
+ // send back the headers:
+ HttpHeaderOperation.sendHeaders(headers, httpResponse);
+ // Tomcat will always send a charset... It's trying to be smarter than
+ // we are. If the original page didn't include a "charset" as part of
+ // the "Content-Type" HTTP header, then Tomcat will use the default..
+ // who knows what that is, or what that will do to the page..
+ // let's try explicitly setting it to what we used:
+ httpResponse.setCharacterEncoding(OUTPUT_CHARSET);
+
+ httpResponse.getOutputStream().write(utf8Bytes);
+ }
+
+ /**
+ * @return the charsetDetector
+ */
+ public CharsetDetector getCharsetDetector() {
+ return charsetDetector;
+ }
+
+ /**
+ * @param charsetDetector the charsetDetector to set
+ */
+ public void setCharsetDetector(CharsetDetector charsetDetector) {
+ this.charsetDetector = charsetDetector;
+ }
+
+ /**
+ * @return the delegator
+ */
+ public ReplayParseEventDelegator getDelegator() {
+ return delegator;
+ }
+
+ /**
+ * @param delegator the delegator to set
+ */
+ public void setDelegator(ReplayParseEventDelegator delegator) {
+ this.delegator = delegator;
+ }
+}
Property changes on: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision Id
Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java (rev 0)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java 2009-11-05 23:50:17 UTC (rev 2882)
@@ -0,0 +1,63 @@
+/* ArchivalUrlSpecialContextResultURIConverter
+ *
+ * $Id$
+ *
+ * Created on 12:15:33 PM Feb 12, 2009.
+ *
+ * Copyright (C) 2009 Internet Archive.
+ *
+ * This file is part of wayback.
+ *
+ * wayback is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * any later version.
+ *
+ * wayback is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser Public License
+ * along with wayback; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+package org.archive.wayback.archivalurl;
+
+import org.archive.wayback.ResultURIConverter;
+
+/**
+ *
+ *
+ * @author brad
+ * @version $Date$, $Revision$
+ */
+
+public class ArchivalUrlSpecialContextResultURIConverter
+implements ResultURIConverter {
+
+
+ private String replayURIPrefix = null;
+ private String context;
+
+ public ArchivalUrlSpecialContextResultURIConverter(
+ ArchivalUrlResultURIConverter converter, String context) {
+ replayURIPrefix = converter.getReplayURIPrefix();
+ this.context = context;
+ }
+
+ /* (non-Javadoc)
+ * @see org.archive.wayback.ResultURIConverter#makeReplayURI(java.lang.String, java.lang.String)
+ */
+ public String makeReplayURI(String datespec, String url) {
+ String suffix = datespec + context + "/" + url;
+ if(replayURIPrefix == null) {
+ return suffix;
+ } else {
+ if(url.startsWith(replayURIPrefix)) {
+ return url;
+ }
+ return replayURIPrefix + suffix;
+ }
+ }
+}
Property changes on: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision Id
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bra...@us...> - 2009-11-08 01:59:41
|
Revision: 2918
http://archive-access.svn.sourceforge.net/archive-access/?rev=2918&view=rev
Author: bradtofel
Date: 2009-11-08 01:59:29 +0000 (Sun, 08 Nov 2009)
Log Message:
-----------
JAVADOC: updated javadoc for public methods
Modified Paths:
--------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlASXReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlCSSReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlJSReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ClientSideHTMLReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ServerSideHTMLReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathDatePrefixQueryRequestParser.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathDateRangeQueryRequestParser.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathPrefixDatePrefixQueryRequestParser.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathPrefixDateRangeQueryRequestParser.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlASXReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlASXReplayRenderer.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlASXReplayRenderer.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -39,10 +39,14 @@
import org.archive.wayback.replay.TextReplayRenderer;
import org.archive.wayback.replay.HttpHeaderProcessor;
+/**
+ * @author brad
+ *
+ */
public class ArchivalUrlASXReplayRenderer extends TextReplayRenderer {
/**
- * @param httpHeaderProcessor
+ * @param httpHeaderProcessor which should process HTTP headers
*/
public ArchivalUrlASXReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
super(httpHeaderProcessor);
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlCSSReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlCSSReplayRenderer.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlCSSReplayRenderer.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -41,10 +41,16 @@
import org.archive.wayback.replay.TextReplayRenderer;
import org.archive.wayback.replay.HttpHeaderProcessor;
+/**
+ * ReplayRenderer which attempts to rewrite URLs found within a text/css
+ * document to load from this context.
+ * @author brad
+ *
+ */
public class ArchivalUrlCSSReplayRenderer extends TextReplayRenderer {
/**
- * @param httpHeaderProcessor
+ * @param httpHeaderProcessor which should process HTTP headers
*/
public ArchivalUrlCSSReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
super(httpHeaderProcessor);
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlContextResultURIConverterFactory.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -29,12 +29,17 @@
import org.archive.wayback.replay.html.ContextResultURIConverterFactory;
/**
+ * Factory which creates a context specific ArchivalUrlResultURIConverter,
+ * given a base ArchivalUrlResultURIConverter and the flags to add.
* @author brad
*
*/
public class ArchivalUrlContextResultURIConverterFactory
implements ContextResultURIConverterFactory {
private ArchivalUrlResultURIConverter converter = null;
+ /**
+ * @param converter base ArchivalURLURLConverter to wrap
+ */
public ArchivalUrlContextResultURIConverterFactory(
ArchivalUrlResultURIConverter converter) {
this.converter = converter;
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlJSReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlJSReplayRenderer.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlJSReplayRenderer.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -45,15 +45,17 @@
import org.archive.wayback.util.Timestamp;
/**
+ * ReplayRenderer which attempts to rewrite absolute URLs within a
+ * text/javascript document to make them load correctly from an ArchivalURL
+ * AccessPoint.
*
- *
* @author brad
* @version $Date$, $Revision$
*/
public class ArchivalUrlJSReplayRenderer extends TextReplayRenderer {
/**
- * @param httpHeaderProcessor
+ * @param httpHeaderProcessor which should process HTTP headers
*/
public ArchivalUrlJSReplayRenderer(
HttpHeaderProcessor httpHeaderProcessor) {
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -42,10 +42,26 @@
* @version $Date$, $Revision$
*/
public class ArchivalUrlRequestParser extends CompositeRequestParser {
+ /**
+ * delimiter character for datespec flags
+ */
public final static String FLAG_DELIM = "_";
+ /**
+ * text/javascript context
+ */
public final static String JS_CONTEXT = "js";
+ /**
+ * text/css context
+ */
public final static String CSS_CONTEXT = "cs";
+ /**
+ * image/* context
+ */
public final static String IMG_CONTEXT = "im";
+ /**
+ * Charset detection strategy context - should be followed by an integer
+ * indicating which strategy to use
+ */
public final static String CHARSET_MODE = "cm";
protected RequestParser[] getRequestParsers() {
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSAXRewriteReplayRenderer.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -54,12 +54,22 @@
import org.htmlparser.lexer.Page;
import org.htmlparser.util.ParserException;
+/**
+ * ReplayRenderer which attempts to rewrite text/html documents so URLs
+ * references within the document load from the correct ArchivalURL AccessPoint.
+ *
+ * @author brad
+ *
+ */
public class ArchivalUrlSAXRewriteReplayRenderer implements ReplayRenderer {
private ReplayParseEventDelegator delegator = null;
private HttpHeaderProcessor httpHeaderProcessor;
private CharsetDetector charsetDetector = new StandardCharsetDetector();
private final static String OUTPUT_CHARSET = "utf-8";
+ /**
+ * @param httpHeaderProcessor which should process HTTP headers
+ */
public ArchivalUrlSAXRewriteReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
this.httpHeaderProcessor = httpHeaderProcessor;
}
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlSpecialContextResultURIConverter.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -27,8 +27,9 @@
import org.archive.wayback.ResultURIConverter;
/**
+ * wrapper around an ArchivalUrlResultURIConverter, adding flags after the
+ * datespec for a specific context ("js_" for javascript, "cs_" for CSS, etc)
*
- *
* @author brad
* @version $Date$, $Revision$
*/
@@ -40,6 +41,11 @@
private String replayURIPrefix = null;
private String context;
+ /**
+ * @param converter ArchivalUrlResultURIConverter to wrap
+ * @param context flags indicating the context of URLs created by this
+ * object
+ */
public ArchivalUrlSpecialContextResultURIConverter(
ArchivalUrlResultURIConverter converter, String context) {
replayURIPrefix = converter.getReplayURIPrefix();
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ClientSideHTMLReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ClientSideHTMLReplayRenderer.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ClientSideHTMLReplayRenderer.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -42,14 +42,16 @@
import org.archive.wayback.replay.HttpHeaderProcessor;
/**
+ * Classic ReplayRenderer which uses a combination of server-side modification
+ * and embedded javascript to rewrite URLs within an HTML page to make embedded
+ * URLs point back to a specific ArchivalURL AccessPoint.
*
- *
* @author brad
* @version $Date$, $Revision$
*/
public class ClientSideHTMLReplayRenderer extends TextReplayRenderer {
/**
- * @param httpHeaderProcessor
+ * @param httpHeaderProcessor which should process HTTP headers
*/
public ClientSideHTMLReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
super(httpHeaderProcessor);
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ServerSideHTMLReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ServerSideHTMLReplayRenderer.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ServerSideHTMLReplayRenderer.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -42,14 +42,15 @@
import org.archive.wayback.replay.HttpHeaderProcessor;
/**
+ * ArchivalUrl ReplayRenderer which uses a series of RegEx's to rewrite embedded
+ * URLs to point back into a specific ArchivalUrl AccessPoint.
*
- *
* @author brad
* @version $Date$, $Revision$
*/
public class ServerSideHTMLReplayRenderer extends TextReplayRenderer {
/**
- * @param httpHeaderProcessor
+ * @param httpHeaderProcessor which should process HTTP headers
*/
public ServerSideHTMLReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) {
super(httpHeaderProcessor);
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathDatePrefixQueryRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathDatePrefixQueryRequestParser.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathDatePrefixQueryRequestParser.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -41,7 +41,7 @@
*/
public class PathDatePrefixQueryRequestParser extends PathRequestParser {
/**
- * @param wrapped
+ * @param wrapped BaseRequestParser which provides general configuration
*/
public PathDatePrefixQueryRequestParser(BaseRequestParser wrapped) {
super(wrapped);
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathDateRangeQueryRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathDateRangeQueryRequestParser.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathDateRangeQueryRequestParser.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -42,7 +42,7 @@
public class PathDateRangeQueryRequestParser extends PathRequestParser {
/**
- * @param wrapped
+ * @param wrapped BaseRequestParser which provides general configuration
*/
public PathDateRangeQueryRequestParser(BaseRequestParser wrapped) {
super(wrapped);
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathPrefixDatePrefixQueryRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathPrefixDatePrefixQueryRequestParser.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathPrefixDatePrefixQueryRequestParser.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -41,7 +41,7 @@
*/
public class PathPrefixDatePrefixQueryRequestParser extends PathRequestParser {
/**
- * @param wrapped
+ * @param wrapped BaseRequestParser which provides general configuration
*/
public PathPrefixDatePrefixQueryRequestParser(BaseRequestParser wrapped) {
super(wrapped);
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathPrefixDateRangeQueryRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathPrefixDateRangeQueryRequestParser.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/PathPrefixDateRangeQueryRequestParser.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -41,7 +41,7 @@
*/
public class PathPrefixDateRangeQueryRequestParser extends PathRequestParser {
/**
- * @param wrapped
+ * @param wrapped BaseRequestParser which provides general configuration
*/
public PathPrefixDateRangeQueryRequestParser(BaseRequestParser wrapped) {
super(wrapped);
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java 2009-11-08 01:33:37 UTC (rev 2917)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java 2009-11-08 01:59:29 UTC (rev 2918)
@@ -49,7 +49,7 @@
.compile("^(\\d{1,14})(([a-z]{2}[0-9]*_)*)/(.*)$");
/**
- * @param wrapped
+ * @param wrapped BaseRequestParser which provides general configuration
*/
public ReplayRequestParser(BaseRequestParser wrapped) {
super(wrapped);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bra...@us...> - 2010-04-27 22:06:36
|
Revision: 3073
http://archive-access.svn.sourceforge.net/archive-access/?rev=3073&view=rev
Author: bradtofel
Date: 2010-04-27 22:06:30 +0000 (Tue, 27 Apr 2010)
Log Message:
-----------
INITIAL REV: new Archival URL RequestParser component implementation, which allows requests without a datespec, and redirects the client to a replay request for the supplied URL, for the current timestamp
Modified Paths:
--------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
Added Paths:
-----------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/DatelessReplayRequestParser.java
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2010-04-27 22:03:42 UTC (rev 3072)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2010-04-27 22:06:30 UTC (rev 3073)
@@ -25,6 +25,7 @@
package org.archive.wayback.archivalurl;
import org.archive.wayback.RequestParser;
+import org.archive.wayback.archivalurl.requestparser.DatelessReplayRequestParser;
import org.archive.wayback.archivalurl.requestparser.PathDatePrefixQueryRequestParser;
import org.archive.wayback.archivalurl.requestparser.PathDateRangeQueryRequestParser;
import org.archive.wayback.archivalurl.requestparser.PathPrefixDatePrefixQueryRequestParser;
@@ -76,7 +77,8 @@
new PathPrefixDatePrefixQueryRequestParser(this),
new PathPrefixDateRangeQueryRequestParser(this),
new OpenSearchRequestParser(this),
- new FormRequestParser(this)
+ new FormRequestParser(this),
+ new DatelessReplayRequestParser(this)
};
return theParsers;
}
Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/DatelessReplayRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/DatelessReplayRequestParser.java (rev 0)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/DatelessReplayRequestParser.java 2010-04-27 22:06:30 UTC (rev 3073)
@@ -0,0 +1,106 @@
+/* DatelessReplayRequestParser
+ *
+ * $Id$:
+ *
+ * Created on Apr 26, 2010.
+ *
+ * Copyright (C) 2006 Internet Archive.
+ *
+ * This file is part of Wayback.
+ *
+ * Wayback is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * any later version.
+ *
+ * Wayback is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser Public License
+ * along with Wayback; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+package org.archive.wayback.archivalurl.requestparser;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.archive.wayback.core.WaybackRequest;
+import org.archive.wayback.exception.BadQueryException;
+import org.archive.wayback.exception.BetterRequestException;
+import org.archive.wayback.requestparser.BaseRequestParser;
+import org.archive.wayback.requestparser.PathRequestParser;
+import org.archive.wayback.util.Timestamp;
+import org.archive.wayback.util.url.UrlOperations;
+import org.archive.wayback.webapp.AccessPoint;
+
+
+/**
+ * @author brad
+ *
+ */
+public class DatelessReplayRequestParser extends PathRequestParser {
+
+ /**
+ * @param wrapped the BaseRequestParser being wrapped
+ */
+ public DatelessReplayRequestParser(BaseRequestParser wrapped) {
+ super(wrapped);
+ }
+
+ public WaybackRequest parse(String requestPath, AccessPoint accessPoint)
+ throws BetterRequestException, BadQueryException {
+ /*
+ *
+ * We're trying to catch requests without a datespec, in which case,
+ * we just redirect to the same request, inserting today's datespec,
+ * and then we'll let the normal redirection occur.
+ *
+ * The one tricky point is that we don't want to defeat the
+ * server-relative redirection handling, so we want to do some
+ * inspection to make sure it actually looks like an URL, and not like:
+ *
+ * images/foo.gif
+ * redirect.php?blargity=blargblarg
+ *
+ * What would be perfect is if the user supplied http:// at the front.
+ *
+ * So, we'll assume that if we see that, we either match, or throw a
+ * BadQueryException.
+ *
+ */
+
+ String scheme = UrlOperations.urlToScheme(requestPath);
+ if(scheme == null) {
+ try {
+ URL u = new URL(UrlOperations.HTTP_SCHEME + requestPath);
+ // does the authority look legit?
+ if(u.getUserInfo() != null) {
+ throw new BadQueryException("Unable to handle URLs with user information");
+ }
+ if(UrlOperations.isAuthority(u.getAuthority())) {
+ // ok, we're going to assume this is good:
+ String nowTS = Timestamp.currentTimestamp().getDateStr();
+ String newUrl =
+ accessPoint.getUriConverter().makeReplayURI(nowTS, requestPath);
+ throw new BetterRequestException(newUrl);
+ }
+ } catch(MalformedURLException e) {
+ // eat it silently
+ }
+ } else {
+ // OK, we're going to assume this is a replay request, sans timestamp,
+ // ALWAYS redirect:
+
+ String nowTS = Timestamp.currentTimestamp().getDateStr();
+ String newUrl =
+ accessPoint.getUriConverter().makeReplayURI(nowTS, requestPath);
+ throw new BetterRequestException(newUrl);
+ }
+ return null;
+ }
+
+}
Property changes on: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/DatelessReplayRequestParser.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision Id
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bra...@us...> - 2010-06-05 01:20:22
|
Revision: 3151
http://archive-access.svn.sourceforge.net/archive-access/?rev=3151&view=rev
Author: bradtofel
Date: 2010-06-05 01:20:16 +0000 (Sat, 05 Jun 2010)
Log Message:
-----------
Started refactoring some common ArchivalUrl code into it's own class: ArchivalUrl (finally!!)
subclassed FormRequestParser, with specialized ArchivalUrl version, which just throws a BetterRequestException to bounce the user to a "prettier" form of their request.
Modified Paths:
--------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
Added Paths:
-----------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ArchivalUrlFormRequestParser.java
Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java (rev 0)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java 2010-06-05 01:20:16 UTC (rev 3151)
@@ -0,0 +1,95 @@
+/* ArchivalUrl
+ *
+ * $Id$:
+ *
+ * Created on Jun 4, 2010.
+ *
+ * Copyright (C) 2006 Internet Archive.
+ *
+ * This file is part of Wayback.
+ *
+ * Wayback is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * any later version.
+ *
+ * Wayback is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser Public License
+ * along with Wayback; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+package org.archive.wayback.archivalurl;
+
+import org.archive.wayback.core.WaybackRequest;
+import org.archive.wayback.util.url.UrlOperations;
+
+/**
+ * @author brad
+ *
+ */
+public class ArchivalUrl {
+ public final static String STAR = "*";
+ private WaybackRequest wbRequest;
+// public ArchivalUrl(String path) {
+//
+// }
+ public ArchivalUrl(WaybackRequest wbRequest) {
+ this.wbRequest = wbRequest;
+ }
+
+ public String toString() {
+ if(wbRequest.isReplayRequest()) {
+ return toReplayString(wbRequest.getRequestUrl());
+ } else if(wbRequest.isCaptureQueryRequest()) {
+ return toQueryString(wbRequest.getRequestUrl());
+ }
+ return toPrefixQueryString(wbRequest.getRequestUrl());
+ }
+ public String toPrefixQueryString(String url) {
+ return toQueryString("url" + STAR);
+ }
+ public String toQueryString(String url) {
+ String datespec = STAR;
+ if((wbRequest.getStartTimestamp() != null) &&
+ (wbRequest.getEndTimestamp() != null)) {
+ datespec = String.format("%s-%s%s",
+ wbRequest.getStartTimestamp(),wbRequest.getEndTimestamp(),
+ STAR);
+ }
+ return toString(datespec,url);
+ }
+
+ public String toReplayString(String url) {
+ return toString(wbRequest.getReplayTimestamp(),url);
+ }
+
+ public String toString(String datespec, String url) {
+ StringBuilder sb =
+ new StringBuilder(url.length() + datespec.length()+10);
+ sb.append(datespec);
+ if(wbRequest.isCSSContext()) {
+ sb.append(ArchivalUrlRequestParser.CSS_CONTEXT);
+ sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ }
+ if(wbRequest.isJSContext()) {
+ sb.append(ArchivalUrlRequestParser.JS_CONTEXT);
+ sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ }
+ if(wbRequest.isIMGContext()) {
+ sb.append(ArchivalUrlRequestParser.IMG_CONTEXT);
+ sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ }
+ if(wbRequest.isIdentityContext()) {
+ sb.append(ArchivalUrlRequestParser.IDENTITY_CONTEXT);
+ sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ }
+ sb.append("/");
+ sb.append(UrlOperations.stripDefaultPortFromUrl(url));
+ return sb.toString();
+ }
+}
Property changes on: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision Id
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2010-06-05 01:16:53 UTC (rev 3150)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2010-06-05 01:20:16 UTC (rev 3151)
@@ -25,6 +25,7 @@
package org.archive.wayback.archivalurl;
import org.archive.wayback.RequestParser;
+import org.archive.wayback.archivalurl.requestparser.ArchivalUrlFormRequestParser;
import org.archive.wayback.archivalurl.requestparser.DatelessReplayRequestParser;
import org.archive.wayback.archivalurl.requestparser.PathDatePrefixQueryRequestParser;
import org.archive.wayback.archivalurl.requestparser.PathDateRangeQueryRequestParser;
@@ -77,7 +78,7 @@
new PathPrefixDatePrefixQueryRequestParser(this),
new PathPrefixDateRangeQueryRequestParser(this),
new OpenSearchRequestParser(this),
- new FormRequestParser(this),
+ new ArchivalUrlFormRequestParser(this),
new DatelessReplayRequestParser(this)
};
return theParsers;
Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ArchivalUrlFormRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ArchivalUrlFormRequestParser.java (rev 0)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ArchivalUrlFormRequestParser.java 2010-06-05 01:20:16 UTC (rev 3151)
@@ -0,0 +1,73 @@
+/* ArchivalUrlFormRequestParser
+ *
+ * $Id$:
+ *
+ * Created on Jun 4, 2010.
+ *
+ * Copyright (C) 2006 Internet Archive.
+ *
+ * This file is part of Wayback.
+ *
+ * Wayback is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * any later version.
+ *
+ * Wayback is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser Public License
+ * along with Wayback; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+package org.archive.wayback.archivalurl.requestparser;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.archive.wayback.archivalurl.ArchivalUrl;
+import org.archive.wayback.core.WaybackRequest;
+import org.archive.wayback.exception.BetterRequestException;
+import org.archive.wayback.requestparser.BaseRequestParser;
+import org.archive.wayback.requestparser.FormRequestParser;
+import org.archive.wayback.webapp.AccessPoint;
+
+/**
+ * @author brad
+ *
+ */
+public class ArchivalUrlFormRequestParser extends FormRequestParser {
+ /**
+ * @param wrapped BaseRequestParser to wrap
+ */
+ public ArchivalUrlFormRequestParser(BaseRequestParser wrapped) {
+ super(wrapped);
+ }
+ public WaybackRequest parse(HttpServletRequest httpRequest,
+ AccessPoint accessPoint) throws BetterRequestException {
+ WaybackRequest wbRequest = super.parse(httpRequest, accessPoint);
+ if(wbRequest != null) {
+ String replayTimestamp = wbRequest.getReplayTimestamp();
+ if((replayTimestamp != null) && replayTimestamp.length() == 0) {
+ // lets call it a star query:
+ // TODO: should we clone?
+ wbRequest.setStartTimestamp(null);
+ wbRequest.setEndTimestamp(null);
+ }
+ String requestPath =
+ accessPoint.translateRequestPathQuery(httpRequest);
+ ArchivalUrl aUrl = new ArchivalUrl(wbRequest);
+ String bestPath = aUrl.toString();
+ if(!bestPath.equals(requestPath)) {
+ String betterURI = (wbRequest.isReplayRequest() ?
+ accessPoint.getReplayPrefix() :
+ accessPoint.getQueryPrefix())
+ + bestPath;
+ throw new BetterRequestException(betterURI);
+ }
+ }
+ return wbRequest;
+ }
+}
Property changes on: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ArchivalUrlFormRequestParser.java
___________________________________________________________________
Added: svn:keywords
+ Author Date Revision Id
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <bra...@us...> - 2011-05-25 01:37:54
|
Revision: 3452
http://archive-access.svn.sourceforge.net/archive-access/?rev=3452&view=rev
Author: bradtofel
Date: 2011-05-25 01:37:48 +0000 (Wed, 25 May 2011)
Log Message:
-----------
REFACTOR: moved flag assignment and parsing code into ArchivalUrl
Modified Paths:
--------------
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlDateRedirectReplayRenderer.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java 2011-05-25 01:37:10 UTC (rev 3451)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrl.java 2011-05-25 01:37:48 UTC (rev 3452)
@@ -61,37 +61,106 @@
public String toReplayString(String url) {
return toString(wbRequest.getReplayTimestamp(),url);
}
+ public String getDateSpec() {
+ return getDateSpec(wbRequest.getReplayTimestamp());
+ }
- public String toString(String datespec, String url) {
+ /**
+ * Given a date, create a new datespec + flags
+ * which represent the same options as requested by the WaybackRequest
+ * @param timestamp the 14-digit timestamp to use
+ * @return a String representing the flags on the WaybackRequest for the
+ * specified date
+ */
+ public String getDateSpec(String datespec) {
int dateLen = 0;
if(datespec != null) {
dateLen = datespec.length();
}
StringBuilder sb =
- new StringBuilder(url.length() + dateLen +10);
+ new StringBuilder(dateLen +10);
if(dateLen > 0) {
sb.append(datespec);
}
+
if(wbRequest.isCSSContext()) {
sb.append(ArchivalUrlRequestParser.CSS_CONTEXT);
sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ dateLen++;
}
if(wbRequest.isJSContext()) {
sb.append(ArchivalUrlRequestParser.JS_CONTEXT);
sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ dateLen++;
}
if(wbRequest.isIMGContext()) {
sb.append(ArchivalUrlRequestParser.IMG_CONTEXT);
sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ dateLen++;
}
if(wbRequest.isIdentityContext()) {
sb.append(ArchivalUrlRequestParser.IDENTITY_CONTEXT);
sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ dateLen++;
}
- if(dateLen > 0) {
+ if(wbRequest.isIFrameWrapperContext()) {
+ sb.append(ArchivalUrlRequestParser.IFRAME_WRAPPED_CONTEXT);
+ sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ dateLen++;
+ }
+ if(wbRequest.isFrameWrapperContext()) {
+ sb.append(ArchivalUrlRequestParser.FRAME_WRAPPED_CONTEXT);
+ sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
+ dateLen++;
+ }
+ return sb.toString();
+ }
+
+ public String toString(String datespec, String url) {
+ int dateLen = 0;
+ if(datespec != null) {
+ dateLen = datespec.length();
+ }
+ StringBuilder sb =
+ new StringBuilder(url.length() + dateLen +10);
+ String dateSpec = getDateSpec(datespec);
+ sb.append(dateSpec);
+ if(dateSpec.length() > 0) {
sb.append("/");
}
sb.append(UrlOperations.stripDefaultPortFromUrl(url));
return sb.toString();
}
+
+ /**
+ * @param wbRequest
+ * @param flagsStr : "js_", "", "cs_", "cs_js_"
+ */
+ public static void assignFlags(WaybackRequest wbRequest, String flagsStr) {
+ if(flagsStr != null) {
+ String[] flags = flagsStr.split(
+ ArchivalUrlRequestParser.FLAG_DELIM);
+ for(String flag: flags) {
+ if(flag.equals(ArchivalUrlRequestParser.CSS_CONTEXT)) {
+ wbRequest.setCSSContext(true);
+ } else if(flag.equals(ArchivalUrlRequestParser.JS_CONTEXT)) {
+ wbRequest.setJSContext(true);
+ } else if(flag.equals(ArchivalUrlRequestParser.IMG_CONTEXT)) {
+ wbRequest.setIMGContext(true);
+ } else if(flag.equals(ArchivalUrlRequestParser.IDENTITY_CONTEXT)) {
+ wbRequest.setIdentityContext(true);
+ } else if(flag.equals(ArchivalUrlRequestParser.FRAME_WRAPPED_CONTEXT)) {
+ wbRequest.setFrameWrapperContext(true);
+ } else if(flag.equals(ArchivalUrlRequestParser.IFRAME_WRAPPED_CONTEXT)) {
+ wbRequest.setIFrameWrapperContext(true);
+ } else if(flag.startsWith(ArchivalUrlRequestParser.CHARSET_MODE)) {
+ String modeString = flag.substring(
+ ArchivalUrlRequestParser.CHARSET_MODE.length());
+ int mode = Integer.parseInt(modeString);
+ wbRequest.setCharsetMode(mode);
+ }
+ }
+ }
+ }
+
}
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlDateRedirectReplayRenderer.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlDateRedirectReplayRenderer.java 2011-05-25 01:37:10 UTC (rev 3451)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlDateRedirectReplayRenderer.java 2011-05-25 01:37:48 UTC (rev 3452)
@@ -52,41 +52,9 @@
// redirect to the better version:
String url = result.getOriginalUrl();
- String captureDate = makeFlagDateSpec(
- result.getCaptureTimestamp(),wbRequest);
-
- String betterURI = uriConverter.makeReplayURI(captureDate,url);
+ ArchivalUrl aUrl = new ArchivalUrl(wbRequest);
+ String dateSpec = aUrl.getDateSpec(result.getCaptureTimestamp());
+ String betterURI = uriConverter.makeReplayURI(dateSpec,url);
httpResponse.sendRedirect(betterURI);
}
-
- /**
- * Given a date, and a WaybackRequest object, create a new datespec + flags
- * which represent the same options as requested by the WaybackRequest
- * @param timestamp the 14-digit timestamp to use
- * @param request the WaybackRequest from which o get extra request option
- * flags
- * @return a String representing the flags on the WaybackRequest for the
- * specified date
- */
- public static String makeFlagDateSpec(String timestamp, WaybackRequest request) {
- StringBuilder sb = new StringBuilder();
- sb.append(timestamp);
- if(request.isCSSContext()) {
- sb.append(ArchivalUrlRequestParser.CSS_CONTEXT);
- sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
- }
- if(request.isJSContext()) {
- sb.append(ArchivalUrlRequestParser.JS_CONTEXT);
- sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
- }
- if(request.isIMGContext()) {
- sb.append(ArchivalUrlRequestParser.IMG_CONTEXT);
- sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
- }
- if(request.isIdentityContext()) {
- sb.append(ArchivalUrlRequestParser.IDENTITY_CONTEXT);
- sb.append(ArchivalUrlRequestParser.FLAG_DELIM);
- }
- return sb.toString();
- }
}
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2011-05-25 01:37:10 UTC (rev 3451)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/ArchivalUrlRequestParser.java 2011-05-25 01:37:48 UTC (rev 3452)
@@ -60,6 +60,14 @@
*/
public final static String IDENTITY_CONTEXT = "id";
/**
+ * frame-wrapper context
+ */
+ public final static String FRAME_WRAPPED_CONTEXT = "fw";
+ /**
+ * iframe-wrapped context
+ */
+ public final static String IFRAME_WRAPPED_CONTEXT = "if";
+ /**
* Charset detection strategy context - should be followed by an integer
* indicating which strategy to use
*/
Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java
===================================================================
--- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java 2011-05-25 01:37:10 UTC (rev 3451)
+++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/archivalurl/requestparser/ReplayRequestParser.java 2011-05-25 01:37:48 UTC (rev 3452)
@@ -22,6 +22,7 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.archive.wayback.archivalurl.ArchivalUrl;
import org.archive.wayback.archivalurl.ArchivalUrlRequestParser;
import org.archive.wayback.core.WaybackRequest;
import org.archive.wayback.exception.BetterRequestException;
@@ -62,7 +63,7 @@
String dateStr = matcher.group(1);
urlStr = matcher.group(4);
String flags = matcher.group(2);
- assignFlags(wbRequest,flags);
+ ArchivalUrl.assignFlags(wbRequest,flags);
// The logic of the classic WM wrt timestamp bounding:
// if 14-digits are specified, assume min-max range boundaries
@@ -134,30 +135,5 @@
return wbRequest;
}
- /**
- * @param wbRequest
- * @param flagsStr : "js_", "", "cs_", "cs_js_"
- */
- private void assignFlags(WaybackRequest wbRequest, String flagsStr) {
- if(flagsStr != null) {
- String[] flags = flagsStr.split(
- ArchivalUrlRequestParser.FLAG_DELIM);
- for(String flag: flags) {
- if(flag.equals(ArchivalUrlRequestParser.CSS_CONTEXT)) {
- wbRequest.setCSSContext(true);
- } else if(flag.equals(ArchivalUrlRequestParser.JS_CONTEXT)) {
- wbRequest.setJSContext(true);
- } else if(flag.equals(ArchivalUrlRequestParser.IMG_CONTEXT)) {
- wbRequest.setIMGContext(true);
- } else if(flag.equals(ArchivalUrlRequestParser.IDENTITY_CONTEXT)) {
- wbRequest.setIdentityContext(true);
- } else if(flag.startsWith(ArchivalUrlRequestParser.CHARSET_MODE)) {
- String modeString = flag.substring(
- ArchivalUrlRequestParser.CHARSET_MODE.length());
- int mode = Integer.parseInt(modeString);
- wbRequest.setCharsetMode(mode);
- }
- }
- }
- }
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|