package org.embulk.spi; import org.embulk.config.Config; import org.embulk.config.ConfigSource; import org.embulk.config.Task; import org.embulk.config.TaskSource; import org.embulk.spi.json.JsonParser; import org.embulk.spi.time.Timestamp; import org.embulk.spi.type.Type; import org.embulk.spi.Column; import org.embulk.spi.Schema; import org.embulk.spi.SchemaConfig; import org.embulk.spi.PageOutput; public class MockParserPlugin implements ParserPlugin { public static boolean raiseException = false; public interface PluginTask extends Task { @Config("columns") public SchemaConfig getSchemaConfig(); } @Override public void transaction(ConfigSource config, Control control) { PluginTask task = config.loadConfig(PluginTask.class); control.run(task.dump(), task.getSchemaConfig().toSchema()); } @Override public void run(TaskSource taskSource, Schema schema, FileInput input, PageOutput output) { try (final PageBuilder pageBuilder = new PageBuilder( Exec.getBufferAllocator(), schema, output)) { while (input.nextFile()) { Buffer buffer = input.poll(); if (buffer != null) { for (Column column : schema.getColumns()) { Type type = column.getType(); switch (type.getName()) { case "boolean": pageBuilder.setBoolean(column, true); break; case "long": pageBuilder.setLong(column, 2L); break; case "double": pageBuilder.setDouble(column, 3.0D); break; case "string": pageBuilder.setString(column, "45"); break; case "timestamp": pageBuilder.setTimestamp(column, Timestamp.ofEpochMilli(678L)); break; case "json": pageBuilder.setJson( column, new JsonParser().parse("{\"_c1\":true,\"_c2\":10,\"_c3\":\"embulk\",\"_c4\":{\"k\":\"v\"}}") ); break; default: throw new IllegalStateException("Unknown type: " + type.getName()); } } pageBuilder.addRecord(); if (raiseException) { throw new RuntimeException("emulated exception"); } } } pageBuilder.finish(); } } }