| AbstractQueue.java |
/***************************************
* *
* JBoss: The OpenSource J2EE WebOS *
* *
* Distributable under LGPL license. *
* See terms of license at gnu.org. *
* *
***************************************/
package org.jboss.util.collection;
import java.util.AbstractCollection;
/**
* An abstract implementation of a Queue. Sub-classes must provide methods
* for <code>addLast(Object)</code> and <code>removeFirst()</code>.
*
* @version <tt>$Revision: 1.1 $</tt>
* @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
*/
public abstract class AbstractQueue
extends AbstractCollection
implements Queue
{
/** Default maximum queue size */
public static int DEFAULT_MAXIMUM_SIZE = UNLIMITED_MAXIMUM_SIZE;
/** Maximum queue size */
protected int maximumSize = DEFAULT_MAXIMUM_SIZE;
/**
* Initializes the AbstractQueue.
*/
protected AbstractQueue() {}
/**
* Initializes the AbstractQueue.
*
* @param maxSize Maximum queue size.
*
* @exception IllegalArgumentException Illegal size.
*/
protected AbstractQueue(final int maxSize) {
setMaximumSize(maxSize);
}
/**
* Get the maximum size of the queue.
*
* @return Maximum queue size or {@link #UNLIMITED_MAXIMUM_SIZE}.
*/
public int getMaximumSize() {
return maximumSize;
}
/**
* Set the maximum size of the queue
*
* @param size New maximim queue size or {@link #UNLIMITED_MAXIMUM_SIZE}.
*
* @exception IllegalArgumentException Illegal size.
*/
public void setMaximumSize(final int size) {
if (size < 0 && size != UNLIMITED_MAXIMUM_SIZE)
throw new IllegalArgumentException("illegal size: " + size);
maximumSize = size;
}
/**
* Check if the queue is full.
*
* @return True if the queue is full.
*/
public boolean isFull() {
if (maximumSize != UNLIMITED_MAXIMUM_SIZE && size() >= maximumSize)
return true;
return false;
}
/**
* Check if the queue is empty.
*
* @return True if the queue is empty.
*/
public boolean isEmpty() {
if (size() <= 0)
return true;
return false;
}
/**
* Append and object to the underling list.
*
* @param obj Object to enqueue.
* @return True if collection was modified.
*
* @exception FullCollectionException The queue is full.
*/
public boolean add(Object obj) throws FullCollectionException {
if (isFull())
throw new FullCollectionException();
return addLast(obj);
}
/**
* Remove and return the first object in the queue.
*
* @return Dequeued object.
*
* @exception EmptyCollectionException The queue is empty.
*/
public Object remove() throws EmptyCollectionException {
if (isEmpty())
throw new EmptyCollectionException();
return removeFirst();
}
/**
* Removes all of the elements from this queue
*/
public void clear() {
while (!isEmpty()) {
remove();
}
}
/**
* Appends the given element to the end of the queue
*
* @param obj Object to append
* @return Per Collection.add(), we return a boolean to indicate if
* the object modified the collection.
*/
protected abstract boolean addLast(Object obj);
/**
* Remove the first object in the queue
*
* @return First object in the queue
*/
protected abstract Object removeFirst();
}
| AbstractQueue.java |