import ListReferenceBased.*;

public class QueueListBased implements QueueInterface {
  private ListInterface aList;

  public QueueListBased() {
    aList = new ListReferenceBased();
  }  // end default constructor
   
  // queue operations:
  public boolean isEmpty() {
    return aList.isEmpty();
  }  // end isEmpty

  public void enqueue(Object newItem) {
    aList.add(aList.size()+1, newItem);
  }  // end enqueue

  public Object dequeue() throws QueueException {
    if (!isEmpty()) {
      // queue is not empty; remove front
      Object queueFront = aList.get(1);
      aList.remove(1);
      return queueFront;
    }
    else {
      throw new QueueException("Queue exception on dequeue: "
                             + " queue empty");
    }  // end if
  }  // end dequeue
  public void dequeueAll() {
    aList.removeAll();
  }  // end dequeueAll
  public Object peek() throws QueueException {
    if (!isEmpty()) {  
      // queue is not empty; retrieve front
      return aList.get(1);
    }
    else {
      throw new QueueException("Queue exception on peek "  
                             + "queue empty");
    }  // end if
  }  // end peek
   
}  // end QueueListBased
