package org.embulk.spi;
import java.util.ArrayList;
import java.util.List;
import org.embulk.config.ConfigSource;
import org.embulk.config.Task;
import org.embulk.config.TaskSource;
import org.embulk.spi.Column;
import org.embulk.spi.Schema;
import org.embulk.spi.ColumnVisitor;
public class MockFormatterPlugin implements FormatterPlugin
{
public static List<List<Object>> records;
public interface PluginTask extends Task
{
}
@Override
public void transaction(ConfigSource config, Schema schema,
FormatterPlugin.Control control)
{
PluginTask task = config.loadConfig(PluginTask.class);
control.run(task.dump());
}
@Override
public PageOutput open(TaskSource taskSource, final Schema schema,
FileOutput output)
{
return new PageOutput()
{
public void add(Page page)
{
records = readPage(schema, page);
}
@Override
public void finish()
{
}
@Override
public void close()
{
}
};
}
public static List<List<Object>> readPage(final Schema schema, Page page)
{
List<List<Object>> records = new ArrayList<>();
try (final PageReader pageReader = new PageReader(schema)) {
pageReader.setPage(page);
while (pageReader.nextRecord()) {
final List<Object> record = new ArrayList<>();
schema.visitColumns(new ColumnVisitor()
{
public void booleanColumn(Column column)
{
if (!pageReader.isNull(column)) {
record.add(pageReader.getBoolean(column));
}
}
public void longColumn(Column column)
{
if (!pageReader.isNull(column)) {
record.add(pageReader.getLong(column));
}
}
public void doubleColumn(Column column)
{
if (!pageReader.isNull(column)) {
record.add(pageReader.getDouble(column));
}
}
public void stringColumn(Column column)
{
if (!pageReader.isNull(column)) {
record.add(pageReader.getString(column));
}
}
public void timestampColumn(Column column)
{
if (!pageReader.isNull(column)) {
record.add(pageReader.getTimestamp(column));
}
}
public void jsonColumn(Column column)
{
if (!pageReader.isNull(column)) {
record.add(pageReader.getJson(column));
}
}
});
records.add(record);
}
}
return records;
}
}