From: <bra...@us...> - 2010-08-16 23:00:43
|
Revision: 3230 http://archive-access.svn.sourceforge.net/archive-access/?rev=3230&view=rev Author: bradtofel Date: 2010-08-16 23:00:36 +0000 (Mon, 16 Aug 2010) Log Message: ----------- REFACTOR: changing names of RequestParser subclasses Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoRequestParser.java Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleRequestParser.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeGateRequestParser.java Removed Paths: ------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoParser.java trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleParser.java Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoParser.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoParser.java 2010-08-16 22:57:47 UTC (rev 3229) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoParser.java 2010-08-16 23:00:36 UTC (rev 3230) @@ -1,157 +0,0 @@ -package org.archive.wayback.memento; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.log4j.Logger; -import org.archive.wayback.core.WaybackRequest; -import org.archive.wayback.exception.BadQueryException; -import org.archive.wayback.exception.BetterRequestException; -import org.archive.wayback.requestparser.BaseRequestParser; -import org.archive.wayback.requestparser.WrappedRequestParser; -import org.archive.wayback.webapp.AccessPoint; - -/** - * RequestParser subclass which matches ".../timegate/URL" requests, and parses - * the Accept-Datetime header - * - * @author Lyudmila Balakireva - * - */ -public class MementoParser extends WrappedRequestParser { - private static final Logger LOGGER = - Logger.getLogger(MementoParser.class.getName()); - - String DTHEADER = "Accept-Datetime"; - - List<SimpleDateFormat> dtsupportedformats = - new ArrayList<SimpleDateFormat>(); - - String MEMENTO_BASE = "timegate"; - - /** - * @param wrapped - * BaseRequestParser with configuration - */ - public MementoParser(BaseRequestParser wrapped) { - super(wrapped); - - dtsupportedformats - .add(new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z")); - dtsupportedformats.add(new SimpleDateFormat("E, dd MMM yyyy Z")); - dtsupportedformats.add(new SimpleDateFormat("E, dd MMM yyyy")); - } - - @Override - public WaybackRequest parse(HttpServletRequest httpRequest, - AccessPoint accessPoint) throws BadQueryException, - BetterRequestException { - - String base = accessPoint.translateRequestPath(httpRequest); - String requestPath = accessPoint.translateRequestPathQuery(httpRequest); - - LOGGER.trace("requestPath:" + requestPath); - if (base.startsWith(MEMENTO_BASE)) { - - // strip leading "timegate/": - String urlStr = base.substring(requestPath.indexOf("/") + 1); - - // get the "Accept-Datetime" header: - String httpdate = getHttpDate(httpRequest); - Date dtconnegdate = null; - if (httpdate != null) { - dtconnegdate = checkDateValidity(httpdate, dtsupportedformats); - if (dtconnegdate == null) { - return null; - } - } else { - // TODO: should this return null her? no header.. - } - - WaybackRequest wbRequest = new WaybackRequest(); - if (wbRequest.getStartTimestamp() == null) { - wbRequest.setStartTimestamp(getEarliestTimestamp()); - } - if (dtconnegdate != null) { - wbRequest.setAnchorDate(dtconnegdate); - } else { - wbRequest.setAnchorTimestamp(getLatestTimestamp()); - } - - wbRequest.put("dtconneg", httpdate); - - if (wbRequest.getEndTimestamp() == null) { - wbRequest.setEndTimestamp(getLatestTimestamp()); - } - wbRequest.setCaptureQueryRequest(); - wbRequest.setRequestUrl(urlStr); - if (wbRequest != null) { - wbRequest.setResultsPerPage(getMaxRecords()); - } - return wbRequest; - } - return null; - } - - /** - * Extract the value of the "Accept-Datetime" HTTP request header, if - * present, and further strips the date value from any surrounding "{","}" - * @param req HttpServletRequest for this request - * @return the raw String containing the date information, or null if no - * such HTTP header exists. - */ - public String getHttpDate(HttpServletRequest req) { - String httpdate = req.getHeader(DTHEADER); - - if (httpdate != null) { - int j = httpdate.indexOf("{", 0); - - if (j >= 0) { - - httpdate = httpdate.substring(httpdate.indexOf("{", 0) + 1); - - } - - if (httpdate.indexOf("}") > 0) { - httpdate = httpdate.substring(0, httpdate.indexOf("}")); - - } - } - return httpdate; - } - - /** - * Attempt to parse the String httpdate argument using one of the - * SimpleDateFormats provided. - * - * @param httpdate - * String version of a Date - * @param list - * of SimpleDateFormats to parse the httpdate - * @return Date object set to the time parsed, or null if not parsed - */ - public Date checkDateValidity(String httpdate, List<SimpleDateFormat> list) { - - Date d = null; - Iterator<SimpleDateFormat> it = list.iterator(); - while (it.hasNext()) { - SimpleDateFormat formatter = it.next(); - try { - - d = formatter.parse(httpdate); - break; - - } catch (Exception e) { - e.printStackTrace(); - } - - } - - return d; - } -} Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoRequestParser.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoRequestParser.java 2010-08-16 22:57:47 UTC (rev 3229) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoRequestParser.java 2010-08-16 23:00:36 UTC (rev 3230) @@ -44,8 +44,8 @@ protected RequestParser[] getRequestParsers() { RequestParser[] theParsers = { new ReplayRequestParser(this), - new MementoParser(this), - new TimeBundleParser(this), + new TimeGateRequestParser(this), + new TimeBundleRequestParser(this), new PathDatePrefixQueryRequestParser(this), new PathDateRangeQueryRequestParser(this), new PathPrefixDatePrefixQueryRequestParser(this), Deleted: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleParser.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleParser.java 2010-08-16 22:57:47 UTC (rev 3229) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleParser.java 2010-08-16 23:00:36 UTC (rev 3230) @@ -1,90 +0,0 @@ -package org.archive.wayback.memento; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.log4j.Logger; -import org.archive.wayback.core.WaybackRequest; -import org.archive.wayback.exception.BadQueryException; -import org.archive.wayback.exception.BetterRequestException; -import org.archive.wayback.requestparser.BaseRequestParser; -import org.archive.wayback.requestparser.WrappedRequestParser; -import org.archive.wayback.webapp.AccessPoint; - -/** - * RequestParser subclass which parses "timebundle/URL" and - * "timemap/FORMAT/URL" requests - * - * @author Lyudmila Balakireva - * - */ -public class TimeBundleParser extends WrappedRequestParser { - private static final Logger LOGGER = - Logger.getLogger(TimeBundleParser.class.getName()); - - String MEMENTO_BASE = "timegate"; - - /** - * @param wrapped BaseRequestParser holding config - */ - public TimeBundleParser(BaseRequestParser wrapped) { - super(wrapped); - } - - @Override - public WaybackRequest parse(HttpServletRequest httpRequest, - AccessPoint accessPoint) throws BadQueryException, - BetterRequestException { - - String requestPath = accessPoint.translateRequestPathQuery(httpRequest); - LOGGER.trace("requestpath:" + requestPath); - - if (requestPath.startsWith("timebundle")) { - - WaybackRequest wbRequest = new WaybackRequest(); - String urlStr = requestPath.substring(requestPath.indexOf("/") + 1); - if (wbRequest.getStartTimestamp() == null) { - wbRequest.setStartTimestamp(getEarliestTimestamp()); - } - if (wbRequest.getEndTimestamp() == null) { - wbRequest.setEndTimestamp(getLatestTimestamp()); - } - wbRequest.setCaptureQueryRequest(); - wbRequest.setRequestUrl(urlStr); - - // TODO: is it critical to return a 303 code, or will a 302 do? - // if so, this and ORE.jsp can be simplified by throwing a - // BetterRequestException here. - wbRequest.put("redirect", "true"); - return wbRequest; - } - - if (requestPath.startsWith("timemap")) { - - String urlStrplus = requestPath - .substring(requestPath.indexOf("/") + 1); - String format = urlStrplus.substring(0, urlStrplus.indexOf("/")); - - LOGGER.trace("format:" + format); - String urlStr = urlStrplus.substring(urlStrplus.indexOf("/") + 1); - LOGGER.trace("id:" + urlStr); - WaybackRequest wbRequest = new WaybackRequest(); - if (wbRequest.getStartTimestamp() == null) { - wbRequest.setStartTimestamp(getEarliestTimestamp()); - } - wbRequest.setAnchorTimestamp(getLatestTimestamp()); - wbRequest.put("format", format); - if (wbRequest.getEndTimestamp() == null) { - wbRequest.setEndTimestamp(getLatestTimestamp()); - } - wbRequest.setCaptureQueryRequest(); - wbRequest.setRequestUrl(urlStr); - if (wbRequest != null) { - wbRequest.setResultsPerPage(getMaxRecords()); - } - return wbRequest; - - } - return null; - } - -} Copied: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleRequestParser.java (from rev 3229, trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleParser.java) =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleRequestParser.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeBundleRequestParser.java 2010-08-16 23:00:36 UTC (rev 3230) @@ -0,0 +1,90 @@ +package org.archive.wayback.memento; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.log4j.Logger; +import org.archive.wayback.core.WaybackRequest; +import org.archive.wayback.exception.BadQueryException; +import org.archive.wayback.exception.BetterRequestException; +import org.archive.wayback.requestparser.BaseRequestParser; +import org.archive.wayback.requestparser.WrappedRequestParser; +import org.archive.wayback.webapp.AccessPoint; + +/** + * RequestParser subclass which parses "timebundle/URL" and + * "timemap/FORMAT/URL" requests + * + * @author Lyudmila Balakireva + * + */ +public class TimeBundleRequestParser extends WrappedRequestParser { + private static final Logger LOGGER = + Logger.getLogger(TimeBundleRequestParser.class.getName()); + + String MEMENTO_BASE = "timegate"; + + /** + * @param wrapped BaseRequestParser holding config + */ + public TimeBundleRequestParser(BaseRequestParser wrapped) { + super(wrapped); + } + + @Override + public WaybackRequest parse(HttpServletRequest httpRequest, + AccessPoint accessPoint) throws BadQueryException, + BetterRequestException { + + String requestPath = accessPoint.translateRequestPathQuery(httpRequest); + LOGGER.trace("requestpath:" + requestPath); + + if (requestPath.startsWith("timebundle")) { + + WaybackRequest wbRequest = new WaybackRequest(); + String urlStr = requestPath.substring(requestPath.indexOf("/") + 1); + if (wbRequest.getStartTimestamp() == null) { + wbRequest.setStartTimestamp(getEarliestTimestamp()); + } + if (wbRequest.getEndTimestamp() == null) { + wbRequest.setEndTimestamp(getLatestTimestamp()); + } + wbRequest.setCaptureQueryRequest(); + wbRequest.setRequestUrl(urlStr); + + // TODO: is it critical to return a 303 code, or will a 302 do? + // if so, this and ORE.jsp can be simplified by throwing a + // BetterRequestException here. + wbRequest.put("redirect", "true"); + return wbRequest; + } + + if (requestPath.startsWith("timemap")) { + + String urlStrplus = requestPath + .substring(requestPath.indexOf("/") + 1); + String format = urlStrplus.substring(0, urlStrplus.indexOf("/")); + + LOGGER.trace("format:" + format); + String urlStr = urlStrplus.substring(urlStrplus.indexOf("/") + 1); + LOGGER.trace("id:" + urlStr); + WaybackRequest wbRequest = new WaybackRequest(); + if (wbRequest.getStartTimestamp() == null) { + wbRequest.setStartTimestamp(getEarliestTimestamp()); + } + wbRequest.setAnchorTimestamp(getLatestTimestamp()); + wbRequest.put("format", format); + if (wbRequest.getEndTimestamp() == null) { + wbRequest.setEndTimestamp(getLatestTimestamp()); + } + wbRequest.setCaptureQueryRequest(); + wbRequest.setRequestUrl(urlStr); + if (wbRequest != null) { + wbRequest.setResultsPerPage(getMaxRecords()); + } + return wbRequest; + + } + return null; + } + +} Copied: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeGateRequestParser.java (from rev 3229, trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/MementoParser.java) =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeGateRequestParser.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/memento/TimeGateRequestParser.java 2010-08-16 23:00:36 UTC (rev 3230) @@ -0,0 +1,157 @@ +package org.archive.wayback.memento; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.log4j.Logger; +import org.archive.wayback.core.WaybackRequest; +import org.archive.wayback.exception.BadQueryException; +import org.archive.wayback.exception.BetterRequestException; +import org.archive.wayback.requestparser.BaseRequestParser; +import org.archive.wayback.requestparser.WrappedRequestParser; +import org.archive.wayback.webapp.AccessPoint; + +/** + * RequestParser subclass which matches ".../timegate/URL" requests, and parses + * the Accept-Datetime header + * + * @author Lyudmila Balakireva + * + */ +public class TimeGateRequestParser extends WrappedRequestParser { + private static final Logger LOGGER = + Logger.getLogger(TimeGateRequestParser.class.getName()); + + String DTHEADER = "Accept-Datetime"; + + List<SimpleDateFormat> dtsupportedformats = + new ArrayList<SimpleDateFormat>(); + + String MEMENTO_BASE = "timegate"; + + /** + * @param wrapped + * BaseRequestParser with configuration + */ + public TimeGateRequestParser(BaseRequestParser wrapped) { + super(wrapped); + + dtsupportedformats + .add(new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z")); + dtsupportedformats.add(new SimpleDateFormat("E, dd MMM yyyy Z")); + dtsupportedformats.add(new SimpleDateFormat("E, dd MMM yyyy")); + } + + @Override + public WaybackRequest parse(HttpServletRequest httpRequest, + AccessPoint accessPoint) throws BadQueryException, + BetterRequestException { + + String base = accessPoint.translateRequestPath(httpRequest); + String requestPath = accessPoint.translateRequestPathQuery(httpRequest); + + LOGGER.trace("requestPath:" + requestPath); + if (base.startsWith(MEMENTO_BASE)) { + + // strip leading "timegate/": + String urlStr = base.substring(requestPath.indexOf("/") + 1); + + // get the "Accept-Datetime" header: + String httpdate = getHttpDate(httpRequest); + Date dtconnegdate = null; + if (httpdate != null) { + dtconnegdate = checkDateValidity(httpdate, dtsupportedformats); + if (dtconnegdate == null) { + return null; + } + } else { + // TODO: should this return null her? no header.. + } + + WaybackRequest wbRequest = new WaybackRequest(); + if (wbRequest.getStartTimestamp() == null) { + wbRequest.setStartTimestamp(getEarliestTimestamp()); + } + if (dtconnegdate != null) { + wbRequest.setAnchorDate(dtconnegdate); + } else { + wbRequest.setAnchorTimestamp(getLatestTimestamp()); + } + + wbRequest.put("dtconneg", httpdate); + + if (wbRequest.getEndTimestamp() == null) { + wbRequest.setEndTimestamp(getLatestTimestamp()); + } + wbRequest.setCaptureQueryRequest(); + wbRequest.setRequestUrl(urlStr); + if (wbRequest != null) { + wbRequest.setResultsPerPage(getMaxRecords()); + } + return wbRequest; + } + return null; + } + + /** + * Extract the value of the "Accept-Datetime" HTTP request header, if + * present, and further strips the date value from any surrounding "{","}" + * @param req HttpServletRequest for this request + * @return the raw String containing the date information, or null if no + * such HTTP header exists. + */ + public String getHttpDate(HttpServletRequest req) { + String httpdate = req.getHeader(DTHEADER); + + if (httpdate != null) { + int j = httpdate.indexOf("{", 0); + + if (j >= 0) { + + httpdate = httpdate.substring(httpdate.indexOf("{", 0) + 1); + + } + + if (httpdate.indexOf("}") > 0) { + httpdate = httpdate.substring(0, httpdate.indexOf("}")); + + } + } + return httpdate; + } + + /** + * Attempt to parse the String httpdate argument using one of the + * SimpleDateFormats provided. + * + * @param httpdate + * String version of a Date + * @param list + * of SimpleDateFormats to parse the httpdate + * @return Date object set to the time parsed, or null if not parsed + */ + public Date checkDateValidity(String httpdate, List<SimpleDateFormat> list) { + + Date d = null; + Iterator<SimpleDateFormat> it = list.iterator(); + while (it.hasNext()) { + SimpleDateFormat formatter = it.next(); + try { + + d = formatter.parse(httpdate); + break; + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + return d; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |