package org.jdom; import java.util.*; /** *

* The AttributeList class is a list that manages the parent/child * relationship of an attribute and its parent Elemebt. It is designed to be * embedded in an Element object. *

* * @author Philippe Riand */ public class AttributeList extends ArrayList { protected Element parentElement; /** * Constructs an empty list with the specified initial capacity. * * @param initialCapacity the initial capacity of the list. * @exception IllegalArgumentException if the specified initial capacity * is negative */ public AttributeList(Element parentElement, int initialCapacity) { super(initialCapacity); this.parentElement = parentElement; } /** * Assign the attribute parent. * @param obj the attribute to assign * @param parent the new parent Element */ private void assignParent(Object obj, Element parent) { ((Attribute)obj).setParent(parent); } /** * Replaces the element at the specified position in this list with * the specified element. * * @param index index of element to replace. * @param element element to be stored at the specified position. * @return the element previously at the specified position. * @throws IndexOutOfBoundsException if index out of range * (index < 0 || index >= size()). */ public Object set(int index, Object element) { assignParent(get(index),null); assignParent(element,parentElement); return super.set(index,element); } /** * Appends the specified element to the end of this list. * * @param o element to be appended to this list. * @return true (as per the general contract of Collection.add). */ public boolean add(Object o) { assignParent(o,parentElement); return super.add(o); } /** * Inserts the specified element at the specified position in this * list. Shifts the element currently at that position (if any) and * any subsequent elements to the right (adds one to their indices). * * @param index index at which the specified element is to be inserted. * @param element element to be inserted. * @throws IndexOutOfBoundsException if index is out of range * (index < 0 || index > size()). */ public void add(int index, Object element) { assignParent(element,parentElement); super.add(index,element); } /** * Removes the element at the specified position in this list. * Shifts any subsequent elements to the left (subtracts one from their * indices). * * @param index the index of the element to removed. * @return the element that was removed from the list. * @throws IndexOutOfBoundsException if index out of range (index * < 0 || index >= size()). */ public Object remove(int index) { assignParent(get(index),null); return remove(index); } /** * Removes all of the elements from this list. The list will * be empty after this call returns. */ public void clear() { int count = size(); for( int i=0; i(index * < 0 || index > size()). */ public boolean addAll(Collection c) { int oldSize = size(); boolean result = super.addAll(c); int newSize = size(); for( int i=oldSize; i(index * < 0 || index > size()). */ public boolean addAll(int index, Collection c) { int oldSize = size(); boolean result = super.addAll(index,c); int lastIndex = index + (size()-oldSize); for( int i=index; i(toIndex - fromIndex) elements. * (If toIndex==fromIndex, this operation has no effect.) * * @param fromIndex index of first element to be removed. * @param toIndex index after last element to be removed. */ protected void removeRange(int fromIndex, int toIndex) { for( int i=fromIndex; i