package org.limewire.core.api.library; import java.util.Collection; import java.util.Collections; import org.limewire.core.api.search.SearchResult; import org.limewire.listener.DefaultSourceTypeEvent; /** * Event fired by {@link RemoteLibrary} when either its state changes, it is cleared * or results are added to it. */ public class RemoteLibraryEvent extends DefaultSourceTypeEvent<RemoteLibrary, RemoteLibraryEvent.Type> { private final RemoteLibraryState state; private final Collection<SearchResult> addedResults; private final int startIndex; public static enum Type { RESULTS_CLEARED, RESULTS_ADDED, RESULTS_REMOVED, STATE_CHANGED } private RemoteLibraryEvent(RemoteLibrary source, Type type, Collection<SearchResult> addedResults, int startIndex) { super(source, type); this.startIndex = startIndex; this.state = source.getState(); this.addedResults = addedResults; } public static RemoteLibraryEvent createStateChangedEvent(RemoteLibrary remoteLibrary) { return new RemoteLibraryEvent(remoteLibrary, Type.STATE_CHANGED, Collections.<SearchResult>emptyList(), -1); } public static RemoteLibraryEvent createResultsClearedEvent(RemoteLibrary remoteLibrary) { return new RemoteLibraryEvent(remoteLibrary, Type.RESULTS_CLEARED, Collections.<SearchResult>emptyList(), -1); } public static RemoteLibraryEvent createResultsRemovedEvent(RemoteLibrary remoteLibrary) { return new RemoteLibraryEvent(remoteLibrary, Type.RESULTS_REMOVED, Collections.<SearchResult>emptyList(), -1); } public static RemoteLibraryEvent createResultsAddedEvent(RemoteLibrary remoteLibrary, Collection<SearchResult> addedResults, int startIndex) { return new RemoteLibraryEvent(remoteLibrary, Type.RESULTS_ADDED, addedResults, startIndex); } /** * @return the state of the remote library at creation of this event */ public RemoteLibraryState getState() { return state; } /** * @return the added results if the event is of type {@link Type#RESULTS_ADDED} * otherwise empty collection. */ public Collection<SearchResult> getAddedResults() { return addedResults; } /** * @return the start index in the {@link RemoteLibrary} for added results * or -1 if it doesn't apply to the event type */ public int getStartIndex() { return startIndex; } }