package org.limewire.promotion; import java.util.Date; import java.util.List; import org.limewire.promotion.containers.PromotionMessageContainer; /** * Provides a transient database that is optimized for storing/retrieving * {@link PromotionMessageContainer} entries. */ public interface SearcherDatabase { /** * Ingests or reingests all the promo messages in the given binder. A * signature verification is not run during this phase, instead waiting * until the query phase to validate that results actually came from the * given signed binder. * * @throws DatabaseExecutionException if a database operation goes badly */ void ingest(PromotionBinder binder) throws DatabaseExecutionException; /** * @return a binder that was previously ingested by a call to * {@link #ingest(PromotionBinder)}, or null if no match. */ PromotionBinder getBinder(String binderUniqueName); /** * @return a binder that was previously ingested by a call to * {@link #ingest(PromotionBinder)}, or null if no match. */ PromotionBinder getBinder(int bucketNumber); /** * Removes all expired entries from the database. * * @throws DatabaseExecutionException if a database operation goes badly */ void expungeExpired() throws DatabaseExecutionException; /** * Drops the database and recreates an empty one. * * @throws DatabaseExecutionException if a database operation goes badly */ void clear() throws DatabaseExecutionException; /** * Performs a search of the database for the given query. The query will be * normalized internally. * * @param query the search the user entered in the main search box * @return A list of {@link QueryResult} instances that match the query * * @throws DatabaseExecutionException if a database operation goes badly */ List<QueryResult> query(String query) throws DatabaseExecutionException; /** * Provides a wrapper around the {@link PromotionMessageContainer} and * attaches a few extra values relating to the query that triggered the * promotion. */ public interface QueryResult { /** * @return The unique id of the binder that this result originally came * from. */ String getBinderUniqueName(); /** * * @return The promo message that matched */ PromotionMessageContainer getPromotionMessageContainer(); /** * * @return The query that found this result */ String getQuery(); /** * * @return The time this query result was returned. */ Date getDate(); } /** Initializes this class and any required resources. */ void init() throws InitializeException; /** * Shuts down and releases any resources. */ void shutDown(); }