package org.embulk.test;
import org.embulk.config.ConfigDiff;
import org.embulk.config.ConfigSource;
import org.embulk.config.Task;
import org.embulk.config.TaskReport;
import org.embulk.config.TaskSource;
import org.embulk.exec.PreviewResult;
import org.embulk.spi.Exec;
import org.embulk.spi.InputPlugin;
import org.embulk.spi.Page;
import org.embulk.spi.PageOutput;
import org.embulk.spi.Schema;
import java.util.List;
import static com.google.common.base.Preconditions.checkState;
/**
* This plugin is used for TestingEmbulk.InputBuilder.preview().
*/
public final class PreviewResultInputPlugin
implements InputPlugin
{
private static PreviewResult previewResult;
public static void setPreviewResult(PreviewResult result)
{
previewResult = result;
}
@Override
public ConfigDiff transaction(ConfigSource config, Control control)
{
checkState(previewResult != null, "PreviewResult object must be set");
return resume(config.loadConfig(Task.class).dump(), previewResult.getSchema(), 1, control);
}
@Override
public ConfigDiff resume(TaskSource taskSource, Schema schema, int taskCount, Control control)
{
control.run(taskSource, schema, taskCount);
return Exec.newConfigDiff();
}
@Override
public void cleanup(TaskSource taskSource, Schema schema, int taskCount, List<TaskReport> successTaskReports)
{
}
@Override
public TaskReport run(TaskSource taskSource, Schema schema, int taskIndex, PageOutput output)
{
for (Page page : previewResult.getPages()) {
output.add(page);
}
return Exec.newTaskReport();
}
@Override
public ConfigDiff guess(ConfigSource config)
{
return Exec.newConfigDiff();
}
}