package org.archive.wayback.resourceindex.filterfactory;
import java.util.List;
import org.archive.wayback.UrlCanonicalizer;
import org.archive.wayback.core.CaptureSearchResult;
import org.archive.wayback.core.CaptureSearchResults;
import org.archive.wayback.core.SearchResults;
import org.archive.wayback.core.WaybackRequest;
import org.archive.wayback.exception.AccessControlException;
import org.archive.wayback.exception.BadQueryException;
import org.archive.wayback.exception.ResourceNotInArchiveException;
import org.archive.wayback.resourceindex.filters.ClosestResultTrackingFilter;
import org.archive.wayback.util.ObjectFilter;
import org.archive.wayback.util.ObjectFilterChain;
public class ClosestTrackingCaptureFilterGroup implements CaptureFilterGroup {
private ObjectFilterChain<CaptureSearchResult> chain = null;
private ClosestResultTrackingFilter closestTracker = null;
public ClosestTrackingCaptureFilterGroup(WaybackRequest request,
UrlCanonicalizer canonicalizer) {
chain = new ObjectFilterChain<CaptureSearchResult>();
if(request.isCaptureQueryRequest() ||
request.isReplayRequest()) {
closestTracker =
new ClosestResultTrackingFilter(request.getReplayDate().getTime());
chain.addFilter(closestTracker);
}
}
public List<ObjectFilter<CaptureSearchResult>> getFilters() {
return chain.getFilters();
}
public ClosestResultTrackingFilter getFilter() {
return closestTracker;
}
public void annotateResults(SearchResults results)
throws ResourceNotInArchiveException, BadQueryException,
AccessControlException {
if(closestTracker != null) {
if(results instanceof CaptureSearchResults) {
CaptureSearchResults cResults = (CaptureSearchResults) results;
cResults.setClosest(closestTracker.getClosest());
}
}
}
}