/**
*
*/
package com.maalaang.omtwitter.text;
import java.util.HashMap;
import java.util.LinkedList;
import com.maalaang.omtwitter.model.OMTweet;
/**
* @author Sangwon Park
*
*/
public class FilterUserName implements TweetFilter {
private HashMap<String,Integer> userPostFreqMap = null;
private LinkedList<String> userNameQueue = null;
private int windowSize = 0;
private int userPostLimit = 0;
private boolean filtered = false;
public FilterUserName(int windowSize, int userPostLimit) {
this.windowSize = windowSize;
this.userPostLimit = userPostLimit;
}
public void initialize() {
if (windowSize > 0) {
userPostFreqMap = new HashMap<String,Integer>(windowSize);
userNameQueue = new LinkedList<String>();
} else {
userPostFreqMap = new HashMap<String,Integer>();
}
}
public void next(OMTweet tweet, OMTweetToken[] tokenList) {
String userName = tweet.getAuthor();
Integer freq = null;
if (windowSize > 0) {
userNameQueue.addLast(userName);
if (userNameQueue.size() > windowSize) {
String removedUserName = userNameQueue.remove();
freq = userPostFreqMap.get(removedUserName);
if (freq == null) {
throw new IllegalStateException();
} else {
userPostFreqMap.put(removedUserName, --freq);
}
}
}
freq = userPostFreqMap.get(userName);
if (freq == null) {
filtered = userPostLimit > 0 ? false : true;
userPostFreqMap.put(userName, 1);
} else {
filtered = userPostLimit > freq ? false : true;
userPostFreqMap.put(userName, ++freq);
}
}
public boolean isFilteredOut() {
return filtered;
}
public void close() {
userPostFreqMap.clear();
userPostFreqMap = null;
userNameQueue.clear();
userNameQueue = null;
}
}