package org.embulk.exec; import org.embulk.config.ConfigDiff; import org.embulk.config.ConfigSource; import org.embulk.config.TaskReport; import org.embulk.config.TaskSource; import org.embulk.spi.Buffer; import org.embulk.spi.Exec; import org.embulk.spi.FileInputPlugin; import org.embulk.spi.TransactionalFileInput; import java.util.List; public class BufferFileInputPlugin implements FileInputPlugin { private Buffer buffer; public BufferFileInputPlugin(Buffer buffer) { this.buffer = buffer; } public ConfigDiff transaction(ConfigSource config, FileInputPlugin.Control control) { control.run(Exec.newTaskSource(), 1); return Exec.newConfigDiff(); } public ConfigDiff resume(TaskSource taskSource, int taskCount, FileInputPlugin.Control control) { throw new UnsupportedOperationException(); } public void cleanup(TaskSource taskSource, int taskCount, List<TaskReport> successTaskReports) { if (buffer != null) { buffer.release(); buffer = null; } } public TransactionalFileInput open(TaskSource taskSource, int taskIndex) { return new BufferTransactionalFileInput(buffer); } private static class BufferTransactionalFileInput implements TransactionalFileInput { private Buffer buffer; public BufferTransactionalFileInput(Buffer buffer) { this.buffer = buffer; } @Override public Buffer poll() { Buffer b = buffer; buffer = null; return b; } @Override public boolean nextFile() { return buffer != null; } @Override public void close() { } @Override public void abort() { } @Override public TaskReport commit() { return null; } } }