diff --git a/sandbox/contributions/fulcrum/SearchResults.java b/sandbox/contributions/fulcrum/SearchResults.java new file mode 100644 index 00000000000..3191466b2b7 --- /dev/null +++ b/sandbox/contributions/fulcrum/SearchResults.java @@ -0,0 +1,83 @@ +import org.apache.log4j.Category; +import org.apache.lucene.document.Document; +import org.apache.lucene.search.Hits; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import search.SearchResultFactory; + +/** + *

+ * Encapsulates the results of a search. After a SearchResults has + * been constructed from a Hits object, the IndexSearcher can be + * safely closed. + *

+ *

+ * SearchResults also provides a way of retrieving Java objects from + * Documents (via {@link search.SearchResultsFactory}). + *

+ *

+ * Note that this implementation uses code from + * /projects/appex/search. + *

+ */ +public class SearchResults +{ + private static Category cat = Category.getInstance(SearchResults.class); + private List hitsDocuments; + private List objectResults; + private int totalNumberOfResults; + + public SearchResults(Hits hits) throws IOException + { + this(hits, 0, hits.length()); + } + + public SearchResults(Hits hits, int from, int to) throws IOException + { + hitsDocuments = new ArrayList(); + totalNumberOfResults = hits.length(); + if (to > totalNumberOfResults) + { + to = totalNumberOfResults; + } + for (int i = from; i < to; i++) + { + hitsDocuments.add(hits.doc(i)); + } + } + + public int getTotalNumberOfResults() + { + return totalNumberOfResults; + } + + /** + * Obtain the results of the search as objects. + */ + public List getResultsAsObjects() + { + if (objectResults == null) + { + objectResults = new ArrayList(); + for (Iterator it = hitsDocuments.iterator(); it.hasNext();) + { + try + { + Object o = SearchResultFactory. + getDocAsObject((Document) it.next()); + if (!objectResults.contains(o)) + objectResults.add(o); + } + catch (Exception e) + { + cat.error("Error instantiating an object from a document.", e); + } + } + } + return objectResults; + } +}