/* * This file is part of the Wayback archival access software * (http://archive-access.sourceforge.net/projects/wayback/). * * Licensed to the Internet Archive (IA) by one or more individual * contributors. * * The IA licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.archive.wayback.core; import java.util.Date; import java.util.Iterator; import java.util.LinkedList; import org.archive.wayback.util.Timestamp; /** * Output of capture search query, an ordered sequence of {@link CaptureSearchResult}. * * @author brad */ public class CaptureSearchResults extends SearchResults implements Iterable<CaptureSearchResult> { /** * List of UrlSearchResult objects for index records matching a query */ private LinkedList<CaptureSearchResult> results = new LinkedList<CaptureSearchResult>(); private CaptureSearchResult closest = null; /** * 14-digit timestamp of first capture date contained in the SearchResults */ private String firstResultTimestamp; /** * 14-digit timestamp of last capture date contained in the SearchResults */ private String lastResultTimestamp; /** * @return Returns the 14-digit String Timestamp of the first Capture in * this set of SearchResult objects */ public String getFirstResultTimestamp() { return firstResultTimestamp; } /** * @return Returns the firstResult Date. */ public Date getFirstResultDate() { return new Timestamp(firstResultTimestamp).getDate(); } /** * Return the textual timestamp of the last capture * @return 14-digit String Timestamp */ public String getLastResultTimestamp() { return lastResultTimestamp; } /** * Similar to {@link #getLastResultTimestamp()}, but return {@link Date} * object. * @return new Date object */ public Date getLastResultDate() { return new Timestamp(lastResultTimestamp).getDate(); } /** * Append a capture. * @param result a capture */ public void addSearchResult(CaptureSearchResult result) { addSearchResult(result, true); } /** * Add a result to this results, at either the beginning or the end, * depending on the append argument * @param result SearchResult to add to this set * @param append */ public void addSearchResult(CaptureSearchResult result, boolean append) { String resultDate = result.getCaptureTimestamp(); if ((firstResultTimestamp == null) || (firstResultTimestamp.compareTo(resultDate) > 0)) { firstResultTimestamp = resultDate; } if ((lastResultTimestamp == null) || (lastResultTimestamp.compareTo(resultDate) < 0)) { lastResultTimestamp = resultDate; } if (append) { if (!results.isEmpty()) { results.getLast().setNextResult(result); result.setPrevResult(results.getLast()); } results.add(result); } else { if (!results.isEmpty()) { results.getFirst().setPrevResult(result); result.setNextResult(results.getFirst()); } results.add(0, result); } } public boolean isEmpty() { return results.isEmpty(); } public LinkedList<CaptureSearchResult> getResults() { return results; } public Iterator<CaptureSearchResult> iterator() { return results.iterator(); } public int size() { return results.size(); } /** * @param closest the closest to set */ public void setClosest(CaptureSearchResult closest) { this.closest = closest; } /** * @return the closest */ public CaptureSearchResult getClosest() { return closest; } }