package org.archive.util.iterator;
import java.io.IOException;
import java.util.Iterator;
public class StartBoundedStringIterator extends AbstractPeekableIterator<String> {
private Iterator<String> inner;
private String boundary;
private boolean done = false;
private boolean started = false;
public StartBoundedStringIterator(Iterator<String> inner, String boundary) {
this.inner = inner;
this.boundary = boundary;
done = false;
started = false;
}
@Override
public String getNextInner() {
if(done) {
return null;
}
if(started) {
if(inner.hasNext()) {
String tmp = inner.next();
if(tmp == null) {
done = true;
return null;
}
return tmp;
}
}
while(inner.hasNext()) {
String tmp = inner.next();
int cmp = boundary.compareTo(tmp);
if(cmp > 0) {
// System.out.format("Skipping: %s\n", tmp);
}
if(boundary.compareTo(tmp) <= 0) {
started = true;
return tmp;
}
}
try {
close();
} catch(IOException e) {
throw new RuntimeException(e);
}
done = true;
return null;
}
public void close() throws IOException {
CloseableIteratorUtil.attemptClose(inner);
}
}