package com.revolsys.record.io.format.json;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Map;
import java.util.NoSuchElementException;
import com.revolsys.collection.iterator.AbstractIterator;
import com.revolsys.io.FileUtil;
import com.revolsys.record.ArrayRecord;
import com.revolsys.record.Record;
import com.revolsys.record.io.RecordReader;
import com.revolsys.record.schema.RecordDefinition;
public class JsonRecordIterator extends AbstractIterator<Record> implements RecordReader {
private JsonMapIterator iterator;
private RecordDefinition recordDefinition;
public JsonRecordIterator(final RecordDefinition recordDefinition, final InputStream in) {
this(recordDefinition, FileUtil.newUtf8Reader(in));
}
public JsonRecordIterator(final RecordDefinition recordDefinition, final Reader in) {
this(recordDefinition, in, false);
}
public JsonRecordIterator(final RecordDefinition recordDefinition, final Reader in,
final boolean single) {
this.recordDefinition = recordDefinition;
try {
this.iterator = new JsonMapIterator(in, single);
} catch (final IOException e) {
throw new IllegalArgumentException("Cannot open " + in, e);
}
}
@Override
protected void closeDo() {
FileUtil.closeSilent(this.iterator);
this.iterator = null;
this.recordDefinition = null;
}
@Override
protected Record getNext() throws NoSuchElementException {
if (this.iterator.hasNext()) {
final Map<String, Object> map = this.iterator.next();
return new ArrayRecord(this.recordDefinition, map);
} else {
throw new NoSuchElementException();
}
}
@Override
public RecordDefinition getRecordDefinition() {
return this.recordDefinition;
}
}