package com.ldbc.driver.generator;
import com.ldbc.driver.csv.charseeker.CharSeeker;
import com.ldbc.driver.csv.charseeker.Extractors;
import com.ldbc.driver.csv.charseeker.Mark;
import java.io.IOException;
import java.util.Iterator;
import static java.lang.String.format;
public class CsvEventStreamReaderBasicCharSeeker<BASE_EVENT_TYPE> implements Iterator<BASE_EVENT_TYPE>
{
private final EventDecoder<BASE_EVENT_TYPE> decoder;
private final CharSeeker charSeeker;
private final Extractors extractors;
private final Mark mark;
private final int[] columnDelimiters;
private BASE_EVENT_TYPE nextEvent = null;
public CsvEventStreamReaderBasicCharSeeker(
CharSeeker charSeeker,
Extractors extractors,
Mark mark,
EventDecoder<BASE_EVENT_TYPE> decoder,
int columnDelimiter )
{
this.charSeeker = charSeeker;
this.extractors = extractors;
this.mark = mark;
this.columnDelimiters = new int[]{columnDelimiter};
this.decoder = decoder;
}
@Override
public boolean hasNext()
{
if ( null == nextEvent )
{
nextEvent = getNextEvent();
}
return null != nextEvent;
}
@Override
public BASE_EVENT_TYPE next()
{
if ( null == nextEvent )
{
nextEvent = getNextEvent();
}
BASE_EVENT_TYPE result = nextEvent;
nextEvent = null;
return result;
}
BASE_EVENT_TYPE getNextEvent()
{
try
{
return decoder.decodeEvent( charSeeker, extractors, columnDelimiters, mark );
}
catch ( IOException e )
{
throw new GeneratorException( "Error while retrieving next event", e );
}
}
@Override
public void remove()
{
throw new UnsupportedOperationException(
format( "%s does not support remove()", getClass().getSimpleName() ) );
}
public interface EventDecoder<BASE_EVENT_TYPE>
{
BASE_EVENT_TYPE decodeEvent( CharSeeker charSeeker, Extractors extractors, int[] columnDelimiters, Mark mark )
throws IOException;
}
}