package org.freehep.util.parameterdatabase; import java.util.Iterator; import java.util.NoSuchElementException; /** * This iterator iterates up the class hierarchy. The first element returned is * always the initial defining object (which can also be a class). Each * subsequent element returned is the superclass of the previous one; if the * previous element was not a Class, then that object's Class is returned. */ public class ClassIterator implements Iterator { /** * This is the initial root object which starts the iteration. */ protected Object root; /** * The reference to the object which will be returned by the next call to * next(). */ protected Object current; /** * Constructor requires an object on which to start the iteration. The * starting object may be a Class. */ public ClassIterator(Object start) { reset(start); } /** * This resets the iterator to the given starting object. This allows the * iterator to be reused. Note that all references to external classes can * be cleared by passing in null here. */ public void reset(Object start) { this.root = start; this.current = start; } /** * This resets the iterator to the saved starting object. */ public void reset() { this.current = root; } public boolean hasNext() { return (current != null); } public Object next() { // Have we run out of elements? if (current == null) throw new NoSuchElementException(); // Save the current value and move to the next one. Object currentObject = current; if (current instanceof Class) { Class c = (Class) current; current = c.getSuperclass(); } else { current = current.getClass(); } // Return the value. return currentObject; } /** * The remove() method is not supported by this iterator. */ public void remove() { throw new UnsupportedOperationException(); } }