package org.limewire.promotion.impressions; import java.util.Date; import java.util.Set; import org.limewire.promotion.containers.PromotionMessageContainer; /** * Provides a central collection point for impression data to pool prior to * being sent back to the Lime promo servers. */ public interface ImpressionsCollector { /** * Records an impression hit into memory, to be retrieved later in an * aggregate form to send back to the Lime servers. 'originalQuery + * timeQueried' is used to aggregate impressions to a single 'user search' * event. */ void recordImpression(String originalQuery, Date timeQueried, Date timeShown, PromotionMessageContainer promo, String binderUniqueName); /** * @return a Set of {@link UserQueryEvent} entries that have been created * through one or more calls to * {@link #recordImpression(String, Date, Date, PromotionMessageContainer, long)} * or an empty list if no impressions have happened. */ Set<UserQueryEvent> getCollectedImpressions(); /** * Removes the given events (and their impressions) from the backing store. * Called after the system has successfully returned the list to the central * servers and is ready to remove it from memory. */ void removeImpressions(Set<UserQueryEvent> events); }