package org.peerbox.watchservice;
import java.util.Comparator;
import java.util.Iterator;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;
import org.peerbox.watchservice.filetree.composite.FileComponent;
/**
* This class is a wrapper for a {@link java.util.concurrent.BlockingQueue
* } storing objects of type {@link org.peerbox.watchservice.filetree.composite.FileComponent
* FileComponent}. This class is used to build to queue of pending Actions.
* @author Andreas
*
*/
public class FileComponentQueue {
private static final int QUEUE_CAPACITY = 100;
private final BlockingQueue<FileComponent> queue;
public FileComponentQueue() {
queue = new PriorityBlockingQueue<FileComponent>(QUEUE_CAPACITY, new FileActionTimeComparator());
}
public FileComponent take() throws InterruptedException {
return queue.take();
}
public void add(FileComponent element) {
queue.add(element);
}
public boolean remove(FileComponent element) {
return queue.remove(element);
}
public Iterator<FileComponent> iterator() {
return queue.iterator();
}
public int size() {
return queue.size();
}
public BlockingQueue<FileComponent> getQueue() {
return queue;
}
private class FileActionTimeComparator implements Comparator<FileComponent> {
@Override
public int compare(FileComponent a, FileComponent b) {
return Long.compare(a.getAction().getTimestamp(), b.getAction().getTimestamp());
}
}
public void clear() {
queue.clear();
}
}