From: <bra...@us...> - 2008-10-11 02:00:04
|
Revision: 2606 http://archive-access.svn.sourceforge.net/archive-access/?rev=2606&view=rev Author: bradtofel Date: 2008-10-11 01:59:57 +0000 (Sat, 11 Oct 2008) Log Message: ----------- NEW FEATURE (ACC-43): Allow adding a generic ObjectFilter<CaptureSearchResult> on a LocalResourceIndex, implemented 2 new ObjectFilter<CaptureSearchResult>, one which allows include/exclude lists of HTTP response codes, and one highly experimental BeanShellFilter, which is too slow to use in any but small installations, but may provide the escape hatch needed for some installations where performance is not the crucial problem. Modified Paths: -------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/LocalResourceIndex.java Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/filters/BeanShellFilter.java Property Changed: ---------------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/filters/HttpCodeFilter.java Modified: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/LocalResourceIndex.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/LocalResourceIndex.java 2008-10-11 01:50:43 UTC (rev 2605) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/LocalResourceIndex.java 2008-10-11 01:59:57 UTC (rev 2606) @@ -86,6 +86,8 @@ private boolean dedupeRecords = false; private ObjectFilter<CaptureSearchResult> annotater = null; + + private ObjectFilter<CaptureSearchResult> filter = null; public LocalResourceIndex() { canonicalizer = new AggressiveUrlCanonicalizer(); @@ -122,7 +124,7 @@ CaptureSearchResults results = new CaptureSearchResults(); CaptureQueryFilterState filterState = - new CaptureQueryFilterState(wbRequest,canonicalizer, type); + new CaptureQueryFilterState(wbRequest,canonicalizer, type, filter); String keyUrl = filterState.getKeyUrl(); CloseableIterator<CaptureSearchResult> itr = getCaptureIterator(keyUrl); @@ -159,7 +161,7 @@ CaptureQueryFilterState filterState = new CaptureQueryFilterState(wbRequest,canonicalizer, - CaptureQueryFilterState.TYPE_URL); + CaptureQueryFilterState.TYPE_URL, filter); String keyUrl = filterState.getKeyUrl(); CloseableIterator<CaptureSearchResult> citr = getCaptureIterator(keyUrl); @@ -287,6 +289,14 @@ public void setAnnotater(ObjectFilter<CaptureSearchResult> annotater) { this.annotater = annotater; } + + public ObjectFilter<CaptureSearchResult> getFilter() { + return filter; + } + + public void setFilter(ObjectFilter<CaptureSearchResult> filter) { + this.filter = filter; + } private class CaptureQueryFilterState { public final static int TYPE_REPLAY = 0; @@ -302,7 +312,8 @@ private String exactDate; public CaptureQueryFilterState(WaybackRequest request, - UrlCanonicalizer canonicalizer, int type) + UrlCanonicalizer canonicalizer, int type, + ObjectFilter<CaptureSearchResult> genericFilter) throws BadQueryException { String searchUrl = request.getRequestUrl(); @@ -333,6 +344,9 @@ preExclusionCounter = new CounterFilter(); DateRangeFilter drFilter = new DateRangeFilter(startDate,endDate); + if(genericFilter != null) { + filter.addFilter(genericFilter); + } // has the user asked for only results on the exact host specified? ObjectFilter<CaptureSearchResult> exactHost = getExactHostFilter(request); Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/filters/BeanShellFilter.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/filters/BeanShellFilter.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/filters/BeanShellFilter.java 2008-10-11 01:59:57 UTC (rev 2606) @@ -0,0 +1,80 @@ +package org.archive.wayback.resourceindex.filters; + +import org.archive.wayback.core.CaptureSearchResult; +import org.archive.wayback.util.ObjectFilter; + +import bsh.EvalError; +import bsh.Interpreter; + +public class BeanShellFilter implements ObjectFilter<CaptureSearchResult> { + + private String expression = null; + private String method = null; + private String scriptPath = null; + + @SuppressWarnings("unchecked") + private final ThreadLocal tl = new ThreadLocal() { + protected synchronized Object initialValue() { + return new Interpreter(); + } + }; + private Interpreter getInterpreter() { + Interpreter i = (Interpreter) tl.get(); + if(method != null) { + + } + return i; + } + + public BeanShellFilter() { + } + + public int filterObject(CaptureSearchResult o) { + int result = FILTER_EXCLUDE; + try { + boolean bResult = false; + Interpreter interpreter = getInterpreter(); + interpreter.set("result", o); + + if(expression != null) { + bResult = (Boolean) interpreter.eval(expression); + } else if(method != null) { + bResult = (Boolean) interpreter.eval("matches(result)"); + } else if(scriptPath != null) { + bResult = (Boolean) interpreter.eval("matches(result)"); + } + + if(bResult) { + result = FILTER_INCLUDE; + } + + } catch (EvalError e) { + e.printStackTrace(); + } + return result; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getScriptPath() { + return scriptPath; + } + + public void setScriptPath(String scriptPath) { + this.scriptPath = scriptPath; + } +} Property changes on: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/resourceindex/filters/HttpCodeFilter.java ___________________________________________________________________ Added: svn:keywords + Date Rev This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |