diff options
Diffstat (limited to 'common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators')
31 files changed, 0 insertions, 3965 deletions
diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ArrayIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ArrayIterator.java deleted file mode 100644 index 4b0e277339..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ArrayIterator.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Arrays; -import java.util.Iterator; -import java.util.NoSuchElementException; - -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * An <code>ArrayIterator</code> provides an {@link Iterator} - * for an array of objects of type <code>E</code>. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable - */ -public class ArrayIterator<E> - implements Iterator<E> -{ - final E[] array; // private-protected - int cursor; // private-protected - private final int max; - - - /** - * Construct an iterator for the specified array. - */ - public ArrayIterator(E... array) { - this(array, 0, array.length); - } - - /** - * Construct an iterator for the specified array, - * starting at the specified start index and continuing for - * the rest of the array. - */ - public ArrayIterator(E[] array, int start) { - this(array, start, array.length - start); - } - - /** - * Construct an iterator for the specified array, - * starting at the specified start index and continuing for - * the specified length. - */ - public ArrayIterator(E[] array, int start, int length) { - super(); - if ((start < 0) || (start > array.length)) { - throw new IllegalArgumentException("start: " + start); //$NON-NLS-1$ - } - if ((length < 0) || (length > array.length - start)) { - throw new IllegalArgumentException("length: " + length); //$NON-NLS-1$ - } - this.array = array; - this.cursor = start; - this.max = start + length; - } - - public boolean hasNext() { - return this.cursor != this.max; - } - - public E next() { - if (this.hasNext()) { - return this.array[this.cursor++]; - } - throw new NoSuchElementException(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, Arrays.toString(this.array)); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ArrayListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ArrayListIterator.java deleted file mode 100644 index b08cfe9092..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ArrayListIterator.java +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.ListIterator; -import java.util.NoSuchElementException; - -/** - * An <code>ArrayListIterator</code> provides a {@link ListIterator} - * for an array of objects. - * <p> - * The name might be a bit confusing: - * This is a {@link ListIterator} for an <code>Array</code>; - * <em>not</em> an {@link java.util.Iterator Iterator} for an - * {@link java.util.ArrayList ArrayList}. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.ArrayListIterable - */ -public class ArrayListIterator<E> - extends ArrayIterator<E> - implements ListIterator<E> -{ - private final int min; - - - /** - * Construct a list iterator for the specified array. - */ - public ArrayListIterator(E... array) { - this(array, 0, array.length); - } - - /** - * Construct a list iterator for the specified array, - * starting at the specified start index and continuing for - * the rest of the array. - */ - public ArrayListIterator(E[] array, int start) { - this(array, start, array.length - start); - } - - /** - * Construct a list iterator for the specified array, - * starting at the specified start index and continuing for - * the specified length. - */ - public ArrayListIterator(E[] array, int start, int length) { - super(array, start, length); - this.min = start; - } - - public int nextIndex() { - return this.cursor; - } - - public int previousIndex() { - return this.cursor - 1; - } - - public boolean hasPrevious() { - return this.cursor != this.min; - } - - public E previous() { - if (this.hasPrevious()) { - return this.array[--this.cursor]; - } - throw new NoSuchElementException(); - } - - public void add(E e) { - throw new UnsupportedOperationException(); - } - - public void set(E e) { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return super.toString(); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ChainIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ChainIterator.java deleted file mode 100644 index baf6710cb7..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ChainIterator.java +++ /dev/null @@ -1,159 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import java.util.NoSuchElementException; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>ChainIterator</code> provides a pluggable {@link Iterator} - * that loops over a chain of arbitrarily linked objects. The chain - * should be null-terminated (i.e. a call to the {@link #nextLink(Object)} - * method should return <code>null</code> when it is passed the last - * link of the chain). - * To use, supply a starting link and supply a {@link Linker} or - * subclass <code>ChainIterator</code> and override the - * {@link #nextLink(Object)} method. - * The starting link will be the first object returned by the iterator. - * If the starting link is <code>null</code>, the iterator will be empty. - * Note this iterator does not support <code>null</code> elements. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.ChainIterable - */ -public class ChainIterator<E> - implements Iterator<E> -{ - private E nextLink; - private final Linker<E> linker; - - - /** - * Construct an iterator with the specified starting link - * and a disabled linker. - * Use this constructor if you want to override the - * {@link #nextLink(Object)} method instead of building - * a {@link Linker}. - */ - public ChainIterator(E startLink) { - this(startLink, Linker.Disabled.<E>instance()); - } - - /** - * Construct an iterator with the specified starting link - * and linker. - */ - public ChainIterator(E startLink, Linker<E> linker) { - super(); - this.nextLink = startLink; - this.linker = linker; - } - - public boolean hasNext() { - return this.nextLink != null; - } - - public E next() { - if (this.nextLink == null) { - throw new NoSuchElementException(); - } - E result = this.nextLink; - this.nextLink = this.nextLink(this.nextLink); - return result; - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - /** - * Return the next link in the chain; null if there are no more links. - */ - protected E nextLink(E currentLink) { - return this.linker.nextLink(currentLink); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.nextLink); - } - - - //********** member interface ********** - - /** - * Used by {@link ChainIterator} to link - * the elements in the chain. - */ - public interface Linker<T> { - - /** - * Return the next link in the chain; null if there are no more links. - */ - T nextLink(T currentLink); - - - final class Null<S> implements Linker<S> { - @SuppressWarnings("rawtypes") - public static final Linker INSTANCE = new Null(); - @SuppressWarnings("unchecked") - public static <R> Linker<R> instance() { - return INSTANCE; - } - // ensure single instance - private Null() { - super(); - } - // simply return null, indicating the chain is ended - public S nextLink(S currentLink) { - return null; - } - @Override - public String toString() { - return "ChainIterator.Linker.Null"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - final class Disabled<S> implements Linker<S> { - @SuppressWarnings("rawtypes") - public static final Linker INSTANCE = new Disabled(); - @SuppressWarnings("unchecked") - public static <R> Linker<R> instance() { - return INSTANCE; - } - // ensure single instance - private Disabled() { - super(); - } - // throw an exception - public S nextLink(S currentLink) { - throw new UnsupportedOperationException(); // ChainIterator.nextLink(Object) was not implemented - } - @Override - public String toString() { - return "ChainIterator.Linker.Disabled"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CloneIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CloneIterator.java deleted file mode 100644 index 8e31ddea73..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CloneIterator.java +++ /dev/null @@ -1,191 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Collection; -import java.util.Iterator; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>CloneIterator</code> iterates over a copy of a collection, - * allowing for concurrent access to the original collection. - * <p> - * The original collection passed to the <code>CloneIterator</code>'s - * constructor should be synchronized (e.g. {@link java.util.Vector}); - * otherwise you run the risk of a corrupted collection. - * <p> - * By default, a <code>CloneIterator</code> does not support the - * {@link #remove()} operation; this is because it does not have - * access to the original collection. But if the <code>CloneIterator</code> - * is supplied with an {@link Remover} it will delegate the - * {@link #remove()} operation to the {@link Remover}. - * Alternatively, a subclass can override the {@link #remove(Object)} - * method. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.LiveCloneIterable - * @see org.eclipse.jpt.common.utility.internal.iterables.SnapshotCloneIterable - */ -public class CloneIterator<E> - implements Iterator<E> -{ - private final Iterator<Object> iterator; - private E current; - private final Remover<E> remover; - private boolean removeAllowed; - - - // ********** constructors ********** - - /** - * Construct an iterator on a copy of the specified collection. - * The {@link #remove()} method will not be supported, - * unless a subclass overrides the {@link #remove(Object)}. - */ - public CloneIterator(Collection<? extends E> collection) { - this(collection, Remover.ReadOnly.<E>instance()); - } - - /** - * Construct an iterator on a copy of the specified array. - * The {@link #remove()} method will not be supported, - * unless a subclass overrides the {@link #remove(Object)}. - */ - public CloneIterator(E[] array) { - this(array, Remover.ReadOnly.<E>instance()); - } - - /** - * Construct an iterator on a copy of the specified collection. - * Use the specified remover to remove objects from the - * original collection. - */ - public CloneIterator(Collection<? extends E> collection, Remover<E> remover) { - this(remover, collection.toArray()); - } - - /** - * Construct an iterator on a copy of the specified array. - * Use the specified remover to remove objects from the - * original array. - */ - public CloneIterator(E[] array, Remover<E> remover) { - this(remover, array.clone()); - } - - /** - * Internal constructor used by subclasses. - * Swap order of arguments to prevent collision with other constructor. - * The passed in array will *not* be cloned. - */ - protected CloneIterator(Remover<E> remover, Object... array) { - super(); - this.iterator = new ArrayIterator<Object>(array); - this.current = null; - this.remover = remover; - this.removeAllowed = false; - } - - - // ********** Iterator implementation ********** - - public boolean hasNext() { - return this.iterator.hasNext(); - } - - public E next() { - this.current = this.nestedNext(); - this.removeAllowed = true; - return this.current; - } - - public void remove() { - if ( ! this.removeAllowed) { - throw new IllegalStateException(); - } - this.remove(this.current); - this.removeAllowed = false; - } - - - // ********** internal methods ********** - - /** - * The collection passed in during construction held elements of type <code>E</code>, - * so this cast is not a problem. We need this cast because - * all the elements of the original collection were copied into - * an object array (<code>Object[]</code>). - */ - @SuppressWarnings("unchecked") - protected E nestedNext() { - return (E) this.iterator.next(); - } - - /** - * Remove the specified element from the original collection. - * <p> - * This method can be overridden by a subclass as an - * alternative to building a {@link Remover}. - */ - protected void remove(E e) { - this.remover.remove(e); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - - - //********** member interface ********** - - /** - * Used by {@link CloneIterator} to remove - * elements from the original collection; since the iterator - * does not have direct access to the original collection. - */ - public interface Remover<T> { - - /** - * Remove the specified object from the original collection. - */ - void remove(T element); - - - final class ReadOnly<S> implements Remover<S> { - @SuppressWarnings("rawtypes") - public static final Remover INSTANCE = new ReadOnly(); - @SuppressWarnings("unchecked") - public static <R> Remover<R> instance() { - return INSTANCE; - } - // ensure single instance - private ReadOnly() { - super(); - } - // remove is not supported - public void remove(Object element) { - throw new UnsupportedOperationException(); - } - @Override - public String toString() { - return "CloneIterator.Remover.ReadOnly"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CloneListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CloneListIterator.java deleted file mode 100644 index 91536a0794..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CloneListIterator.java +++ /dev/null @@ -1,291 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.List; -import java.util.ListIterator; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>CloneListIterator</code> iterates over a copy of a list, - * allowing for concurrent access to the original list. - * <p> - * The original list passed to the <code>CloneListIterator</code>'s - * constructor should be synchronized; otherwise you run the risk of - * a corrupted list (e.g. {@link java.util.Vector}. - * <p> - * By default, a <code>CloneListIterator</code> does not support the - * modification operations; this is because it does not have - * access to the original list. But if the <code>CloneListIterator</code> - * is supplied with a {@link Mutator} it will delegate the - * modification operations to the {@link Mutator}. - * Alternatively, a subclass can override the modification methods. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.LiveCloneListIterable - * @see org.eclipse.jpt.common.utility.internal.iterables.SnapshotCloneListIterable - */ -public class CloneListIterator<E> - implements ListIterator<E> -{ - private final ListIterator<Object> listIterator; - private int cursor; - private State state; - private final Mutator<E> mutator; - - private enum State { - UNKNOWN, - PREVIOUS, - NEXT - } - - - // ********** constructors ********** - - /** - * Construct a list iterator on a copy of the specified list. - * The modification methods will not be supported, - * unless a subclass overrides them. - */ - public CloneListIterator(List<? extends E> list) { - this(list, Mutator.ReadOnly.<E>instance()); - } - - /** - * Construct a list iterator on a copy of the specified array. - * The modification methods will not be supported, - * unless a subclass overrides them. - */ - public CloneListIterator(E[] array) { - this(array, Mutator.ReadOnly.<E>instance()); - } - - /** - * Construct a list iterator on a copy of the specified list. - * Use the specified list mutator to modify the original list. - */ - public CloneListIterator(List<? extends E> list, Mutator<E> mutator) { - this(mutator, list.toArray()); - } - - /** - * Construct a list iterator on a copy of the specified array. - * Use the specified list mutator to modify the original list. - */ - public CloneListIterator(E[] array, Mutator<E> mutator) { - this(mutator, array.clone()); - } - - /** - * Internal constructor used by subclasses. - * Swap order of arguments to prevent collision with other constructor. - * The passed in array will *not* be cloned. - */ - protected CloneListIterator(Mutator<E> mutator, Object... array) { - super(); - // build a copy of the list and keep it in synch with original (if the mutator allows changes) - // that way the nested list iterator will maintain some of our state - this.listIterator = CollectionTools.list(array).listIterator(); - this.mutator = mutator; - this.cursor = 0; - this.state = State.UNKNOWN; - } - - - // ********** ListIterator implementation ********** - - public boolean hasNext() { - return this.listIterator.hasNext(); - } - - public E next() { - // allow the nested iterator to throw an exception before we modify the index - E next = this.nestedNext(); - this.cursor++; - this.state = State.NEXT; - return next; - } - - public void remove() { - // allow the nested iterator to throw an exception before we modify the original list - this.listIterator.remove(); - if (this.state == State.PREVIOUS) { - this.remove(this.cursor); - } else { - this.cursor--; - this.remove(this.cursor); - } - } - - public int nextIndex() { - return this.listIterator.nextIndex(); - } - - public int previousIndex() { - return this.listIterator.previousIndex(); - } - - public boolean hasPrevious() { - return this.listIterator.hasPrevious(); - } - - public E previous() { - // allow the nested iterator to throw an exception before we modify the index - E previous = this.nestedPrevious(); - this.cursor--; - this.state = State.PREVIOUS; - return previous; - } - - public void add(E o) { - // allow the nested iterator to throw an exception before we modify the original list - this.listIterator.add(o); - this.add(this.cursor, o); - this.cursor++; - } - - public void set(E o) { - // allow the nested iterator to throw an exception before we modify the original list - this.listIterator.set(o); - if (this.state == State.PREVIOUS) { - this.set(this.cursor, o); - } else { - this.set(this.cursor - 1, o); - } - } - - - // ********** internal methods ********** - - /** - * The list passed in during construction held elements of type <code>E</code>, - * so this cast is not a problem. We need this cast because - * all the elements of the original collection were copied into - * an object array (<code>Object[]</code>). - */ - @SuppressWarnings("unchecked") - protected E nestedNext() { - return (E) this.listIterator.next(); - } - - /** - * The list passed in during construction held elements of type <code>E</code>, - * so this cast is not a problem. We need this cast because - * all the elements of the original collection were copied into - * an object array (<code>Object[]</code>). - */ - @SuppressWarnings("unchecked") - protected E nestedPrevious() { - return (E) this.listIterator.previous(); - } - - /** - * Add the specified element to the original list. - * <p> - * This method can be overridden by a subclass as an - * alternative to building a {@link Mutator}. - */ - protected void add(int index, E o) { - this.mutator.add(index, o); - } - - /** - * Remove the specified element from the original list. - * <p> - * This method can be overridden by a subclass as an - * alternative to building a {@link Mutator}. - */ - protected void remove(int index) { - this.mutator.remove(index); - } - - /** - * Set the specified element in the original list. - * <p> - * This method can be overridden by a subclass as an - * alternative to building a {@link Mutator}. - */ - protected void set(int index, E o) { - this.mutator.set(index, o); - } - - - // ********** overrides ********** - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - - - //********** member interface ********** - - /** - * Used by {@link CloneListIterator} to remove - * elements from the original list; since the list iterator - * does not have direct access to the original list. - */ - public interface Mutator<T> { - - /** - * Add the specified object to the original list. - */ - void add(int index, T o); - - /** - * Remove the specified object from the original list. - */ - void remove(int index); - - /** - * Set the specified object in the original list. - */ - void set(int index, T o); - - - final class ReadOnly<S> implements Mutator<S> { - @SuppressWarnings("rawtypes") - public static final Mutator INSTANCE = new ReadOnly(); - @SuppressWarnings("unchecked") - public static <R> Mutator<R> instance() { - return INSTANCE; - } - // ensure single instance - private ReadOnly() { - super(); - } - // add is not supported - public void add(int index, Object o) { - throw new UnsupportedOperationException(); - } - // remove is not supported - public void remove(int index) { - throw new UnsupportedOperationException(); - } - // set is not supported - public void set(int index, Object o) { - throw new UnsupportedOperationException(); - } - @Override - public String toString() { - return "CloneListIterator.Mutator.ReadOnly"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CompositeIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CompositeIterator.java deleted file mode 100644 index 02ad76d9d0..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CompositeIterator.java +++ /dev/null @@ -1,162 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import java.util.NoSuchElementException; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayIterable; - -/** - * A <code>CompositeIterator</code> wraps a collection - * of {@link Iterator}s and makes them appear to be a single - * {@link Iterator}. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable - */ -public class CompositeIterator<E> - implements Iterator<E> -{ - private final Iterator<? extends Iterator<? extends E>> iterators; - private Iterator<? extends E> currentIterator; - private Iterator<? extends E> lastIteratorToReturnNext; - - - // ********** constructors ********** - - /** - * Construct an iterator that returns all the elements held by the - * specified iterables. - */ - public CompositeIterator(Iterable<? extends Iterable<? extends E>> iterables) { - this( - new TransformationIterator<Iterable<? extends E>, Iterator<? extends E>>(iterables.iterator()) { - @Override - protected Iterator<? extends E> transform(Iterable<? extends E> iterable) { - return iterable.iterator(); - } - } - ); - } - - /** - * Construct an iterator with the specified collection of iterators. - */ - public CompositeIterator(Iterator<? extends Iterator<? extends E>> iterators) { - super(); - this.iterators = iterators; - } - - /** - * Construct an iterator with the specified object prepended - * to the specified iterable. - */ - public CompositeIterator(E object, Iterable<? extends E> iterable) { - this(object, iterable.iterator()); - } - - /** - * Construct an iterator with the specified object prepended - * to the specified iterator. - */ - @SuppressWarnings("unchecked") - public CompositeIterator(E object, Iterator<? extends E> iterator) { - this(new SingleElementIterator<E>(object), iterator); - } - - /** - * Construct an iterator with the specified object appended - * to the specified iterable. - */ - public CompositeIterator(Iterable<? extends E> iterable, E object) { - this(iterable.iterator(), object); - } - - /** - * Construct an iterator with the specified object appended - * to the specified iterator. - */ - @SuppressWarnings("unchecked") - public CompositeIterator(Iterator<? extends E> iterator, E object) { - this(iterator, new SingleElementIterator<E>(object)); - } - - /** - * Construct an iterator with the specified iterables. - */ - public CompositeIterator(Iterable<? extends E>... iterables) { - this(new ArrayIterable<Iterable<? extends E>>(iterables)); - } - - /** - * Construct an iterator with the specified iterators. - */ - public CompositeIterator(Iterator<? extends E>... iterators) { - this(new ArrayIterator<Iterator<? extends E>>(iterators)); - } - - - // ********** Iterator implementation ********** - - public boolean hasNext() { - try { - this.loadCurrentIterator(); - } catch (NoSuchElementException ex) { - // this occurs if there are no iterators at all - return false; - } - return this.currentIterator.hasNext(); - } - - public E next() { - this.loadCurrentIterator(); - E result = this.currentIterator.next(); - - // the statement above will throw a NoSuchElementException - // if the current iterator is at the end of the line; - // so if we get here, we can set 'lastIteratorToReturnNext' - this.lastIteratorToReturnNext = this.currentIterator; - - return result; - } - - public void remove() { - if (this.lastIteratorToReturnNext == null) { - // CompositeIterator#next() has never been called - throw new IllegalStateException(); - } - this.lastIteratorToReturnNext.remove(); - } - - /** - * Load {@link #currentIterator} with the first iterator that {@link Iterator#hasNext()} - * or the final iterator if all the elements have already been retrieved. - */ - private void loadCurrentIterator() { - if (this.currentIterator == null) { - this.currentIterator = this.iterators.next(); - } - while (( ! this.currentIterator.hasNext()) && this.iterators.hasNext()) { - this.currentIterator = this.iterators.next(); - } - } - - - // ********** overrides ********** - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterators); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CompositeListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CompositeListIterator.java deleted file mode 100644 index 3111451a92..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/CompositeListIterator.java +++ /dev/null @@ -1,270 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Arrays; -import java.util.List; -import java.util.ListIterator; -import java.util.NoSuchElementException; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * A <code>CompositeListIterator</code> wraps a list - * of {@link ListIterator}s and makes them appear to be a single - * {@link ListIterator}. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.CompositeListIterable - */ -public class CompositeListIterator<E> - implements ListIterator<E> -{ - private final ListIterator<? extends ListIterator<E>> iterators; - private ListIterator<E> nextIterator; - private int nextIndex; - /** - * <code>true</code> if "next" was last returned; - * <code>false</code> if "previous" was last returned; - * this determines the effect of {@link #remove()} on {@link #nextIndex} - */ - private boolean nextReturned; - private ListIterator<E> lastIteratorToReturnElement; - - - /** - * Construct a list iterator on the elements in the specified list of lists. - */ - public CompositeListIterator(List<? extends List<E>> lists) { - this( - new TransformationListIterator<List<E>, ListIterator<E>>(lists.listIterator()) { - @Override - protected ListIterator<E> transform(List<E> list) { - return list.listIterator(); - } - } - ); - } - - /** - * Construct a list iterator on the elements in the specified list of lists. - */ - public CompositeListIterator(ListIterable<? extends ListIterable<E>> listIterables) { - this( - new TransformationListIterator<ListIterable<E>, ListIterator<E>>(listIterables.iterator()) { - @Override - protected ListIterator<E> transform(ListIterable<E> list) { - return list.iterator(); - } - } - ); - } - - /** - * Construct a list iterator with the specified list of list iterators. - */ - public CompositeListIterator(ListIterator<? extends ListIterator<E>> iterators) { - super(); - this.iterators = iterators; - this.nextIndex = 0; - this.nextReturned = false; - } - - /** - * Construct a list iterator with the specified object prepended - * to the specified list. - */ - public CompositeListIterator(E object, List<E> list) { - this(object, list.listIterator()); - } - - /** - * Construct a list iterator with the specified object prepended - * to the specified list. - */ - public CompositeListIterator(E object, ListIterable<E> listIterable) { - this(object, listIterable.iterator()); - } - - /** - * Construct a list iterator with the specified object prepended - * to the specified iterator. - */ - @SuppressWarnings("unchecked") - public CompositeListIterator(E object, ListIterator<E> iterator) { - this(new SingleElementListIterator<E>(object), iterator); - } - - /** - * Construct a list iterator with the specified object appended - * to the specified list. - */ - public CompositeListIterator(List<E> list, E object) { - this(list.listIterator(), object); - } - - /** - * Construct a list iterator with the specified object appended - * to the specified list. - */ - public CompositeListIterator(ListIterable<E> listIterable, E object) { - this(listIterable.iterator(), object); - } - - /** - * Construct a list iterator with the specified object appended - * to the specified iterator. - */ - @SuppressWarnings("unchecked") - public CompositeListIterator(ListIterator<E> iterator, E object) { - this(iterator, new SingleElementListIterator<E>(object)); - } - - /** - * Construct a list iterator with the specified lists. - */ - public CompositeListIterator(List<E>... lists) { - this(Arrays.asList(lists)); - } - - /** - * Construct a list iterator with the specified lists. - */ - public CompositeListIterator(ListIterable<E>... listIterables) { - this(new ArrayListIterable<ListIterable<E>>(listIterables)); - } - - /** - * Construct a list iterator with the specified list iterators. - */ - public CompositeListIterator(ListIterator<E>... iterators) { - this(new ArrayListIterator<ListIterator<E>>(iterators)); - } - - public void add(E o) { - this.checkNextIterator(); - this.nextIterator.add(o); - this.nextIndex++; - } - - public boolean hasNext() { - try { - this.loadNextIterator(); - } catch (NoSuchElementException ex) { - // this occurs if there are no iterators at all - return false; - } - return this.nextIterator.hasNext(); - } - - public boolean hasPrevious() { - try { - this.loadPreviousIterator(); - } catch (NoSuchElementException ex) { - // this occurs if there are no iterators at all - return false; - } - return this.nextIterator.hasPrevious(); - } - - public E next() { - this.loadNextIterator(); - E result = this.nextIterator.next(); - - // the statement above will throw a NoSuchElementException - // if the current iterator is at the end of the line; - // so if we get here, we can set the 'lastIteratorToReturnElement' - this.lastIteratorToReturnElement = this.nextIterator; - this.nextIndex++; - this.nextReturned = true; - - return result; - } - - public int nextIndex() { - return this.nextIndex; - } - - public E previous() { - this.loadPreviousIterator(); - E result = this.nextIterator.previous(); - - // the statement above will throw a NoSuchElementException - // if the current iterator is at the end of the line; - // so if we get here, we can set the 'lastIteratorToReturnElement' - this.lastIteratorToReturnElement = this.nextIterator; - this.nextIndex--; - this.nextReturned = false; - - return result; - } - - public int previousIndex() { - return this.nextIndex - 1; - } - - public void remove() { - if (this.lastIteratorToReturnElement == null) { - throw new IllegalStateException(); - } - this.lastIteratorToReturnElement.remove(); - if (this.nextReturned) { - // decrement the index because the "next" element has moved forward in the list - this.nextIndex--; - } - } - - public void set(E e) { - if (this.lastIteratorToReturnElement == null) { - throw new IllegalStateException(); - } - this.lastIteratorToReturnElement.set(e); - } - - /** - * Load 'nextIterator' with the first iterator that <code>hasNext()</code> - * or the final iterator if all the elements have already been retrieved. - */ - private void loadNextIterator() { - this.checkNextIterator(); - while (( ! this.nextIterator.hasNext()) && this.iterators.hasNext()) { - this.nextIterator = this.iterators.next(); - } - } - - /** - * Load 'nextIterator' with the first iterator that <code>hasPrevious()</code> - * or the first iterator if all the elements have already been retrieved. - */ - private void loadPreviousIterator() { - this.checkNextIterator(); - while (( ! this.nextIterator.hasPrevious()) && this.iterators.hasPrevious()) { - this.nextIterator = this.iterators.previous(); - } - } - - /** - * If 'nextIterator' is null, load it with the first iterator. - */ - private void checkNextIterator() { - if (this.nextIterator == null) { - this.nextIterator = this.iterators.next(); - } - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterators); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EmptyIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EmptyIterator.java deleted file mode 100644 index f06e2e03d8..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EmptyIterator.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import java.util.NoSuchElementException; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * An <code>EmptyIterator</code> is just that. - * - * @param <E> the type of elements (not) returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable - */ -public final class EmptyIterator<E> - implements Iterator<E> -{ - - // singleton - @SuppressWarnings("rawtypes") - private static final EmptyIterator INSTANCE = new EmptyIterator(); - - /** - * Return the singleton. - */ - @SuppressWarnings("unchecked") - public static <T> Iterator<T> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private EmptyIterator() { - super(); - } - - public boolean hasNext() { - return false; - } - - public E next() { - throw new NoSuchElementException(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EmptyListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EmptyListIterator.java deleted file mode 100644 index 73e23766a1..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EmptyListIterator.java +++ /dev/null @@ -1,93 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.ListIterator; -import java.util.NoSuchElementException; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * An <code>EmptyListIterator</code> is just that. - * - * @param <E> the type of elements (not) returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable - */ -public final class EmptyListIterator<E> - implements ListIterator<E> -{ - - // singleton - @SuppressWarnings("rawtypes") - private static final EmptyListIterator INSTANCE = new EmptyListIterator(); - - /** - * Return the singleton. - */ - @SuppressWarnings("unchecked") - public static <T> ListIterator<T> instance() { - return INSTANCE; - } - - /** - * Ensure single instance. - */ - private EmptyListIterator() { - super(); - } - - public void add(E e) { - throw new UnsupportedOperationException(); - } - - public boolean hasNext() { - return false; - } - - public boolean hasPrevious() { - return false; - } - - public E next() { - throw new NoSuchElementException(); - } - - public int nextIndex() { - return 0; - } - - public E previous() { - throw new NoSuchElementException(); - } - - public int previousIndex() { - return -1; - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - public void set(E e) { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } - - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EnumerationIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EnumerationIterator.java deleted file mode 100644 index d8e9d38e25..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/EnumerationIterator.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Enumeration; -import java.util.Iterator; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * An <code>EnumerationIterator</code> wraps an - * {@link Enumeration} so that it can be treated like an - * {@link Iterator}. - * - * @param <E> the type of elements returned by the iterator - */ -public class EnumerationIterator<E> - implements Iterator<E> -{ - private final Enumeration<? extends E> enumeration; - - /** - * Construct an iterator that wraps the specified enumeration. - */ - public EnumerationIterator(Enumeration<? extends E> enumeration) { - this.enumeration = enumeration; - } - - public boolean hasNext() { - return this.enumeration.hasMoreElements(); - } - - public E next() { - return this.enumeration.nextElement(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.enumeration); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/FilteringIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/FilteringIterator.java deleted file mode 100644 index 4c3176c9d4..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/FilteringIterator.java +++ /dev/null @@ -1,148 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import java.util.NoSuchElementException; -import org.eclipse.jpt.common.utility.Filter; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>FilteringIterator</code> wraps another {@link Iterator} - * and uses a {@link Filter} to determine which elements in the - * nested iterator are to be returned by calls to {@link #next()}. - * <p> - * As an alternative to building a {@link Filter}, a subclass - * of <code>FilteringIterator</code> can override the - * {@link #accept(Object)} method. - * <p> - * One, possibly undesirable, side-effect of using this iterator is that - * the nested iterator's <code>next()</code> method will be invoked - * <em>before</em> the filtered iterator's {@link #next()} - * method is invoked. This is because the "next" element must be - * checked for whether it is to be accepted before the filtered iterator - * can determine whether it has a "next" element (i.e. that the - * {@link #hasNext()} method should return <code>true</code>). - * This also prevents a filtered iterator from supporting the optional - * <code>remove()</code> method. - * - * @param <E> the type of elements to be filtered - * - * @see org.eclipse.jpt.common.utility.internal.iterables.FilteringIterable - */ -public class FilteringIterator<E> - implements Iterator<E> -{ - private final Iterator<? extends E> iterator; - private final Filter<E> filter; - private E next; - private boolean done; - - - /** - * Construct an iterator with the specified - * iterable and a disabled filter. - * Use this constructor if you want to override the - * {@link #accept(Object)} method instead of building - * a {@link Filter}. - */ - public FilteringIterator(Iterable<? extends E> iterable) { - this(iterable.iterator()); - } - - /** - * Construct an iterator with the specified nested - * iterator and a disabled filter. - * Use this constructor if you want to override the - * {@link #accept(Object)} method instead of building - * a {@link Filter}. - */ - public FilteringIterator(Iterator<? extends E> iterator) { - this(iterator, Filter.Disabled.<E>instance()); - } - - /** - * Construct an iterator with the specified - * iterable and filter. - */ - public FilteringIterator(Iterable<? extends E> iterable, Filter<E> filter) { - this(iterable.iterator(), filter); - } - - /** - * Construct an iterator with the specified nested - * iterator and filter. - */ - public FilteringIterator(Iterator<? extends E> iterator, Filter<E> filter) { - super(); - this.iterator = iterator; - this.filter = filter; - this.loadNext(); - } - - public boolean hasNext() { - return ! this.done; - } - - public E next() { - if (this.done) { - throw new NoSuchElementException(); - } - E result = this.next; - this.loadNext(); - return result; - } - - /** - * Because we need to pre-load the next element - * to be returned, we cannot support the <code>remove()</code> - * method. - */ - public void remove() { - throw new UnsupportedOperationException(); - } - - /** - * Load next with the next valid entry from the nested - * iterator. If there are none, next is set to <code>END</code>. - */ - private void loadNext() { - this.done = true; - while (this.iterator.hasNext() && (this.done)) { - E temp = this.iterator.next(); - if (this.accept(temp)) { - // assume that if the object was accepted it is of type E - this.next = temp; - this.done = false; - } else { - this.next = null; - this.done = true; - } - } - } - - /** - * Return whether the {@link FilteringIterator} - * should return the specified next element from a call to the - * {@link #next()} method. - * <p> - * This method can be overridden by a subclass as an - * alternative to building a {@link Filter}. - */ - protected boolean accept(E o) { - return this.filter.accept(o); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/GraphIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/GraphIterator.java deleted file mode 100644 index ff50f16ce4..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/GraphIterator.java +++ /dev/null @@ -1,283 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.NoSuchElementException; - -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>GraphIterator</code> is similar to a {@link TreeIterator} - * except that it cannot be assumed that all nodes assume a strict tree - * structure. For instance, in a tree, a node cannot be a descendent of - * itself, but a graph may have a cyclical structure. - * - * A <code>GraphIterator</code> simplifies the traversal of a - * graph of objects, where the objects' protocol(s) provides - * a method for getting the next collection of nodes in the graph, - * (or <em>neighbors</em>), but does not provide a method for - * getting <em>all</em> of the nodes in the graph. - * (e.g. a neighbor can return his neighbors, and those neighbors - * can return their neighbors, which might also include the original - * neighbor, but you only want to visit the original neighbor once.) - * <p> - * If a neighbor has already been visited (determined by using - * {@link #equals(Object)}), that neighbor is not visited again, - * nor are the neighbors of that object. - * <p> - * It is up to the user of this class to ensure a <em>complete</em> graph. - * <p> - * To use, supply:<ul> - * <li> either the initial node of the graph or an {@link Iterator} - * over an initial collection of graph nodes - * <li> a {@link MisterRogers} that tells who the neighbors are - * of each node - * (alternatively, subclass <code>GraphIterator</code> - * and override the {@link #neighbors(Object)} method) - * </ul> - * {@link #remove()} is not supported. This behavior, if - * desired, must be implemented by the user of this class. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.GraphIterable - */ -public class GraphIterator<E> - implements Iterator<E> -{ - // use a LinkedList since we will be pulling off the front and adding to the end - private final LinkedList<Iterator<? extends E>> iterators = new LinkedList<Iterator<? extends E>>(); - private final HashSet<E> visitedNeighbors = new HashSet<E>(); - private final MisterRogers<E> misterRogers; - - private Iterator<? extends E> currentIterator; - - private E nextNeighbor; - private boolean done; - - - /** - * Construct an iterator that returns the nodes of a graph - * with the specified collection of roots - * and a disabled Mr. Rogers. - * Use this constructor if you want to override the - * {@link #neighbors(Object)} method instead of building - * a {@link MisterRogers}. - */ - public GraphIterator(E... roots) { - this(new ArrayIterator<E>(roots)); - } - - /** - * Construct an iterator that returns the nodes of a graph - * with the specified collection of roots - * and a disabled Mr. Rogers. - * Use this constructor if you want to override the - * {@link #neighbors(Object)} method instead of building - * a {@link MisterRogers}. - */ - public GraphIterator(Iterable<? extends E> roots) { - this(roots.iterator()); - } - - /** - * Construct an iterator that returns the nodes of a graph - * with the specified collection of roots - * and a disabled Mr. Rogers. - * Use this constructor if you want to override the - * {@link #neighbors(Object)} method instead of building - * a {@link MisterRogers}. - */ - public GraphIterator(Iterator<? extends E> roots) { - this(roots, MisterRogers.Disabled.<E>instance()); - } - - /** - * Construct an iterator that returns the nodes of a graph - * with the specified root - * and a disabled Mr. Rogers. - * Use this constructor if you want to override the - * <code>neighbors(Object)</code> method instead of building - * a <code>MisterRogers</code>. - */ - public GraphIterator(E root) { - this(root, MisterRogers.Disabled.<E>instance()); - } - - /** - * Construct an iterator that returns the nodes of a graph - * with the specified root and Mr. Rogers. - */ - public GraphIterator(E root, MisterRogers<E> misterRogers) { - this(new SingleElementIterator<E>(root), misterRogers); - } - - /** - * Construct an iterator that returns the nodes of a graph - * with the specified collection of roots and Mr. Rogers. - */ - public GraphIterator(E[] roots, MisterRogers<E> misterRogers) { - this(new ArrayIterator<E>(roots), misterRogers); - } - - /** - * Construct an iterator that returns the nodes of a graph - * with the specified roots and Mr. Rogers. - */ - public GraphIterator(Iterable<? extends E> roots, MisterRogers<E> misterRogers) { - this(roots.iterator(), misterRogers); - } - - /** - * Construct an iterator that returns the nodes of a graph - * with the specified roots and Mr. Rogers. - */ - public GraphIterator(Iterator<? extends E> roots, MisterRogers<E> misterRogers) { - super(); - this.currentIterator = roots; - this.misterRogers = misterRogers; - this.loadNextNeighbor(); - } - - /** - * Load next neighbor with the next entry from the current iterator. - * If the current iterator has none, load the next iterator. - * If there are no more, the {@link #done} flag is set. - */ - private void loadNextNeighbor() { - if (this.currentIterator == EmptyIterator.instance()) { - this.done = true; - } - else if (this.currentIterator.hasNext()) { - E nextPossibleNeighbor = this.currentIterator.next(); - if (this.visitedNeighbors.contains(nextPossibleNeighbor)) { - this.loadNextNeighbor(); // recurse - } else { - this.nextNeighbor = nextPossibleNeighbor; - this.visitedNeighbors.add(nextPossibleNeighbor); - this.iterators.add(this.neighbors(nextPossibleNeighbor)); - } - } - else { - for (Iterator<? extends Iterator<? extends E>> stream = this.iterators.iterator(); ! this.currentIterator.hasNext() && stream.hasNext(); ) { - this.currentIterator = stream.next(); - stream.remove(); - } - if ( ! this.currentIterator.hasNext()) { - this.currentIterator = EmptyIterator.instance(); - } - this.loadNextNeighbor(); // recurse - } - } - - public boolean hasNext() { - return ! this.done; - } - - public E next() { - if (this.done) { - throw new NoSuchElementException(); - } - E next = this.nextNeighbor; - this.loadNextNeighbor(); - return next; - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - /** - * Return the immediate neighbors of the specified object. - */ - protected Iterator<? extends E> neighbors(E next) { - return this.misterRogers.neighbors(next); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.currentIterator); - } - - - //********** inner classes ********** - - /** - * Used by {@link GraphIterator} to retrieve - * the immediate neighbors of a node in the graph. - * "These are the people in your neighborhood..." - */ - public interface MisterRogers<T> { - - /** - * Return the immediate neighbors of the specified object. - */ - Iterator<? extends T> neighbors(T next); - - - final class Null<S> implements MisterRogers<S> { - @SuppressWarnings("rawtypes") - public static final MisterRogers INSTANCE = new Null(); - @SuppressWarnings("unchecked") - public static <R> MisterRogers<R> instance() { - return INSTANCE; - } - // ensure single instance - private Null() { - super(); - } - // return no neighbors - public Iterator<S> neighbors(S next) { - return EmptyIterator.instance(); - } - @Override - public String toString() { - return "GraphIterator.MisterRogers.Null"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - /** The Mr. Rogers used when the {@link GraphIterator#neighbors(Object)} method is overridden. */ - final class Disabled<S> implements MisterRogers<S> { - @SuppressWarnings("rawtypes") - public static final MisterRogers INSTANCE = new Disabled(); - @SuppressWarnings("unchecked") - public static <R> MisterRogers<R> instance() { - return INSTANCE; - } - // ensure single instance - private Disabled() { - super(); - } - // throw an exception - public Iterator<S> neighbors(S next) { - throw new UnsupportedOperationException(); // GraphIterator.neighbors(Object) was not implemented - } - @Override - public String toString() { - return "GraphIterator.MisterRogers.Disabled"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/PeekableIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/PeekableIterator.java deleted file mode 100644 index 1a1f6284ae..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/PeekableIterator.java +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import java.util.NoSuchElementException; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>PeekableIterator</code> wraps another {@link Iterator} - * and allows a {@link #peek()} at the next element to be - * returned by {@link #next()}. - * <p> - * One, possibly undesirable, side-effect of using this iterator is that - * the nested iterator's <code>next()</code> method will be invoked - * <em>before</em> the peekable iterator's {@link #next()} - * method is invoked. This is because the "next" element must be - * pre-loaded for the {@link #peek()} method. - * This also prevents a peekable iterator from supporting the optional - * {@link #remove()} method. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.PeekableIterable - */ -public class PeekableIterator<E> - implements Iterator<E> -{ - private final Iterator<? extends E> iterator; - private E next; - private boolean done; - - - /** - * Construct a peekable iterator that wraps the specified - * iterable. - */ - public PeekableIterator(Iterable<? extends E> iterable) { - this(iterable.iterator()); - } - - /** - * Construct a peekable iterator that wraps the specified nested - * iterator. - */ - public PeekableIterator(Iterator<? extends E> iterator) { - super(); - this.iterator = iterator; - this.done = false; - this.loadNext(); - } - - public boolean hasNext() { - return ! this.done; - } - - public E next() { - if (this.done) { - throw new NoSuchElementException(); - } - E result = this.next; - this.loadNext(); - return result; - } - - /** - * Return the element that will be returned by the next call to the - * {@link #next()} method, without advancing past it. - */ - public E peek() { - if (this.done) { - throw new NoSuchElementException(); - } - return this.next; - } - - /** - * Because we need to pre-load the next element - * to be returned, we cannot support the {@link #remove()} - * method. - */ - public void remove() { - throw new UnsupportedOperationException(); - } - - /** - * Load next with the next entry from the nested - * iterator. If there are none, {@link #next} is set to <code>null</code> - * and {@link #done} is set to <code>true</code>. - */ - private void loadNext() { - if (this.iterator.hasNext()) { - this.next = this.iterator.next(); - } else { - this.next = null; - this.done = true; - } - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/QueueIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/QueueIterator.java deleted file mode 100644 index 4f946237b0..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/QueueIterator.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; - -import org.eclipse.jpt.common.utility.internal.Queue; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>QueueIterator</code> provides an {@link Iterator} - * for a {@link Queue} of objects of type <code>E</code>. The queue's elements - * are {@link Queue#dequeue() dequeue}d" as the iterator returns them with - * calls to {@link #next()}. - * - * @param <E> the type of elements returned by the iterator - * - * @see Queue - * @see org.eclipse.jpt.common.utility.internal.iterables.QueueIterable - */ -public class QueueIterator<E> - implements Iterator<E> -{ - private final Queue<E> queue; - - - /** - * Construct an iterator for the specified queue. - */ - public QueueIterator(Queue<E> queue) { - super(); - this.queue = queue; - } - - public boolean hasNext() { - return ! this.queue.isEmpty(); - } - - public E next() { - return this.queue.dequeue(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.queue); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyCompositeListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyCompositeListIterator.java deleted file mode 100644 index 425788548e..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyCompositeListIterator.java +++ /dev/null @@ -1,252 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Arrays; -import java.util.List; -import java.util.ListIterator; -import java.util.NoSuchElementException; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ArrayListIterable; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * A <code>ReadOnlyCompositeListIterator</code> wraps a list - * of {@link ListIterator}s and makes them appear to be a single - * read-only {@link ListIterator}. A read-only composite list - * iterator is more flexible than a normal composite list iterator when it - * comes to the element types of the nested iterators. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.ReadOnlyCompositeListIterable - */ -public class ReadOnlyCompositeListIterator<E> - implements ListIterator<E> -{ - private final ListIterator<? extends ListIterator<? extends E>> iterators; - private ListIterator<? extends E> nextIterator; - private int nextIndex; - - - /** - * Construct a read-only list iterator with the specified list of lists. - */ - public ReadOnlyCompositeListIterator(List<? extends List<? extends E>> lists) { - this( - new TransformationListIterator<List<? extends E>, ListIterator<? extends E>>(lists.listIterator()) { - @Override - protected ListIterator<? extends E> transform(List<? extends E> list) { - return list.listIterator(); - } - } - ); - } - - /** - * Construct a read-only list iterator with the specified list of lists. - */ - public ReadOnlyCompositeListIterator(ListIterable<? extends ListIterable<? extends E>> listIterables) { - this( - new TransformationListIterator<ListIterable<? extends E>, ListIterator<? extends E>>(listIterables.iterator()) { - @Override - protected ListIterator<? extends E> transform(ListIterable<? extends E> listIterable) { - return listIterable.iterator(); - } - } - ); - } - - /** - * Construct a read-only list iterator with the specified list of - * list iterators. - */ - public ReadOnlyCompositeListIterator(ListIterator<? extends ListIterator<? extends E>> iterators) { - super(); - this.iterators = iterators; - this.nextIndex = 0; - } - - /** - * Construct a read-only list iterator with the specified object prepended - * to the specified list. - */ - public ReadOnlyCompositeListIterator(E object, List<? extends E> list) { - this(object, list.listIterator()); - } - - /** - * Construct a read-only list iterator with the specified object prepended - * to the specified list. - */ - public ReadOnlyCompositeListIterator(E object, ListIterable<? extends E> listIterable) { - this(object, listIterable.iterator()); - } - - /** - * Construct a read-only list iterator with the specified object prepended - * to the specified iterator. - */ - @SuppressWarnings("unchecked") - public ReadOnlyCompositeListIterator(E object, ListIterator<? extends E> iterator) { - this(new SingleElementListIterator<E>(object), iterator); - } - - /** - * Construct a read-only list iterator with the specified object appended - * to the specified list. - */ - public ReadOnlyCompositeListIterator(List<? extends E> list, E object) { - this(list.listIterator(), object); - } - - /** - * Construct a read-only list iterator with the specified object appended - * to the specified list. - */ - public ReadOnlyCompositeListIterator(ListIterable<? extends E> listIterable, E object) { - this(listIterable.iterator(), object); - } - - /** - * Construct a read-only list iterator with the specified object appended - * to the specified iterator. - */ - @SuppressWarnings("unchecked") - public ReadOnlyCompositeListIterator(ListIterator<? extends E> iterator, E object) { - this(iterator, new SingleElementListIterator<E>(object)); - } - - /** - * Construct a read-only list iterator with the specified lists. - */ - public ReadOnlyCompositeListIterator(List<? extends E>... lists) { - this(Arrays.asList(lists)); - } - - /** - * Construct a read-only list iterator with the specified lists. - */ - public ReadOnlyCompositeListIterator(ListIterable<? extends E>... listIterables) { - this(new ArrayListIterable<ListIterable<? extends E>>(listIterables)); - } - - /** - * Construct a read-only list iterator with the specified list iterators. - */ - public ReadOnlyCompositeListIterator(ListIterator<? extends E>... iterators) { - this(new ArrayListIterator<ListIterator<? extends E>>(iterators)); - } - - public boolean hasNext() { - try { - this.loadNextIterator(); - } catch (NoSuchElementException ex) { - // this occurs if there are no iterators at all - return false; - } - return this.nextIterator.hasNext(); - } - - public boolean hasPrevious() { - try { - this.loadPreviousIterator(); - } catch (NoSuchElementException ex) { - // this occurs if there are no iterators at all - return false; - } - return this.nextIterator.hasPrevious(); - } - - public E next() { - this.loadNextIterator(); - E result = this.nextIterator.next(); - - // the statement above will throw a NoSuchElementException - // if the current iterator is at the end of the line; - // so if we get here, we can increment 'nextIndex' - this.nextIndex++; - - return result; - } - - public int nextIndex() { - return this.nextIndex; - } - - public E previous() { - this.loadPreviousIterator(); - E result = this.nextIterator.previous(); - - // the statement above will throw a NoSuchElementException - // if the current iterator is at the end of the line; - // so if we get here, we can decrement 'nextIndex' - this.nextIndex--; - - return result; - } - - public int previousIndex() { - return this.nextIndex - 1; - } - - public void add(E o) { - // the list iterator is read-only - throw new UnsupportedOperationException(); - } - - public void remove() { - // the list iterator is read-only - throw new UnsupportedOperationException(); - } - - public void set(E e) { - // the list iterator is read-only - throw new UnsupportedOperationException(); - } - - /** - * Load {@link #nextIterator} with the first iterator that {@link #hasNext()} - * or the final iterator if all the elements have already been retrieved. - */ - private void loadNextIterator() { - this.checkNextIterator(); - while (( ! this.nextIterator.hasNext()) && this.iterators.hasNext()) { - this.nextIterator = this.iterators.next(); - } - } - - /** - * Load {@link #nextIterator} with the first iterator that {@link #hasPrevious()} - * or the first iterator if all the elements have already been retrieved. - */ - private void loadPreviousIterator() { - this.checkNextIterator(); - while (( ! this.nextIterator.hasPrevious()) && this.iterators.hasPrevious()) { - this.nextIterator = this.iterators.previous(); - } - } - - /** - * If {@link #nextIterator} is null, load it with the first iterator. - */ - private void checkNextIterator() { - if (this.nextIterator == null) { - this.nextIterator = this.iterators.next(); - } - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterators); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyIterator.java deleted file mode 100644 index 5673d3d190..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyIterator.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; - -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>ReadOnlyIterator</code> wraps another {@link Iterator} - * and removes support for {@link #remove()}. - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.ReadOnlyIterable - */ -public class ReadOnlyIterator<E> - implements Iterator<E> -{ - private final Iterator<? extends E> iterator; - - /** - * Construct an iterator on the specified collection that - * disallows removes. - */ - public ReadOnlyIterator(Iterable<? extends E> c) { - this(c.iterator()); - } - - /** - * Construct an iterator with the specified nested iterator - * and disallow removes. - */ - public ReadOnlyIterator(Iterator<? extends E> iterator) { - super(); - this.iterator = iterator; - } - - public boolean hasNext() { - // delegate to the nested iterator - return this.iterator.hasNext(); - } - - public E next() { - // delegate to the nested iterator - return this.iterator.next(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyListIterator.java deleted file mode 100644 index ac09133a5d..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReadOnlyListIterator.java +++ /dev/null @@ -1,108 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.List; -import java.util.ListIterator; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * A <code>ReadOnlyListIterator</code> wraps another - * {@link ListIterator} and removes support for:<ul> - * <li>{@link #remove()} - * <li>{@link #set(Object)} - * <li>{@link #add(Object)} - * </ul> - * - * @param <E> the type of elements returned by the list iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.ReadOnlyListIterable - */ -public class ReadOnlyListIterator<E> - implements ListIterator<E> -{ - private final ListIterator<? extends E> listIterator; - - - /** - * Construct a list iterator on the specified list that - * disallows removes, sets, and adds. - */ - public ReadOnlyListIterator(List<? extends E> list) { - this(list.listIterator()); - } - - /** - * Construct a list iterator on the specified list that - * disallows removes, sets, and adds. - */ - public ReadOnlyListIterator(ListIterable<? extends E> listIterable) { - this(listIterable.iterator()); - } - - /** - * Construct a list iterator on the specified list iterator that - * disallows removes, sets, and adds. - */ - public ReadOnlyListIterator(ListIterator<? extends E> listIterator) { - super(); - this.listIterator = listIterator; - } - - public boolean hasNext() { - // delegate to the nested iterator - return this.listIterator.hasNext(); - } - - public E next() { - // delegate to the nested iterator - return this.listIterator.next(); - } - - public boolean hasPrevious() { - // delegate to the nested iterator - return this.listIterator.hasPrevious(); - } - - public E previous() { - // delegate to the nested iterator - return this.listIterator.previous(); - } - - public int nextIndex() { - // delegate to the nested iterator - return this.listIterator.nextIndex(); - } - - public int previousIndex() { - // delegate to the nested iterator - return this.listIterator.previousIndex(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - public void set(E o) { - throw new UnsupportedOperationException(); - } - - public void add(E o) { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.listIterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ResultSetIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ResultSetIterator.java deleted file mode 100644 index 03cf8c8863..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ResultSetIterator.java +++ /dev/null @@ -1,162 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Iterator; -import java.util.NoSuchElementException; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>ResultSetIterator</code> wraps an SQL {@link ResultSet} - * and transforms its rows for client consumption. Subclasses can override - * {@link #buildNext(ResultSet)} to build the expected object from - * the current row of the result set. - * <p> - * To use, supply:<ul> - * <li> a {@link ResultSet} - * <li> an {@link Adapter} that converts a row in the {@link ResultSet} - * into the desired object - * (alternatively, subclass <code>ResultSetIterator</code> - * and override the {@link #buildNext(ResultSet)} method) - * </ul> - * - * @param <E> the type of elements returned by the iterator - * - * @see java.sql.ResultSet - */ -public class ResultSetIterator<E> - implements Iterator<E> -{ - private final ResultSet resultSet; - private final Adapter<E> adapter; - private E next; - private boolean done; - - - /** - * Construct an iterator on the specified result set that returns - * the objects produced by the specified adapter. - */ - public ResultSetIterator(ResultSet resultSet, Adapter<E> adapter) { - super(); - this.resultSet = resultSet; - this.adapter = adapter; - this.done = false; - this.next = this.buildNext(); - } - - /** - * Construct an iterator on the specified result set that returns - * the first object in each row of the result set. - */ - public ResultSetIterator(ResultSet resultSet) { - this(resultSet, Adapter.Default.<E>instance()); - } - - /** - * Build the next object for the iterator to return. - * Close the result set when we reach the end. - */ - private E buildNext() { - try { - if (this.resultSet.next()) { - return this.buildNext(this.resultSet); - } - this.resultSet.close(); - this.done = true; - return null; - } catch (SQLException ex) { - throw new RuntimeException(ex); - } - } - - /** - * By default, return the first object in the current row - * of the result set. Any {@link SQLException}s will - * be caught and wrapped in a {@link RuntimeException}. - */ - protected E buildNext(ResultSet rs) throws SQLException { - return this.adapter.buildNext(rs); - } - - public boolean hasNext() { - return ! this.done; - } - - public E next() { - if (this.done) { - throw new NoSuchElementException(); - } - E temp = this.next; - this.next = this.buildNext(); - return temp; - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.resultSet); - } - - - // ********** interface ********** - - /** - * Used by {@link ResultSetIterator} to convert a - * {@link ResultSet}'s current row into the next object - * to be returned by the {@link Iterator}. - */ - public interface Adapter<T> { - - /** - * Return an object corresponding to the result set's - * "current" row. Any {@link SQLException}s will - * be caught and wrapped in a {@link RuntimeException}. - * @see java.sql.ResultSet - */ - T buildNext(ResultSet rs) throws SQLException; - - - final class Default<S> implements Adapter<S> { - @SuppressWarnings("rawtypes") - public static final Adapter INSTANCE = new Default(); - @SuppressWarnings("unchecked") - public static <R> Adapter<R> instance() { - return INSTANCE; - } - // ensure single instance - private Default() { - super(); - } - // return the first object in the current row of the result set - @SuppressWarnings("unchecked") - public S buildNext(ResultSet rs) throws SQLException { - // result set columns are indexed starting with 1 - return (S) rs.getObject(1); - } - @Override - public String toString() { - return "ResultSetIterator.Adapter.Default"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReverseIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReverseIterator.java deleted file mode 100644 index 7b8bfb4a07..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/ReverseIterator.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.ArrayList; -import java.util.Iterator; -import org.eclipse.jpt.common.utility.internal.CollectionTools; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>ReverseIterator</code> wraps another {@link Iterator} and returns - * its elements in the reverse order in which the wrapped {@link Iterator} - * returns the elements. - * - * @param <E> the type of elements returned by the iterator - */ -public class ReverseIterator<E> - implements Iterator<E> -{ - /** - * The elements in this iterator are already reversed. - */ - private final Iterator<E> iterator; - - - /** - * Construct a reverse iterator for the specified iterator. - */ - public ReverseIterator(Iterator<E> iterator) { - this(CollectionTools.reverseList(iterator)); - } - - /** - * Construct a reverse iterator for the specified iterator. - */ - public ReverseIterator(Iterator<E> iterator, int size) { - this(CollectionTools.reverseList(iterator, size)); - } - - /** - * Construct a reverse iterator for the specified iterable. - */ - public ReverseIterator(Iterable<E> iterable) { - this(CollectionTools.reverseList(iterable)); - } - - /** - * Construct a reverse iterator for the specified iterable. - */ - public ReverseIterator(Iterable<E> iterable, int size) { - this(CollectionTools.reverseList(iterable, size)); - } - - private ReverseIterator(ArrayList<E> reverseList) { - super(); - this.iterator = reverseList.iterator(); - } - - public boolean hasNext() { - return this.iterator.hasNext(); - } - - public E next() { - return this.iterator.next(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this); - } -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SingleElementIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SingleElementIterator.java deleted file mode 100644 index a6a743d1c7..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SingleElementIterator.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import java.util.NoSuchElementException; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>SingleElementIterator</code> holds a single element - * and returns it with the first call to {@link #next()}, at - * which point it will return <code>false</code> to any subsequent - * call to {@link #hasNext()}. - * <p> - * A <code>SingleElementIterator</code> is equivalent to the - * {@link Iterator} returned by: - * {@link java.util.Collections#singleton(Object element)}<code>.iterator()</code> - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.SingleElementIterable - */ -public class SingleElementIterator<E> - implements Iterator<E> -{ - private final E element; - private boolean done; - - - /** - * Construct an iterator that returns only the specified element. - */ - public SingleElementIterator(E element) { - super(); - this.element = element; - this.done = false; - } - - public boolean hasNext() { - return ! this.done; - } - - public E next() { - if (this.done) { - throw new NoSuchElementException(); - } - this.done = true; - return this.element; - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.element); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SingleElementListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SingleElementListIterator.java deleted file mode 100644 index 9363cd0be7..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SingleElementListIterator.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.ListIterator; -import java.util.NoSuchElementException; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>SingleElementListIterator</code> holds a single element - * and returns it with the first call to {@link #next()}, at - * which point it will return <code>false</code> to any subsequent - * call to {@link #hasNext()}. Likewise, it will return <code>false</code> - * to a call to {@link #hasPrevious()} until a call to {@link #next()}, - * at which point a call to {@link #previous()} will return the - * single element. - * <p> - * A <code>SingleElementListIterator</code> is equivalent to the - * {@link ListIterator} returned by: - * {@link java.util.Collections#singletonList(Object element)}<code>.listIterator()</code> - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.SingleElementListIterable - */ -public class SingleElementListIterator<E> - implements ListIterator<E> -{ - private final E element; - private boolean hasNext; - - - /** - * Construct a list iterator that returns only the specified element. - */ - public SingleElementListIterator(E element) { - super(); - this.element = element; - this.hasNext = true; - } - - public boolean hasNext() { - return this.hasNext; - } - - public E next() { - if (this.hasNext) { - this.hasNext = false; - return this.element; - } - throw new NoSuchElementException(); - } - - public int nextIndex() { - return this.hasNext ? 0 : 1; - } - - public boolean hasPrevious() { - return ! this.hasNext; - } - - public E previous() { - if (this.hasNext) { - throw new NoSuchElementException(); - } - this.hasNext = true; - return this.element; - } - - public int previousIndex() { - return this.hasNext ? -1 : 0; - } - - public void add(E e) { - throw new UnsupportedOperationException(); - } - - public void set(E e) { - throw new UnsupportedOperationException(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.element); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/StackIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/StackIterator.java deleted file mode 100644 index d8106d037a..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/StackIterator.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; - -import org.eclipse.jpt.common.utility.internal.Stack; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>StackIterator</code> provides an {@link Iterator} - * for a {@link Stack} of objects of type <code>E</code>. The stack's elements - * are {@link Stack#pop() pop}ped" as the iterator returns them with - * calls to {@link #next()}. - * - * @param <E> the type of elements returned by the iterator - * - * @see Stack - * @see org.eclipse.jpt.common.utility.internal.iterables.StackIterable - */ -public class StackIterator<E> - implements Iterator<E> -{ - private final Stack<E> stack; - - - /** - * Construct an iterator for the specified stack. - */ - public StackIterator(Stack<E> stack) { - super(); - this.stack = stack; - } - - public boolean hasNext() { - return ! this.stack.isEmpty(); - } - - public E next() { - return this.stack.pop(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.stack); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SubIteratorWrapper.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SubIteratorWrapper.java deleted file mode 100644 index 3f7b3447f6..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SubIteratorWrapper.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; - -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Wrap an iterator on elements of type <code>E1</code>, converting it into an - * iterator on elements of type <code>E2</code>. <em>Assume</em> the wrapped - * iterator returns only elements of type <code>E2</code>. - * - * @param <E1> input: the type of elements returned by the wrapped iterator - * @param <E2> output: the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.SubIterableWrapper - */ -public class SubIteratorWrapper<E1, E2> - implements Iterator<E2> -{ - private final Iterator<E1> iterator; - - - public SubIteratorWrapper(Iterable<E1> iterable) { - this(iterable.iterator()); - } - - public SubIteratorWrapper(Iterator<E1> iterator) { - super(); - this.iterator = iterator; - } - - public boolean hasNext() { - return this.iterator.hasNext(); - } - - @SuppressWarnings("unchecked") - public E2 next() { - return (E2) this.iterator.next(); - } - - public void remove() { - this.iterator.remove(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SubListIteratorWrapper.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SubListIteratorWrapper.java deleted file mode 100644 index 534926384f..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SubListIteratorWrapper.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.List; -import java.util.ListIterator; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * Wrap a list iterator on elements of type <code>E1</code>, converting it into - * a list iterator on elements of type <code>E2</code>. Assume the wrapped - * list iterator returns only elements of type <code>E2</code>. - * - * @param <E1> input: the type of elements returned by the wrapped list iterator - * @param <E2> output: the type of elements returned by the list iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.SubListIterableWrapper - */ -public class SubListIteratorWrapper<E1, E2> - implements ListIterator<E2> -{ - private final ListIterator<E1> listIterator; - - - public SubListIteratorWrapper(List<E1> list) { - this(list.listIterator()); - } - - public SubListIteratorWrapper(ListIterable<E1> listIterable) { - this(listIterable.iterator()); - } - - public SubListIteratorWrapper(ListIterator<E1> iterator) { - super(); - this.listIterator = iterator; - } - - public boolean hasNext() { - return this.listIterator.hasNext(); - } - - @SuppressWarnings("unchecked") - public E2 next() { - return (E2) this.listIterator.next(); - } - - public int nextIndex() { - return this.listIterator.nextIndex(); - } - - public boolean hasPrevious() { - return this.listIterator.hasPrevious(); - } - - @SuppressWarnings("unchecked") - public E2 previous() { - return (E2) this.listIterator.previous(); - } - - public int previousIndex() { - return this.listIterator.previousIndex(); - } - - public void remove() { - this.listIterator.remove(); - } - - public void set(E2 e) { - throw new UnsupportedOperationException(); - } - - public void add(E2 e) { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.listIterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SuperIteratorWrapper.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SuperIteratorWrapper.java deleted file mode 100644 index 2bd19a9d96..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SuperIteratorWrapper.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Wrap an iterator on elements of any sub-type of <code>E</code>, converting - * it into an iterator on elements of type <code>E</code>. This shouldn't be a - * problem since there is no way to add invalid elements to the iterator's - * backing collection. (Note the lack of compiler warnings, suppressed or - * otherwise.) - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.SuperIterableWrapper - */ -public class SuperIteratorWrapper<E> - implements Iterator<E> -{ - private final Iterator<? extends E> iterator; - - - public SuperIteratorWrapper(Iterable<? extends E> iterable) { - this(iterable.iterator()); - } - - public SuperIteratorWrapper(Iterator<? extends E> iterator) { - super(); - this.iterator = iterator; - } - - public boolean hasNext() { - return this.iterator.hasNext(); - } - - public E next() { - return this.iterator.next(); - } - - public void remove() { - this.iterator.remove(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SuperListIteratorWrapper.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SuperListIteratorWrapper.java deleted file mode 100644 index d12773a57c..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SuperListIteratorWrapper.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.List; -import java.util.ListIterator; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * Wrap a list iterator on elements of any sub-type of <code>E</code>, converting it into a - * list iterator on elements of type <code>E</code>. This shouldn't be a problem since the - * resulting list iterator disables the methods that would put invalid elements - * in the iterator's backing list (i.e. {@link #set(Object)} and {@link #add(Object)}). - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.SuperListIterableWrapper - */ -public class SuperListIteratorWrapper<E> - implements ListIterator<E> -{ - private final ListIterator<? extends E> listIterator; - - - public SuperListIteratorWrapper(List<? extends E> list) { - this(list.listIterator()); - } - - public SuperListIteratorWrapper(ListIterable<? extends E> listIterable) { - this(listIterable.iterator()); - } - - public SuperListIteratorWrapper(ListIterator<? extends E> listIterator) { - super(); - this.listIterator = listIterator; - } - - public boolean hasNext() { - return this.listIterator.hasNext(); - } - - public E next() { - return this.listIterator.next(); - } - - public int nextIndex() { - return this.listIterator.nextIndex(); - } - - public boolean hasPrevious() { - return this.listIterator.hasPrevious(); - } - - public E previous() { - return this.listIterator.previous(); - } - - public int previousIndex() { - return this.listIterator.previousIndex(); - } - - public void remove() { - this.listIterator.remove(); - } - - public void set(E e) { - throw new UnsupportedOperationException(); - } - - public void add(E e) { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.listIterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SynchronizedIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SynchronizedIterator.java deleted file mode 100644 index 8efef7eb2e..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SynchronizedIterator.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; - -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * Wrap an iterator and synchronize all its methods so it can be safely shared - * among multiple threads. - * - * @param <E> the type of elements returned by the iterator - */ -public class SynchronizedIterator<E> - implements Iterator<E> -{ - private final Iterator<? extends E> iterator; - - /** Object to synchronize on. */ - private final Object mutex; - - - public SynchronizedIterator(Iterable<? extends E> iterable) { - this(iterable.iterator()); - } - - public SynchronizedIterator(Iterable<? extends E> iterable, Object mutex) { - this(iterable.iterator(), mutex); - } - - public SynchronizedIterator(Iterator<? extends E> iterator) { - super(); - this.iterator = iterator; - this.mutex = this; - } - - public SynchronizedIterator(Iterator<? extends E> iterator, Object mutex) { - super(); - this.iterator = iterator; - this.mutex = mutex; - } - - public synchronized boolean hasNext() { - synchronized (this.mutex) { - return this.iterator.hasNext(); - } - } - - public synchronized E next() { - synchronized (this.mutex) { - return this.iterator.next(); - } - } - - public synchronized void remove() { - synchronized (this.mutex) { - this.iterator.remove(); - } - } - - @Override - public String toString() { - synchronized (this.mutex) { - return StringTools.buildToStringFor(this, this.iterator); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SynchronizedListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SynchronizedListIterator.java deleted file mode 100644 index 87e6384bf5..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/SynchronizedListIterator.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2009, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.List; -import java.util.ListIterator; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * Wrap a list iterator and synchronize all its methods so it can be safely shared - * among multiple threads. - * - * @param <E> the type of elements returned by the iterator - */ -public class SynchronizedListIterator<E> - implements ListIterator<E> -{ - private final ListIterator<E> listIterator; - - /** Object to synchronize on. */ - private final Object mutex; - - - public SynchronizedListIterator(List<E> list) { - this(list.listIterator()); - } - - public SynchronizedListIterator(List<E> list, Object mutex) { - this(list.listIterator(), mutex); - } - - public SynchronizedListIterator(ListIterable<E> listIterable) { - this(listIterable.iterator()); - } - - public SynchronizedListIterator(ListIterable<E> listIterable, Object mutex) { - this(listIterable.iterator(), mutex); - } - - public SynchronizedListIterator(ListIterator<E> listIterator) { - super(); - this.listIterator = listIterator; - this.mutex = this; - } - - public SynchronizedListIterator(ListIterator<E> listIterator, Object mutex) { - super(); - this.listIterator = listIterator; - this.mutex = mutex; - } - - public synchronized boolean hasNext() { - synchronized (this.mutex) { - return this.listIterator.hasNext(); - } - } - - public synchronized E next() { - synchronized (this.mutex) { - return this.listIterator.next(); - } - } - - public synchronized int nextIndex() { - synchronized (this.mutex) { - return this.listIterator.nextIndex(); - } - } - - public synchronized boolean hasPrevious() { - synchronized (this.mutex) { - return this.listIterator.hasPrevious(); - } - } - - public synchronized E previous() { - synchronized (this.mutex) { - return this.listIterator.previous(); - } - } - - public synchronized int previousIndex() { - synchronized (this.mutex) { - return this.listIterator.previousIndex(); - } - } - - public synchronized void remove() { - synchronized (this.mutex) { - this.listIterator.remove(); - } - } - - public synchronized void add(E e) { - synchronized (this.mutex) { - this.listIterator.add(e); - } - } - - public synchronized void set(E e) { - synchronized (this.mutex) { - this.listIterator.set(e); - } - } - - @Override - public String toString() { - synchronized (this.mutex) { - return StringTools.buildToStringFor(this, this.listIterator); - } - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TransformationIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TransformationIterator.java deleted file mode 100644 index 7b6aa41bd2..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TransformationIterator.java +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.Transformer; - - -/** - * A <code>TransformationIterator</code> wraps another {@link Iterator} - * and transforms its results for client consumption. To use, supply a - * {@link Transformer} or subclass <code>TransformationIterator</code> - * and override the {@link #transform(Object)} method. - * Objects of type <code>E1</code> are transformed into objects of type <code>E2</code>; - * i.e. the iterator returns objects of type <code>E2</code>. - * - * @param <E1> input: the type of elements to be transformed - * @param <E2> output: the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable - */ -public class TransformationIterator<E1, E2> - implements Iterator<E2> -{ - private final Iterator<? extends E1> iterator; - private final Transformer<E1, ? extends E2> transformer; - - - /** - * Construct an iterator with the specified iterable - * and a disabled transformer. - * Use this constructor if you want to override the - * {@link #transform(Object)} method instead of building - * a {@link Transformer}. - */ - public TransformationIterator(Iterable<? extends E1> iterable) { - this(iterable.iterator()); - } - - /** - * Construct an iterator with the specified nested iterator - * and a disabled transformer. - * Use this constructor if you want to override the - * {@link #transform(Object)} method instead of building - * a {@link Transformer}. - */ - public TransformationIterator(Iterator<? extends E1> iterator) { - this(iterator, Transformer.Disabled.<E1, E2>instance()); - } - - /** - * Construct an iterator with the specified iterable and transformer. - */ - public TransformationIterator(Iterable<? extends E1> iterable, Transformer<E1, ? extends E2> transformer) { - this(iterable.iterator(), transformer); - } - - /** - * Construct an iterator with the specified nested iterator - * and transformer. - */ - public TransformationIterator(Iterator<? extends E1> iterator, Transformer<E1, ? extends E2> transformer) { - super(); - this.iterator = iterator; - this.transformer = transformer; - } - - public boolean hasNext() { - // delegate to the nested iterator - return this.iterator.hasNext(); - } - - public E2 next() { - // transform the object returned by the nested iterator before returning it - return this.transform(this.iterator.next()); - } - - public void remove() { - // delegate to the nested iterator - this.iterator.remove(); - } - - /** - * Transform the specified object and return the result. - */ - protected E2 transform(E1 next) { - return this.transformer.transform(next); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.iterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TransformationListIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TransformationListIterator.java deleted file mode 100644 index 01455cd3d2..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TransformationListIterator.java +++ /dev/null @@ -1,152 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.List; -import java.util.ListIterator; - -import org.eclipse.jpt.common.utility.internal.StringTools; -import org.eclipse.jpt.common.utility.internal.Transformer; -import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; - -/** - * A <code>TransformationListIterator</code> wraps another {@link ListIterator} - * and transforms its results for client consumption. To use, supply a - * {@link Transformer} or subclass <code>TransformationIterator</code> - * and override the {@link #transform(Object)} method. - * <p> - * The methods {@link #set(Object)} and {@link #add(Object)} - * are left unsupported in this class. - * - * @param <E1> input: the type of elements to be transformed - * @param <E2> output: the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.TransformationListIterable - */ -public class TransformationListIterator<E1, E2> - implements ListIterator<E2> -{ - private final ListIterator<? extends E1> listIterator; - private final Transformer<E1, ? extends E2> transformer; - - - /** - * Construct an iterator with the specified list - * and a disabled transformer. - * Use this constructor if you want to override the - * {@link #transform(Object)} method instead of building - * a {@link Transformer}. - */ - public TransformationListIterator(List<? extends E1> list) { - this(list.listIterator()); - } - - /** - * Construct an iterator with the specified nested listed iterator - * and a disabled transformer. - * Use this constructor if you want to override the - * {@link #transform(Object)} method instead of building - * a {@link Transformer}. - */ - public TransformationListIterator(ListIterator<? extends E1> listIterator) { - this(listIterator, Transformer.Disabled.<E1, E2>instance()); - } - - /** - * Construct an iterator with the specified list - * and a disabled transformer. - * Use this constructor if you want to override the - * {@link #transform(Object)} method instead of building - * a {@link Transformer}. - */ - public TransformationListIterator(ListIterable<? extends E1> listIterable) { - this(listIterable.iterator()); - } - - /** - * Construct an iterator with the specified list and transformer. - */ - public TransformationListIterator(List<? extends E1> list, Transformer<E1, ? extends E2> transformer) { - this(list.listIterator(), transformer); - } - - /** - * Construct an iterator with the specified list and transformer. - */ - public TransformationListIterator(ListIterable<? extends E1> listIterable, Transformer<E1, ? extends E2> transformer) { - this(listIterable.iterator(), transformer); - } - - /** - * Construct an iterator with the specified nested iterator - * and transformer. - */ - public TransformationListIterator(ListIterator<? extends E1> listIterator, Transformer<E1, ? extends E2> transformer) { - super(); - this.listIterator = listIterator; - this.transformer = transformer; - } - - public boolean hasNext() { - // delegate to the nested iterator - return this.listIterator.hasNext(); - } - - public E2 next() { - // transform the object returned by the nested iterator before returning it - return this.transform(this.listIterator.next()); - } - - public int nextIndex() { - // delegate to the nested iterator - return this.listIterator.nextIndex(); - } - - public boolean hasPrevious() { - // delegate to the nested iterator - return this.listIterator.hasPrevious(); - } - - public E2 previous() { - // transform the object returned by the nested iterator before returning it - return this.transform(this.listIterator.previous()); - } - - public int previousIndex() { - // delegate to the nested iterator - return this.listIterator.previousIndex(); - } - - public void add(E2 o) { - throw new UnsupportedOperationException(); - } - - public void set(E2 o) { - throw new UnsupportedOperationException(); - } - - public void remove() { - // delegate to the nested iterator - this.listIterator.remove(); - } - - /** - * Transform the specified object and return the result. - */ - protected E2 transform(E1 next) { - return this.transformer.transform(next); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.listIterator); - } - -} diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TreeIterator.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TreeIterator.java deleted file mode 100644 index 1103af97f4..0000000000 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/iterators/TreeIterator.java +++ /dev/null @@ -1,254 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2010 Oracle. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0, which accompanies this distribution - * and is available at http://www.eclipse.org/legal/epl-v10.html. - * - * Contributors: - * Oracle - initial API and implementation - ******************************************************************************/ -package org.eclipse.jpt.common.utility.internal.iterators; - -import java.util.Iterator; -import java.util.LinkedList; -import org.eclipse.jpt.common.utility.internal.StringTools; - -/** - * A <code>TreeIterator</code> simplifies the traversal of a - * tree of objects, where the objects' protocol(s) provides - * a method for getting the immediate children of the given - * node but does not provide a method for getting all the - * descendants (children, grandchildren, etc.) of the given node. - * <p> - * To use, supply:<ul> - * <li> either the root element of the tree or, if the tree has - * multiple roots, an {@link Iterator} over the set of roots - * <li> a {@link Midwife} that delivers the children - * of each child - * (alternatively, subclass <code>TreeIterator</code> - * and override the {@link #children(Object)} method) - * </ul> - * - * @param <E> the type of elements returned by the iterator - * - * @see org.eclipse.jpt.common.utility.internal.iterables.TreeIterable - */ -public class TreeIterator<E> - implements Iterator<E> -{ - private final LinkedList<Iterator<? extends E>> iterators; - private final Midwife<E> midwife; - private Iterator<? extends E> currentIterator; - - - /** - * Construct an iterator that returns the nodes of a tree - * with the specified collection of roots - * and a disabled midwife. - * Use this constructor if you want to override the - * {@link #children(Object)} method instead of building - * a {@link Midwife}. - */ - public TreeIterator(E... roots) { - this(new ArrayIterator<E>(roots)); - } - - /** - * Construct an iterator that returns the nodes of a tree - * with the specified collection of roots - * and a disabled midwife. - * Use this constructor if you want to override the - * {@link #children(Object)} method instead of building - * a {@link Midwife}. - */ - public TreeIterator(Iterable<? extends E> roots) { - this(roots.iterator()); - } - - /** - * Construct an iterator that returns the nodes of a tree - * with the specified collection of roots - * and a disabled midwife. - * Use this constructor if you want to override the - * {@link #children(Object)} method instead of building - * a {@link Midwife}. - */ - public TreeIterator(Iterator<? extends E> roots) { - this(roots, Midwife.Disabled.<E>instance()); - } - - /** - * Construct an iterator that returns the nodes of a tree - * with the specified root and a disabled midwife. - * Use this constructor if you want to override the - * {@link #children(Object)} method instead of building - * a {@link Midwife}. - */ - public TreeIterator(E root) { - this(root, Midwife.Disabled.<E>instance()); - } - - /** - * Construct an iterator that returns the nodes of a tree - * with the specified root and midwife. - */ - public TreeIterator(E root, Midwife<E> midwife) { - this(new SingleElementIterator<E>(root), midwife); - } - - /** - * Construct an iterator that returns the nodes of a tree - * with the specified roots and midwife. - */ - public TreeIterator(E[] roots, Midwife<E> midwife) { - this(new ArrayIterator<E>(roots), midwife); - } - - /** - * Construct an iterator that returns the nodes of a tree - * with the specified roots and midwife. - */ - public TreeIterator(Iterable<? extends E> roots, Midwife<E> midwife) { - this(roots.iterator(), midwife); - } - - /** - * Construct an iterator that returns the nodes of a tree - * with the specified roots and midwife. - */ - public TreeIterator(Iterator<? extends E> roots, Midwife<E> midwife) { - super(); - this.currentIterator = roots; - // use a LinkedList since we will be pulling off the front and adding to the end - this.iterators = new LinkedList<Iterator<? extends E>>(); - this.midwife = midwife; - } - - public boolean hasNext() { - if (this.currentIterator.hasNext()) { - return true; - } - for (Iterator<? extends E> iterator : this.iterators) { - if (iterator.hasNext()) { - return true; - } - } - return false; - } - - public E next() { - if (this.currentIterator.hasNext()) { - return this.nextInternal(); - } - for (Iterator<Iterator<? extends E>> stream = this.iterators.iterator(); stream.hasNext(); ) { - this.currentIterator = stream.next(); - if (this.currentIterator.hasNext()) { - break; - } - stream.remove(); - } - return this.nextInternal(); - } - - /** - * Fetch the children of the next node before returning it. - */ - private E nextInternal() { - E next = this.currentIterator.next(); - this.iterators.add(this.children(next)); - return next; - } - - public void remove() { - this.currentIterator.remove(); - } - - /** - * Return the immediate children of the specified object. - * <p> - * This method can be overridden by a subclass as an - * alternative to building a {@link Midwife}. - */ - protected Iterator<? extends E> children(E next) { - return this.midwife.children(next); - } - - @Override - public String toString() { - return StringTools.buildToStringFor(this, this.currentIterator); - } - - - //********** inner classes ********** - - /** - * Used by {@link TreeIterator} to retrieve - * the immediate children of a node in the tree. - */ - public interface Midwife<T> { - - /** - * Return the immediate children of the specified object. - */ - Iterator<? extends T> children(T o); - - - final class Null<S> implements Midwife<S> { - @SuppressWarnings("rawtypes") - public static final Midwife INSTANCE = new Null(); - @SuppressWarnings("unchecked") - public static <R> Midwife<R> instance() { - return INSTANCE; - } - // ensure single instance - private Null() { - super(); - } - // return no neighbors - public Iterator<S> children(S next) { - return EmptyIterator.instance(); - } - @Override - public String toString() { - return "TreeIterator.Midwife.Null"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - /** - * The midwife used when the {@link TreeIterator#children(Object)} - * method is overridden. - */ - final class Disabled<S> implements Midwife<S> { - @SuppressWarnings("rawtypes") - public static final Midwife INSTANCE = new Disabled(); - @SuppressWarnings("unchecked") - public static <R> Midwife<R> instance() { - return INSTANCE; - } - // ensure single instance - private Disabled() { - super(); - } - // throw an exception - public Iterator<S> children(S next) { - throw new UnsupportedOperationException(); // TreeIterator.children(Object) was not implemented - } - @Override - public String toString() { - return "TreeIterator.Midwife.Disabled"; //$NON-NLS-1$ - } - private static final long serialVersionUID = 1L; - private Object readResolve() { - // replace this object with the singleton - return INSTANCE; - } - } - - } - -} |