package org.jboss.messaging.memory;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import org.jboss.messaging.interfaces.Consumer;
import org.jboss.messaging.interfaces.MessageReference;
import org.jboss.messaging.interfaces.MessageSet;
import EDU.oswego.cs.dl.util.concurrent.ReentrantLock;
public class MemoryMessageSet implements MessageSet
{
private Set messages;
private ReentrantLock mutex = new ReentrantLock();
public MemoryMessageSet(Comparator comparator)
{
messages = new TreeSet(comparator);
}
public void add(MessageReference reference)
{
messages.add(reference);
}
public MessageReference remove(Consumer consumer)
{
if (messages.size() > 0)
{
for (Iterator iterator = messages.iterator(); iterator.hasNext();)
{
MessageReference message = (MessageReference) iterator.next();
if (consumer.accepts(message, true))
{
iterator.remove();
return message;
}
}
}
return null;
}
public void lock()
{
boolean interrupted = false;
try
{
mutex.acquire();
}
catch (InterruptedException e)
{
interrupted = true;
}
if (interrupted)
Thread.currentThread().interrupt();
}
public void unlock()
{
mutex.release();
}
public void setConsumer(Consumer consumer)
{
}
}