package org.embulk.standards;
import java.util.List;
import org.embulk.config.ConfigSource;
import org.embulk.config.TaskSource;
import org.embulk.config.ConfigDiff;
import org.embulk.config.TaskReport;
import org.embulk.config.Task;
import org.embulk.spi.time.TimestampFormatter;
import org.embulk.spi.Schema;
import org.embulk.spi.Page;
import org.embulk.spi.Exec;
import org.embulk.spi.OutputPlugin;
import org.embulk.spi.TransactionalPageOutput;
import org.embulk.spi.PageReader;
import org.embulk.spi.util.PagePrinter;
public class StdoutOutputPlugin
implements OutputPlugin
{
public interface PluginTask
extends Task, TimestampFormatter.FormatterTask
{
}
@Override
public ConfigDiff transaction(ConfigSource config,
Schema schema, int taskCount,
OutputPlugin.Control control)
{
final PluginTask task = config.loadConfig(PluginTask.class);
return resume(task.dump(), schema, taskCount, control);
}
@Override
public ConfigDiff resume(TaskSource taskSource,
Schema schema, int taskCount,
OutputPlugin.Control control)
{
control.run(taskSource);
return Exec.newConfigDiff();
}
public void cleanup(TaskSource taskSource,
Schema schema, int taskCount,
List<TaskReport> successTaskReports)
{ }
@Override
public TransactionalPageOutput open(TaskSource taskSource, final Schema schema,
int taskIndex)
{
final PluginTask task = taskSource.loadTask(PluginTask.class);
return new TransactionalPageOutput() {
private final PageReader reader = new PageReader(schema);
private final PagePrinter printer = new PagePrinter(schema, task);
public void add(Page page)
{
reader.setPage(page);
while (reader.nextRecord()) {
System.out.println(printer.printRecord(reader, ","));
}
}
public void finish()
{
System.out.flush();
}
public void close()
{
reader.close();
}
public void abort() { }
public TaskReport commit()
{
return Exec.newTaskReport();
}
};
}
}