You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(10) |
Sep
(36) |
Oct
(339) |
Nov
(103) |
Dec
(152) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(141) |
Feb
(102) |
Mar
(125) |
Apr
(203) |
May
(57) |
Jun
(30) |
Jul
(139) |
Aug
(46) |
Sep
(64) |
Oct
(105) |
Nov
(34) |
Dec
(162) |
2007 |
Jan
(81) |
Feb
(57) |
Mar
(141) |
Apr
(72) |
May
(9) |
Jun
(1) |
Jul
(144) |
Aug
(88) |
Sep
(40) |
Oct
(43) |
Nov
(34) |
Dec
(20) |
2008 |
Jan
(44) |
Feb
(45) |
Mar
(16) |
Apr
(36) |
May
(8) |
Jun
(77) |
Jul
(177) |
Aug
(66) |
Sep
(8) |
Oct
(33) |
Nov
(13) |
Dec
(37) |
2009 |
Jan
(2) |
Feb
(5) |
Mar
(8) |
Apr
|
May
(36) |
Jun
(19) |
Jul
(46) |
Aug
(8) |
Sep
(1) |
Oct
(66) |
Nov
(61) |
Dec
(10) |
2010 |
Jan
(13) |
Feb
(16) |
Mar
(38) |
Apr
(76) |
May
(47) |
Jun
(32) |
Jul
(35) |
Aug
(45) |
Sep
(20) |
Oct
(61) |
Nov
(24) |
Dec
(16) |
2011 |
Jan
(22) |
Feb
(34) |
Mar
(11) |
Apr
(8) |
May
(24) |
Jun
(23) |
Jul
(11) |
Aug
(42) |
Sep
(81) |
Oct
(48) |
Nov
(21) |
Dec
(20) |
2012 |
Jan
(30) |
Feb
(25) |
Mar
(4) |
Apr
(6) |
May
(1) |
Jun
(5) |
Jul
(5) |
Aug
(8) |
Sep
(6) |
Oct
(6) |
Nov
|
Dec
|
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...> - 2008-07-22 02:42:48
|
Revision: 2479 http://archive-access.svn.sourceforge.net/archive-access/?rev=2479&view=rev Author: bradtofel Date: 2008-07-22 02:42:56 +0000 (Tue, 22 Jul 2008) Log Message: ----------- REFACTOR: old Dispatcher and ReplayRenderer now replaced with more functional SelectorReplayDispatcher, and DomainPRefixTextReplayRenderer. Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixTextReplayRenderer.java Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixReplayDispatcher.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixReplayRenderer.java Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixReplayDispatcher.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixReplayDispatcher.java 2008-07-22 02:31:44 UTC (rev 2478) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixReplayDispatcher.java 2008-07-22 02:42:56 UTC (rev 2479) @@ -1,83 +0,0 @@ -/* DomainPrefixReplayDispatcher - * - * $Id$ - * - * Created on 10:20:49 AM Aug 10, 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.domainprefix; - -import org.archive.wayback.ReplayDispatcher; -import org.archive.wayback.ReplayRenderer; -import org.archive.wayback.core.CaptureSearchResult; -import org.archive.wayback.core.Resource; -import org.archive.wayback.core.WaybackRequest; -import org.archive.wayback.replay.DateRedirectReplayRenderer; -import org.archive.wayback.replay.TransparentReplayRenderer; - -/** - * - * - * @author brad - * @version $Date$, $Revision$ - */ -public class DomainPrefixReplayDispatcher implements ReplayDispatcher { - - private final static String TEXT_HTML_MIME = "text/html"; - private final static String TEXT_XHTML_MIME = "application/xhtml"; - - // TODO: make this configurable - private final static long MAX_HTML_MARKUP_LENGTH = 1024 * 1024 * 5; - - private ReplayRenderer redirect = new DateRedirectReplayRenderer(); - - private ReplayRenderer transparent = new TransparentReplayRenderer(); - private DomainPrefixReplayRenderer html = new DomainPrefixReplayRenderer(); - - /* (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.length() > reqDateStr.length()) || - !resDateStr.equals(reqDateStr.substring(0, resDateStr.length()))) { - return redirect; - } - - // HTML and XHTML docs smaller than some size get marked up as HTML - if (resource.getRecordLength() < MAX_HTML_MARKUP_LENGTH) { - - if (-1 != result.getMimeType().indexOf(TEXT_HTML_MIME)) { - return html; - } - if (-1 != result.getMimeType().indexOf(TEXT_XHTML_MIME)) { - return html; - } - } - - // everything else goes transparently: - return transparent; - } -} Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixReplayRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixReplayRenderer.java 2008-07-22 02:31:44 UTC (rev 2478) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixReplayRenderer.java 2008-07-22 02:42:56 UTC (rev 2479) @@ -1,136 +0,0 @@ -/* DomainPrefixReplayRenderer - * - * $Id$ - * - * Created on 10:21:04 AM Aug 10, 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.domainprefix; - -import java.io.IOException; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -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.Timestamp; -import org.archive.wayback.util.url.UrlOperations; - -/** - * - * - * @author brad - * @version $Date$, $Revision$ - */ -public class DomainPrefixReplayRenderer implements ReplayRenderer, HttpHeaderProcessor { - private final static String HTTP_LENGTH_HEADER = "Content-Length"; - private final static String HTTP_LENGTH_HEADER_UP = - HTTP_LENGTH_HEADER.toUpperCase(); - - private final static String HTTP_LOCATION_HEADER = "Location"; - private final static String HTTP_LOCATION_HEADER_UP = - HTTP_LOCATION_HEADER.toUpperCase(); - - private final static Pattern httpPattern = - Pattern.compile("(http://[^/]*/)"); - - /* (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 { - - 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(); - - String resourceTS = result.getCaptureTimestamp(); - String captureTS = Timestamp.parseBefore(resourceTS).getDateStr(); - - - StringBuilder sb = page.sb; - StringBuffer replaced = new StringBuffer(sb.length()); - Matcher m = httpPattern.matcher(sb); - while(m.find()) { - String host = m.group(1); - String replacement = uriConverter.makeReplayURI(captureTS,host); - m.appendReplacement(replaced, replacement); - } - m.appendTail(replaced); - byte b[] = replaced.toString().getBytes(page.getCharSet()); - int bytes = b.length; - headers.put(HTTP_LENGTH_HEADER, String.valueOf(bytes)); - - HttpHeaderOperation.sendHeaders(headers, httpResponse); - httpResponse.getOutputStream().write(b); - - } - - /* (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(); - - // omit Content-Length header - if (keyUp.equals(HTTP_LENGTH_HEADER_UP)) { - return; - } - - // rewrite Location header URLs - if (keyUp.startsWith(HTTP_LOCATION_HEADER_UP)) { - - String baseUrl = result.getOriginalUrl(); - String resourceTS = result.getCaptureTimestamp(); - String captureTS = Timestamp.parseBefore(resourceTS).getDateStr(); - // by the spec, these should be absolute already, but just in case: - String u = UrlOperations.resolveUrl(baseUrl, value); - - output.put(key, uriConverter.makeReplayURI(captureTS,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/domainprefix/DomainPrefixTextReplayRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixTextReplayRenderer.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/domainprefix/DomainPrefixTextReplayRenderer.java 2008-07-22 02:42:56 UTC (rev 2479) @@ -0,0 +1,87 @@ +/* DomainPrefixPageReplayRenderer + * + * $Id$ + * + * Created on 3:30:30 PM Jul 15, 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.domainprefix; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +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; +import org.archive.wayback.util.Timestamp; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class DomainPrefixTextReplayRenderer extends TextReplayRenderer { + /** + * @param httpHeaderProcessor + */ + public DomainPrefixTextReplayRenderer( + HttpHeaderProcessor httpHeaderProcessor) { + super(httpHeaderProcessor); + } + + private final static Pattern httpPattern = + Pattern.compile("(http://[^/]*/)"); + + protected void updatePage(TextDocument page, + HttpServletRequest httpRequest, + HttpServletResponse httpResponse, WaybackRequest wbRequest, + CaptureSearchResult result, Resource resource, + ResultURIConverter uriConverter, CaptureSearchResults results) + throws ServletException, IOException { + String resourceTS = result.getCaptureTimestamp(); + String captureTS = Timestamp.parseBefore(resourceTS).getDateStr(); + + + StringBuilder sb = page.sb; + StringBuffer replaced = new StringBuffer(sb.length()); + Matcher m = httpPattern.matcher(sb); + while(m.find()) { + String host = m.group(1); + String replacement = uriConverter.makeReplayURI(captureTS,host); + m.appendReplacement(replaced, replacement); + } + m.appendTail(replaced); + // blasted StringBuilder/StringBuffer... gotta convert again... + page.sb.setLength(0); + page.sb.ensureCapacity(replaced.length()); + page.sb.append(replaced); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-22 02:31:35
|
Revision: 2478 http://archive-access.svn.sourceforge.net/archive-access/?rev=2478&view=rev Author: bradtofel Date: 2008-07-22 02:31:44 +0000 (Tue, 22 Jul 2008) Log Message: ----------- TWEAK: moved /webapp/template/ => /webapp/WEB-INF/template/ Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLCaptureResults.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLUrlResults.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/advanced_search.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/help.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/index.jsp Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLCaptureResults.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLCaptureResults.jsp 2008-07-22 02:12:22 UTC (rev 2477) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLCaptureResults.jsp 2008-07-22 02:31:44 UTC (rev 2478) @@ -8,7 +8,7 @@ <%@ page import="org.archive.wayback.core.UIResults" %> <%@ page import="org.archive.wayback.core.WaybackRequest" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> -<jsp:include page="/template/UI-header.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-header.jsp" flush="true" /> <% UIResults results = UIResults.extractCaptureQuery(request); @@ -110,4 +110,4 @@ } %> -<jsp:include page="/template/UI-footer.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-footer.jsp" flush="true" /> Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLUrlResults.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLUrlResults.jsp 2008-07-22 02:12:22 UTC (rev 2477) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLUrlResults.jsp 2008-07-22 02:31:44 UTC (rev 2478) @@ -9,7 +9,7 @@ <%@ page import="org.archive.wayback.core.UrlSearchResults" %> <%@ page import="org.archive.wayback.core.WaybackRequest" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> -<jsp:include page="/template/UI-header.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-header.jsp" flush="true" /> <% UIResults results = UIResults.extractUrlQuery(request); @@ -114,4 +114,4 @@ } %> -<jsp:include page="/template/UI-footer.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-footer.jsp" flush="true" /> Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/advanced_search.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/advanced_search.jsp 2008-07-22 02:12:22 UTC (rev 2477) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/advanced_search.jsp 2008-07-22 02:31:44 UTC (rev 2478) @@ -1,10 +1,10 @@ <%@ page import="org.archive.wayback.core.UIResults" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> -<jsp:include page="/template/UI-header.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-header.jsp" flush="true" /> <% UIResults results = UIResults.getGeneric(request); -StringFormatter fmt = results.getFormatter(); +StringFormatter fmt = results.getWbRequest().getFormatter(); %> <form action="../../replay"> @@ -23,4 +23,4 @@ <input type="HIDDEN" name="type" value="replay"> <input type="SUBMIT" value="<%= fmt.format("AdvancedSearch.submitButton") %>"> </form> -<jsp:include page="/template/UI-footer.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-footer.jsp" flush="true" /> Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/help.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/help.jsp 2008-07-22 02:12:22 UTC (rev 2477) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/help.jsp 2008-07-22 02:31:44 UTC (rev 2478) @@ -1,10 +1,10 @@ <%@ page import="org.archive.wayback.core.UIResults" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> -<jsp:include page="/template/UI-header.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-header.jsp" flush="true" /> <% UIResults results = UIResults.getGeneric(request); -StringFormatter fmt = results.getFormatter(); +StringFormatter fmt = results.getWbRequest().getFormatter(); String url = "http://archive-access.sourceforge.net/projects/wayback/faq.html"; %> <%= fmt.format("UIGlobal.helpPage",url) %> -<jsp:include page="/template/UI-footer.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-footer.jsp" flush="true" /> Modified: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/index.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/index.jsp 2008-07-22 02:12:22 UTC (rev 2477) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/index.jsp 2008-07-22 02:31:44 UTC (rev 2478) @@ -1,7 +1,7 @@ <%@ page import="java.util.ArrayList" %> <%@ page import="org.archive.wayback.core.UIResults" %> <%@ page import="org.archive.wayback.util.StringFormatter" %> -<jsp:include page="template/UI-header.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-header.jsp" flush="true" /> <% UIResults results = UIResults.getGeneric(request); StringFormatter fmt = results.getFormatter(); @@ -25,4 +25,4 @@ <p> <%= fmt.format("UIGlobal.indexPage") %> </p> -<jsp:include page="template/UI-footer.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/UI-footer.jsp" flush="true" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-22 02:12:13
|
Revision: 2477 http://archive-access.svn.sourceforge.net/archive-access/?rev=2477&view=rev Author: bradtofel Date: 2008-07-22 02:12:22 +0000 (Tue, 22 Jul 2008) Log Message: ----------- REMOVE: ProxyReplayDispatcher - now implemented with SelectorReplayDispatcher INITIAL-REV: ProxyHTMLMarkupReplayRenderer - allows jspInserts within Proxy mode. Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/proxy/ProxyHTMLMarkupReplayRenderer.java Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/proxy/ProxyReplayDispatcher.java Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/proxy/ProxyHTMLMarkupReplayRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/proxy/ProxyHTMLMarkupReplayRenderer.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/proxy/ProxyHTMLMarkupReplayRenderer.java 2008-07-22 02:12:22 UTC (rev 2477) @@ -0,0 +1,96 @@ +/* ProxyHTMLMarkupReplayRenderer + * + * $Id$ + * + * Created on 4:51:10 PM Jul 15, 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.proxy; + +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 ProxyHTMLMarkupReplayRenderer extends TextReplayRenderer { + + private boolean insertAtStart = false; + /** + * @param httpHeaderProcessor + */ + public ProxyHTMLMarkupReplayRenderer(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); + + 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(insertAtStart) { + page.insertAtStartOfBody(toInsert.toString()); + } else { + page.insertAtEndOfBody(toInsert.toString()); + } + } + + public boolean isInsertAtStart() { + return insertAtStart; + } + + public void setInsertAtStart(boolean insertAtStart) { + this.insertAtStart = insertAtStart; + } +} Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/proxy/ProxyReplayDispatcher.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/proxy/ProxyReplayDispatcher.java 2008-07-22 02:02:01 UTC (rev 2476) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/proxy/ProxyReplayDispatcher.java 2008-07-22 02:12:22 UTC (rev 2477) @@ -1,53 +0,0 @@ -/* ProxyReplayRendererDispatcher - * - * $Id$ - * - * Created on 11:39:11 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.proxy; - -import org.archive.wayback.ReplayDispatcher; -import org.archive.wayback.ReplayRenderer; -import org.archive.wayback.core.CaptureSearchResult; -import org.archive.wayback.core.Resource; -import org.archive.wayback.core.WaybackRequest; -import org.archive.wayback.replay.TransparentReplayRenderer; - -/** - * Trivial Replay dispatcher implementation, generally used in Proxy mode, that - * sends all documents back as-is. - * - * @author brad - * @version $Date$, $Revision$ - */ -public class ProxyReplayDispatcher implements ReplayDispatcher { - - private ReplayRenderer renderer = new TransparentReplayRenderer(); - - /* (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) { - // always use the transparent: - return renderer; - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-22 02:01:53
|
Revision: 2476 http://archive-access.svn.sourceforge.net/archive-access/?rev=2476&view=rev Author: bradtofel Date: 2008-07-22 02:02:01 +0000 (Tue, 22 Jul 2008) Log Message: ----------- RENAME: HTMLPage => TextDocument INITIAL REV: TextReplayRenderer, abstract ReplayRenderer base-class which manages converting a Resource into a TextDocument, provides an updatePage() abstract method which allows subclasses to perform needed modifications to the TextDocument prior to returning it to the client. Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TextDocument.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TextReplayRenderer.java Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java 2008-07-22 01:52:21 UTC (rev 2475) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java 2008-07-22 02:02:01 UTC (rev 2476) @@ -1,510 +0,0 @@ -/* HTMLPage - * - * $Id$ - * - * Created on 12:39:52 PM Aug 7, 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.replay; - -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; -import java.nio.charset.IllegalCharsetNameException; -import java.text.ParseException; -import java.util.Map; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -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.UIResults; -import org.archive.wayback.core.WaybackRequest; -import org.mozilla.universalchardet.UniversalDetector; - -/** - * Class which wraps functionality for converting a Resource(InputStream + - * HTTP headers) into a StringBuilder, performing several common URL - * resolution methods against that StringBuilder, inserting arbitrary Strings - * into the page, and then converting the page back to a byte array. - * - * @author brad - * @version $Date$, $Revision$ - */ -public class HTMLPage { - - // hand off this many bytes to the chardet library - private final static int MAX_CHARSET_READAHEAD = 65536; - // ...if it also includes "charset=" - private final static String CHARSET_TOKEN = "charset="; - // ...and if the chardet library fails, use the Content-Type header - private final static String HTTP_CONTENT_TYPE_HEADER = "Content-Type"; - // if documents are marked up before sending to clients, the data is - // decoded into a String in chunks. This is how big a chunk to decode with. - private final static int C_BUFFER_SIZE = 4096; - - private Resource resource = null; - private CaptureSearchResult result = null; - private ResultURIConverter uriConverter = null; - /** - * the internal StringBuilder - */ - public StringBuilder sb = null; - private String charSet = null; - private byte[] resultBytes = null; - - /** - * @param resource - * @param result - * @param uriConverter - */ - public HTMLPage(Resource resource, CaptureSearchResult result, - ResultURIConverter uriConverter) { - this.resource = resource; - this.result = result; - this.uriConverter = uriConverter; - } - - private boolean isCharsetSupported(String charsetName) { - // can you believe that this throws a runtime? Just asking if it's - // supported!!?! They coulda just said "no"... - try { - return Charset.isSupported(charsetName); - } catch(IllegalCharsetNameException e) { - return false; - } - } - - private String contentTypeToCharset(final String contentType) { - int offset = contentType.indexOf(CHARSET_TOKEN); - if (offset != -1) { - String cs = contentType.substring(offset + CHARSET_TOKEN.length()); - if(isCharsetSupported(cs)) { - return cs; - } - // test for extra spaces... there's at least one page out there that - // indicates it's charset with: - -// <meta http-equiv="Content-type" content="text/html; charset=i so-8859-1"> - - // bad web page! - if(isCharsetSupported(cs.replace(" ", ""))) { - return cs.replace(" ", ""); - } - } - return null; - } - - /** - * Attempt to divine the character encoding of the document from the - * Content-Type HTTP header (with a "charset=") - * - * @param resource - * @return String character set found or null if the header was not present - * @throws IOException - */ - protected String getCharsetFromHeaders(Resource resource) - throws IOException { - - String charsetName = null; - - Map<String,String> httpHeaders = resource.getHttpHeaders(); - String ctype = httpHeaders.get(HTTP_CONTENT_TYPE_HEADER); - if (ctype != null) { - charsetName = contentTypeToCharset(ctype); - } - return charsetName; - } - - /** - * Attempt to find a META tag in the HTML that hints at the character set - * used to write the document. - * - * @param resource - * @return String character set found from META tags in the HTML - * @throws IOException - */ - protected String getCharsetFromMeta(Resource resource) throws IOException { - String charsetName = null; - - byte[] bbuffer = new byte[MAX_CHARSET_READAHEAD]; - resource.mark(MAX_CHARSET_READAHEAD); - resource.read(bbuffer, 0, MAX_CHARSET_READAHEAD); - resource.reset(); - // convert to UTF-8 String -- which hopefully will not mess up the - // characters we're interested in... - StringBuilder sb = new StringBuilder(new String(bbuffer,"UTF-8")); - String metaContentType = TagMagix.getTagAttrWhere(sb, "META", - "content", "http-equiv", "Content-Type"); - if(metaContentType != null) { - charsetName = contentTypeToCharset(metaContentType); - } - return charsetName; - } - - /** - * Attempts to figure out the character set of the document using - * the excellent juniversalchardet library. - * - * @param resource - * @return String character encoding found, or null if nothing looked good. - * @throws IOException - */ - protected String getCharsetFromBytes(Resource resource) throws IOException { - String charsetName = null; - - byte[] bbuffer = new byte[MAX_CHARSET_READAHEAD]; - // (1) - UniversalDetector detector = new UniversalDetector(null); - - // (2) - resource.mark(MAX_CHARSET_READAHEAD); - int len = resource.read(bbuffer, 0, MAX_CHARSET_READAHEAD); - resource.reset(); - detector.handleData(bbuffer, 0, len); - // (3) - detector.dataEnd(); - // (4) - charsetName = detector.getDetectedCharset(); - - // (5) - detector.reset(); - - return charsetName; - } - - /** - * Use META tags, byte-character-detection, HTTP headers, hope, and prayer - * to figure out what character encoding is being used for the document. - * If nothing else works, assumes UTF-8 for now. - * - * @param resource - * @return String charset for Resource - * @throws IOException - */ - protected String guessCharset() throws IOException { - - String charSet = getCharsetFromMeta(resource); - if(charSet == null) { - charSet = getCharsetFromBytes(resource); - if(charSet == null) { - charSet = getCharsetFromHeaders(resource); - if(charSet == null) { - charSet = "UTF-8"; - } - } - } - return charSet; - } - - /** - * Update URLs inside the page, so those URLs which must be correct at - * page load time resolve correctly to absolute URLs. - * - * This means ensuring there is a BASE HREF tag, adding one if missing, - * and then resolving: - * FRAME-SRC, META-URL, LINK-HREF, SCRIPT-SRC - * tag-attribute pairs against either the existing BASE-HREF, or the - * page's absolute URL if it was missing. - */ - public void resolvePageUrls() { - - // TODO: get url from Resource instead of SearchResult? - String pageUrl = result.getOriginalUrl(); - String captureDate = result.getCaptureTimestamp(); - - String existingBaseHref = TagMagix.getBaseHref(sb); - if (existingBaseHref == null) { - insertAtStartOfHead("<base href=\"" + pageUrl + "\" />"); - } else { - pageUrl = existingBaseHref; - } - - String markups[][] = { - {"FRAME","SRC"}, - {"META","URL"}, - {"LINK","HREF"}, - {"SCRIPT","SRC"}, - {TagMagix.ANY_TAGNAME,"background"} - }; - // TODO: The classic WM added a js_ to the datespec, so NotInArchives - // can return an valid javascript doc, and not cause Javascript errors. - for(String tagAttr[] : markups) { - TagMagix.markupTagREURIC(sb, uriConverter, captureDate, pageUrl, - tagAttr[0], tagAttr[1]); - } - TagMagix.markupCSSImports(sb,uriConverter, captureDate, pageUrl); - TagMagix.markupStyleUrls(sb,uriConverter,captureDate,pageUrl); - } - - /** - * Update all URLs inside the page, so they resolve correctly to absolute - * URLs within the Wayback service. - */ - public void resolveAllPageUrls() { - - // TODO: get url from Resource instead of SearchResult? - String pageUrl = result.getOriginalUrl(); - String captureDate = result.getCaptureTimestamp(); - - String existingBaseHref = TagMagix.getBaseHref(sb); - if (existingBaseHref != null) { - pageUrl = existingBaseHref; - } - ResultURIConverter ruc = new SpecialResultURIConverter(uriConverter); - - // TODO: forms...? - String markups[][] = { - {"FRAME","SRC"}, - {"META","URL"}, - {"LINK","HREF"}, - {"SCRIPT","SRC"}, - {"IMG","SRC"}, - {"A","HREF"}, - {"AREA","HREF"}, - {"OBJECT","CODEBASE"}, - {"OBJECT","CDATA"}, - {"APPLET","CODEBASE"}, - {"APPLET","ARCHIVE"}, - {"EMBED","SRC"}, - {"IFRAME","SRC"}, - {TagMagix.ANY_TAGNAME,"background"} - }; - for(String tagAttr[] : markups) { - TagMagix.markupTagREURIC(sb, ruc, captureDate, pageUrl, - tagAttr[0], tagAttr[1]); - } - TagMagix.markupCSSImports(sb,uriConverter, captureDate, pageUrl); - TagMagix.markupStyleUrls(sb,uriConverter,captureDate,pageUrl); - } - - public void resolveCSSUrls() { - // TODO: get url from Resource instead of SearchResult? - String pageUrl = result.getOriginalUrl(); - String captureDate = result.getCaptureTimestamp(); - TagMagix.markupCSSImports(sb,uriConverter, captureDate, pageUrl); - } - - public void resolveASXRefUrls() { - - // TODO: get url from Resource instead of SearchResult? - String pageUrl = result.getOriginalUrl(); - String captureDate = result.getCaptureTimestamp(); - ResultURIConverter ruc = new MMSToHTTPResultURIConverter(uriConverter); - - TagMagix.markupTagREURIC(sb, ruc, captureDate, pageUrl, - "REF", "HREF"); - } - - public void stripHTML() { - String stripped = sb.toString().replaceAll("\\<.*?>",""); - sb.setLength(0); - sb.append(stripped); - } - /** - * @param charSet - * @throws IOException - */ - public void readFully(String charSet) throws IOException { - if(charSet == null) { - charSet = guessCharset(); - } - this.charSet = charSet; - int recordLength = (int) resource.getRecordLength(); - - // convert bytes to characters for charset: - InputStreamReader isr = new InputStreamReader(resource, charSet); - - char[] cbuffer = new char[C_BUFFER_SIZE]; - - // slurp the whole thing into RAM: - sb = new StringBuilder(recordLength); - for (int r = -1; (r = isr.read(cbuffer, 0, C_BUFFER_SIZE)) != -1;) { - sb.append(cbuffer, 0, r); - } - } - - /** - * Read bytes from input stream, using best-guess for character encoding - * @throws IOException - */ - public void readFully() throws IOException { - readFully(null); - } - - /** - * @return raw bytes contained in internal StringBuilder - * @throws UnsupportedEncodingException - */ - public byte[] getBytes() throws UnsupportedEncodingException { - if(sb == null) { - throw new IllegalStateException("No interal StringBuffer"); - } - if(resultBytes == null) { - resultBytes = sb.toString().getBytes(charSet); - } - return resultBytes; - } - - /** - * Write the contents of the page to the client. - * - * @param os - * @throws IOException - */ - public void writeToOutputStream(OutputStream os) throws IOException { - if(sb == null) { - throw new IllegalStateException("No interal StringBuffer"); - } - byte[] b; - try { - b = getBytes(); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - os.write(b); - } - - /** - * @param toInsert - */ - public void insertAtStartOfHead(String toInsert) { - int insertPoint = TagMagix.getEndOfFirstTag(sb,"head"); - if (-1 == insertPoint) { - insertPoint = 0; - } - sb.insert(insertPoint,toInsert); - } - - /** - * @param toInsert - */ - public void insertAtEndOfBody(String toInsert) { - int insertPoint = sb.lastIndexOf("</body>"); - if (-1 == insertPoint) { - insertPoint = sb.lastIndexOf("</BODY>"); - } - if (-1 == insertPoint) { - insertPoint = sb.length(); - } - sb.insert(insertPoint,toInsert); - } - /** - * @param toInsert - */ - public void insertAtStartOfBody(String toInsert) { - int insertPoint = TagMagix.getEndOfFirstTag(sb,"body"); - if (-1 == insertPoint) { - insertPoint = 0; - } - sb.insert(insertPoint,toInsert); - } - /** - * @param jspPath - * @param httpRequest - * @param httpResponse - * @param wbRequest - * @param results - * @return - * @throws IOException - * @throws ServletException - * @throws ParseException - */ - public String includeJspString(String jspPath, - HttpServletRequest httpRequest, HttpServletResponse httpResponse, - WaybackRequest wbRequest, CaptureSearchResults results, - CaptureSearchResult result, Resource resource) - throws ServletException, IOException { - - UIResults uiResults = new UIResults(wbRequest,uriConverter,results, - result,resource); - - StringHttpServletResponseWrapper wrappedResponse = - new StringHttpServletResponseWrapper(httpResponse); - uiResults.forward(httpRequest, wrappedResponse, jspPath); -// uiResults.storeInRequest(httpRequest,jspPath); -// RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(jspPath); -// dispatcher.forward(httpRequest, wrappedResponse); - return wrappedResponse.getStringResponse(); - } - - /** - * @param jsUrl - * @return - */ - public String getJSIncludeString(final String jsUrl) { - return "<script type=\"text/javascript\" src=\"" - + jsUrl + "\" ></script>\n"; - } - - /** - * @return the charSet - */ - public String getCharSet() { - return charSet; - } - - /** - * @param charSet the charSet to set - */ - public void setCharSet(String charSet) { - this.charSet = charSet; - } - - private class SpecialResultURIConverter implements ResultURIConverter { - private static final String EMAIL_PROTOCOL_PREFIX = "mailto:"; - private static final String JAVASCRIPT_PROTOCOL_PREFIX = "javascript:"; - private ResultURIConverter base = null; - public SpecialResultURIConverter(ResultURIConverter base) { - this.base = base; - } - public String makeReplayURI(String datespec, String url) { - if(url.startsWith(EMAIL_PROTOCOL_PREFIX)) { - return url; - } - if(url.startsWith(JAVASCRIPT_PROTOCOL_PREFIX)) { - return url; - } - return base.makeReplayURI(datespec, url); - } - } - - private class MMSToHTTPResultURIConverter implements ResultURIConverter { - private static final String MMS_PROTOCOL_PREFIX = "mms://"; - private static final String HTTP_PROTOCOL_PREFIX = "http://"; - private ResultURIConverter base = null; - public MMSToHTTPResultURIConverter(ResultURIConverter base) { - this.base = base; - } - public String makeReplayURI(String datespec, String url) { - if(url.startsWith(MMS_PROTOCOL_PREFIX)) { - url = HTTP_PROTOCOL_PREFIX + - url.substring(MMS_PROTOCOL_PREFIX.length()); - } - return base.makeReplayURI(datespec, url); - } - } -} Copied: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TextDocument.java (from rev 2448, trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/HTMLPage.java) =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TextDocument.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TextDocument.java 2008-07-22 02:02:01 UTC (rev 2476) @@ -0,0 +1,510 @@ +/* HTMLPage + * + * $Id$ + * + * Created on 12:39:52 PM Aug 7, 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.replay; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.nio.charset.IllegalCharsetNameException; +import java.text.ParseException; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +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.UIResults; +import org.archive.wayback.core.WaybackRequest; +import org.mozilla.universalchardet.UniversalDetector; + +/** + * Class which wraps functionality for converting a Resource(InputStream + + * HTTP headers) into a StringBuilder, performing several common URL + * resolution methods against that StringBuilder, inserting arbitrary Strings + * into the page, and then converting the page back to a byte array. + * + * @author brad + * @version $Date$, $Revision$ + */ +public class TextDocument { + + // hand off this many bytes to the chardet library + private final static int MAX_CHARSET_READAHEAD = 65536; + // ...if it also includes "charset=" + private final static String CHARSET_TOKEN = "charset="; + // ...and if the chardet library fails, use the Content-Type header + private final static String HTTP_CONTENT_TYPE_HEADER = "Content-Type"; + // if documents are marked up before sending to clients, the data is + // decoded into a String in chunks. This is how big a chunk to decode with. + private final static int C_BUFFER_SIZE = 4096; + + private Resource resource = null; + private CaptureSearchResult result = null; + private ResultURIConverter uriConverter = null; + /** + * the internal StringBuilder + */ + public StringBuilder sb = null; + private String charSet = null; + private byte[] resultBytes = null; + + /** + * @param resource + * @param result + * @param uriConverter + */ + public TextDocument(Resource resource, CaptureSearchResult result, + ResultURIConverter uriConverter) { + this.resource = resource; + this.result = result; + this.uriConverter = uriConverter; + } + + private boolean isCharsetSupported(String charsetName) { + // can you believe that this throws a runtime? Just asking if it's + // supported!!?! They coulda just said "no"... + try { + return Charset.isSupported(charsetName); + } catch(IllegalCharsetNameException e) { + return false; + } + } + + private String contentTypeToCharset(final String contentType) { + int offset = contentType.indexOf(CHARSET_TOKEN); + if (offset != -1) { + String cs = contentType.substring(offset + CHARSET_TOKEN.length()); + if(isCharsetSupported(cs)) { + return cs; + } + // test for extra spaces... there's at least one page out there that + // indicates it's charset with: + +// <meta http-equiv="Content-type" content="text/html; charset=i so-8859-1"> + + // bad web page! + if(isCharsetSupported(cs.replace(" ", ""))) { + return cs.replace(" ", ""); + } + } + return null; + } + + /** + * Attempt to divine the character encoding of the document from the + * Content-Type HTTP header (with a "charset=") + * + * @param resource + * @return String character set found or null if the header was not present + * @throws IOException + */ + protected String getCharsetFromHeaders(Resource resource) + throws IOException { + + String charsetName = null; + + Map<String,String> httpHeaders = resource.getHttpHeaders(); + String ctype = httpHeaders.get(HTTP_CONTENT_TYPE_HEADER); + if (ctype != null) { + charsetName = contentTypeToCharset(ctype); + } + return charsetName; + } + + /** + * Attempt to find a META tag in the HTML that hints at the character set + * used to write the document. + * + * @param resource + * @return String character set found from META tags in the HTML + * @throws IOException + */ + protected String getCharsetFromMeta(Resource resource) throws IOException { + String charsetName = null; + + byte[] bbuffer = new byte[MAX_CHARSET_READAHEAD]; + resource.mark(MAX_CHARSET_READAHEAD); + resource.read(bbuffer, 0, MAX_CHARSET_READAHEAD); + resource.reset(); + // convert to UTF-8 String -- which hopefully will not mess up the + // characters we're interested in... + StringBuilder sb = new StringBuilder(new String(bbuffer,"UTF-8")); + String metaContentType = TagMagix.getTagAttrWhere(sb, "META", + "content", "http-equiv", "Content-Type"); + if(metaContentType != null) { + charsetName = contentTypeToCharset(metaContentType); + } + return charsetName; + } + + /** + * Attempts to figure out the character set of the document using + * the excellent juniversalchardet library. + * + * @param resource + * @return String character encoding found, or null if nothing looked good. + * @throws IOException + */ + protected String getCharsetFromBytes(Resource resource) throws IOException { + String charsetName = null; + + byte[] bbuffer = new byte[MAX_CHARSET_READAHEAD]; + // (1) + UniversalDetector detector = new UniversalDetector(null); + + // (2) + resource.mark(MAX_CHARSET_READAHEAD); + int len = resource.read(bbuffer, 0, MAX_CHARSET_READAHEAD); + resource.reset(); + detector.handleData(bbuffer, 0, len); + // (3) + detector.dataEnd(); + // (4) + charsetName = detector.getDetectedCharset(); + + // (5) + detector.reset(); + + return charsetName; + } + + /** + * Use META tags, byte-character-detection, HTTP headers, hope, and prayer + * to figure out what character encoding is being used for the document. + * If nothing else works, assumes UTF-8 for now. + * + * @param resource + * @return String charset for Resource + * @throws IOException + */ + protected String guessCharset() throws IOException { + + String charSet = getCharsetFromMeta(resource); + if(charSet == null) { + charSet = getCharsetFromBytes(resource); + if(charSet == null) { + charSet = getCharsetFromHeaders(resource); + if(charSet == null) { + charSet = "UTF-8"; + } + } + } + return charSet; + } + + /** + * Update URLs inside the page, so those URLs which must be correct at + * page load time resolve correctly to absolute URLs. + * + * This means ensuring there is a BASE HREF tag, adding one if missing, + * and then resolving: + * FRAME-SRC, META-URL, LINK-HREF, SCRIPT-SRC + * tag-attribute pairs against either the existing BASE-HREF, or the + * page's absolute URL if it was missing. + */ + public void resolvePageUrls() { + + // TODO: get url from Resource instead of SearchResult? + String pageUrl = result.getOriginalUrl(); + String captureDate = result.getCaptureTimestamp(); + + String existingBaseHref = TagMagix.getBaseHref(sb); + if (existingBaseHref == null) { + insertAtStartOfHead("<base href=\"" + pageUrl + "\" />"); + } else { + pageUrl = existingBaseHref; + } + + String markups[][] = { + {"FRAME","SRC"}, + {"META","URL"}, + {"LINK","HREF"}, + {"SCRIPT","SRC"}, + {TagMagix.ANY_TAGNAME,"background"} + }; + // TODO: The classic WM added a js_ to the datespec, so NotInArchives + // can return an valid javascript doc, and not cause Javascript errors. + for(String tagAttr[] : markups) { + TagMagix.markupTagREURIC(sb, uriConverter, captureDate, pageUrl, + tagAttr[0], tagAttr[1]); + } + TagMagix.markupCSSImports(sb,uriConverter, captureDate, pageUrl); + TagMagix.markupStyleUrls(sb,uriConverter,captureDate,pageUrl); + } + + /** + * Update all URLs inside the page, so they resolve correctly to absolute + * URLs within the Wayback service. + */ + public void resolveAllPageUrls() { + + // TODO: get url from Resource instead of SearchResult? + String pageUrl = result.getOriginalUrl(); + String captureDate = result.getCaptureTimestamp(); + + String existingBaseHref = TagMagix.getBaseHref(sb); + if (existingBaseHref != null) { + pageUrl = existingBaseHref; + } + ResultURIConverter ruc = new SpecialResultURIConverter(uriConverter); + + // TODO: forms...? + String markups[][] = { + {"FRAME","SRC"}, + {"META","URL"}, + {"LINK","HREF"}, + {"SCRIPT","SRC"}, + {"IMG","SRC"}, + {"A","HREF"}, + {"AREA","HREF"}, + {"OBJECT","CODEBASE"}, + {"OBJECT","CDATA"}, + {"APPLET","CODEBASE"}, + {"APPLET","ARCHIVE"}, + {"EMBED","SRC"}, + {"IFRAME","SRC"}, + {TagMagix.ANY_TAGNAME,"background"} + }; + for(String tagAttr[] : markups) { + TagMagix.markupTagREURIC(sb, ruc, captureDate, pageUrl, + tagAttr[0], tagAttr[1]); + } + TagMagix.markupCSSImports(sb,uriConverter, captureDate, pageUrl); + TagMagix.markupStyleUrls(sb,uriConverter,captureDate,pageUrl); + } + + public void resolveCSSUrls() { + // TODO: get url from Resource instead of SearchResult? + String pageUrl = result.getOriginalUrl(); + String captureDate = result.getCaptureTimestamp(); + TagMagix.markupCSSImports(sb,uriConverter, captureDate, pageUrl); + } + + public void resolveASXRefUrls() { + + // TODO: get url from Resource instead of SearchResult? + String pageUrl = result.getOriginalUrl(); + String captureDate = result.getCaptureTimestamp(); + ResultURIConverter ruc = new MMSToHTTPResultURIConverter(uriConverter); + + TagMagix.markupTagREURIC(sb, ruc, captureDate, pageUrl, + "REF", "HREF"); + } + + public void stripHTML() { + String stripped = sb.toString().replaceAll("\\<.*?>",""); + sb.setLength(0); + sb.append(stripped); + } + /** + * @param charSet + * @throws IOException + */ + public void readFully(String charSet) throws IOException { + if(charSet == null) { + charSet = guessCharset(); + } + this.charSet = charSet; + int recordLength = (int) resource.getRecordLength(); + + // convert bytes to characters for charset: + InputStreamReader isr = new InputStreamReader(resource, charSet); + + char[] cbuffer = new char[C_BUFFER_SIZE]; + + // slurp the whole thing into RAM: + sb = new StringBuilder(recordLength); + for (int r = -1; (r = isr.read(cbuffer, 0, C_BUFFER_SIZE)) != -1;) { + sb.append(cbuffer, 0, r); + } + } + + /** + * Read bytes from input stream, using best-guess for character encoding + * @throws IOException + */ + public void readFully() throws IOException { + readFully(null); + } + + /** + * @return raw bytes contained in internal StringBuilder + * @throws UnsupportedEncodingException + */ + public byte[] getBytes() throws UnsupportedEncodingException { + if(sb == null) { + throw new IllegalStateException("No interal StringBuffer"); + } + if(resultBytes == null) { + resultBytes = sb.toString().getBytes(charSet); + } + return resultBytes; + } + + /** + * Write the contents of the page to the client. + * + * @param os + * @throws IOException + */ + public void writeToOutputStream(OutputStream os) throws IOException { + if(sb == null) { + throw new IllegalStateException("No interal StringBuffer"); + } + byte[] b; + try { + b = getBytes(); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + os.write(b); + } + + /** + * @param toInsert + */ + public void insertAtStartOfHead(String toInsert) { + int insertPoint = TagMagix.getEndOfFirstTag(sb,"head"); + if (-1 == insertPoint) { + insertPoint = 0; + } + sb.insert(insertPoint,toInsert); + } + + /** + * @param toInsert + */ + public void insertAtEndOfBody(String toInsert) { + int insertPoint = sb.lastIndexOf("</body>"); + if (-1 == insertPoint) { + insertPoint = sb.lastIndexOf("</BODY>"); + } + if (-1 == insertPoint) { + insertPoint = sb.length(); + } + sb.insert(insertPoint,toInsert); + } + /** + * @param toInsert + */ + public void insertAtStartOfBody(String toInsert) { + int insertPoint = TagMagix.getEndOfFirstTag(sb,"body"); + if (-1 == insertPoint) { + insertPoint = 0; + } + sb.insert(insertPoint,toInsert); + } + /** + * @param jspPath + * @param httpRequest + * @param httpResponse + * @param wbRequest + * @param results + * @return + * @throws IOException + * @throws ServletException + * @throws ParseException + */ + public String includeJspString(String jspPath, + HttpServletRequest httpRequest, HttpServletResponse httpResponse, + WaybackRequest wbRequest, CaptureSearchResults results, + CaptureSearchResult result, Resource resource) + throws ServletException, IOException { + + UIResults uiResults = new UIResults(wbRequest,uriConverter,results, + result,resource); + + StringHttpServletResponseWrapper wrappedResponse = + new StringHttpServletResponseWrapper(httpResponse); + uiResults.forward(httpRequest, wrappedResponse, jspPath); +// uiResults.storeInRequest(httpRequest,jspPath); +// RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(jspPath); +// dispatcher.forward(httpRequest, wrappedResponse); + return wrappedResponse.getStringResponse(); + } + + /** + * @param jsUrl + * @return + */ + public String getJSIncludeString(final String jsUrl) { + return "<script type=\"text/javascript\" src=\"" + + jsUrl + "\" ></script>\n"; + } + + /** + * @return the charSet + */ + public String getCharSet() { + return charSet; + } + + /** + * @param charSet the charSet to set + */ + public void setCharSet(String charSet) { + this.charSet = charSet; + } + + private class SpecialResultURIConverter implements ResultURIConverter { + private static final String EMAIL_PROTOCOL_PREFIX = "mailto:"; + private static final String JAVASCRIPT_PROTOCOL_PREFIX = "javascript:"; + private ResultURIConverter base = null; + public SpecialResultURIConverter(ResultURIConverter base) { + this.base = base; + } + public String makeReplayURI(String datespec, String url) { + if(url.startsWith(EMAIL_PROTOCOL_PREFIX)) { + return url; + } + if(url.startsWith(JAVASCRIPT_PROTOCOL_PREFIX)) { + return url; + } + return base.makeReplayURI(datespec, url); + } + } + + private class MMSToHTTPResultURIConverter implements ResultURIConverter { + private static final String MMS_PROTOCOL_PREFIX = "mms://"; + private static final String HTTP_PROTOCOL_PREFIX = "http://"; + private ResultURIConverter base = null; + public MMSToHTTPResultURIConverter(ResultURIConverter base) { + this.base = base; + } + public String makeReplayURI(String datespec, String url) { + if(url.startsWith(MMS_PROTOCOL_PREFIX)) { + url = HTTP_PROTOCOL_PREFIX + + url.substring(MMS_PROTOCOL_PREFIX.length()); + } + return base.makeReplayURI(datespec, url); + } + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TextReplayRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TextReplayRenderer.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TextReplayRenderer.java 2008-07-22 02:02:01 UTC (rev 2476) @@ -0,0 +1,119 @@ +/* HTMLReplayRenderer + * + * $Id$ + * + * Created on 1:07:28 PM Jul 15, 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.replay; + +import java.io.IOException; +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.CaptureSearchResult; +import org.archive.wayback.core.CaptureSearchResults; +import org.archive.wayback.core.Resource; +import org.archive.wayback.core.WaybackRequest; +import org.archive.wayback.exception.BadContentException; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public abstract class TextReplayRenderer implements ReplayRenderer { + + public final static String HTTP_LENGTH_HEADER = "Content-Length"; + public final static String HTTP_LENGTH_HEADER_UP = + HTTP_LENGTH_HEADER.toUpperCase(); + + private List<String> jspInserts = null; + private HttpHeaderProcessor httpHeaderProcessor; + + public TextReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) { + this.httpHeaderProcessor = httpHeaderProcessor; + } + + protected abstract void updatePage(TextDocument page, + HttpServletRequest httpRequest, + HttpServletResponse httpResponse, WaybackRequest wbRequest, + CaptureSearchResult result, Resource resource, + ResultURIConverter uriConverter, CaptureSearchResults results) + throws ServletException, IOException; + + /* (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 { + + HttpHeaderOperation.copyHTTPMessageHeader(resource, httpResponse); + + Map<String,String> headers = HttpHeaderOperation.processHeaders( + resource, result, uriConverter, httpHeaderProcessor); + + // Load content into an HTML page, and resolve load-time URLs: + TextDocument page = new TextDocument(resource,result,uriConverter); + page.readFully(); + + updatePage(page,httpRequest,httpResponse,wbRequest,result,resource, + uriConverter,results); + + // 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()); + } + + /** + * @return the jspInserts + */ + public List<String> getJspInserts() { + return jspInserts; + } + + /** + * @param jspInserts the jspInserts to set + */ + public void setJspInserts(List<String> jspInserts) { + this.jspInserts = jspInserts; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 2475 http://archive-access.svn.sourceforge.net/archive-access/?rev=2475&view=rev Author: bradtofel Date: 2008-07-22 01:52:21 +0000 (Tue, 22 Jul 2008) Log Message: ----------- INITIAL REV: Generic ReplayDispatcher, which using the new ReplayRendererSelector classes, can now be used for all Replay modes. Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/SelectorReplayDispatcher.java Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/SelectorReplayDispatcher.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/SelectorReplayDispatcher.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/SelectorReplayDispatcher.java 2008-07-22 01:52:21 UTC (rev 2475) @@ -0,0 +1,64 @@ +/* SelectorReplayDispatcher + * + * $Id$ + * + * Created on 11:46:40 AM 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.replay; + +import java.util.List; + +import org.archive.wayback.ReplayDispatcher; +import org.archive.wayback.ReplayRenderer; +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.core.Resource; +import org.archive.wayback.core.WaybackRequest; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class SelectorReplayDispatcher implements ReplayDispatcher { + private List<ReplayRendererSelector> selectors = null; + /* (non-Javadoc) + * @see org.archive.wayback.ReplayDispatcher#getRenderer(org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource) + */ + public ReplayRenderer getRenderer(WaybackRequest wbRequest, + CaptureSearchResult result, Resource resource) { + if(selectors != null) { + for(ReplayRendererSelector selector : selectors) { + if(selector.canHandle(wbRequest, result, resource)) { + return selector.getRenderer(); + } + } + } + return null; + } + public List<ReplayRendererSelector> getSelectors() { + return selectors; + } + public void setSelectors(List<ReplayRendererSelector> selectors) { + this.selectors = selectors; + } + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 2474 http://archive-access.svn.sourceforge.net/archive-access/?rev=2474&view=rev Author: bradtofel Date: 2008-07-22 01:46:25 +0000 (Tue, 22 Jul 2008) Log Message: ----------- REFACTOR/INTERFACE: ReplayRenderer no longer ISA HttpHeaderProcessor, now one is passed as a constructor, allowing this to be used for Proxy and binary ArchivalUrl/DomainPrefix. Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TransparentReplayRenderer.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TransparentReplayRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TransparentReplayRenderer.java 2008-07-22 01:45:01 UTC (rev 2473) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/TransparentReplayRenderer.java 2008-07-22 01:46:25 UTC (rev 2474) @@ -48,10 +48,12 @@ * @author brad * @version $Date$, $Revision$ */ -public class TransparentReplayRenderer implements ReplayRenderer, HttpHeaderProcessor { - +public class TransparentReplayRenderer implements ReplayRenderer { + private HttpHeaderProcessor httpHeaderProcessor; private final static int BUFFER_SIZE = 4096; - + public TransparentReplayRenderer(HttpHeaderProcessor httpHeaderProcessor) { + this.httpHeaderProcessor = 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) */ @@ -64,7 +66,7 @@ HttpHeaderOperation.copyHTTPMessageHeader(resource, httpResponse); Map<String,String> headers = HttpHeaderOperation.processHeaders( - resource, result, uriConverter, this); + resource, result, uriConverter, httpHeaderProcessor); HttpHeaderOperation.sendHeaders(headers, httpResponse); @@ -75,14 +77,4 @@ os.write(buffer, 0, r); } } - - /* (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) { - - // copy all HTTP headers, as-is. - output.put(key, value); - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-22 01:44:52
|
Revision: 2473 http://archive-access.svn.sourceforge.net/archive-access/?rev=2473&view=rev Author: bradtofel Date: 2008-07-22 01:45:01 +0000 (Tue, 22 Jul 2008) Log Message: ----------- REFACTOR: ReplayRenderer no longer ISA HttpHeaderProcessor, now they typically HAVE one. These two implementations represent the current HTTP processing which occurs for Proxy, ArchivalUrl, and DomainPrefix replay modes. Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/IdentityHttpHeaderProcessor.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/RedirectRewritingHttpHeaderProcessor.java Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/IdentityHttpHeaderProcessor.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/IdentityHttpHeaderProcessor.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/IdentityHttpHeaderProcessor.java 2008-07-22 01:45:01 UTC (rev 2473) @@ -0,0 +1,47 @@ +/* IdentityHttpHeaderProcessor + * + * $Id$ + * + * Created on 3:53:48 PM Jul 15, 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.replay; + +import java.util.Map; + +import org.archive.wayback.ResultURIConverter; +import org.archive.wayback.core.CaptureSearchResult; + +/** + * HttpHeaderProcessor which passes through all headers as-is. + * + * @author brad + * @version $Date$, $Revision$ + */ +public class IdentityHttpHeaderProcessor implements HttpHeaderProcessor { + + /* (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.CaptureSearchResult) + */ + public void filter(Map<String, String> output, String key, String value, + ResultURIConverter uriConverter, CaptureSearchResult result) { + output.put(key, value); + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/RedirectRewritingHttpHeaderProcessor.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/RedirectRewritingHttpHeaderProcessor.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/RedirectRewritingHttpHeaderProcessor.java 2008-07-22 01:45:01 UTC (rev 2473) @@ -0,0 +1,69 @@ +/* RedirectRewritingHttpHeaderProcessor + * + * $Id$ + * + * Created on 3:00:48 PM Jul 15, 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.replay; + +import java.util.Map; + +import org.archive.wayback.ResultURIConverter; +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.util.url.UrlOperations; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class RedirectRewritingHttpHeaderProcessor + implements HttpHeaderProcessor { + + /* (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.CaptureSearchResult) + */ + 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 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); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-22 01:41:32
|
Revision: 2472 http://archive-access.svn.sourceforge.net/archive-access/?rev=2472&view=rev Author: bradtofel Date: 2008-07-22 01:41:41 +0000 (Tue, 22 Jul 2008) Log Message: ----------- INITIAL REV: ReplayRendererSelector interface, base class, and several subclasses. Allows config-time mappings of various ReplayRenderer implementations, based on Mime, DateMismatch, and Path Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/ReplayRendererSelector.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/AlwaysMatchSelector.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/BaseReplayRendererSelector.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/DateMismatchSelector.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/MimeTypeSelector.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/PathMatchSelector.java Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/ReplayRendererSelector.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/ReplayRendererSelector.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/ReplayRendererSelector.java 2008-07-22 01:41:41 UTC (rev 2472) @@ -0,0 +1,42 @@ +/* ReplayRendererSelector + * + * $Id$ + * + * Created on 11:49:40 AM 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.replay; + +import org.archive.wayback.ReplayRenderer; +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.core.Resource; +import org.archive.wayback.core.WaybackRequest; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public interface ReplayRendererSelector { + public boolean canHandle(WaybackRequest wbRequest, + CaptureSearchResult result, Resource resource); + public ReplayRenderer getRenderer(); +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/AlwaysMatchSelector.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/AlwaysMatchSelector.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/AlwaysMatchSelector.java 2008-07-22 01:41:41 UTC (rev 2472) @@ -0,0 +1,47 @@ +/* AlwaysMatchSelector + * + * $Id$ + * + * Created on 12:36:59 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.replay.selector; + +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.core.Resource; +import org.archive.wayback.core.WaybackRequest; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class AlwaysMatchSelector extends BaseReplayRendererSelector { + + /* (non-Javadoc) + * @see org.archive.wayback.replay.selector.BaseReplayRendererSelector#canHandle(org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource) + */ + @Override + public boolean canHandle(WaybackRequest wbRequest, + CaptureSearchResult result, Resource resource) { + return true; + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/BaseReplayRendererSelector.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/BaseReplayRendererSelector.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/BaseReplayRendererSelector.java 2008-07-22 01:41:41 UTC (rev 2472) @@ -0,0 +1,71 @@ +/* BaseReplayRendererSelector + * + * $Id$ + * + * Created on 11:55:37 AM 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.replay.selector; + +import org.archive.wayback.ReplayRenderer; +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.core.Resource; +import org.archive.wayback.core.WaybackRequest; +import org.archive.wayback.replay.ReplayRendererSelector; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public abstract class BaseReplayRendererSelector implements ReplayRendererSelector { + private final static long MAX_HTML_MARKUP_LENGTH = 1024 * 1024 * 5; + + protected long maxSize = MAX_HTML_MARKUP_LENGTH; + private ReplayRenderer renderer; + + /* (non-Javadoc) + * @see org.archive.wayback.replay.ReplayRendererSelector#canHandle(org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource) + */ + public abstract boolean canHandle(WaybackRequest wbRequest, + CaptureSearchResult result, Resource resource); + + /* (non-Javadoc) + * @see org.archive.wayback.replay.ReplayRendererSelector#getRenderer() + */ + public ReplayRenderer getRenderer() { + return renderer; + } + + public void setRenderer(ReplayRenderer renderer) { + this.renderer = renderer; + } + public boolean isResourceTooBig(Resource resource) { + return (maxSize > 0) + && (resource.getRecordLength() > maxSize); + } + public long getMaxSize() { + return maxSize; + } + public void setMaxSize(long maxSize) { + this.maxSize = maxSize; + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/DateMismatchSelector.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/DateMismatchSelector.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/DateMismatchSelector.java 2008-07-22 01:41:41 UTC (rev 2472) @@ -0,0 +1,52 @@ +/* DateMismatchSelector + * + * $Id$ + * + * Created on 11:53:04 AM 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.replay.selector; + +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.core.Resource; +import org.archive.wayback.core.WaybackRequest; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class DateMismatchSelector extends BaseReplayRendererSelector { + + /* (non-Javadoc) + * @see org.archive.wayback.replay.selector.BaseReplayRendererSelector#canHandle(org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource) + */ + @Override + public boolean canHandle(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(); + return !resDateStr.equals(reqDateStr.substring(0, resDateStr.length())); + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/MimeTypeSelector.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/MimeTypeSelector.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/MimeTypeSelector.java 2008-07-22 01:41:41 UTC (rev 2472) @@ -0,0 +1,84 @@ +/* MimeTypeSelector + * + * $Id$ + * + * Created on 12:04:56 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.replay.selector; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.core.Resource; +import org.archive.wayback.core.WaybackRequest; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class MimeTypeSelector extends BaseReplayRendererSelector { + private Map<String,Object> mimeMatches = null; + private List<String> mimeContains = null; + + /* (non-Javadoc) + * @see org.archive.wayback.replay.selector.BaseReplayRendererSelector#canHandle(org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource) + */ + @Override + public boolean canHandle(WaybackRequest wbRequest, + CaptureSearchResult result, Resource resource) { + if(isResourceTooBig(resource)) { + return false; + } + String mime = result.getMimeType(); + if(mimeMatches != null) { + if(mimeMatches.containsKey(mime)) { + return true; + } + } + if(mimeContains != null) { + for(String contains : mimeContains) { + if(mime.indexOf(contains) != -1) { + return true; + } + } + } + return false; + } + public void setMimeMatches(List<String> mimes) { + mimeMatches = new HashMap<String,Object>(); + for(String mime : mimes) { + mimeMatches.put(mime,null); + } + } + public List<String> getMimeMatches() { + return null; + } + public void setMimeContains(List<String> mimes) { + mimeContains = mimes; + } + public List<String> getMimeContains() { + return mimeContains; + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/PathMatchSelector.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/PathMatchSelector.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/replay/selector/PathMatchSelector.java 2008-07-22 01:41:41 UTC (rev 2472) @@ -0,0 +1,91 @@ +/* PathMatchSelector + * + * $Id$ + * + * Created on 12:19:54 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.replay.selector; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.core.Resource; +import org.archive.wayback.core.WaybackRequest; + +/** + * + * + * @author brad + * @version $Date$, $Revision$ + */ +public class PathMatchSelector extends BaseReplayRendererSelector { + + private List<String> pathContains = null; + private List<String> queryContains = null; + /* (non-Javadoc) + * @see org.archive.wayback.replay.selector.BaseReplayRendererSelector#canHandle(org.archive.wayback.core.WaybackRequest, org.archive.wayback.core.CaptureSearchResult, org.archive.wayback.core.Resource) + */ + @Override + public boolean canHandle(WaybackRequest wbRequest, + CaptureSearchResult result, Resource resource) { + if(isResourceTooBig(resource)) { + return false; + } + try { + URL url = new URL(result.getOriginalUrl()); + if(pathContains != null) { + String path = url.getPath(); + for(String test : pathContains) { + if(path.indexOf(test) != -1) { + return true; + } + } + } + if(queryContains != null) { + String query = url.getQuery(); + if(query != null) { + for(String test : queryContains) { + if(query.indexOf(test) != -1) { + return true; + } + } + } + } + } catch (MalformedURLException e) { + // just eat it. + } + return false; + } + public List<String> getPathContains() { + return pathContains; + } + public void setPathContains(List<String> pathContains) { + this.pathContains = pathContains; + } + public List<String> getQueryContains() { + return queryContains; + } + public void setQueryContains(List<String> queryContains) { + this.queryContains = queryContains; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-22 01:29:21
|
Revision: 2471 http://archive-access.svn.sourceforge.net/archive-access/?rev=2471&view=rev Author: bradtofel Date: 2008-07-22 01:29:30 +0000 (Tue, 22 Jul 2008) Log Message: ----------- MOVED: /exception/ and /query/ .jsp directories under webapps/WEB-INF/ Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/BaseExceptionRenderer.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/query/Renderer.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/BaseExceptionRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/BaseExceptionRenderer.java 2008-07-22 01:27:51 UTC (rev 2470) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/BaseExceptionRenderer.java 2008-07-22 01:29:30 UTC (rev 2471) @@ -51,11 +51,11 @@ * @version $Date$, $Revision$ */ public class BaseExceptionRenderer implements ExceptionRenderer { - private String xmlErrorJsp = "/exception/XMLError.jsp"; - private String errorJsp = "/exception/HTMLError.jsp"; - private String imageErrorJsp = "/exception/HTMLError.jsp"; - private String javascriptErrorJsp = "/exception/JavaScriptError.jsp"; - private String cssErrorJsp = "/exception/CSSError.jsp"; + private String xmlErrorJsp = "/WEB-INF/exception/XMLError.jsp"; + private String errorJsp = "/WEB-INF/exception/HTMLError.jsp"; + private String imageErrorJsp = "/WEB-INF/exception/HTMLError.jsp"; + private String javascriptErrorJsp = "/WEB-INF/exception/JavaScriptError.jsp"; + private String cssErrorJsp = "/WEB-INF/exception/CSSError.jsp"; protected final Pattern IMAGE_REGEX = Pattern .compile(".*\\.(jpg|jpeg|gif|png|bmp|tiff|tif)$"); Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/query/Renderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/query/Renderer.java 2008-07-22 01:27:51 UTC (rev 2470) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/query/Renderer.java 2008-07-22 01:29:30 UTC (rev 2471) @@ -47,10 +47,10 @@ */ public class Renderer implements QueryRenderer { - private String captureJsp = "/query/HTMLCaptureResults.jsp"; - private String urlJsp = "/query/HTMLUrlResults.jsp"; - private String xmlCaptureJsp = "/query/XMLCaptureResults.jsp"; - private String xmlUrlJsp = "/query/XMLUrlResults.jsp"; + private String captureJsp = "/WEB-INF/query/HTMLCaptureResults.jsp"; + private String urlJsp = "/WEB-INF/query/HTMLUrlResults.jsp"; + private String xmlCaptureJsp = "/WEB-INF/query/XMLCaptureResults.jsp"; + private String xmlUrlJsp = "/WEB-INF/query/XMLUrlResults.jsp"; public void renderCaptureResults(HttpServletRequest httpRequest, HttpServletResponse httpResponse, WaybackRequest wbRequest, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-22 01:27:42
|
Revision: 2470 http://archive-access.svn.sourceforge.net/archive-access/?rev=2470&view=rev Author: bradtofel Date: 2008-07-22 01:27:51 +0000 (Tue, 22 Jul 2008) Log Message: ----------- INTERFACE: added ResultURIConverter argument to renderException() Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/ExceptionRenderer.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/BaseExceptionRenderer.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/webapp/AccessPoint.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/ExceptionRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/ExceptionRenderer.java 2008-07-21 23:54:57 UTC (rev 2469) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/ExceptionRenderer.java 2008-07-22 01:27:51 UTC (rev 2470) @@ -54,6 +54,6 @@ */ public void renderException(HttpServletRequest httpRequest, HttpServletResponse httpResponse, WaybackRequest wbRequest, - WaybackException exception) + WaybackException exception, ResultURIConverter uriConverter) throws ServletException, IOException; } Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/BaseExceptionRenderer.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/BaseExceptionRenderer.java 2008-07-21 23:54:57 UTC (rev 2469) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/exception/BaseExceptionRenderer.java 2008-07-22 01:27:51 UTC (rev 2470) @@ -33,6 +33,7 @@ import javax.servlet.http.HttpServletResponse; import org.archive.wayback.ExceptionRenderer; +import org.archive.wayback.ResultURIConverter; import org.archive.wayback.core.UIResults; import org.archive.wayback.core.WaybackRequest; @@ -134,13 +135,14 @@ */ public void renderException(HttpServletRequest httpRequest, HttpServletResponse httpResponse, WaybackRequest wbRequest, - WaybackException exception) throws ServletException, IOException { + WaybackException exception, ResultURIConverter uriConverter) + throws ServletException, IOException { String jspPath = getExceptionHandler(httpRequest, httpResponse, wbRequest, exception); httpRequest.setAttribute("exception", exception); - UIResults uiResults = new UIResults(wbRequest,null,exception); + UIResults uiResults = new UIResults(wbRequest,uriConverter,exception); uiResults.forward(httpRequest, httpResponse, jspPath); } Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/webapp/AccessPoint.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/webapp/AccessPoint.java 2008-07-21 23:54:57 UTC (rev 2469) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/webapp/AccessPoint.java 2008-07-22 01:27:51 UTC (rev 2470) @@ -304,7 +304,8 @@ } catch(WaybackException e) { logNotInArchive(e,wbRequest); - exception.renderException(httpRequest, httpResponse, wbRequest, e); + exception.renderException(httpRequest, httpResponse, wbRequest, e, + uriConverter); } return handled; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:54:49
|
Revision: 2469 http://archive-access.svn.sourceforge.net/archive-access/?rev=2469&view=rev Author: bradtofel Date: 2008-07-21 23:54:57 +0000 (Mon, 21 Jul 2008) Log Message: ----------- MOVE: all embedded .js files to webapps/js/ Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/client-rewrite.js trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/disclaim-element.js trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/disclaim.js Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim.js Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js 2008-07-21 23:23:14 UTC (rev 2468) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js 2008-07-21 23:54:57 UTC (rev 2469) @@ -1,65 +0,0 @@ - -function xResolveUrl(url) { - var image = new Image(); - image.src = url; - return image.src; -} -function xLateUrl(aCollection, sProp) { - var i = 0; - for(i = 0; i < aCollection.length; i++) { - if(aCollection[i].getAttribute(sProp) && - (aCollection[i].getAttribute(sProp).length > 0) && - (typeof(aCollection[i][sProp]) == "string")) { - - if(aCollection[i][sProp].indexOf("mailto:") == -1 && - aCollection[i][sProp].indexOf("javascript:") == -1) { - - var wmSpecial = aCollection[i].getAttribute("wmSpecial"); - if(wmSpecial && wmSpecial.length > 0) { - } else { - if(aCollection[i][sProp].indexOf(sWayBackCGI) == -1) { - if(aCollection[i][sProp].indexOf("http") == 0) { - aCollection[i][sProp] = sWayBackCGI + aCollection[i][sProp]; - } else { - aCollection[i][sProp] = sWayBackCGI + xResolveUrl(aCollection[i][sProp]); - } - } - } - } - } - } -} - -xLateUrl(document.getElementsByTagName("IMG"),"src"); -xLateUrl(document.getElementsByTagName("A"),"href"); -xLateUrl(document.getElementsByTagName("AREA"),"href"); -xLateUrl(document.getElementsByTagName("OBJECT"),"codebase"); -xLateUrl(document.getElementsByTagName("OBJECT"),"data"); -xLateUrl(document.getElementsByTagName("APPLET"),"codebase"); -xLateUrl(document.getElementsByTagName("APPLET"),"archive"); -xLateUrl(document.getElementsByTagName("EMBED"),"src"); -xLateUrl(document.getElementsByTagName("IFRAME"),"src"); -xLateUrl(document.getElementsByTagName("INPUT"),"src"); -xLateUrl(document.getElementsByTagName("BODY"),"background"); -var forms = document.getElementsByTagName("FORM"); -if (forms) { - var j = 0; - for (j = 0; j < forms.length; j++) { - f = forms[j]; - if (typeof(f.action) == "string") { - if(typeof(f.method) == "string") { - if(typeof(f.method) != "post") { - var resolved = ""; - var orig = f.action; - if(f.action.indexOf("http") == 0) { - resolved = f.action; - } else { - resolved = xResolveUrl(f.action); - } - // this does not work on firefox... - f.action = sWayBackCGI + resolved; - } - } - } - } -} Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js 2008-07-21 23:23:14 UTC (rev 2468) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js 2008-07-21 23:54:57 UTC (rev 2469) @@ -1,29 +0,0 @@ -function getFrameArea(frame) { - if(frame.innerWidth) return frame.innerWidth * frame.innerHeight; - if(frame.document.documentElement && frame.document.documentElement.clientHeight) return frame.document.documentElement.clientWidth * frame.document.documentElement.clientHeight; - if(frame.document.body) return frame.document.body.clientWidth * frame.document.body.clientHeight; - return 0; -} - -function disclaimElement(element) { - if(top!=self) { - if(top.document.body.tagName == "BODY") { - return; - } - largestArea = 0; - largestFrame = null; - for(i=0;i<top.frames.length;i++) { - frame = top.frames[i]; - area = getFrameArea(frame); - if(area > largestArea) { - largestFrame = frame; - largestArea = area; - } - } - if(self!=largestFrame) { - return; - } - } - element.style.display="block"; - document.body.insertBefore(element,document.body.firstChild); -} Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim.js =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim.js 2008-07-21 23:23:14 UTC (rev 2468) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim.js 2008-07-21 23:54:57 UTC (rev 2469) @@ -1,63 +0,0 @@ - -var interceptRunAlready = false; -function intercept_js_href_iawm(destination) { - if(!interceptRunAlready &&top.location.href != destination) { - interceptRunAlready = true; - top.location.href = sWayBackCGI+xResolveUrl(destination); - } -} -// ie triggers -href_iawmWatcher = document.createElement("a"); -top.location.href_iawm = top.location.href; -if(href_iawmWatcher.setExpression) { - href_iawmWatcher.setExpression("dummy","intercept_js_href_iawm(top.location.href_iawm)"); -} -// mozilla triggers -function intercept_js_moz(prop,oldval,newval) { - intercept_js_href_iawm(newval); - return newval; -} -if(top.location.watch) { - top.location.watch("href_iawm",intercept_js_moz); -} - -var notice = - "<div style='" + - "position:relative;z-index:99999;"+ - "border:1px solid;color:black;background-color:lightYellow;font-size:10px;font-family:sans-serif;padding:5px'>" + - wmNotice + - " [ <a style='color:blue;font-size:10px;text-decoration:underline' href=\"javascript:void(top.disclaimElem.style.display='none')\">" + wmHideNotice + "</a> ]" + - "</div>"; - -function getFrameArea(frame) { - if(frame.innerWidth) return frame.innerWidth * frame.innerHeight; - if(frame.document.documentElement && frame.document.documentElement.clientHeight) return frame.document.documentElement.clientWidth * frame.document.documentElement.clientHeight; - if(frame.document.body) return frame.document.body.clientWidth * frame.document.body.clientHeight; - return 0; -} - -function disclaim() { - if(top!=self) { - if(top.document.body.tagName == "BODY") { - return; - } - largestArea = 0; - largestFrame = null; - for(i=0;i<top.frames.length;i++) { - frame = top.frames[i]; - area = getFrameArea(frame); - if(area > largestArea) { - largestFrame = frame; - largestArea = area; - } - } - if(self!=largestFrame) { - return; - } - } - disclaimElem = document.createElement('div'); - disclaimElem.innerHTML = notice; - top.disclaimElem = disclaimElem; - document.body.insertBefore(disclaimElem,document.body.firstChild); -} -disclaim(); Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/client-rewrite.js (from rev 2465, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/client-rewrite.js (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/client-rewrite.js 2008-07-21 23:54:57 UTC (rev 2469) @@ -0,0 +1,65 @@ + +function xResolveUrl(url) { + var image = new Image(); + image.src = url; + return image.src; +} +function xLateUrl(aCollection, sProp) { + var i = 0; + for(i = 0; i < aCollection.length; i++) { + if(aCollection[i].getAttribute(sProp) && + (aCollection[i].getAttribute(sProp).length > 0) && + (typeof(aCollection[i][sProp]) == "string")) { + + if(aCollection[i][sProp].indexOf("mailto:") == -1 && + aCollection[i][sProp].indexOf("javascript:") == -1) { + + var wmSpecial = aCollection[i].getAttribute("wmSpecial"); + if(wmSpecial && wmSpecial.length > 0) { + } else { + if(aCollection[i][sProp].indexOf(sWayBackCGI) == -1) { + if(aCollection[i][sProp].indexOf("http") == 0) { + aCollection[i][sProp] = sWayBackCGI + aCollection[i][sProp]; + } else { + aCollection[i][sProp] = sWayBackCGI + xResolveUrl(aCollection[i][sProp]); + } + } + } + } + } + } +} + +xLateUrl(document.getElementsByTagName("IMG"),"src"); +xLateUrl(document.getElementsByTagName("A"),"href"); +xLateUrl(document.getElementsByTagName("AREA"),"href"); +xLateUrl(document.getElementsByTagName("OBJECT"),"codebase"); +xLateUrl(document.getElementsByTagName("OBJECT"),"data"); +xLateUrl(document.getElementsByTagName("APPLET"),"codebase"); +xLateUrl(document.getElementsByTagName("APPLET"),"archive"); +xLateUrl(document.getElementsByTagName("EMBED"),"src"); +xLateUrl(document.getElementsByTagName("IFRAME"),"src"); +xLateUrl(document.getElementsByTagName("INPUT"),"src"); +xLateUrl(document.getElementsByTagName("BODY"),"background"); +var forms = document.getElementsByTagName("FORM"); +if (forms) { + var j = 0; + for (j = 0; j < forms.length; j++) { + f = forms[j]; + if (typeof(f.action) == "string") { + if(typeof(f.method) == "string") { + if(typeof(f.method) != "post") { + var resolved = ""; + var orig = f.action; + if(f.action.indexOf("http") == 0) { + resolved = f.action; + } else { + resolved = xResolveUrl(f.action); + } + // this does not work on firefox... + f.action = sWayBackCGI + resolved; + } + } + } + } +} Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/disclaim-element.js (from rev 2465, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/disclaim-element.js (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/disclaim-element.js 2008-07-21 23:54:57 UTC (rev 2469) @@ -0,0 +1,29 @@ +function getFrameArea(frame) { + if(frame.innerWidth) return frame.innerWidth * frame.innerHeight; + if(frame.document.documentElement && frame.document.documentElement.clientHeight) return frame.document.documentElement.clientWidth * frame.document.documentElement.clientHeight; + if(frame.document.body) return frame.document.body.clientWidth * frame.document.body.clientHeight; + return 0; +} + +function disclaimElement(element) { + if(top!=self) { + if(top.document.body.tagName == "BODY") { + return; + } + largestArea = 0; + largestFrame = null; + for(i=0;i<top.frames.length;i++) { + frame = top.frames[i]; + area = getFrameArea(frame); + if(area > largestArea) { + largestFrame = frame; + largestArea = area; + } + } + if(self!=largestFrame) { + return; + } + } + element.style.display="block"; + document.body.insertBefore(element,document.body.firstChild); +} Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/disclaim.js (from rev 2465, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim.js) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/disclaim.js (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/disclaim.js 2008-07-21 23:54:57 UTC (rev 2469) @@ -0,0 +1,63 @@ + +var interceptRunAlready = false; +function intercept_js_href_iawm(destination) { + if(!interceptRunAlready &&top.location.href != destination) { + interceptRunAlready = true; + top.location.href = sWayBackCGI+xResolveUrl(destination); + } +} +// ie triggers +href_iawmWatcher = document.createElement("a"); +top.location.href_iawm = top.location.href; +if(href_iawmWatcher.setExpression) { + href_iawmWatcher.setExpression("dummy","intercept_js_href_iawm(top.location.href_iawm)"); +} +// mozilla triggers +function intercept_js_moz(prop,oldval,newval) { + intercept_js_href_iawm(newval); + return newval; +} +if(top.location.watch) { + top.location.watch("href_iawm",intercept_js_moz); +} + +var notice = + "<div style='" + + "position:relative;z-index:99999;"+ + "border:1px solid;color:black;background-color:lightYellow;font-size:10px;font-family:sans-serif;padding:5px'>" + + wmNotice + + " [ <a style='color:blue;font-size:10px;text-decoration:underline' href=\"javascript:void(top.disclaimElem.style.display='none')\">" + wmHideNotice + "</a> ]" + + "</div>"; + +function getFrameArea(frame) { + if(frame.innerWidth) return frame.innerWidth * frame.innerHeight; + if(frame.document.documentElement && frame.document.documentElement.clientHeight) return frame.document.documentElement.clientWidth * frame.document.documentElement.clientHeight; + if(frame.document.body) return frame.document.body.clientWidth * frame.document.body.clientHeight; + return 0; +} + +function disclaim() { + if(top!=self) { + if(top.document.body.tagName == "BODY") { + return; + } + largestArea = 0; + largestFrame = null; + for(i=0;i<top.frames.length;i++) { + frame = top.frames[i]; + area = getFrameArea(frame); + if(area > largestArea) { + largestFrame = frame; + largestArea = area; + } + } + if(self!=largestFrame) { + return; + } + } + disclaimElem = document.createElement('div'); + disclaimElem.innerHTML = notice; + top.disclaimElem = disclaimElem; + document.body.insertBefore(disclaimElem,document.body.firstChild); +} +disclaim(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:23:06
|
Revision: 2468 http://archive-access.svn.sourceforge.net/archive-access/?rev=2468&view=rev Author: bradtofel Date: 2008-07-21 23:23:14 +0000 (Mon, 21 Jul 2008) Log Message: ----------- MOVE: webapp/template -> webapp/WEB-INF/template Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/template/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:22:34
|
Revision: 2467 http://archive-access.svn.sourceforge.net/archive-access/?rev=2467&view=rev Author: bradtofel Date: 2008-07-21 23:22:43 +0000 (Mon, 21 Jul 2008) Log Message: ----------- MOVE: webapp/template -> webapp/WEB-INF/template Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/CookieJS.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-footer.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-header.jsp Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-footer.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-header.jsp Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/CookieJS.jsp (from rev 2455, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/template/CookieJS.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/CookieJS.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/CookieJS.jsp 2008-07-21 23:22:43 UTC (rev 2467) @@ -0,0 +1,18 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<script type="text/javascript"> +function SetCookie(cookieName,cookieValue,nDays) { + var today = new Date(); + var expire = new Date(); + if (nDays==null || nDays==0) nDays=1; + expire.setTime(today.getTime() + 86400000*nDays); + document.cookie = cookieName+"="+escape(cookieValue) + + ";expires="+expire.toGMTString() + ";path=/"; +} +function SetAnchorDate(date) { + SetCookie("<%= WaybackRequest.REQUEST_ANCHOR_DATE %>",date,365); +} +function SetAnchorWindow(maxSeconds) { + SetCookie("<%= WaybackRequest.REQUEST_ANCHOR_WINDOW %>",maxSeconds,365); +} +</script> \ No newline at end of file Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-footer.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/template/UI-footer.jsp 2008-04-11 03:51:10 UTC (rev 2227) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-footer.jsp 2008-07-21 23:22:43 UTC (rev 2467) @@ -1,24 +0,0 @@ -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% -UIResults results = UIResults.getFromRequest(request); -StringFormatter fmt = results.getFormatter(); -String contextRoot = results.getContextPrefix(); -String serverRoot = results.getServerPrefix(); -%> -<!-- FOOTER --> - <div align="center"> - <hr noshade size="1" align="center"> - - <p> - <a href="<%= contextRoot %>"> - <%= fmt.format("UIGlobal.homeLink") %> - </a> | - <a href="<%= contextRoot %>help.jsp"> - <%= fmt.format("UIGlobal.helpLink") %> - </a> - </p> - </div> - </body> -</html> -<!-- /FOOTER --> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-footer.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/template/UI-footer.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-footer.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-footer.jsp 2008-07-21 23:22:43 UTC (rev 2467) @@ -0,0 +1,25 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% +UIResults results = UIResults.getGeneric(request); +StringFormatter fmt = results.getWbRequest().getFormatter(); +String contextRoot = results.getWbRequest().getContextPrefix(); +String serverRoot = results.getWbRequest().getServerPrefix(); +%> +<!-- FOOTER --> + <div align="center"> + <hr noshade size="1" align="center"> + + <p> + <a href="<%= contextRoot %>"> + <%= fmt.format("UIGlobal.homeLink") %> + </a> | + <a href="<%= contextRoot %>help.jsp"> + <%= fmt.format("UIGlobal.helpLink") %> + </a> + </p> + </div> + </body> +</html> +<!-- /FOOTER --> Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-header.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/template/UI-header.jsp 2008-04-11 03:51:10 UTC (rev 2227) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-header.jsp 2008-07-21 23:22:43 UTC (rev 2467) @@ -1,108 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<% -UIResults results = UIResults.getFromRequest(request); -StringFormatter fmt = results.getFormatter(); -String contextRoot = results.getContextPrefix(); -String serverRoot = results.getServerPrefix(); -%> -<!-- HEADER --> -<html xmlns="http://www.w3.org/1999/xhtml"> - - <head> - <meta http-equiv="content-type" content="text/html; charset=utf-8"> - - <link rel="stylesheet" type="text/css" - href="<%= contextRoot %>css/styles.css" - src="<%= contextRoot %>css/styles.css"> - <title><%= fmt.format("UIGlobal.pageTitle") %></title> - <base target="_top"> - </head> - - <body bgcolor="white" alink="red" vlink="#0000aa" link="blue" - style="font-family: Arial; font-size: 10pt"> - - <table width="100%" border="0" cellpadding="0" cellspacing="5"> - - <tr> - - <!-- WAYBACK LOGO --> - - <td width="26%"><a href="<%= contextRoot %>"><img src="<%= contextRoot %>images/wayback_logo_sm.gif" width="153" height="54" border="0"></a></td> - - <!-- /WAYBACK LOGO --> - - <!-- COLLECTION-EMPTYLOGO --> - - <td width="70%" align="right"></td> - - <!-- /COLLECTION-EMPTY LOGO --> - - </tr> - - <!-- GREEN BANNER --> - <tr> - <td colspan="2" height="30" align="center" class="mainSecHeadW"> - <table width="100%" border="0" cellspacing="0" cellpadding="0"> - - <tr class="mainBColor"> - <td colspan="2"> - <table border="0" width="80%" align="center"> - - - <!-- URL FORM --> - <form action="<%= contextRoot %>query" method="get"> - - - <tr> - <td nowrap align="center"><img src="<%= contextRoot %>images/shim.gif" width="1" height="20"> - - <b class="mainBodyW"> - <font size="2" color="#FFFFFF" face="Arial, Helvetica, sans-serif"> - <%= fmt.format("UIGlobal.enterWebAddress") %> - </font> - <input type="hidden" name="type" value="urlquery"> - <input type="text" name="url" value="http://" size="24" maxlength="256"> - - </b> - <select name="date" size="1"> - <option value="" selected><%= fmt.format("UIGlobal.selectYearAll") %></option> - <option>2007</option> - <option>2006</option> - <option>2005</option> - <option>2004</option> - <option>2003</option> - <option>2002</option> - <option>2001</option> - <option>2000</option> - <option>1999</option> - <option>1998</option> - <option>1997</option> - <option>1996</option> - </select> - - <input type="submit" name="Submit" value="<%= fmt.format("UIGlobal.urlSearchButton") %>" align="absMiddle"> - - <a href="<%= contextRoot %>advanced_search.jsp" style="color:white;font-size:11px"> - <%= fmt.format("UIGlobal.advancedSearchLink") %> - </a> - - </td> - </tr> - - - </form> - <!-- /URL FORM --> - - </table> - </td> - </tr> - </table> - </td> - </tr> - <!-- /GREEN BANNER --> - </table> -<!-- /HEADER --> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-header.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/template/UI-header.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-header.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/template/UI-header.jsp 2008-07-21 23:22:43 UTC (rev 2467) @@ -0,0 +1,111 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<% +UIResults results = UIResults.getGeneric(request); +WaybackRequest wbRequest = results.getWbRequest(); +StringFormatter fmt = wbRequest.getFormatter(); +String contextRoot = wbRequest.getContextPrefix(); +String serverRoot = wbRequest.getServerPrefix(); +%> +<!-- HEADER --> +<html xmlns="http://www.w3.org/1999/xhtml"> + + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + + <link rel="stylesheet" type="text/css" + href="<%= contextRoot %>css/styles.css" + src="<%= contextRoot %>css/styles.css" /> + <title><%= fmt.format("UIGlobal.pageTitle") %></title> + <base target="_top" /> + </head> + + <body bgcolor="white" alink="red" vlink="#0000aa" link="blue" + style="font-family: Arial; font-size: 10pt"> + + <table width="100%" border="0" cellpadding="0" cellspacing="5"> + + <tr> + + <!-- WAYBACK LOGO --> + + <td width="26%"><a href="<%= contextRoot %>"><img src="<%= contextRoot %>images/wayback_logo_sm.gif" width="153" height="54" border="0"></a></td> + + <!-- /WAYBACK LOGO --> + + <!-- COLLECTION-EMPTYLOGO --> + + <td width="70%" align="right"></td> + + <!-- /COLLECTION-EMPTY LOGO --> + + </tr> + + <!-- GREEN BANNER --> + <tr> + <td colspan="2" height="30" align="center" class="mainSecHeadW"> + <table width="100%" border="0" cellspacing="0" cellpadding="0"> + + <tr class="mainBColor"> + <td colspan="2"> + <table border="0" width="80%" align="center"> + + + <!-- URL FORM --> + <form action="<%= contextRoot %>query" method="get"> + + + <tr> + <td nowrap align="center"><img src="<%= contextRoot %>images/shim.gif" width="1" height="20"> + + <b class="mainBodyW"> + <font size="2" color="#FFFFFF" face="Arial, Helvetica, sans-serif"> + <%= fmt.format("UIGlobal.enterWebAddress") %> + </font> + <input type="hidden" name="<%= WaybackRequest.REQUEST_TYPE %>" value="<%= WaybackRequest.REQUEST_CAPTURE_QUERY %>"> + <input type="text" name="<%= WaybackRequest.REQUEST_URL %>" value="http://" size="24" maxlength="256"> + + </b> + <select name="<%= WaybackRequest.REQUEST_DATE %>" size="1"> + <option value="" selected><%= fmt.format("UIGlobal.selectYearAll") %></option> + <option>2008</option> + <option>2007</option> + <option>2006</option> + <option>2005</option> + <option>2004</option> + <option>2003</option> + <option>2002</option> + <option>2001</option> + <option>2000</option> + <option>1999</option> + <option>1998</option> + <option>1997</option> + <option>1996</option> + </select> + + <input type="submit" name="Submit" value="<%= fmt.format("UIGlobal.urlSearchButton") %>" align="absMiddle"> + + <a href="<%= contextRoot %>advanced_search.jsp" style="color:white;font-size:11px"> + <%= fmt.format("UIGlobal.advancedSearchLink") %> + </a> + + </td> + </tr> + + + </form> + <!-- /URL FORM --> + + </table> + </td> + </tr> + </table> + </td> + </tr> + <!-- /GREEN BANNER --> + </table> +<!-- /HEADER --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:21:47
|
Revision: 2466 http://archive-access.svn.sourceforge.net/archive-access/?rev=2466&view=rev Author: bradtofel Date: 2008-07-21 23:21:55 +0000 (Mon, 21 Jul 2008) Log Message: ----------- MOVE: webapp/replay -> webapp/WEB-INF/replay Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:20:59
|
Revision: 2465 http://archive-access.svn.sourceforge.net/archive-access/?rev=2465&view=rev Author: bradtofel Date: 2008-07-21 23:21:07 +0000 (Mon, 21 Jul 2008) Log Message: ----------- Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ArchiveComment.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ClientSideJSInsert.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Disclaimer.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/JSLessTimeline.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Redirect.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ResultMeta.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Timeline.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Timeline.jsp Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ArchiveComment.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ArchiveComment.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ArchiveComment.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ArchiveComment.jsp 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,21 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.Date" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% +UIResults results = UIResults.extractReplay(request); +StringFormatter fmt = results.getWbRequest().getFormatter(); +Date exactDate = results.getResult().getCaptureDate(); +Date now = new Date(); +String prettyDateFormat = "{0,date,H:mm:ss MMM d, yyyy}"; +String prettyArchiveString = fmt.format(prettyDateFormat,exactDate); +String prettyRequestString = fmt.format(prettyDateFormat,now); +%> +<!-- + FILE ARCHIVED ON <%= prettyArchiveString %> AND RETRIEVED FROM THE + INTERNET ARCHIVE ON <%= prettyRequestString %>. + JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. + + ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. + SECTION 108(a)(3)). +--> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ClientSideJSInsert.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ClientSideJSInsert.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ClientSideJSInsert.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ClientSideJSInsert.jsp 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,19 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.Date" %> +<%@ page import="org.archive.wayback.ResultURIConverter" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% +UIResults results = UIResults.extractReplay(request); +String requestDate = results.getResult().getCaptureTimestamp(); +String contextPath = results.getURIConverter().makeReplayURI(requestDate,""); +String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" + + request.getServerPort() + request.getContextPath(); + +String jsUrl = contextRoot + "/replay/client-rewrite.js"; +%> +<script type="text/javascript"> + var sWayBackCGI = "<%= contextPath %>"; +</script> +<script type="text/javascript" src="<%= jsUrl %>" ></script> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Disclaimer.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Disclaimer.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Disclaimer.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Disclaimer.jsp 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,42 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.Date" %> +<%@ page import="org.archive.wayback.WaybackConstants" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% +UIResults results = UIResults.extractReplay(request); + +StringFormatter fmt = results.getWbRequest().getFormatter(); +CaptureSearchResult result = results.getResult(); +String dupeMsg = ""; +if(result != null) { + if(result.isDuplicateDigest()) { + Date dupeDate = result.getDuplicateDigestStoredDate(); + String prettyDate = ""; + if(dupeDate != null) { + prettyDate = "(" + + fmt.format("MetaReplay.captureDateDisplay", + dupeDate) + ")"; + } + dupeMsg = " Note that this document was downloaded, and not saved because it was a duplicate of a previously captured version " + + prettyDate + ". HTTP headers presented here are from the original capture."; + } +} + +Date resultDate = result.getCaptureDate(); +String resultUrl = result.getOriginalUrl(); + +String wmNotice = fmt.format("ReplayView.banner", resultUrl, resultDate); +String wmHideNotice = fmt.format("ReplayView.bannerHideLink"); + +String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" ++ request.getServerPort() + request.getContextPath(); +String jsUrl = contextRoot + "/replay/disclaim.js"; +%> +<script type="text/javascript"> + var wmNotice = "<%= wmNotice %><%= dupeMsg %>"; + var wmHideNotice = "<%= wmHideNotice %>"; +</script> +<script type="text/javascript" src="<%= jsUrl %>"></script> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/JSLessTimeline.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/JSLessTimeline.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/JSLessTimeline.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/JSLessTimeline.jsp 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,295 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.Iterator" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Date" %> +<%@ page import="java.text.ParseException" %> +<%@ page import="org.archive.wayback.WaybackConstants" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsTimelinePartitionsFactory" %> +<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% + +String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" + + request.getServerPort() + request.getContextPath(); + +UIResults results = UIResults.extractReplay(request); +WaybackRequest wbRequest = results.getWbRequest(); +StringFormatter fmt = wbRequest.getFormatter(); +CaptureSearchResults cResults = results.getCaptureResults(); + +String exactDateStr = wbRequest.getReplayTimestamp(); +Date exactDate = wbRequest.getReplayDate(); +String searchUrl = wbRequest.getRequestUrl(); +String resolution = wbRequest.getTimelineResolution(); + +if(resolution == null) { + resolution = WaybackRequest.REQUEST_RESOLUTION_AUTO; +} +String metaChecked = ""; +if(wbRequest.isMetaMode()) { + metaChecked = "checked"; +} + +CaptureSearchResult first = null; +CaptureSearchResult prev = null; +CaptureSearchResult next = null; +CaptureSearchResult last = null; + +long resultCount = cResults.getReturnedCount(); +int resultIndex = 1; +Iterator<CaptureSearchResult> it = cResults.iterator(); +while(it.hasNext()) { + CaptureSearchResult res = it.next(); + Date resDate = res.getCaptureDate(); + + int compared = resDate.compareTo(exactDate); + if(compared < 0) { + resultIndex++; + prev = res; + if(first == null) { + first = res; + } + } else if(compared > 0) { + last = res; + if(next == null) { + next = res; + } + } +} +// string to indicate which select option is currently active +String yearsOptSelected = ""; +String monthsOptSelected = ""; +String daysOptSelected = ""; +String hoursOptSelected = ""; +String autoOptSelected = ""; + +String minResolution = ResultsTimelinePartitionsFactory.getMinResolution(cResults); + +String optimal = ""; +if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_HOURS)) { + optimal = fmt.format("TimelineView.timeRange.hours"); +} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_DAYS)) { + optimal = fmt.format("TimelineView.timeRange.days"); +} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_MONTHS)) { + optimal = fmt.format("TimelineView.timeRange.months"); +} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_TWO_MONTHS)) { + optimal = fmt.format("TimelineView.timeRange.twomonths"); +} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_YEARS)) { + optimal = fmt.format("TimelineView.timeRange.years"); +} else { + optimal = fmt.format("TimelineView.timeRange.unknown"); +} +String autoOptString = fmt.format("TimelineView.timeRange.auto",optimal); + +ArrayList<ResultsPartition> partitions; +if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_HOURS)) { + hoursOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getHour(cResults,wbRequest); +} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_DAYS)) { + daysOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getDay(cResults,wbRequest); +} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_MONTHS)) { + monthsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getMonth(cResults,wbRequest); +} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_TWO_MONTHS)) { + monthsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getTwoMonth(cResults,wbRequest); +} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_YEARS)) { + yearsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getYear(cResults,wbRequest); +} else { + autoOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getAuto(cResults,wbRequest); +} +int numPartitions = partitions.size(); +ResultsPartition firstP = (ResultsPartition) partitions.get(0); +ResultsPartition lastP = (ResultsPartition) partitions.get(numPartitions -1); + +String firstDate = firstP.getTitle(); +String lastDate = lastP.getTitle(); +String titleString = ""; +%> +<!-- + ====================================== + BEGIN Wayback INSERTED TIMELINE BANNER + + The following HTML has been inserted + by the Wayback application to enhance + the viewing experience, and was not + part of the original archived content. + ====================================== +--> +<div id="wm-ipp" style="position:relative;z-index:99999;border:1px solid;color:black;background-color:lightYellow;font-size:10px;font-family:sans-serif;padding:5px" > + +<table cellspacing="0" border="0" cellpadding="0" width="100%"> + <tr> + <td width="1" nowrap></td> + <td> + <!-- Viewing --> + <table cellspacing="0" border="0" cellpadding="0" width="100%"> + <tr> + <td> + <span><%= fmt.format("TimelineView.viewingVersion",resultIndex,resultCount) %> </span> + </td> + </tr> + <tr> + <td nowrap><span> <%= fmt.format("TimelineView.viewingVersionDate",exactDate) %> </span> </td> + </tr> + </table> + </td> + <td width="400" align="center"> + <table> + <tr> + <td width="50%"></td> + <td> + <table cellspacing="0" border="0" cellpadding="0" width="100%"> + <tr> + <td width="48%" nowrap><span><%= firstDate %></span></td> + <td align="center" valign="bottom" nowrap><img wmSpecial="1" src="<%= contextRoot %>/images/mark.jpg"></td> + <td width="48%" nowrap align="right"><span><%= lastDate %></span></td> + </tr> + </table> + </td> + <td width="50%"></td> + </tr> + <tr> + <td nowrap align="right"><% + titleString = ""; + if(first != null) { + titleString = "title=\"" + + fmt.format("TimelineView.firstVersionTitle", + first.getCaptureDate()) + "\""; + %><a wmSpecial="1" href="<%= results.resultToReplayUrl(first) %>"><% + } + %><img <%= titleString %> wmSpecial="1" border=0 width=19 height=20 src="<%= contextRoot %>/images/first.jpg"><% + if(first != null) { + %></a><% + } + titleString = ""; + if(prev != null) { + titleString = "title=\"" + + fmt.format("TimelineView.prevVersionTitle", + prev.getCaptureDate()) + "\""; + %><a wmSpecial="1" href="<%= results.resultToReplayUrl(prev) %>"><% + } + %><img <%= titleString %> wmSpecial="1" border=0 width=13 height=20 src="<%= contextRoot %>/images/prev.jpg"><% + if(first != null) { + %></a><% + } + %></td> + <td nowrap><% + + for(int i = 0; i < numPartitions; i++) { + ResultsPartition partition = (ResultsPartition) partitions.get(i); + ArrayList partitionResults = partition.getMatches(); + int numResults = partitionResults.size(); + String imageUrl = contextRoot + "/images/line.jpg"; + String replayUrl = null; + String prettyDateTime = null; + if(numResults == 1) { + imageUrl = contextRoot + "/images/mark_one.jpg"; + CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(0); + replayUrl = results.resultToReplayUrl(result); + prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); + + } else if (numResults > 1) { + imageUrl = contextRoot + "/images/mark_several.jpg"; + CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(numResults - 1); + replayUrl = results.resultToReplayUrl(result); + prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); + + } + if((i > 0) && (i < numPartitions)) { + +%><img wmSpecial="1" border=0 width=1 height=16 src="<%= contextRoot %>/images/linemark.jpg"><% + + } + + if(replayUrl == null) { + +%><img wmSpecial="1" border=0 width=7 height=16 src="<%= imageUrl %>"><% + + } else { + +%><a wmSpecial="1" href="<%= replayUrl %>"><img wmSpecial="1" border=0 width=7 height=16 title="<%= prettyDateTime %>" src="<%= imageUrl %>"></a><% + + } + } + +%></td> + <td nowrap><% + titleString = ""; + if(next != null) { + titleString = "title=\"" + + fmt.format("TimelineView.nextVersionTitle", + next.getCaptureDate()) + "\""; + %><a wmSpecial="1" href="<%= results.resultToReplayUrl(next) %>"><% + } + %><img wmSpecial="1" <%= titleString %> border=0 width=13 height=20 src="<%= contextRoot %>/images/next.jpg"><% + if(first != null) { + %></a><% + } + titleString = ""; + if(last != null) { + titleString = "title=\"" + + fmt.format("TimelineView.lastVersionTitle", + last.getCaptureDate()) + "\""; + %><a wmSpecial="1" href="<%= results.resultToReplayUrl(last) %>"><% + } + %><img wmSpecial="1" <%= titleString %> border=0 width=19 height=20 src="<%= contextRoot %>/images/last.jpg"><% + if(first != null) { + %></a><% + } + %></td> + </tr> + </table> + </td> + <td align="right" width="400"> + <!-- Resolution --> + <!-- + need to get cookie data passing set up before this can be re-enabled: + <form wmSpecial="1" name="timeline" method="GET" target="_top" action="<%= contextRoot + "/frameset" %>"> + <input type="hidden" name="url" value="<%= searchUrl %>"> + <input type="hidden" name="exactdate" value="<%= exactDateStr %>"> + <input type="hidden" name="type" value="urlclosestquery"> + <%= fmt.format("TimelineView.timeRange") %> + <select NAME="resolution" SIZE="1" onChange="changeResolution()"> + <option <%= yearsOptSelected %> value="years"> + <%= fmt.format("TimelineView.timeRange.years") %> + </option> + <option <%= monthsOptSelected %> value="months"> + <%= fmt.format("TimelineView.timeRange.months") %> + </option> + <option <%= daysOptSelected %> value="days"> + <%= fmt.format("TimelineView.timeRange.days") %> + </option> + <option <%= hoursOptSelected %> value="hours"> + <%= fmt.format("TimelineView.timeRange.hours") %> + </option> + <option <%= autoOptSelected %> value="auto"><%= autoOptString %></option> + </select> <%= + fmt.format("TimelineView.metaDataCheck") + %><input type="checkbox" name="<%= WaybackRequest.REQUEST_META_MODE%>" value="<%= WaybackRequest.REQUEST_YES %>" <%= + metaChecked + %> onClick="changeMeta()"> + </form> + --> + <a wmSpecial="1" href="<%= contextRoot %>/help.jsp" target="_top"><%= + fmt.format("UIGlobal.helpLink") + %></a> + </td> + <td> + <img wmSpecial="1" alt='' height='1' src='<%= contextRoot %>/images/1px.gif' width='5'> + </td> + </tr> +</table> +</div> +<!-- + ====================================== + END Wayback INSERTED TIMELINE BANNER + ====================================== +--> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Redirect.jsp (from rev 2454, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Redirect.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Redirect.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Redirect.jsp 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,15 @@ +<%@ page import="org.archive.wayback.util.bdb.BDBMap" %> + +<% + String url = request.getParameter("url"); + String time = request.getParameter("time"); + + // Put time-mapping for this id, or if no id, the ip-addr. + String id = request.getHeader("Proxy-Id"); + if(id == null) id = request.getRemoteAddr(); + BDBMap.addTimestampForId(request.getContextPath(),id, time); + + // Now redirect to the page the user wanted. + response.sendRedirect(url); +%> +anchored date! Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ResultMeta.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/ResultMeta.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ResultMeta.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/ResultMeta.jsp 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,124 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.Iterator" %> +<%@ page import="java.util.Map" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% + +UIResults uiResults = UIResults.extractReplay(request); +StringFormatter fmt = uiResults.getWbRequest().getFormatter(); +CaptureSearchResult result = uiResults.getResult(); +String origUrl = result.getOriginalUrl(); +String urlKey = result.getUrlKey(); +String archiveID = result.getFile() + "/" + result.getOffset(); +String captureTS = result.getCaptureTimestamp(); +String capturePrettyDateTime = fmt.format("MetaReplay.captureDateDisplay", + result.getCaptureDate()); +String mimeType = result.getMimeType(); +String digest = result.getDigest(); +Map<String,String> headers = uiResults.getResource().getHttpHeaders(); + +%> +<html> + <head> + <title> + <%= fmt.format("MetaReplay.title") + urlKey +" / " + + capturePrettyDateTime %> + </title> + </head> + <body> + <h2> + <%= fmt.format("MetaReplay.title") %> + </h2> + <table> + <tr> + <td class="field-cell"> + <%= fmt.format("MetaReplay.originalURL") %> + </td> + <td class="value-cell"> + <b> + <%= origUrl %> + </b> + </td> + </tr> + <tr> + <td class="field-cell"> + <%= fmt.format("MetaReplay.URLKey") %> + </td> + <td class="value-cell"> + <b> + <%= urlKey %> + </b> + </td> + </tr> + <tr> + <td class="field-cell"> + <%= fmt.format("MetaReplay.captureDate") %> + </td> + <td class="value-cell"> + <b> + <%= capturePrettyDateTime %> + </b> + </td> + </tr> + <tr> + <td class="field-cell"> + <%= fmt.format("MetaReplay.archiveID") %> + </td> + <td class="value-cell"> + <b> + <%= archiveID %> + </b> + </td> + </tr> + <tr> + <td class="field-cell"> + <%= fmt.format("MetaReplay.MIMEType") %> + </td> + <td class="value-cell"> + <b> + <%= mimeType %> + </b> + </td> + </tr> + <tr> + <td class="field-cell"> + <%= fmt.format("MetaReplay.digest") %> + </td> + <td class="value-cell"> + <b> + <%= digest %> + </b> + </td> + </tr> + </table> + <p> + <h2> + <%= fmt.format("MetaReplay.HTTPHeaders") %> + </h2> + <table> + <% + Iterator<String> itr = headers.keySet().iterator(); + while(itr.hasNext()) { + String key = itr.next(); + String value = headers.get(key); + %> + <tr> + <td class="field-cell"> + <%= key %> + </td> + <td class="value-cell"> + <b> + <%= value %> + </b> + </td> + </tr> + <% + } + %> + </table> + + </body> +</html> + Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Timeline.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Timeline.jsp 2007-10-15 21:28:33 UTC (rev 2055) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Timeline.jsp 2008-07-21 23:21:07 UTC (rev 2465) @@ -1,326 +0,0 @@ -<%@ page import="java.util.Iterator" %> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.Date" %> -<%@ page import="java.text.ParseException" %> -<%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.SearchResult" %> -<%@ page import="org.archive.wayback.core.Timestamp" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.core.WaybackRequest" %> -<%@ page import="org.archive.wayback.query.UIQueryResults" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsTimelinePartitionsFactory" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% - -String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" - + request.getServerPort() + request.getContextPath(); - -UIQueryResults results = (UIQueryResults) UIResults.getFromRequest(request); -StringFormatter fmt = results.getFormatter(); - -Timestamp searchStartTs = results.getStartTimestamp(); -Timestamp searchEndTs = results.getEndTimestamp(); -Timestamp exactTs = results.getExactRequestedTimestamp(); -String searchUrl = results.getSearchUrl(); -Date exactDate = exactTs.getDate(); - -String exactDateStr = exactTs.getDateStr(); -WaybackRequest wbRequest = results.getWbRequest(); -String resolution = wbRequest.get(WaybackConstants.REQUEST_RESOLUTION); -if(resolution == null) { - resolution = WaybackConstants.REQUEST_RESOLUTION_AUTO; -} -String metaMode = wbRequest.get(WaybackConstants.REQUEST_META_MODE); -String metaChecked = ""; -if(metaMode != null && metaMode.equals("yes")) { - metaChecked = "checked"; -} - -String searchString = results.getSearchUrl(); - -SearchResult first = null; -SearchResult prev = null; -SearchResult next = null; -SearchResult last = null; - -int resultCount = results.getResultsReturned(); -int resultIndex = 1; -Iterator<SearchResult> it = results.resultsIterator(); -while(it.hasNext()) { - SearchResult res = it.next(); - String resDateStr = res.get(WaybackConstants.RESULT_CAPTURE_DATE); - int compared = resDateStr.compareTo(exactDateStr.substring(0,resDateStr.length())); - if(compared < 0) { - resultIndex++; - prev = res; - if(first == null) { - first = res; - } - } else if(compared > 0) { - last = res; - if(next == null) { - next = res; - } - } -} -// string to indicate which select option is currently active -String yearsOptSelected = ""; -String monthsOptSelected = ""; -String daysOptSelected = ""; -String hoursOptSelected = ""; -String autoOptSelected = ""; - -String minResolution = ResultsTimelinePartitionsFactory.getMinResolution( - results.getResults()); - -String optimal = ""; -if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_HOURS)) { - optimal = fmt.format("TimelineView.timeRange.hours"); -} else if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_DAYS)) { - optimal = fmt.format("TimelineView.timeRange.days"); -} else if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_MONTHS)) { - optimal = fmt.format("TimelineView.timeRange.months"); -} else if(minResolution.equals(WaybackConstants.REQUEST_RESOLUTION_YEARS)) { - optimal = fmt.format("TimelineView.timeRange.years"); -} else { - optimal = fmt.format("TimelineView.timeRange.unknown"); -} -String autoOptString = fmt.format("TimelineView.timeRange.auto",optimal); - -ArrayList<ResultsPartition> partitions; -if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_HOURS)) { - hoursOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getHour(results.getResults(), - wbRequest); -} else if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_DAYS)) { - daysOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getDay(results.getResults(), - wbRequest); -} else if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_MONTHS)) { - monthsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getMonth(results.getResults(), - wbRequest); -} else if(resolution.equals(WaybackConstants.REQUEST_RESOLUTION_YEARS)) { - yearsOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getYear(results.getResults(), - wbRequest); -} else { - autoOptSelected = "selected"; - partitions = ResultsTimelinePartitionsFactory.getAuto(results.getResults(), - wbRequest); -} -int numPartitions = partitions.size(); -ResultsPartition firstP = (ResultsPartition) partitions.get(0); -ResultsPartition lastP = (ResultsPartition) partitions.get(numPartitions -1); - -String firstDate = firstP.getTitle(); -String lastDate = lastP.getTitle(); -String titleString = ""; -%> -<script type="text/javascript"> - function changeResolution() { - document.timeline.submit(); - } - function changeMeta() { - document.timeline.submit(); - } - -var open = true; - -function handleDragClick() { - var daDiv = document.getElementById("wm-ipp"); - var daDraggerDiv = document.getElementById("wm-dragger"); - while(daDraggerDiv.hasChildNodes()) { - daDraggerDiv.removeChild(daDraggerDiv.firstChild); - } - var newText; - if(open) { - open = false; - daDiv.style.width = "100px"; - newText = "<"; - } else { - open = true; - daDiv.style.width = "100%"; - newText = ">"; - } - daDraggerDiv.appendChild(document.createTextNode(newText)); -} - - -</script> -<!-- -overflow:hidden; border-width:1; border-style:outset; width:100%; height:80px; right:0; top:0; background-color:#dddddd; - --> -<div id="wm-ipp" style="position:relative;z-index:99999;border:1px solid;color:black;background-color:lightYellow;font-size:10px;font-family:sans-serif;padding:5px" > -<!-- -<div onclick="handleDragClick()" id="wm-dragger" style="height:25px; width:100%; border-width:1; border-style:outset; background-color:#cccccc; text-align:right;"> -< -</div> - --> -<table cellspacing="0" border="0" cellpadding="0" width="100%"> - <tr> - <td width="1" nowrap></td> - <td> - <!-- Viewing --> - <table cellspacing="0" border="0" cellpadding="0" width="100%"> - <tr> - <td> - <span><%= fmt.format("TimelineView.viewingVersion",resultIndex,resultCount) %> </span> - </td> - </tr> - <tr> - <td nowrap><span> <%= fmt.format("TimelineView.viewingVersionDate",exactDate) %> </span> </td> - </tr> - </table> - </td> - <td width="400"> - <table> - <tr> - <td width="50%"></td> - <td> - <table cellspacing="0" border="0" cellpadding="0" width="100%"> - <tr> - <td width="48%" nowrap><span><%= firstDate %></span></td> - <td align="center" valign="bottom" nowrap><img wmSpecial="1" src="<%= contextRoot %>/images/mark.jpg"></td> - <td width="48%" nowrap align="right"><span><%= lastDate %></span></td> - </tr> - </table> - </td> - <td width="50%"></td> - </tr> - <tr> - <td nowrap align="right"><% - titleString = ""; - if(first != null) { - titleString = "title=\"" + - fmt.format("TimelineView.firstVersionTitle", - results.resultToDate(first)) + "\""; - %><a wmSpecial="1" href="<%= results.resultToReplayUrl(first) %>"><% - } - %><img <%= titleString %> wmSpecial="1" border=0 width=19 height=20 src="<%= contextRoot %>/images/first.jpg"><% - if(first != null) { - %></a><% - } - titleString = ""; - if(prev != null) { - titleString = "title=\"" + - fmt.format("TimelineView.prevVersionTitle", - results.resultToDate(prev)) + "\""; - %><a wmSpecial="1" href="<%= results.resultToReplayUrl(prev) %>"><% - } - %><img <%= titleString %> wmSpecial="1" border=0 width=13 height=20 src="<%= contextRoot %>/images/prev.jpg"><% - if(first != null) { - %></a><% - } - %></td> - <td nowrap><% - - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = (ResultsPartition) partitions.get(i); - ArrayList partitionResults = partition.getMatches(); - int numResults = partitionResults.size(); - String imageUrl = contextRoot + "/images/line.jpg"; - String replayUrl = null; - String prettyDateTime = null; - if(numResults == 1) { - imageUrl = contextRoot + "/images/mark_one.jpg"; - SearchResult result = (SearchResult) partitionResults.get(0); - replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",results.resultToDate(result)); - - } else if (numResults > 1) { - imageUrl = contextRoot + "/images/mark_several.jpg"; - SearchResult result = (SearchResult) partitionResults.get(numResults - 1); - replayUrl = results.resultToReplayUrl(result); - prettyDateTime = fmt.format("TimelineView.markDateTitle",results.resultToDate(result)); - - } - if((i > 0) && (i < numPartitions)) { - -%><img wmSpecial="1" border=0 width=1 height=16 src="<%= contextRoot %>/images/linemark.jpg"><% - - } - - if(replayUrl == null) { - -%><img wmSpecial="1" border=0 width=7 height=16 src="<%= imageUrl %>"><% - - } else { - -%><a wmSpecial="1" href="<%= replayUrl %>"><img wmSpecial="1" border=0 width=7 height=16 title="<%= prettyDateTime %>" src="<%= imageUrl %>"></a><% - - } - } - -%></td> - <td nowrap><% - titleString = ""; - if(next != null) { - titleString = "title=\"" + - fmt.format("TimelineView.nextVersionTitle", - results.resultToDate(next)) + "\""; - %><a wmSpecial="1" href="<%= results.resultToReplayUrl(next) %>"><% - } - %><img wmSpecial="1" <%= titleString %> border=0 width=13 height=20 src="<%= contextRoot %>/images/next.jpg"><% - if(first != null) { - %></a><% - } - titleString = ""; - if(last != null) { - titleString = "title=\"" + - fmt.format("TimelineView.lastVersionTitle", - results.resultToDate(last)) + "\""; - %><a wmSpecial="1" href="<%= results.resultToReplayUrl(last) %>"><% - } - %><img wmSpecial="1" <%= titleString %> border=0 width=19 height=20 src="<%= contextRoot %>/images/last.jpg"><% - if(first != null) { - %></a><% - } - %></td> - </tr> - </table> - </td> - <td align="right"> - <!-- Resolution --> - <form wmSpecial="1" name="timeline" method="GET" target="_top" action="<%= contextRoot + "/frameset" %>"> - <input type="hidden" name="url" value="<%= searchUrl %>"> - <input type="hidden" name="exactdate" value="<%= exactDateStr %>"> - <input type="hidden" name="type" value="urlclosestquery"> - <%= fmt.format("TimelineView.timeRange") %> - <select NAME="resolution" SIZE="1" onChange="changeResolution()"> - <option <%= yearsOptSelected %> value="years"> - <%= fmt.format("TimelineView.timeRange.years") %> - </option> - <option <%= monthsOptSelected %> value="months"> - <%= fmt.format("TimelineView.timeRange.months") %> - </option> - <option <%= daysOptSelected %> value="days"> - <%= fmt.format("TimelineView.timeRange.days") %> - </option> - <option <%= hoursOptSelected %> value="hours"> - <%= fmt.format("TimelineView.timeRange.hours") %> - </option> - <option <%= autoOptSelected %> value="auto"><%= autoOptString %></option> - </select> <%= - fmt.format("TimelineView.metaDataCheck") - %><input type="checkbox" name="metamode" value="yes" <%= - metaChecked - %> onClick="changeMeta()"> <a href="help.php" target="_top"><%= - fmt.format("UIGlobal.helpLink") - %></a> - </form> - </td> - <td> - <img wmSpecial="1" alt='' height='1' src='<%= contextRoot %>/images/1px.gif' width='5'> - </td> - </tr> -</table> -</div> -<script type="text/javascript"> - var daDiv = document.getElementById("wm-ipp"); - var daParentNode = daDiv.parentNode; - var daBody = document.body; - daParentNode.removeChild(daDiv); - daBody.insertBefore(daDiv,daBody.firstChild); -</script> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Timeline.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/Timeline.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Timeline.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/Timeline.jsp 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,319 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.Iterator" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Date" %> +<%@ page import="java.text.ParseException" %> +<%@ page import="org.archive.wayback.WaybackConstants" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsTimelinePartitionsFactory" %> +<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% + +String contextRoot = request.getScheme() + "://" + request.getServerName() + ":" + + request.getServerPort() + request.getContextPath(); + +UIResults results = UIResults.extractReplay(request); +WaybackRequest wbRequest = results.getWbRequest(); +StringFormatter fmt = wbRequest.getFormatter(); +CaptureSearchResults cResults = results.getCaptureResults(); + +String exactDateStr = wbRequest.getReplayTimestamp(); +Date exactDate = wbRequest.getReplayDate(); +String searchUrl = wbRequest.getRequestUrl(); +String resolution = wbRequest.getTimelineResolution(); + + +if(resolution == null) { + resolution = WaybackRequest.REQUEST_RESOLUTION_AUTO; +} +String metaChecked = ""; +if(wbRequest.isMetaMode()) { + metaChecked = "checked"; +} + +CaptureSearchResult first = null; +CaptureSearchResult prev = null; +CaptureSearchResult next = null; +CaptureSearchResult last = null; + +long resultCount = cResults.getReturnedCount(); +int resultIndex = 1; +Iterator<CaptureSearchResult> it = cResults.iterator(); +while(it.hasNext()) { + CaptureSearchResult res = it.next(); + String resDateStr = res.getCaptureTimestamp(); + int compared = resDateStr.compareTo(exactDateStr.substring(0,resDateStr.length())); + if(compared < 0) { + resultIndex++; + prev = res; + if(first == null) { + first = res; + } + } else if(compared > 0) { + last = res; + if(next == null) { + next = res; + } + } +} +// string to indicate which select option is currently active +String yearsOptSelected = ""; +String monthsOptSelected = ""; +String daysOptSelected = ""; +String hoursOptSelected = ""; +String autoOptSelected = ""; + +String minResolution = ResultsTimelinePartitionsFactory.getMinResolution(cResults); + +String optimal = ""; +if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_HOURS)) { + optimal = fmt.format("TimelineView.timeRange.hours"); +} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_DAYS)) { + optimal = fmt.format("TimelineView.timeRange.days"); +} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_MONTHS)) { + optimal = fmt.format("TimelineView.timeRange.months"); +} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_TWO_MONTHS)) { + optimal = fmt.format("TimelineView.timeRange.twomonths"); +} else if(minResolution.equals(WaybackRequest.REQUEST_RESOLUTION_YEARS)) { + optimal = fmt.format("TimelineView.timeRange.years"); +} else { + optimal = fmt.format("TimelineView.timeRange.unknown"); +} +String autoOptString = fmt.format("TimelineView.timeRange.auto",optimal); + +ArrayList<ResultsPartition> partitions; +if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_HOURS)) { + hoursOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getHour(cResults,wbRequest); +} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_DAYS)) { + daysOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getDay(cResults,wbRequest); +} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_MONTHS)) { + monthsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getMonth(cResults,wbRequest); +} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_TWO_MONTHS)) { + monthsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getTwoMonth(cResults,wbRequest); +} else if(resolution.equals(WaybackRequest.REQUEST_RESOLUTION_YEARS)) { + yearsOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getYear(cResults,wbRequest); +} else { + autoOptSelected = "selected"; + partitions = ResultsTimelinePartitionsFactory.getAuto(cResults,wbRequest); +} +int numPartitions = partitions.size(); +ResultsPartition firstP = (ResultsPartition) partitions.get(0); +ResultsPartition lastP = (ResultsPartition) partitions.get(numPartitions -1); + +String firstDate = firstP.getTitle(); +String lastDate = lastP.getTitle(); +String titleString = ""; +%> +<script type="text/javascript"> + function changeResolution() { + document.timeline.submit(); + } + function changeMeta() { + document.timeline.submit(); + } + +var open = true; + +function handleDragClick() { + var daDiv = document.getElementById("wm-ipp"); + var daDraggerDiv = document.getElementById("wm-dragger"); + while(daDraggerDiv.hasChildNodes()) { + daDraggerDiv.removeChild(daDraggerDiv.firstChild); + } + var newText; + if(open) { + open = false; + daDiv.style.width = "100px"; + newText = "<"; + } else { + open = true; + daDiv.style.width = "100%"; + newText = ">"; + } + daDraggerDiv.appendChild(document.createTextNode(newText)); +} + + +</script> + +<div id="wm-ipp" style="position:relative;z-index:99999;border:1px solid;color:black;background-color:lightYellow;font-size:10px;font-family:sans-serif;padding:5px" > + +<table cellspacing="0" border="0" cellpadding="0" width="100%"> + <tr> + <td width="1" nowrap></td> + <td> + <!-- Viewing --> + <table cellspacing="0" border="0" cellpadding="0" width="100%"> + <tr> + <td> + <span><%= fmt.format("TimelineView.viewingVersion",resultIndex,resultCount) %> </span> + </td> + </tr> + <tr> + <td nowrap><span> <%= fmt.format("TimelineView.viewingVersionDate",exactDate) %> </span> </td> + </tr> + </table> + </td> + <td width="400" align="center"> + <table> + <tr> + <td width="50%"></td> + <td> + <table cellspacing="0" border="0" cellpadding="0" width="100%"> + <tr> + <td width="48%" nowrap><span><%= firstDate %></span></td> + <td align="center" valign="bottom" nowrap><img wmSpecial="1" src="<%= contextRoot %>/images/mark.jpg"></td> + <td width="48%" nowrap align="right"><span><%= lastDate %></span></td> + </tr> + </table> + </td> + <td width="50%"></td> + </tr> + <tr> + <td nowrap align="right"><% + titleString = ""; + if(first != null) { + titleString = "title=\"" + + fmt.format("TimelineView.firstVersionTitle", + first.getCaptureDate()) + "\""; + %><a wmSpecial="1" href="<%= results.resultToReplayUrl(first) %>"><% + } + %><img <%= titleString %> wmSpecial="1" border=0 width=19 height=20 src="<%= contextRoot %>/images/first.jpg"><% + if(first != null) { + %></a><% + } + titleString = ""; + if(prev != null) { + titleString = "title=\"" + + fmt.format("TimelineView.prevVersionTitle", + prev.getCaptureDate()) + "\""; + %><a wmSpecial="1" href="<%= results.resultToReplayUrl(prev) %>"><% + } + %><img <%= titleString %> wmSpecial="1" border=0 width=13 height=20 src="<%= contextRoot %>/images/prev.jpg"><% + if(first != null) { + %></a><% + } + %></td> + <td nowrap><% + + for(int i = 0; i < numPartitions; i++) { + ResultsPartition partition = (ResultsPartition) partitions.get(i); + ArrayList partitionResults = partition.getMatches(); + int numResults = partitionResults.size(); + String imageUrl = contextRoot + "/images/line.jpg"; + String replayUrl = null; + String prettyDateTime = null; + if(numResults == 1) { + imageUrl = contextRoot + "/images/mark_one.jpg"; + CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(0); + replayUrl = results.resultToReplayUrl(result); + prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); + + } else if (numResults > 1) { + imageUrl = contextRoot + "/images/mark_several.jpg"; + CaptureSearchResult result = (CaptureSearchResult) partitionResults.get(numResults - 1); + replayUrl = results.resultToReplayUrl(result); + prettyDateTime = fmt.format("TimelineView.markDateTitle",result.getCaptureDate()); + + } + if((i > 0) && (i < numPartitions)) { + +%><img wmSpecial="1" border=0 width=1 height=16 src="<%= contextRoot %>/images/linemark.jpg"><% + + } + + if(replayUrl == null) { + +%><img wmSpecial="1" border=0 width=7 height=16 src="<%= imageUrl %>"><% + + } else { + +%><a wmSpecial="1" href="<%= replayUrl %>"><img wmSpecial="1" border=0 width=7 height=16 title="<%= prettyDateTime %>" src="<%= imageUrl %>"></a><% + + } + } + +%></td> + <td nowrap><% + titleString = ""; + if(next != null) { + titleString = "title=\"" + + fmt.format("TimelineView.nextVersionTitle", + next.getCaptureDate()) + "\""; + %><a wmSpecial="1" href="<%= results.resultToReplayUrl(next) %>"><% + } + %><img wmSpecial="1" <%= titleString %> border=0 width=13 height=20 src="<%= contextRoot %>/images/next.jpg"><% + if(first != null) { + %></a><% + } + titleString = ""; + if(last != null) { + titleString = "title=\"" + + fmt.format("TimelineView.lastVersionTitle", + last.getCaptureDate()) + "\""; + %><a wmSpecial="1" href="<%= results.resultToReplayUrl(last) %>"><% + } + %><img wmSpecial="1" <%= titleString %> border=0 width=19 height=20 src="<%= contextRoot %>/images/last.jpg"><% + if(first != null) { + %></a><% + } + %></td> + </tr> + </table> + </td> + <td align="right" width="400"> + <!-- Resolution --> + <!-- + need to get cookie data passing set up before this can be re-enabled: + <form wmSpecial="1" name="timeline" method="GET" target="_top" action="<%= contextRoot + "/frameset" %>"> + <input type="hidden" name="url" value="<%= searchUrl %>"> + <input type="hidden" name="exactdate" value="<%= exactDateStr %>"> + <input type="hidden" name="type" value="urlclosestquery"> + <%= fmt.format("TimelineView.timeRange") %> + <select NAME="resolution" SIZE="1" onChange="changeResolution()"> + <option <%= yearsOptSelected %> value="years"> + <%= fmt.format("TimelineView.timeRange.years") %> + </option> + <option <%= monthsOptSelected %> value="months"> + <%= fmt.format("TimelineView.timeRange.months") %> + </option> + <option <%= daysOptSelected %> value="days"> + <%= fmt.format("TimelineView.timeRange.days") %> + </option> + <option <%= hoursOptSelected %> value="hours"> + <%= fmt.format("TimelineView.timeRange.hours") %> + </option> + <option <%= autoOptSelected %> value="auto"><%= autoOptString %></option> + </select> <%= + fmt.format("TimelineView.metaDataCheck") + %><input type="checkbox" name="<%= WaybackRequest.REQUEST_META_MODE %>" value="<%= WaybackRequest.REQUEST_YES %>" <%= + metaChecked + %> onClick="changeMeta()">  + </form> + --> + <a wmSpecial="1" href="<%= contextRoot %>/help.jsp" target="_top"><%= + fmt.format("UIGlobal.helpLink") + %></a> + </td> + <td> + <img wmSpecial="1" alt='' height='1' src='<%= contextRoot %>/images/1px.gif' width='5'> + </td> + </tr> +</table> +</div> +<script type="text/javascript"> + var daDiv = document.getElementById("wm-ipp"); + var daParentNode = daDiv.parentNode; + var daBody = document.body; + daParentNode.removeChild(daDiv); + daBody.insertBefore(daDiv,daBody.firstChild); +</script> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js (from rev 2161, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/client-rewrite.js) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/client-rewrite.js 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,65 @@ + +function xResolveUrl(url) { + var image = new Image(); + image.src = url; + return image.src; +} +function xLateUrl(aCollection, sProp) { + var i = 0; + for(i = 0; i < aCollection.length; i++) { + if(aCollection[i].getAttribute(sProp) && + (aCollection[i].getAttribute(sProp).length > 0) && + (typeof(aCollection[i][sProp]) == "string")) { + + if(aCollection[i][sProp].indexOf("mailto:") == -1 && + aCollection[i][sProp].indexOf("javascript:") == -1) { + + var wmSpecial = aCollection[i].getAttribute("wmSpecial"); + if(wmSpecial && wmSpecial.length > 0) { + } else { + if(aCollection[i][sProp].indexOf(sWayBackCGI) == -1) { + if(aCollection[i][sProp].indexOf("http") == 0) { + aCollection[i][sProp] = sWayBackCGI + aCollection[i][sProp]; + } else { + aCollection[i][sProp] = sWayBackCGI + xResolveUrl(aCollection[i][sProp]); + } + } + } + } + } + } +} + +xLateUrl(document.getElementsByTagName("IMG"),"src"); +xLateUrl(document.getElementsByTagName("A"),"href"); +xLateUrl(document.getElementsByTagName("AREA"),"href"); +xLateUrl(document.getElementsByTagName("OBJECT"),"codebase"); +xLateUrl(document.getElementsByTagName("OBJECT"),"data"); +xLateUrl(document.getElementsByTagName("APPLET"),"codebase"); +xLateUrl(document.getElementsByTagName("APPLET"),"archive"); +xLateUrl(document.getElementsByTagName("EMBED"),"src"); +xLateUrl(document.getElementsByTagName("IFRAME"),"src"); +xLateUrl(document.getElementsByTagName("INPUT"),"src"); +xLateUrl(document.getElementsByTagName("BODY"),"background"); +var forms = document.getElementsByTagName("FORM"); +if (forms) { + var j = 0; + for (j = 0; j < forms.length; j++) { + f = forms[j]; + if (typeof(f.action) == "string") { + if(typeof(f.method) == "string") { + if(typeof(f.method) != "post") { + var resolved = ""; + var orig = f.action; + if(f.action.indexOf("http") == 0) { + resolved = f.action; + } else { + resolved = xResolveUrl(f.action); + } + // this does not work on firefox... + f.action = sWayBackCGI + resolved; + } + } + } + } +} Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js (from rev 2150, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/replay/disclaim-element.js) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/disclaim-element.js 2008-07-21 23:21:07 UTC (rev 2465) @@ -0,0 +1,29 @@ +function getFrameArea(frame) { + if(frame.innerWidth) return frame.innerWidth * frame.innerHeight; + if(frame.document.documentElement && frame.document.documentElement.clientHeight) return frame.document.documentElement.clientWidth * frame.document.documentElement.clientHeight; + if(frame.document.body) return frame.document.body.clientWidth * frame.document.body.clientHeight; + return 0; +} + +function disclaimElement(element) { + if(top!=self) { + if(top.document.body.tagName == "BODY") { + return; + } + largestArea = 0; + largestFrame = null; + for(i=0;i<top.frames.length;i++) { + frame = top.frames[i]; + area = getFrameArea(frame); + if(area > largestArea) { + largestFrame = frame; + largestArea = area; + } + } + if(self!=largestFrame) { + return; + } + } + element.style.display="block"; + document.body.insertBefore(element,document.body.firstChild); +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:20:11
|
Revision: 2464 http://archive-access.svn.sourceforge.net/archive-access/?rev=2464&view=rev Author: bradtofel Date: 2008-07-21 23:20:19 +0000 (Mon, 21 Jul 2008) Log Message: ----------- MOVE: webapp/query -> webapp/WEB-INF/query Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/query/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:19:10
|
Revision: 2463 http://archive-access.svn.sourceforge.net/archive-access/?rev=2463&view=rev Author: bradtofel Date: 2008-07-21 23:19:17 +0000 (Mon, 21 Jul 2008) Log Message: ----------- MOVE: webapp/query -> webapp/WEB-INF/query Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/CalendarResults.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLCaptureResults.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLUrlResults.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/XMLCaptureResults.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/XMLUrlResults.jsp Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/CalendarResults.jsp Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/CalendarResults.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/query/CalendarResults.jsp 2008-07-02 00:25:15 UTC (rev 2388) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/CalendarResults.jsp 2008-07-21 23:19:17 UTC (rev 2463) @@ -1,174 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="java.util.ArrayList" %> -<%@ page import="java.util.Date" %> -<%@ page import="java.util.Iterator" %> -<%@ page import="java.text.ParseException" %> -<%@ page import="org.archive.wayback.WaybackConstants" %> -<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> -<%@ page import="org.archive.wayback.core.Timestamp" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.query.UICaptureQueryResults" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartitionsFactory" %> -<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<jsp:include page="/template/UI-header.jsp" flush="true" /> -<% - -UICaptureQueryResults results = (UICaptureQueryResults) UIResults.getFromRequest(request); -StringFormatter fmt = results.getFormatter(); -String searchString = results.getSearchUrl(); - -Date searchStartDate = results.getStartTimestamp().getDate(); -Date searchEndDate = results.getEndTimestamp().getDate(); -long firstResult = results.getFirstResult(); -long lastResult = results.getLastResult(); -long resultCount = results.getResultsMatching(); - -//Timestamp searchStartTs = results.getStartTimestamp(); -//Timestamp searchEndTs = results.getEndTimestamp(); -//String prettySearchStart = results.prettyDateFull(searchStartTs.getDate()); -//String prettySearchEnd = results.prettyDateFull(searchEndTs.getDate()); - -ArrayList<ResultsPartition> partitions = ResultsPartitionsFactory.get( - results.getResults(),results.getWbRequest()); -int numPartitions = partitions.size(); -%> -<table border="0" cellpadding="5" width="100%" class="mainSearchBanner" cellspacing="0"> - <tr> - <td> - <%= fmt.format("PathQueryClassic.searchedFor",searchString) %> - </td> - <td align="right"> - <%= fmt.format("PathQueryClassic.resultsSummary",resultCount) %> - </td> - </tr> -</table> -<br> - - -<table border="0" width="100%"> - <tr bgcolor="#CCCCCC"> - <td colspan="<%= numPartitions %>" align="center" class="mainCalendar"> - <%= fmt.format("PathQueryClassic.searchResults",searchStartDate,searchEndDate) %> - </td> - </tr> - -<!-- RESULT COLUMN HEADERS --> - <tr bgcolor="#CCCCCC"> -<% - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = partitions.get(i); -%> - <td align="center" class="mainBigBody"> - <%= partition.getTitle() %> - </td> -<% - } -%> - </tr> -<!-- /RESULT COLUMN HEADERS --> - - - -<!-- RESULT COLUMN COUNTS --> - <tr bgcolor="#CCCCCC"> -<% - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = (ResultsPartition) partitions.get(i); -%> - <td align="center" class="mainBigBody"> - <%= fmt.format("ResultPartition.columnSummary",partition.resultsCount()) %> - </td> -<% - } -%> - </tr> -<!-- /RESULT COLUMN COUNTS --> - - -<!-- RESULT COLUMN DATA --> - <tr bgcolor="#EBEBEB"> -<% - boolean first = false; - String lastMD5 = null; - - for(int i = 0; i < numPartitions; i++) { - ResultsPartition partition = (ResultsPartition) partitions.get(i); - ArrayList<CaptureSearchResult> partitionResults = partition.getMatches(); -%> - <td nowrap class="mainBody" valign="top"> -<% - if(partitionResults.size() == 0) { -%> - -<% - } else { - - for(int j = 0; j < partitionResults.size(); j++) { - - CaptureSearchResult result = partitionResults.get(j); - String url = result.getUrlKey(); - String captureDate = result.getCaptureTimestamp(); - Timestamp captureTS = Timestamp.parseBefore(captureDate); - String prettyDate = fmt.format("PathQuery.classicResultLinkText", - captureTS.getDate()); - String origHost = result.getOriginalHost(); - String MD5 = result.getDigest(); - String redirectFlag = (0 == result.getRedirectUrl().compareTo("-")) - ? "" : fmt.format("PathPrefixQuery.redirectIndicator"); - String httpResponse = result.getHttpCode(); - String mimeType = result.getMimeType(); - - String arcFile = result.getFile(); - String arcOffset = String.valueOf(result.getOffset()); - - String replayUrl = results.resultToReplayUrl(result); - - boolean updated = false; - if(lastMD5 == null) { - lastMD5 = MD5; - updated = true; - } else if(0 != lastMD5.compareTo(MD5)) { - updated = true; - lastMD5 = MD5; - } - String updateStar = updated ? "*" : ""; -%> - <a href="<%= replayUrl %>"><%= prettyDate %></a> <%= updateStar %><br></br> -<% - - } - - } -%> - </td> -<% - } - -%> - </tr> -<!-- /RESULT COLUMN DATA --> -</table> - - -<% -// show page indicators: -if(results.getNumPages() > 1) { - int curPage = results.getCurPage(); - %> - <hr></hr> - <% - for(int i = 1; i <= results.getNumPages(); i++) { - if(i == curPage) { - %> - <b><%= i %></b> - <% - } else { - %> - <a href="<%= results.urlForPage(i) %>"><%= i %></a> - <% - } - } -} -%> -<jsp:include page="/template/UI-footer.jsp" flush="true" /> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/CalendarResults.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/query/CalendarResults.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/CalendarResults.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/CalendarResults.jsp 2008-07-21 23:19:17 UTC (rev 2463) @@ -0,0 +1,180 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Date" %> +<%@ page import="java.util.Iterator" %> +<%@ page import="java.text.ParseException" %> +<%@ page import="org.archive.wayback.WaybackConstants" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartitionsFactory" %> +<%@ page import="org.archive.wayback.query.resultspartitioner.ResultsPartition" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<jsp:include page="/WEB-INF/template/UI-header.jsp" flush="true" /> +<jsp:include page="/WEB-INF/template/CookieJS.jsp" flush="true" /> +<% +UIResults results = UIResults.extractCaptureQuery(request); + +WaybackRequest wbRequest = results.getWbRequest(); +CaptureSearchResults cResults = results.getCaptureResults(); +StringFormatter fmt = wbRequest.getFormatter(); +String searchString = wbRequest.getRequestUrl(); + + +Date searchStartDate = wbRequest.getStartDate(); +Date searchEndDate = wbRequest.getEndDate(); +long firstResult = cResults.getFirstReturned(); +long lastResult = cResults.getReturnedCount() + firstResult; +long resultCount = cResults.getMatchingCount(); + +ArrayList<ResultsPartition> partitions = + ResultsPartitionsFactory.get(cResults, wbRequest); +int numPartitions = partitions.size(); +%> +<table border="0" cellpadding="5" width="100%" class="mainSearchBanner" cellspacing="0"> + <tr> + <td> + <%= fmt.format("PathQueryClassic.searchedFor",searchString) %> + </td> + <td align="right"> + <select onchange="SetAnchorWindow(this.value)"> + <option value="86400">1 day</option> + <option value="604800">1 week</option> + <option value="2592000">1 month</option> + <option value="31536000">1 year</option> + <option value="315360000">10 years</option> + </select> + <%= fmt.format("PathQueryClassic.resultsSummary",resultCount) %> + </td> + </tr> +</table> +<br> + + +<table border="0" width="100%"> + <tr bgcolor="#CCCCCC"> + <td colspan="<%= numPartitions %>" align="center" class="mainCalendar"> + <%= fmt.format("PathQueryClassic.searchResults",searchStartDate,searchEndDate) %> + </td> + </tr> + +<!-- RESULT COLUMN HEADERS --> + <tr bgcolor="#CCCCCC"> +<% + for(int i = 0; i < numPartitions; i++) { + ResultsPartition partition = partitions.get(i); +%> + <td align="center" class="mainBigBody"> + <%= partition.getTitle() %> + </td> +<% + } +%> + </tr> +<!-- /RESULT COLUMN HEADERS --> + + + +<!-- RESULT COLUMN COUNTS --> + <tr bgcolor="#CCCCCC"> +<% + for(int i = 0; i < numPartitions; i++) { + ResultsPartition partition = (ResultsPartition) partitions.get(i); +%> + <td align="center" class="mainBigBody"> + <%= fmt.format("ResultPartition.columnSummary",partition.resultsCount()) %> + </td> +<% + } +%> + </tr> +<!-- /RESULT COLUMN COUNTS --> + + +<!-- RESULT COLUMN DATA --> + <tr bgcolor="#EBEBEB"> +<% + boolean first = false; + String lastMD5 = null; + + for(int i = 0; i < numPartitions; i++) { + ResultsPartition partition = (ResultsPartition) partitions.get(i); + ArrayList<CaptureSearchResult> partitionResults = partition.getMatches(); +%> + <td nowrap class="mainBody" valign="top"> +<% + if(partitionResults.size() == 0) { +%> + +<% + } else { + + for(int j = 0; j < partitionResults.size(); j++) { + + CaptureSearchResult result = partitionResults.get(j); + String url = result.getUrlKey(); + String captureTimestamp = result.getCaptureTimestamp(); + Date captureDate = result.getCaptureDate(); + String prettyDate = fmt.format("PathQuery.classicResultLinkText", + captureDate); + String origHost = result.getOriginalHost(); + String MD5 = result.getDigest(); + String redirectFlag = (0 == result.getRedirectUrl().compareTo("-")) + ? "" : fmt.format("PathPrefixQuery.redirectIndicator"); + String httpResponse = result.getHttpCode(); + String mimeType = result.getMimeType(); + + String arcFile = result.getFile(); + String arcOffset = String.valueOf(result.getOffset()); + + String replayUrl = results.resultToReplayUrl(result); + + boolean updated = false; + if(lastMD5 == null) { + lastMD5 = MD5; + updated = true; + } else if(0 != lastMD5.compareTo(MD5)) { + updated = true; + lastMD5 = MD5; + } + String updateStar = updated ? "*" : ""; +%> + <a onclick="SetAnchorDate('<%= captureTimestamp %>');" href="<%= replayUrl %>"><%= prettyDate %></a> <%= updateStar %><br></br> +<% + + } + + } +%> + </td> +<% + } + +%> + </tr> +<!-- /RESULT COLUMN DATA --> +</table> + + +<% +// show page indicators: +if(cResults.getNumPages() > 1) { + int curPage = cResults.getCurPageNum(); + %> + <hr></hr> + <% + for(int i = 1; i <= cResults.getNumPages(); i++) { + if(i == curPage) { + %> + <b><%= i %></b> + <% + } else { + %> + <a href="<%= results.urlForPage(i) %>"><%= i %></a> + <% + } + } +} +%> +<jsp:include page="/WEB-INF/template/UI-footer.jsp" flush="true" /> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLCaptureResults.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/query/HTMLCaptureResults.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLCaptureResults.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLCaptureResults.jsp 2008-07-21 23:19:17 UTC (rev 2463) @@ -0,0 +1,113 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.Iterator" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Date" %> +<%@ page import="org.archive.wayback.WaybackConstants" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<jsp:include page="/template/UI-header.jsp" flush="true" /> +<% + +UIResults results = UIResults.extractCaptureQuery(request); +WaybackRequest wbRequest = results.getWbRequest(); +CaptureSearchResults cResults = results.getCaptureResults(); +StringFormatter fmt = wbRequest.getFormatter(); + +String searchString = wbRequest.getRequestUrl(); + +long resultCount = cResults.getReturnedCount(); +Date searchStartDate = wbRequest.getStartDate(); +Date searchEndDate = wbRequest.getEndDate(); + +Iterator<CaptureSearchResult> itr = cResults.iterator(); +%> + <%= fmt.format("PathQuery.resultsSummary",resultCount,searchString) %> + <br></br> + <%= fmt.format("PathQuery.resultRange",searchStartDate,searchEndDate) %> + <hr></hr> + <% + boolean first = false; + String lastMD5 = null; + while(itr.hasNext()) { + CaptureSearchResult result = (CaptureSearchResult) itr.next(); + + String url = result.getUrlKey(); + + String prettyDate = result.getCaptureTimestamp(); + String origHost = result.getOriginalHost(); + String MD5 = result.getDigest(); + String redirectFlag = (0 == result.getRedirectUrl().compareTo("-")) + ? "" : fmt.format("PathQuery.redirectIndicator"); + String httpResponse = result.getHttpCode(); + String mimeType = result.getMimeType(); + + String arcFile = result.getFile(); + String arcOffset = String.valueOf(result.getOffset()); + + String replayUrl = results.resultToReplayUrl(result); + + boolean updated = false; + if(lastMD5 == null) { + lastMD5 = MD5; + updated = true; + } else if(0 != lastMD5.compareTo(MD5)) { + updated = true; + lastMD5 = MD5; + } + if(updated) { + %> + <a href="<%= replayUrl %>"><%= prettyDate %></a> + <span style="color:black;"><%= origHost %></span> + <span style="color:gray;"><%= httpResponse %></span> + <span style="color:brown;"><%= mimeType %></span> + <!-- + <span style="color:red;"><%= arcFile %></span> + <span style="color:red;"><%= arcOffset %></span> + --> + <%= redirectFlag %> + <%= fmt.format("PathQuery.newVersionIndicator") %> + + <br/> + <% + } else { + %> + <a href="<%= replayUrl %>"><%= prettyDate %></a> + <span style="color:green;"><%= origHost %></span> + <!-- + <span style="color:red;"><%= arcFile %></span> + <span style="color:red;"><%= arcOffset %></span> + --> + <br/> + <% + } + } + +// show page indicators: +int curPage = cResults.getCurPageNum(); +if(curPage > cResults.getNumPages()) { + %> + <hr></hr> + <a href="<%= results.urlForPage(1) %>">First results</a> + <% +} else if(cResults.getNumPages() > 1) { + %> + <hr></hr> + <% + for(int i = 1; i <= cResults.getNumPages(); i++) { + if(i == curPage) { + %> + <b><%= i %></b> + <% + } else { + %> + <a href="<%= results.urlForPage(i) %>"><%= i %></a> + <% + } + } +} +%> + +<jsp:include page="/template/UI-footer.jsp" flush="true" /> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLUrlResults.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/query/HTMLUrlResults.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLUrlResults.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/HTMLUrlResults.jsp 2008-07-21 23:19:17 UTC (rev 2463) @@ -0,0 +1,117 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="java.util.Iterator" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Date" %> +<%@ page import="org.archive.wayback.ResultURIConverter" %> +<%@ page import="org.archive.wayback.WaybackConstants" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.UrlSearchResult" %> +<%@ page import="org.archive.wayback.core.UrlSearchResults" %> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<jsp:include page="/template/UI-header.jsp" flush="true" /> +<% + +UIResults results = UIResults.extractUrlQuery(request); +WaybackRequest wbRequest = results.getWbRequest(); +UrlSearchResults uResults = results.getUrlResults(); +ResultURIConverter uriConverter = results.getURIConverter(); +StringFormatter fmt = wbRequest.getFormatter(); + +String searchString = wbRequest.getRequestUrl(); + + + +Date searchStartDate = wbRequest.getStartDate(); +Date searchEndDate = wbRequest.getEndDate(); + +long firstResult = uResults.getFirstReturned(); +long resultCount = uResults.getReturnedCount(); +long lastResult = resultCount + firstResult; + +long totalCaptures = uResults.getMatchingCount(); + +%> +<%= fmt.format("PathPrefixQuery.showingResults",firstResult,lastResult, + resultCount,searchString) %> +<br/> + +<hr></hr> +<% +Iterator<UrlSearchResult> itr = uResults.iterator(); +while(itr.hasNext()) { + UrlSearchResult result = itr.next(); + + String urlKey = result.getUrlKey(); + String originalUrl = result.getOriginalUrl(); + String firstDateTSss = result.getFirstCaptureTimestamp(); + String lastDateTSss = result.getLastCaptureTimestamp(); + long numCaptures = result.getNumCaptures(); + long numVersions = result.getNumVersions(); + + Date firstDate = result.getFirstCaptureDate(); + Date lastDate = result.getLastCaptureDate(); + + if(numCaptures == 1) { + String ts = result.getFirstCaptureTimestamp(); + String anchor = uriConverter.makeReplayURI(ts,originalUrl); + %> + <a href="<%= anchor %>"> + <%= urlKey %> + </a> + <span class="mainSearchText"> + <%= fmt.format("PathPrefixQuery.versionCount",numVersions) %> + </span> + <br/> + <span class="mainSearchText"> + <%= fmt.format("PathPrefixQuery.singleCaptureDate",firstDate) %> + </span> + <% + + } else { + String anchor = results.makeCaptureQueryUrl(originalUrl); + %> + <a href="<%= anchor %>"> + <%= urlKey %> + </a> + <span class="mainSearchText"> + <%= fmt.format("PathPrefixQuery.versionCount",numVersions) %> + </span> + <br/> + <span class="mainSearchText"> + <%= fmt.format("PathPrefixQuery.multiCaptureDate",numCaptures,firstDate,lastDate) %> + </span> + <% + } + %> + <br/> + <br/> + <% +} + +// show page indicators: +int curPage = uResults.getCurPageNum(); +if(curPage > uResults.getNumPages()) { + %> + <hr></hr> + <a href="<%= results.urlForPage(1) %>">First results</a> + <% +} else if(uResults.getNumPages() > 1) { + %> + <hr></hr> + <% + for(int i = 1; i <= uResults.getNumPages(); i++) { + if(i == curPage) { + %> + <b><%= i %></b> + <% + } else { + %> + <a href="<%= results.urlForPage(i) %>"><%= i %></a> + <% + } + } +} +%> + +<jsp:include page="/template/UI-footer.jsp" flush="true" /> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/XMLCaptureResults.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/query/XMLCaptureResults.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/XMLCaptureResults.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/XMLCaptureResults.jsp 2008-07-21 23:19:17 UTC (rev 2463) @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<%@ page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8"%> +<%@ page import="java.util.Iterator" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Map" %> +<%@ page import="java.util.Enumeration" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> +<%@ page import="org.archive.wayback.core.SearchResults" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<% +UIResults uiResults = UIResults.extractCaptureQuery(request); + +CaptureSearchResults results = uiResults.getCaptureResults(); +Iterator<CaptureSearchResult> itr = results.iterator(); +%> +<wayback> + <request> +<% + Map<String,String> p = results.getFilters(); + Iterator<String> kitr = p.keySet().iterator(); + while(kitr.hasNext()) { + String key = kitr.next(); + String oKey = UIResults.encodeXMLEntity(key); + String oValue = UIResults.encodeXMLContent(p.get(key)); + %> + <<%= oKey %>><%= oValue %></<%= oKey %>> + <% + } +%> + <<%= SearchResults.RESULTS_TYPE %>><%= SearchResults.RESULTS_TYPE_CAPTURE %></<%= SearchResults.RESULTS_TYPE %>> + </request> + <results> +<% + while(itr.hasNext()) { + %> + <result> + <% + CaptureSearchResult result = itr.next(); + Map<String,String> p2 = result.toCanonicalStringMap(); + kitr = p2.keySet().iterator(); + + while(kitr.hasNext()) { + String key = kitr.next(); + String oKey = UIResults.encodeXMLEntity(key); + String oValue = UIResults.encodeXMLContent(p2.get(key)); + %> + <<%= oKey %>><%= oValue %></<%= oKey %>> + <% + } + %> + </result> + <% + } +%> + </results> +</wayback> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/XMLUrlResults.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/query/XMLUrlResults.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/XMLUrlResults.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/query/XMLUrlResults.jsp 2008-07-21 23:19:17 UTC (rev 2463) @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<%@ page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8"%> +<%@ page import="java.util.Iterator" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Map" %> +<%@ page import="java.util.Enumeration" %> +<%@ page import="org.archive.wayback.core.SearchResults" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.UrlSearchResults" %> +<%@ page import="org.archive.wayback.core.UrlSearchResult" %> +<% +UIResults uiResults = UIResults.extractUrlQuery(request); + +UrlSearchResults results = uiResults.getUrlResults(); +Iterator<UrlSearchResult> itr = results.iterator(); +%> +<wayback> + <request> +<% + Map<String,String> p = results.getFilters(); + Iterator<String> kitr = p.keySet().iterator(); + while(kitr.hasNext()) { + String key = kitr.next(); + String oKey = UIResults.encodeXMLEntity(key); + String oValue = UIResults.encodeXMLContent(p.get(key)); + %> + <<%= oKey %>><%= oValue %></<%= oKey %>> + <% + } +%> + <<%= SearchResults.RESULTS_TYPE %>><%= SearchResults.RESULTS_TYPE_URL %></<%= SearchResults.RESULTS_TYPE %>> + </request> + <results> +<% + while(itr.hasNext()) { + %> + <result> + <% + UrlSearchResult result = itr.next(); + Map<String,String> p2 = result.toCanonicalStringMap(); + kitr = p2.keySet().iterator(); + + while(kitr.hasNext()) { + String key = kitr.next(); + String oKey = UIResults.encodeXMLEntity(key); + String oValue = UIResults.encodeXMLContent(p2.get(key)); + %> + <<%= oKey %>><%= oValue %></<%= oKey %>> + <% + } + %> + </result> + <% + } +%> + </results> +</wayback> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:17:13
|
Revision: 2462 http://archive-access.svn.sourceforge.net/archive-access/?rev=2462&view=rev Author: bradtofel Date: 2008-07-21 23:17:21 +0000 (Mon, 21 Jul 2008) Log Message: ----------- MOVE: webapp/exception -> webapp/WEB-INF/exception Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:15:16
|
Revision: 2461 http://archive-access.svn.sourceforge.net/archive-access/?rev=2461&view=rev Author: bradtofel Date: 2008-07-21 23:15:24 +0000 (Mon, 21 Jul 2008) Log Message: ----------- MOVE: webapp/exception -> webapp/WEB-INF/exception Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/CSSError.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/HTMLError.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/JavaScriptError.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/XMLError.jsp Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/CSSError.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/HTMLError.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/JavaScriptError.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/XMLError.jsp Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/CSSError.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/CSSError.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/CSSError.jsp 2008-07-21 23:15:24 UTC (rev 2461) @@ -1,18 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.exception.WaybackException" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% - -WaybackException e = (WaybackException) request.getAttribute("exception"); -UIResults results = UIResults.getFromRequest(request); -StringFormatter fmt = results.getFormatter(); -response.setStatus(e.getStatus()); - -%> -/* CSS wayback retrieval error: - - Title: <%= fmt.format(e.getTitleKey()) %> - Message: <%= fmt.format(e.getMessageKey()) %> - - */ Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/CSSError.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/CSSError.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/CSSError.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/CSSError.jsp 2008-07-21 23:15:24 UTC (rev 2461) @@ -0,0 +1,17 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="org.archive.wayback.exception.WaybackException" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% +UIResults results = UIResults.extractException(request); +WaybackException e = results.getException(); +StringFormatter fmt = results.getWbRequest().getFormatter(); +response.setStatus(e.getStatus()); + +%> +/* CSS wayback retrieval error: + + Title: <%= fmt.format(e.getTitleKey()) %> + Message: <%= fmt.format(e.getMessageKey()) %> + + */ Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/HTMLError.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/HTMLError.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/HTMLError.jsp 2008-07-21 23:15:24 UTC (rev 2461) @@ -1,19 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.exception.WaybackException" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% -WaybackException e = (WaybackException) request.getAttribute("exception"); -e.setupResponse(response); -%> -<jsp:include page="/template/UI-header.jsp" flush="true" /> -<% - -UIResults results = UIResults.getFromRequest(request); -StringFormatter fmt = results.getFormatter(); - -%> - -<h2><%= fmt.format(e.getTitleKey()) %></h2> -<p><b><%= fmt.format(e.getMessageKey(),e.getMessage()) %></b></p> -<jsp:include page="/template/UI-footer.jsp" flush="true" /> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/HTMLError.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/HTMLError.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/HTMLError.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/HTMLError.jsp 2008-07-21 23:15:24 UTC (rev 2461) @@ -0,0 +1,19 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="org.archive.wayback.exception.WaybackException" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% +UIResults results = UIResults.extractException(request); +WaybackException e = results.getException(); +e.setupResponse(response); +%> +<jsp:include page="/WEB-INF/template/UI-header.jsp" flush="true" /> +<% + +StringFormatter fmt = results.getWbRequest().getFormatter(); + +%> + +<h2><%= fmt.format(e.getTitleKey()) %></h2> +<p><b><%= fmt.format(e.getMessageKey(),e.getMessage()) %></b></p> +<jsp:include page="/WEB-INF/template/UI-footer.jsp" flush="true" /> Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/JavaScriptError.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/JavaScriptError.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/JavaScriptError.jsp 2008-07-21 23:15:24 UTC (rev 2461) @@ -1,16 +0,0 @@ -<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> -<%@ page import="org.archive.wayback.exception.WaybackException" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% - -WaybackException e = (WaybackException) request.getAttribute("exception"); -UIResults results = UIResults.getFromRequest(request); -StringFormatter fmt = results.getFormatter(); -response.setStatus(e.getStatus()); - -%> -// Javascript wayback retrieval error: -// -// Title: <%= fmt.format(e.getTitleKey()) %> -// Message: <%= fmt.format(e.getMessageKey()) %> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/JavaScriptError.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/JavaScriptError.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/JavaScriptError.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/JavaScriptError.jsp 2008-07-21 23:15:24 UTC (rev 2461) @@ -0,0 +1,16 @@ +<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> +<%@ page import="org.archive.wayback.exception.WaybackException" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% + +UIResults results = UIResults.extractException(request); +WaybackException e = results.getException(); +StringFormatter fmt = results.getWbRequest().getFormatter(); +response.setStatus(e.getStatus()); + +%> +// Javascript wayback retrieval error: +// +// Title: <%= fmt.format(e.getTitleKey()) %> +// Message: <%= fmt.format(e.getMessageKey()) %> Deleted: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/XMLError.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/XMLError.jsp 2008-07-02 00:17:37 UTC (rev 2386) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/XMLError.jsp 2008-07-21 23:15:24 UTC (rev 2461) @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<%@ page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8"%> -<%@ page import="org.archive.wayback.exception.WaybackException" %> -<%@ page import="org.archive.wayback.core.UIResults" %> -<%@ page import="org.archive.wayback.util.StringFormatter" %> -<% - -WaybackException e = (WaybackException) request.getAttribute("exception"); -UIResults results = UIResults.getFromRequest(request); -StringFormatter fmt = results.getFormatter(); -//response.setStatus(e.getStatus()); - -%> -<wayback> - <error> - <title><%= UIResults.encodeXMLContent(fmt.format(e.getTitleKey())) %></title> - <message><%= UIResults.encodeXMLContent(fmt.format(e.getMessageKey())) %></message> - </error> -</wayback> Copied: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/XMLError.jsp (from rev 2447, trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/exception/XMLError.jsp) =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/XMLError.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/exception/XMLError.jsp 2008-07-21 23:15:24 UTC (rev 2461) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<%@ page language="java" pageEncoding="utf-8" contentType="text/xml;charset=utf-8"%> +<%@ page import="org.archive.wayback.exception.WaybackException" %> +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.util.StringFormatter" %> +<% + +UIResults results = UIResults.extractException(request); +WaybackException e = results.getException(); +StringFormatter fmt = results.getWbRequest().getFormatter(); +//response.setStatus(e.getStatus()); + +%> +<wayback> + <error> + <title><%= UIResults.encodeXMLContent(fmt.format(e.getTitleKey())) %></title> + <message><%= UIResults.encodeXMLContent(fmt.format(e.getMessageKey())) %></message> + </error> +</wayback> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 23:10:16
|
Revision: 2460 http://archive-access.svn.sourceforge.net/archive-access/?rev=2460&view=rev Author: bradtofel Date: 2008-07-21 23:10:23 +0000 (Mon, 21 Jul 2008) Log Message: ----------- new folder to hold .js files Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/js/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bra...@us...> - 2008-07-21 21:43:28
|
Revision: 2459 http://archive-access.svn.sourceforge.net/archive-access/?rev=2459&view=rev Author: bradtofel Date: 2008-07-21 21:43:36 +0000 (Mon, 21 Jul 2008) Log Message: ----------- BUGFIX(unreported) anchorwindow is in seconds, but was comparing against milliseconds. Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/core/CaptureSearchResults.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/core/CaptureSearchResults.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/core/CaptureSearchResults.java 2008-07-17 10:29:29 UTC (rev 2458) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/core/CaptureSearchResults.java 2008-07-21 21:43:36 UTC (rev 2459) @@ -115,7 +115,7 @@ long wantTime = wbRequest.getReplayDate().getTime(); if(anchorDate != null) { wantTime = Timestamp.parseBefore(anchorDate).getDate().getTime(); - maxWindow = wbRequest.getAnchorWindow(); + maxWindow = wbRequest.getAnchorWindow() * 1000; } Iterator<CaptureSearchResult> itr = results.iterator(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2008-07-17 10:29:28
|
Revision: 2458 http://archive-access.svn.sourceforge.net/archive-access/?rev=2458&view=rev Author: miklosh Date: 2008-07-17 10:29:29 +0000 (Thu, 17 Jul 2008) Log Message: ----------- Modified ImageIndexer to work with NutchWAX 0.12. Modified Paths: -------------- trunk/archive-access/projects/nutchwax/imagesearch/src/java/org/archive/nutchwax/imagesearch/ImageIndexer.java Modified: trunk/archive-access/projects/nutchwax/imagesearch/src/java/org/archive/nutchwax/imagesearch/ImageIndexer.java =================================================================== --- trunk/archive-access/projects/nutchwax/imagesearch/src/java/org/archive/nutchwax/imagesearch/ImageIndexer.java 2008-07-17 10:18:46 UTC (rev 2457) +++ trunk/archive-access/projects/nutchwax/imagesearch/src/java/org/archive/nutchwax/imagesearch/ImageIndexer.java 2008-07-17 10:29:29 UTC (rev 2458) @@ -50,7 +50,6 @@ import org.apache.nutch.indexer.NutchSimilarity; import org.apache.nutch.metadata.Metadata; import org.apache.nutch.metadata.Nutch; -import org.apache.nutch.net.protocols.Response; /** Create indexes for segments. */ public class ImageIndexer extends Configured implements Tool, @@ -207,13 +206,14 @@ public void reduce(Text key, Iterator<WrappedWritable> values, OutputCollector<Text, Writable> output, Reporter reporter) throws IOException { + Inlinks inlinks = null; CrawlDatum dbDatum = null; CrawlDatum fetchDatum = null; ParseData parseData = null; ParseText parseText = null; - Metadata metadata = null; + Metadata metadata = new Metadata(); Metadata contentMetadata = null; String segmentName = null; String signature = null; @@ -221,12 +221,9 @@ Writable value = values.next().get(); if (value instanceof ImageWritable) { ImageWritable imgData = (ImageWritable) value; - Metadata imgMeta = imgData.getMetadata(); - if (metadata == null) { - metadata = imgMeta; - } else { - mergeMetadata(imgMeta, metadata); - } + mergeMetadata(imgData.getMetadata(), metadata); + } else if (value instanceof Text) { // Got parent's key + metadata.add(ImageSearch.PARENT_URL_KEY, value.toString()); } else if (value instanceof Inlinks) { inlinks = (Inlinks) value; } else if (value instanceof CrawlDatum) { @@ -245,27 +242,12 @@ throw new RuntimeException("Unexpected status: " + datum.getStatus()); } } else if (value instanceof ParseData) { - if (parseData != null) { - ParseData newParse = (ParseData) value; - Metadata parseMeta = newParse.getParseMeta(); - // Check if this is the parse meta from ImageParseFilter - // If so, use its parse meta, otherwise use the content meta - if (parseMeta.get(ImageSearch.PARENT_URL_KEY) != null) { - mergeMetadata(parseMeta, metadata); - } else { - contentMetadata = newParse.getContentMeta(); - } - } else { - parseData = (ParseData) value; - metadata = parseData.getParseMeta(); - contentMetadata = parseData.getContentMeta(); - } + parseData = (ParseData) value; + mergeMetadata(parseData.getParseMeta(), metadata); + contentMetadata = parseData.getContentMeta(); } else if (value instanceof ParseText) { - ParseText newParseText = (ParseText) value; - if (parseText == null || (parseText != null && - parseText.getText().length() < newParseText.getText().length())) { - parseText = (ParseText) value; - } + parseText = (ParseText) value; + metadata.add(ImageSearch.ALT_TEXT_KEY, parseText.getText()); } else if (LOG.isWarnEnabled()) { LOG.warn("Unrecognized type: " + value.getClass()); } @@ -284,10 +266,11 @@ } } - if (fetchDatum == null || dbDatum == null || parseText == null || parseData == null) { + if (fetchDatum == null || dbDatum == null || parseData == null) { return; // only have inlinks } - if (!parseData.getStatus().isSuccess() || + + if (/*!parseData.getStatus().isSuccess() ||*/ // ImageParser returns NOTPARSED fetchDatum.getStatus() != CrawlDatum.STATUS_FETCH_SUCCESS) { return; } @@ -296,6 +279,14 @@ if (metadata.get(ImageSearch.PARENT_URL_KEY) == null) { return; } + + if (segmentName == null || signature == null) { + if (LOG.isInfoEnabled()) { + LOG.info("Skipping " + key + " with segmentName=" + segmentName + + " signature=" + signature); + } + return; + } // Make sure segment name and signature are set contentMetadata.set(Nutch.SEGMENT_NAME_KEY, segmentName); contentMetadata.set(Nutch.SIGNATURE_KEY, signature); @@ -385,6 +376,7 @@ job.setMapperClass(ImageIndexer.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(WrappedWritable.class); + job.setOutputValueGroupingComparator(MixedOutputKeyComparator.class); job.setReducerClass(ImageIndexer.class); job.setOutputPath(indexDir); @@ -424,9 +416,63 @@ return -1; } } + + /** Compares keys such that a key=URL can be matched with a key=URL+digest. */ + private static class MixedOutputKeyComparator extends WritableComparator { + private static final String DIGEST_PREFIX = " sha1:"; + MixedOutputKeyComparator() { + super(Text.class); + } + + @Override + public int compare(WritableComparable a, WritableComparable b) { + Text key1 = (Text) a; + Text key2 = (Text) b; + int pos1 = key1.find(DIGEST_PREFIX); + int pos2 = key2.find(DIGEST_PREFIX); + if ( (pos1 > 0 && pos2 > 0) || (pos1 == -1 && pos2 == -1) ) { + // Both are keys of the same type + return key1.compareTo(key2); + } else { + int len1 = key1.getLength(); + int len2 = key2.getLength(); + if (pos1 == -1) { + return WritableComparator.compareBytes(key1.getBytes(), 0, + len1, key2.getBytes(), 0, pos2); + } else { + return WritableComparator.compareBytes(key2.getBytes(), 0, + len2, key1.getBytes(), 0, pos1); + } + } + } + } + public void map(Text key, Writable value, OutputCollector<Text, WrappedWritable> output, Reporter reporter) throws IOException { - output.collect(key, new WrappedWritable(value)); + + if (value instanceof ParseData) { + ParseData parseData = (ParseData) value; + Metadata parseMeta = parseData.getParseMeta(); + String[] imageUrls = parseMeta.getValues(ImageSearch.IMAGE_URLS_KEY); + // Emit image info with the image's URL as key + if (imageUrls != null && imageUrls.length > 0) { + String[] alts = parseMeta.getValues(ImageSearch.ALT_TEXT_KEY); + for (int i = 0; i < imageUrls.length; i++) { + Text imageKey = new Text(imageUrls[i]); + if (alts[i].length() > 0) { + ParseText parseText = new ParseText(alts[i]); + // Emit alternate text as ParseText + output.collect(imageKey, new WrappedWritable(parseText)); + } + // Emit parent's key + output.collect(imageKey, new WrappedWritable(key)); + } + } else { + output.collect(key, new WrappedWritable(value)); + } + } else { + output.collect(key, new WrappedWritable(value)); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
Revision: 2457 http://archive-access.svn.sourceforge.net/archive-access/?rev=2457&view=rev Author: miklosh Date: 2008-07-17 10:18:46 +0000 (Thu, 17 Jul 2008) Log Message: ----------- Switched to using multiple valued Lucene fields. Modified Paths: -------------- trunk/archive-access/projects/nutchwax/imagesearch/src/java/org/archive/nutchwax/imagesearch/ImageSearcherBean.java Modified: trunk/archive-access/projects/nutchwax/imagesearch/src/java/org/archive/nutchwax/imagesearch/ImageSearcherBean.java =================================================================== --- trunk/archive-access/projects/nutchwax/imagesearch/src/java/org/archive/nutchwax/imagesearch/ImageSearcherBean.java 2008-07-17 10:16:27 UTC (rev 2456) +++ trunk/archive-access/projects/nutchwax/imagesearch/src/java/org/archive/nutchwax/imagesearch/ImageSearcherBean.java 2008-07-17 10:18:46 UTC (rev 2457) @@ -172,7 +172,7 @@ float docSim = 0.0f; float maxDist = Float.MAX_VALUE; float minScore = 0.0f; - + long totalHits = 0; boolean more = spans.next(); @@ -195,8 +195,7 @@ docBoost = doc.getBoost(); // Get image positions - String posField = doc.getField(ImageSearch.IMAGE_POS_KEY).stringValue(); - String[] positions = posField.split(":"); + String[] positions = doc.getValues(ImageSearch.IMAGE_POS_KEY); imagePositions = new int[positions.length]; numDocImages = positions.length; for (int i = 0; i < numDocImages; i++) { @@ -205,12 +204,10 @@ maxDist = (float)imagePositions[numDocImages-1]; // Get image ids - String idField = doc.getField(ImageSearch.IMAGE_IDS_KEY).stringValue(); - imageIds = idField.split(":"); + imageIds = doc.getValues(ImageSearch.IMAGE_IDS_KEY); // Get image urls - String urlField = doc.getField(ImageSearch.IMAGE_URLS_KEY).stringValue(); - imageUrls = urlField.split(" "); + imageUrls = doc.getValues(ImageSearch.IMAGE_URLS_KEY); } int pos = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mi...@us...> - 2008-07-17 10:16:35
|
Revision: 2456 http://archive-access.svn.sourceforge.net/archive-access/?rev=2456&view=rev Author: miklosh Date: 2008-07-17 10:16:27 +0000 (Thu, 17 Jul 2008) Log Message: ----------- Switched to using multiple valued Lucene fields. Modified Paths: -------------- trunk/archive-access/projects/nutchwax/imagesearch/src/plugin/src/java/org/archive/nutchwax/imagesearch/plugin/ImageIndexingFilter.java trunk/archive-access/projects/nutchwax/imagesearch/src/plugin/src/java/org/archive/nutchwax/imagesearch/plugin/ImageParseFilter.java Modified: trunk/archive-access/projects/nutchwax/imagesearch/src/plugin/src/java/org/archive/nutchwax/imagesearch/plugin/ImageIndexingFilter.java =================================================================== --- trunk/archive-access/projects/nutchwax/imagesearch/src/plugin/src/java/org/archive/nutchwax/imagesearch/plugin/ImageIndexingFilter.java 2008-07-15 01:56:50 UTC (rev 2455) +++ trunk/archive-access/projects/nutchwax/imagesearch/src/plugin/src/java/org/archive/nutchwax/imagesearch/plugin/ImageIndexingFilter.java 2008-07-17 10:16:27 UTC (rev 2456) @@ -41,30 +41,23 @@ private Configuration conf; - private String concatArray(String[] values, char separator) { - StringBuffer sb = new StringBuffer(); - for (String value : values) { - if (sb.length() > 0) { - sb.append(separator); - } - sb.append(value); - } - return sb.toString(); - } - public Document filter(Document doc, Parse parse, Text url, CrawlDatum datum, Inlinks inlinks) throws IndexingException { Metadata metadata = parse.getData().getParseMeta(); // Handle images - String parentUrl = metadata.get(ImageSearch.PARENT_URL_KEY); - if (parentUrl != null) { - // Store parent's URL - doc.add(new Field(ImageSearch.PARENT_URL_KEY, parentUrl, Field.Store.YES, Field.Index.NO)); + String[] parentUrls = metadata.getValues(ImageSearch.PARENT_URL_KEY); + if (parentUrls.length > 0) { + // Store parent URL(s) + for (String parent : parentUrls) { + doc.add(new Field(ImageSearch.PARENT_URL_KEY, parent, Field.Store.YES, Field.Index.NO)); + } // Index alternate text - String alt = metadata.get(ImageSearch.ALT_TEXT_KEY); - if (alt != null) { - doc.add(new Field(ImageSearch.ALT_TEXT_KEY, alt, Field.Store.NO, Field.Index.TOKENIZED)); + String[] altTexts = metadata.getValues(ImageSearch.ALT_TEXT_KEY); + if (altTexts != null) { + for (String altText : altTexts) { + doc.add(new Field(ImageSearch.ALT_TEXT_KEY, altText, Field.Store.NO, Field.Index.TOKENIZED)); + } } // Index image size //... @@ -83,15 +76,21 @@ return doc; } else { doc.add(new Field(ImageSearch.HAS_IMAGE_KEY, "1", Field.Store.YES, Field.Index.TOKENIZED)); - doc.add(new Field(ImageSearch.IMAGE_POS_KEY, - concatArray(imagePositions, ':'), Field.Store.YES, Field.Index.NO)); + for (String imagePos : imagePositions) { + doc.add(new Field(ImageSearch.IMAGE_POS_KEY, imagePos, + Field.Store.YES, Field.Index.NO)); + } } String[] imageIds = metadata.getValues(ImageSearch.IMAGE_IDS_KEY); - doc.add(new Field(ImageSearch.IMAGE_IDS_KEY, - concatArray(imageIds, ':'), Field.Store.YES, Field.Index.NO)); + for (String imageId : imageIds) { + doc.add(new Field(ImageSearch.IMAGE_IDS_KEY, imageId, + Field.Store.YES, Field.Index.NO)); + } String[] imageUrls = metadata.getValues(ImageSearch.IMAGE_URLS_KEY); - doc.add(new Field(ImageSearch.IMAGE_URLS_KEY, - concatArray(imageUrls, ' '), Field.Store.YES, Field.Index.TOKENIZED)); + for (String imageUrl : imageUrls) { + doc.add(new Field(ImageSearch.IMAGE_URLS_KEY, imageUrl, + Field.Store.YES, Field.Index.TOKENIZED)); + } return doc; } Modified: trunk/archive-access/projects/nutchwax/imagesearch/src/plugin/src/java/org/archive/nutchwax/imagesearch/plugin/ImageParseFilter.java =================================================================== --- trunk/archive-access/projects/nutchwax/imagesearch/src/plugin/src/java/org/archive/nutchwax/imagesearch/plugin/ImageParseFilter.java 2008-07-15 01:56:50 UTC (rev 2455) +++ trunk/archive-access/projects/nutchwax/imagesearch/src/plugin/src/java/org/archive/nutchwax/imagesearch/plugin/ImageParseFilter.java 2008-07-17 10:16:27 UTC (rev 2456) @@ -76,7 +76,7 @@ URL imgSrc = null; String imgUrl = null; - Metadata metadata = new Metadata(); + String altText = null; boolean skipNode = false; NamedNodeMap attributes = currentNode.getAttributes(); @@ -91,22 +91,18 @@ skipNode = true; } } else if ("alt".equalsIgnoreCase(attr.getName())) { - String altText = attr.getValue(); - if (altText.length() > 0) { - metadata.add(ImageSearch.ALT_TEXT_KEY, altText); - } + altText = attr.getValue(); + parentMeta.add(ImageSearch.ALT_TEXT_KEY, + altText.length() > 0 ? altText : " "); } } if (skipNode) { continue; } - // Add parent page's URL - metadata.add(ImageSearch.PARENT_URL_KEY, base.toString()); - // Add parent's title - metadata.add(Metadata.TITLE, parentData.getTitle()); - // Add source URL - metadata.add("img_src", imgUrl); - + if (altText == null) { + parentMeta.add(ImageSearch.ALT_TEXT_KEY, " "); + } + // Add info to parent's parse meta parentMeta.add(ImageSearch.IMAGE_POS_KEY, Integer.toString(currentPosition)); @@ -114,15 +110,9 @@ parentMeta.add(ImageSearch.IMAGE_IDS_KEY, hash.toString()); parentMeta.add(ImageSearch.IMAGE_URLS_KEY, imgUrl); - // Add image to ParseResult - ParseData parseData = new ParseData(ParseStatus.STATUS_SUCCESS, - parentData.getTitle(), new Outlink[0], - parentData.getContentMeta(), metadata); - //parseResult.put(imgUrl, new ParseText(""), parseData); - if (LOG.isInfoEnabled()) { LOG.info("flushing " + imgUrl + " at " + currentPosition + - " alt="+metadata.get(ImageSearch.ALT_TEXT_KEY)); + " alt="+altText); } } if (nodeType == Node.COMMENT_NODE) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |