package org.kie.eclipse.navigator.view.utils;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public abstract class SimpleTreeIterator<T extends Object> implements Iterable<T> {
public SimpleTreeIterator() {
}
public abstract Iterator<T> iterator();
@SuppressWarnings("unchecked")
public class TreeIterator implements Iterator<T> {
int iteratorIndex = -1;
int childIndex = 0;
List<T> children;
List<Iterator<T>> iterators;
public TreeIterator(List<Object> children) {
this.children = (List<T>)children;
}
public boolean hasChildren() {
return children.size()>0;
}
@Override
public boolean hasNext() {
if (!hasChildren())
return false;
if (iteratorIndex==-1) {
iteratorIndex = 0;
iterators = new ArrayList<Iterator<T>>();
for (T child : children) {
iterators.add(((Iterable<T>)child).iterator());
}
}
return iteratorIndex<iterators.size() || childIndex<children.size();
}
@Override
public T next() {
if (!hasChildren())
return null;
while (iteratorIndex<iterators.size()) {
Iterator<T> iter = iterators.get(iteratorIndex);
if (iter.hasNext())
return iter.next();
++iteratorIndex;
}
if (childIndex<children.size()) {
T child = children.get(childIndex);
++childIndex;
return child;
}
return null;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
}