package iamrescue.communication;
import iamrescue.communication.messages.Message;
import iamrescue.communication.messages.filter.IsReadMessagePredicate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javolution.util.FastList;
import org.apache.commons.collections15.CollectionUtils;
import org.apache.commons.collections15.Predicate;
import org.apache.commons.collections15.functors.AndPredicate;
import org.apache.commons.collections15.functors.NotPredicate;
import org.apache.log4j.Logger;
/**
* A class that is responsible for containing received messages, without any
* intelligence.
*
* @author Ruben Stranders, Alessandro Farinelli
*
*/
public class Inbox {
private static Predicate<Message> notReadPredicate = NotPredicate
.getInstance(new IsReadMessagePredicate());
private static final Logger LOGGER = Logger.getLogger(Inbox.class);
/**
* List received messages
*/
private final List<Message> inbox = new ArrayList<Message>();
/**
* Updates the inbox with new messages
*
*/
public void updateInbox() {
}
public void addMessage(Message msg) {
inbox.add(msg);
}
public Iterator<Message> getUnreadMessagesIterator() {
return getUnreadMessages().iterator();
}
public Iterator<Message> getAllMessagesIterator() {
return inbox.iterator();
}
public List<Message> getAllMessages() {
return inbox;
}
public Collection<Message> getUnreadMessages() {
List<Message> unread = new FastList<Message>();
for (Message message : inbox) {
if (!message.isRead()) {
unread.add(message);
}
}
return unread;
}
public void addMessages(List<Message> messages) {
inbox.addAll(messages);
}
public Collection<Message> getUnreadMessages(IMessageFilter messageFilter) {
return CollectionUtils.select(inbox, AndPredicate.getInstance(
notReadPredicate, messageFilter));
}
public void removeReadMessages() {
Iterator<Message> iterator = inbox.iterator();
while (iterator.hasNext()) {
if (iterator.next().isRead()) {
iterator.remove();
}
}
}
}