From: <bra...@us...> - 2010-07-28 00:29:33
|
Revision: 3196 http://archive-access.svn.sourceforge.net/archive-access/?rev=3196&view=rev Author: bradtofel Date: 2010-07-28 00:29:26 +0000 (Wed, 28 Jul 2010) Log Message: ----------- INITIAL REV: very preliminary Memento-style date-time content negotiation support. .JSP files really need some cleanup. lots of static references and date parsing operations should be centralized into a Memento.java support class. Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/MementoAggregate.jsp trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/MementoValidity.jsp Added: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/MementoAggregate.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/MementoAggregate.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/MementoAggregate.jsp 2010-07-28 00:29:26 UTC (rev 3196) @@ -0,0 +1,3 @@ +<jsp:include page="/WEB-INF/replay/ArchiveComment.jsp" flush="true" /> +<jsp:include page="/WEB-INF/replay/MementoValidity.jsp" flush="true" /> +<jsp:include page="/WEB-INF/replay/Disclaimer.jsp" flush="true" /> Added: trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/MementoValidity.jsp =================================================================== --- trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/MementoValidity.jsp (rev 0) +++ trunk/archive-access/projects/wayback/wayback-webapp/src/main/webapp/WEB-INF/replay/MementoValidity.jsp 2010-07-28 00:29:26 UTC (rev 3196) @@ -0,0 +1,103 @@ +<%@ page import="org.archive.wayback.core.UIResults" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResults" %> +<%@ page import="org.archive.wayback.core.CaptureSearchResult"%> +<%@ page import="java.util.Date" %> +<%@ page import="org.archive.wayback.core.WaybackRequest" %> +<%@ page import="org.archive.wayback.archivalurl.ArchivalUrlResultURIConverter" %> +<%@ page import="java.text.SimpleDateFormat" %> +<%@ page import="java.util.Iterator" %> +<% + UIResults results = UIResults.extractCaptureQuery(request); + WaybackRequest wbRequest = results.getWbRequest(); + CaptureSearchResults cResults = results.getCaptureResults(); + CaptureSearchResult res = cResults.getClosest(wbRequest, true); + String u = wbRequest.getRequestUrl(); + SimpleDateFormat httpformatterl = new SimpleDateFormat( + "E, dd MMM yyyy HH:mm:ss z"); + String agguri = results.getContextConfig("aggregationPrefix") + + "timebundle/" + u; + String timemap = " , <" + + results.getContextConfig("aggregationPrefix") + + "timemap/link/" + u + + ">;rel=\"timemap\"; type=\"text/csv\""; + ArchivalUrlResultURIConverter uriconverter = + (ArchivalUrlResultURIConverter) results.getURIConverter(); + + String uriPrefix = uriconverter.getReplayURIPrefix(); + + Date f = cResults.getFirstResultDate(); + Date l = cResults.getLastResultDate(); + String qvalue = "1.0"; //just example + StringBuffer sb = new StringBuffer(); + response.setHeader("Content-Datetime", httpformatterl.format(res + .getCaptureDate())); + SimpleDateFormat formatterk = new SimpleDateFormat("yyyyMMddHHmmss"); + sb.append(", <" + uriPrefix + formatterk.format(f) + "/" + u + + ">;rel=\"first-memento\"; datetime=\"" + + httpformatterl.format(f) + "\""); + if (!f.equals(l)) { + + sb.append(", <" + uriPrefix + formatterk.format(f) + "/" + u + + ">;rel=\"last-memento\"; datetime=\"" + + httpformatterl.format(f) + "\""); + } + + // calculate closest values for alternates + Date closestDate = res.getCaptureDate(); + CaptureSearchResult closestleft = null; + CaptureSearchResult closestright = null; + long rclosestDistance = 0; + long lclosestDistance = 0; + CaptureSearchResult cur = null; + String anchorDate = null; + + long maxWindow = -1; + long wantTime = closestDate.getTime(); + + Iterator<CaptureSearchResult> itr = cResults.iterator(); + while (itr.hasNext()) { + cur = itr.next(); + cur.getCaptureDate(); + long curDistance = wantTime - cur.getCaptureDate().getTime(); + // == 0 propuskaem + if (curDistance > 0) { + if ((closestright == null) + || (Math.abs(curDistance) < Math + .abs(rclosestDistance))) { + closestright = cur; + rclosestDistance = Math.abs(curDistance); + } + } + + if (curDistance < 0) { + if ((closestleft == null) + || (Math.abs(curDistance) < Math + .abs(lclosestDistance))) { + closestleft = cur; + lclosestDistance = Math.abs(curDistance); + } + } + + } + + if (closestleft != null) { + if (!closestleft.getCaptureDate().equals(f)) { + sb.append(", <" + uriPrefix + formatterk.format(f) + "/" + + u + ">;rel=\"prev-memento\"; datetime=\"" + + httpformatterl.format(f) + "\""); + } + } + if (closestright != null) { + if (!closestright.getCaptureDate().equals(l)) { + sb.append(", <" + uriPrefix + formatterk.format(f) + "/" + + u + ">;rel=\"next-memento\"; datetime=\"" + + httpformatterl.format(f) + "\""); + } + + } + + String origlink = ", <" + u + ">;rel=\"original\""; + + response.setHeader("Link", "<" + agguri + ">;rel=\"timebundle\"" + + origlink + sb.toString() + timemap); +%> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |