embulk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.gitignore +13 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +33 -0
- data/README.md +117 -0
- data/Rakefile +58 -0
- data/bin/embulk +63 -0
- data/build.gradle +149 -0
- data/embulk-cli/build.gradle +6 -0
- data/embulk-cli/pom.xml +94 -0
- data/embulk-cli/src/main/java/org/embulk/cli/Main.java +15 -0
- data/embulk-core/build.gradle +6 -0
- data/embulk-core/pom.xml +143 -0
- data/embulk-core/src/main/java/org/embulk/EmbulkService.java +39 -0
- data/embulk-core/src/main/java/org/embulk/command/Runner.java +199 -0
- data/embulk-core/src/main/java/org/embulk/command/TablePrinter.java +119 -0
- data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +26 -0
- data/embulk-core/src/main/java/org/embulk/config/Config.java +15 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +15 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +83 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +28 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSource.java +35 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +208 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +80 -0
- data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +125 -0
- data/embulk-core/src/main/java/org/embulk/config/NextConfig.java +26 -0
- data/embulk-core/src/main/java/org/embulk/config/Task.java +10 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +180 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +343 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +28 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +37 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +45 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecuteInterruptedException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecuteResult.java +19 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
- data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +16 -0
- data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +307 -0
- data/embulk-core/src/main/java/org/embulk/exec/LocalExecutor.java +274 -0
- data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +30 -0
- data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +58 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +138 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +27 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +17 -0
- data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +116 -0
- data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +69 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +100 -0
- data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +17 -0
- data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +92 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +34 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +6 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +19 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +47 -0
- data/embulk-core/src/main/java/org/embulk/plugin/SetThreadContextClassLoader.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +8 -0
- data/embulk-core/src/main/java/org/embulk/spi/Column.java +92 -0
- data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +79 -0
- data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +16 -0
- data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +16 -0
- data/embulk-core/src/main/java/org/embulk/spi/Exec.java +76 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +105 -0
- data/embulk-core/src/main/java/org/embulk/spi/Extension.java +42 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +11 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +13 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +20 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +167 -0
- data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +9 -0
- data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +20 -0
- data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +21 -0
- data/embulk-core/src/main/java/org/embulk/spi/Page.java +45 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +327 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +47 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +11 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +227 -0
- data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/Schema.java +101 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaVisitor.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +57 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelper.java +8 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelperFactory.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +159 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +98 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +60 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +50 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +39 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +15 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +47 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +110 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +94 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +111 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +74 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +118 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +109 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +38 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +102 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +139 -0
- data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +110 -0
- data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +72 -0
- data/embulk-core/src/test/java/org/embulk/RandomManager.java +53 -0
- data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +23 -0
- data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +17 -0
- data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +114 -0
- data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +70 -0
- data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +57 -0
- data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +18 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +63 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +101 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +73 -0
- data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +78 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +67 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +180 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +192 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +188 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +301 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +116 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +52 -0
- data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
- data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +132 -0
- data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +123 -0
- data/embulk-standards/build.gradle +6 -0
- data/embulk-standards/pom.xml +68 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +158 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +233 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +355 -0
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +55 -0
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +39 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +138 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +128 -0
- data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +46 -0
- data/embulk-standards/src/main/java/org/embulk/standards/S3FileInputPlugin.java +238 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +16 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +44 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +71 -0
- data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +1 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +69 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +291 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestS3FileInputPlugin.java +43 -0
- data/embulk.gemspec +27 -0
- data/examples/config.yml +34 -0
- data/examples/csv/sample.csv.gz +0 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/gradlew +164 -0
- data/gradlew.bat +90 -0
- data/lib/embulk.rb +16 -0
- data/lib/embulk/buffer.rb +17 -0
- data/lib/embulk/column.rb +47 -0
- data/lib/embulk/command/embulk.rb +39 -0
- data/lib/embulk/command/embulk_example.rb +32 -0
- data/lib/embulk/command/embulk_generate_bin.rb +62 -0
- data/lib/embulk/command/embulk_run.rb +243 -0
- data/lib/embulk/data/bundle/.bundle/config +3 -0
- data/lib/embulk/data/bundle/Gemfile +31 -0
- data/lib/embulk/data/bundle/Gemfile.lock +8 -0
- data/lib/embulk/data/bundle/embulk/input_example.rb +40 -0
- data/lib/embulk/data/bundle/embulk/output_example.rb +51 -0
- data/lib/embulk/data_source.rb +66 -0
- data/lib/embulk/error.rb +5 -0
- data/lib/embulk/guess_charset.rb +26 -0
- data/lib/embulk/guess_csv.rb +195 -0
- data/lib/embulk/guess_gzip.rb +18 -0
- data/lib/embulk/guess_newline.rb +20 -0
- data/lib/embulk/guess_plugin.rb +113 -0
- data/lib/embulk/input_plugin.rb +53 -0
- data/lib/embulk/java/bootstrap.rb +12 -0
- data/lib/embulk/java/imports.rb +26 -0
- data/lib/embulk/java/time_helper.rb +77 -0
- data/lib/embulk/output_plugin.rb +104 -0
- data/lib/embulk/page.rb +28 -0
- data/lib/embulk/page_builder.rb +22 -0
- data/lib/embulk/plugin.rb +152 -0
- data/lib/embulk/plugin_registry.rb +70 -0
- data/lib/embulk/schema.rb +85 -0
- data/lib/embulk/time_format_guess.rb +331 -0
- data/lib/embulk/version.rb +3 -0
- data/pom.xml +533 -0
- data/settings.gradle +5 -0
- metadata +370 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import com.google.common.base.Objects;
|
|
4
|
+
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
5
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
6
|
+
import org.embulk.spi.type.Type;
|
|
7
|
+
import org.embulk.spi.type.BooleanType;
|
|
8
|
+
import org.embulk.spi.type.DoubleType;
|
|
9
|
+
import org.embulk.spi.type.LongType;
|
|
10
|
+
import org.embulk.spi.type.TimestampType;
|
|
11
|
+
import org.embulk.spi.type.StringType;
|
|
12
|
+
|
|
13
|
+
public class Column
|
|
14
|
+
{
|
|
15
|
+
private final int index;
|
|
16
|
+
private final String name;
|
|
17
|
+
private final Type type;
|
|
18
|
+
|
|
19
|
+
@JsonCreator
|
|
20
|
+
public Column(
|
|
21
|
+
@JsonProperty("index") int index,
|
|
22
|
+
@JsonProperty("name") String name,
|
|
23
|
+
@JsonProperty("type") Type type)
|
|
24
|
+
{
|
|
25
|
+
this.index = index;
|
|
26
|
+
this.name = name;
|
|
27
|
+
this.type = type;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@JsonProperty("index")
|
|
31
|
+
public int getIndex()
|
|
32
|
+
{
|
|
33
|
+
return index;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@JsonProperty("name")
|
|
37
|
+
public String getName()
|
|
38
|
+
{
|
|
39
|
+
return name;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@JsonProperty("type")
|
|
43
|
+
public Type getType()
|
|
44
|
+
{
|
|
45
|
+
return type;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public void visit(SchemaVisitor visitor)
|
|
49
|
+
{
|
|
50
|
+
if (type instanceof BooleanType) {
|
|
51
|
+
visitor.booleanColumn(this);
|
|
52
|
+
} else if (type instanceof LongType) {
|
|
53
|
+
visitor.longColumn(this);
|
|
54
|
+
} else if (type instanceof DoubleType) {
|
|
55
|
+
visitor.doubleColumn(this);
|
|
56
|
+
} else if (type instanceof StringType) {
|
|
57
|
+
visitor.stringColumn(this);
|
|
58
|
+
} else if (type instanceof TimestampType) {
|
|
59
|
+
visitor.timestampColumn(this);
|
|
60
|
+
} else {
|
|
61
|
+
assert(false);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@Override
|
|
66
|
+
public boolean equals(Object obj)
|
|
67
|
+
{
|
|
68
|
+
if (this == obj) {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
if (!(obj instanceof Column)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
Column other = (Column) obj;
|
|
75
|
+
return Objects.equal(index, other.index) &&
|
|
76
|
+
Objects.equal(name, other.name) &&
|
|
77
|
+
Objects.equal(type, other.type);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@Override
|
|
81
|
+
public int hashCode()
|
|
82
|
+
{
|
|
83
|
+
return Objects.hashCode(index, name, type);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@Override
|
|
87
|
+
public String toString()
|
|
88
|
+
{
|
|
89
|
+
return String.format("Column{index:%d, name:%s, type:%s}",
|
|
90
|
+
getIndex(), getName(), getType().getName());
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import com.google.common.base.Objects;
|
|
4
|
+
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
5
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
6
|
+
import org.embulk.spi.type.Type;
|
|
7
|
+
import org.embulk.spi.type.TimestampType;
|
|
8
|
+
|
|
9
|
+
public class ColumnConfig
|
|
10
|
+
{
|
|
11
|
+
private final String name;
|
|
12
|
+
private final Type type;
|
|
13
|
+
private final String format;
|
|
14
|
+
|
|
15
|
+
@JsonCreator
|
|
16
|
+
public ColumnConfig(
|
|
17
|
+
@JsonProperty("name") String name,
|
|
18
|
+
@JsonProperty("type") Type type,
|
|
19
|
+
@JsonProperty("format") String format)
|
|
20
|
+
{
|
|
21
|
+
this.name = name;
|
|
22
|
+
this.type = type;
|
|
23
|
+
this.format = format;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@JsonProperty("name")
|
|
27
|
+
public String getName()
|
|
28
|
+
{
|
|
29
|
+
return name;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@JsonProperty("type")
|
|
33
|
+
public Type getType()
|
|
34
|
+
{
|
|
35
|
+
return type;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@JsonProperty("format")
|
|
39
|
+
public String getFormat()
|
|
40
|
+
{
|
|
41
|
+
return format;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public Column toColumn(int index)
|
|
45
|
+
{
|
|
46
|
+
if (type instanceof TimestampType && format != null) {
|
|
47
|
+
return new Column(index, name, ((TimestampType) type).withFormat(format));
|
|
48
|
+
} else {
|
|
49
|
+
return new Column(index, name, type);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@Override
|
|
54
|
+
public boolean equals(Object obj)
|
|
55
|
+
{
|
|
56
|
+
if (this == obj) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
if (!(obj instanceof ColumnConfig)) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
ColumnConfig other = (ColumnConfig) obj;
|
|
63
|
+
return Objects.equal(this.name, other.name) &&
|
|
64
|
+
Objects.equal(type, other.type);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@Override
|
|
68
|
+
public int hashCode()
|
|
69
|
+
{
|
|
70
|
+
return Objects.hashCode(name, type);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@Override
|
|
74
|
+
public String toString()
|
|
75
|
+
{
|
|
76
|
+
return String.format("ColumnConfig[%s, %s]",
|
|
77
|
+
getName(), getType());
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import org.embulk.config.TaskSource;
|
|
4
|
+
import org.embulk.config.ConfigSource;
|
|
5
|
+
|
|
6
|
+
public interface DecoderPlugin
|
|
7
|
+
{
|
|
8
|
+
public interface Control
|
|
9
|
+
{
|
|
10
|
+
public void run(TaskSource taskSource);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public void transaction(ConfigSource config, DecoderPlugin.Control control);
|
|
14
|
+
|
|
15
|
+
public FileInput open(TaskSource taskSource, FileInput input);
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import org.embulk.config.TaskSource;
|
|
4
|
+
import org.embulk.config.ConfigSource;
|
|
5
|
+
|
|
6
|
+
public interface EncoderPlugin
|
|
7
|
+
{
|
|
8
|
+
public interface Control
|
|
9
|
+
{
|
|
10
|
+
public void run(TaskSource taskSource);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public void transaction(ConfigSource config, EncoderPlugin.Control control);
|
|
14
|
+
|
|
15
|
+
public FileOutput open(TaskSource taskSource, FileOutput fileOutput);
|
|
16
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import org.slf4j.Logger;
|
|
4
|
+
import org.embulk.config.Task;
|
|
5
|
+
import org.embulk.config.CommitReport;
|
|
6
|
+
import org.embulk.config.NextConfig;
|
|
7
|
+
import org.embulk.config.ConfigSource;
|
|
8
|
+
import org.embulk.config.TaskSource;
|
|
9
|
+
import org.embulk.plugin.PluginType;
|
|
10
|
+
|
|
11
|
+
public class Exec
|
|
12
|
+
{
|
|
13
|
+
private static final InheritableThreadLocal<ExecSession> session = new InheritableThreadLocal<ExecSession>();
|
|
14
|
+
|
|
15
|
+
private Exec() { }
|
|
16
|
+
|
|
17
|
+
public static <T> T doWith(ExecSession session, ExecAction<T> action) throws Exception
|
|
18
|
+
{
|
|
19
|
+
Exec.session.set(session);
|
|
20
|
+
try {
|
|
21
|
+
return action.run();
|
|
22
|
+
} finally {
|
|
23
|
+
Exec.session.set(null);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public static ExecSession session()
|
|
28
|
+
{
|
|
29
|
+
ExecSession session = Exec.session.get();
|
|
30
|
+
if (session == null) {
|
|
31
|
+
new NullPointerException().printStackTrace();
|
|
32
|
+
throw new NullPointerException("Exec is used outside of Exec.doWith");
|
|
33
|
+
}
|
|
34
|
+
return session;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public static Logger getLogger(String name)
|
|
38
|
+
{
|
|
39
|
+
return session().getLogger(name);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public static Logger getLogger(Class<?> name)
|
|
43
|
+
{
|
|
44
|
+
return session().getLogger(name);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public static BufferAllocator getBufferAllocator()
|
|
48
|
+
{
|
|
49
|
+
return session().getBufferAllocator();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public static <T> T newPlugin(Class<T> iface, PluginType type)
|
|
53
|
+
{
|
|
54
|
+
return session().newPlugin(iface, type);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public static CommitReport newCommitReport()
|
|
58
|
+
{
|
|
59
|
+
return session().newCommitReport();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public static NextConfig newNextConfig()
|
|
63
|
+
{
|
|
64
|
+
return session().newNextConfig();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public static ConfigSource newConfigSource()
|
|
68
|
+
{
|
|
69
|
+
return session().newConfigSource();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public static TaskSource newTaskSource()
|
|
73
|
+
{
|
|
74
|
+
return session().newTaskSource();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import org.joda.time.DateTimeZone;
|
|
4
|
+
import org.slf4j.Logger;
|
|
5
|
+
import org.slf4j.ILoggerFactory;
|
|
6
|
+
import com.google.inject.Injector;
|
|
7
|
+
import org.embulk.config.ModelManager;
|
|
8
|
+
import org.embulk.config.CommitReport;
|
|
9
|
+
import org.embulk.config.NextConfig;
|
|
10
|
+
import org.embulk.config.ConfigSource;
|
|
11
|
+
import org.embulk.config.TaskSource;
|
|
12
|
+
import org.embulk.config.DataSourceImpl;
|
|
13
|
+
import org.embulk.plugin.PluginType;
|
|
14
|
+
import org.embulk.plugin.PluginManager;
|
|
15
|
+
import org.embulk.spi.time.Timestamp;
|
|
16
|
+
import org.embulk.spi.time.TimestampFormatter;
|
|
17
|
+
import org.embulk.spi.time.TimestampFormatter.FormatterTask;
|
|
18
|
+
|
|
19
|
+
public class ExecSession
|
|
20
|
+
{
|
|
21
|
+
private final Injector injector;
|
|
22
|
+
private final ILoggerFactory loggerFactory;
|
|
23
|
+
private final ModelManager modelManager;
|
|
24
|
+
private final PluginManager pluginManager;
|
|
25
|
+
private final BufferAllocator bufferAllocator;
|
|
26
|
+
private final Timestamp transactionTime;
|
|
27
|
+
private final DateTimeZone transactionTimeZone;
|
|
28
|
+
|
|
29
|
+
public ExecSession(Injector injector, ConfigSource execConfig)
|
|
30
|
+
{
|
|
31
|
+
super();
|
|
32
|
+
this.injector = injector;
|
|
33
|
+
this.loggerFactory = injector.getInstance(ILoggerFactory.class);
|
|
34
|
+
this.modelManager = injector.getInstance(ModelManager.class);
|
|
35
|
+
this.pluginManager = injector.getInstance(PluginManager.class);
|
|
36
|
+
this.bufferAllocator = injector.getInstance(BufferAllocator.class);
|
|
37
|
+
|
|
38
|
+
this.transactionTime = execConfig.get(Timestamp.class, "transaction_time",
|
|
39
|
+
Timestamp.ofEpochMilli(System.currentTimeMillis())); // TODO get nanoseconds for default
|
|
40
|
+
this.transactionTimeZone = execConfig.get(DateTimeZone.class, "transaction_time_zone", DateTimeZone.UTC);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public Injector getInjector()
|
|
44
|
+
{
|
|
45
|
+
return injector;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public Timestamp getTransactionTime()
|
|
49
|
+
{
|
|
50
|
+
return transactionTime;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public DateTimeZone getTransactionTimeZone()
|
|
54
|
+
{
|
|
55
|
+
return transactionTimeZone;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public Logger getLogger(String name)
|
|
59
|
+
{
|
|
60
|
+
return loggerFactory.getLogger(name);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public Logger getLogger(Class<?> name)
|
|
64
|
+
{
|
|
65
|
+
return loggerFactory.getLogger(name.getName());
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public BufferAllocator getBufferAllocator()
|
|
69
|
+
{
|
|
70
|
+
return bufferAllocator;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public <T> T newPlugin(Class<T> iface, PluginType type)
|
|
74
|
+
{
|
|
75
|
+
return pluginManager.newPlugin(iface, type);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public CommitReport newCommitReport()
|
|
79
|
+
{
|
|
80
|
+
return new DataSourceImpl(modelManager);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public NextConfig newNextConfig()
|
|
84
|
+
{
|
|
85
|
+
return new DataSourceImpl(modelManager);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public ConfigSource newConfigSource()
|
|
89
|
+
{
|
|
90
|
+
return new DataSourceImpl(modelManager);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public TaskSource newTaskSource()
|
|
94
|
+
{
|
|
95
|
+
return new DataSourceImpl(modelManager);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public TimestampFormatter newTimestampFormatter(String format, DateTimeZone timezone)
|
|
99
|
+
{
|
|
100
|
+
ConfigSource config = Exec.newConfigSource();
|
|
101
|
+
config.set("timezone", timezone.getID());
|
|
102
|
+
FormatterTask formatterTask = config.loadConfig(FormatterTask.class);
|
|
103
|
+
return new TimestampFormatter(format, formatterTask);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import com.google.inject.Module;
|
|
5
|
+
import org.embulk.config.ConfigSource;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Extension is a module to extend the execution framework using Guice.
|
|
9
|
+
* Unlike plugins, extensions can overwrite or add core components such as
|
|
10
|
+
* BufferManager, PluginSource, etc.
|
|
11
|
+
* Extension is not designed for users but for framework developpers to make
|
|
12
|
+
* core components loosely coupled.
|
|
13
|
+
*
|
|
14
|
+
* An example extention to add a custom PluginSource will be as following:
|
|
15
|
+
*
|
|
16
|
+
* class MyPluginSourceExtension
|
|
17
|
+
* implements Extension, Module
|
|
18
|
+
* {
|
|
19
|
+
* public static class MyPluginSource
|
|
20
|
+
* implements PluginSource
|
|
21
|
+
* {
|
|
22
|
+
* // ...
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* @Override
|
|
26
|
+
* public void configure(Binder binder)
|
|
27
|
+
* {
|
|
28
|
+
* Multibinder<PluginSource> multibinder = Multibinder.newSetBinder(binder, PluginSource.class);
|
|
29
|
+
* multibinder.addBinding().to(MyPluginSource.class);
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* @Override
|
|
33
|
+
* public List<Module> getModules()
|
|
34
|
+
* {
|
|
35
|
+
* return ImmutableList.<Module>of(this);
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
*/
|
|
39
|
+
public interface Extension
|
|
40
|
+
{
|
|
41
|
+
public List<Module> getModules(ConfigSource systemConfig);
|
|
42
|
+
}
|