/*
* @(#)WaitingActionList.java
*
* Last Modified: 9/15/01
*/
import java.awt.geom.AffineTransform;
import java.util.Collection;
import java.util.LinkedList;
/**
* Linked list implementation of the List interface containing String actions and accompanying Object elements. Implements all
* optional list operations, but only permits a String
with Object
insertion. In addition to implementing the List interface,
* the WaitingActionList class extends the uniformly named methods within LinkedList to
* get, remove and insert an element at the
* beginning and end of the list. These operations allow this list to be
* used as a stack, queue, or double-ended queue (deque).
*
* The primary purpose of the class is for the development of nextAction,
* which calls the waitingAction
method for the headelement
passed and the
* next action and accompanying Object element.
*
* @author Corey Sanders
* @version 1.4 9/15/01
*/
public class WaitingActionList extends LinkedList {
/**
* LinkedList holding the Object
elements for the WaitingActions.
*/
private LinkedList elements;
/**
* Constructs an empty list.
*/
public WaitingActionList() {
super();
elements = new LinkedList();
}
/**
* Constructs a list containing the elements of the specified
* collection, in the order they are returned by the collection's
* iterator.
*
* @param actions the collection whose string actions are to be placed into this list as the String Actions.
* @param elements the collection whose elements are to be places into the list as the Object elements.
*/
public WaitingActionList(Collection actions, Collection elements) {
super(actions);
this.elements = new LinkedList(elements);
}
/**
* Appends the given String
at the end of this list.
*
* @param action the String
representing an action, to be inserted at the beginning of this list.
*
* @return true (as per the general contract of
* Collection.add).
*/
public boolean add(String action) {
return this.add(action, new Integer(0));
}
/**
* Appends the given String
and Object
at the end of this list.
*
* @param action the String
representing an action, to be inserted at the beginning of this list.
* @param element the Object
to be inserted in reference to the action.
*
* @return true (as per the general contract of
* Collection.add).
*/
public boolean add(String action, Object element) {
elements.add(element);
return super.add(action);
}
/**
* Inserts the specified String
and Object
at the specified position in this list.
* Shifts the String
and Object
currently at that position (if any) and any
* subsequent elements to the right (adds one to their indices).
*
* @param index the integer index representing the location to add the action and element.
* @param action the String
representing an action, to be inserted at the beginning of this list.
* @param element the Object
to be inserted in reference to the action.
*
* @throws IndexOutOfBoundsException if the specified index is out of
* range (index < 0 || index > size()).
*/
public void add(int index, String action, Object element) throws IndexOutOfBoundsException {
elements.add(index, element);
super.add(index, action);
}
/**
* Inserts the given String
and Object
at the beggining of this list.
*
* @param action the String
representing an action, to be inserted at the beginning of this list.
* @param element the Object
to be inserted in reference to the action.
*/
public void addFirst(String action, Object element) {
super.addFirst(action);
elements.addFirst(element);
}
/**
* Appends the given String
and Object
at the end of this list.
*
* @param action the String
representing an action, to be inserted at the end of this list.
* @param element the Object
to be inserted in reference to the action.
*/
public void addLast(String action, Object element) {
super.addLast(action);
elements.addLast(element);
}
/**
* Gets the given String
of the action at the beggining of this list.
*
* @return action the String
representing the first action.
*/
public String getFirstAction() {
return (String)super.getFirst();
}
/**
* Calls the next action of the ObjectHead
headelement, using the waitingAction command.
* The call to waitingAction
always passes the element, even if the element is unnecssary to
* that operations.
*
* @param headTree the TreeHead
element of the Tree
to which the action occurs.
*/
public void nextAction(TreeHead headTree) {
String action = (String)super.removeFirst();
Object element = elements.removeFirst();
headTree.waitingAction(action, element);
}
}