TweetFilter.java
package org.ferris.tweial.console.twitter;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import javax.enterprise.event.Observes;
import javax.inject.Inject;
import org.apache.log4j.Logger;
import org.ferris.tweial.console.preferences.PreferencesHandler;
import org.jboss.weld.experimental.Priority;
import twitter4j.Status;
/**
* The purpose of this class is to filter {@link List} objects of tweets
* from Twitter.
*
* @author Michael Remijan mjremijan@yahoo.com @mjremijan
*/
public class TweetFilter {
@Inject
protected Logger log;
@Inject
protected PreferencesHandler preferencesHandler;
/**
* Use the data in the {@link TweetRetrievalEvent} {@code event} parameter to
* filter out the tweets from Twitter that we have already seen. Set a new
* list in the {@link TweetRetrievalEvent} {@code event} parameter with the
* new tweets found in this run, in other words, all the tweets left over
* after filtering out the ones we have already seen in previous runs.
*
* @param event The {@link TweetRetrievalEvent} this method is responsible
* for calling {@link TweetRetrievalEvent#setNewTweetsFromThisRun(java.util.List)}
*/
protected void filterTweets(
@Observes @Priority(TweetRetrievalPriority.FIND_NEW_TWEETS_FROM_THIS_RUN)
TweetRetrievalEvent event
) {
log.info("Filter out tweets we've already seen");
List<Status> newTweetsFromThisRun;
if (preferencesHandler.findPreferences().getGetOnlyThisTweetId() == -1)
{
List<Long> idsFromLastRun
= event.getTweetsFromLastRun().stream().map(t -> t.getId()).collect(Collectors.toList());
newTweetsFromThisRun
= new LinkedList<>(event.getTweetsFromTwitter());
newTweetsFromThisRun.removeIf(t -> idsFromLastRun.contains(t.getId()));
} else {
newTweetsFromThisRun
= new LinkedList<>(event.getTweetsFromTwitter());
}
event.setNewTweetsFromThisRun(newTweetsFromThisRun);
}
}