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.
Files changed (204) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +13 -0
  3. data/Gemfile +3 -0
  4. data/Gemfile.lock +33 -0
  5. data/README.md +117 -0
  6. data/Rakefile +58 -0
  7. data/bin/embulk +63 -0
  8. data/build.gradle +149 -0
  9. data/embulk-cli/build.gradle +6 -0
  10. data/embulk-cli/pom.xml +94 -0
  11. data/embulk-cli/src/main/java/org/embulk/cli/Main.java +15 -0
  12. data/embulk-core/build.gradle +6 -0
  13. data/embulk-core/pom.xml +143 -0
  14. data/embulk-core/src/main/java/org/embulk/EmbulkService.java +39 -0
  15. data/embulk-core/src/main/java/org/embulk/command/Runner.java +199 -0
  16. data/embulk-core/src/main/java/org/embulk/command/TablePrinter.java +119 -0
  17. data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +26 -0
  18. data/embulk-core/src/main/java/org/embulk/config/Config.java +15 -0
  19. data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +15 -0
  20. data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
  21. data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +83 -0
  22. data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +28 -0
  23. data/embulk-core/src/main/java/org/embulk/config/DataSource.java +35 -0
  24. data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +208 -0
  25. data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +80 -0
  26. data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +20 -0
  27. data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +125 -0
  28. data/embulk-core/src/main/java/org/embulk/config/NextConfig.java +26 -0
  29. data/embulk-core/src/main/java/org/embulk/config/Task.java +10 -0
  30. data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +180 -0
  31. data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +343 -0
  32. data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +28 -0
  33. data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +37 -0
  34. data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
  35. data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +45 -0
  36. data/embulk-core/src/main/java/org/embulk/exec/ExecuteInterruptedException.java +10 -0
  37. data/embulk-core/src/main/java/org/embulk/exec/ExecuteResult.java +19 -0
  38. data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
  39. data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +16 -0
  40. data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +307 -0
  41. data/embulk-core/src/main/java/org/embulk/exec/LocalExecutor.java +274 -0
  42. data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +30 -0
  43. data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
  44. data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +58 -0
  45. data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +138 -0
  46. data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +27 -0
  47. data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +17 -0
  48. data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +116 -0
  49. data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
  50. data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +69 -0
  51. data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +100 -0
  52. data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +17 -0
  53. data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +92 -0
  54. data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +34 -0
  55. data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +6 -0
  56. data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +19 -0
  57. data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +47 -0
  58. data/embulk-core/src/main/java/org/embulk/plugin/SetThreadContextClassLoader.java +19 -0
  59. data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +113 -0
  60. data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +8 -0
  61. data/embulk-core/src/main/java/org/embulk/spi/Column.java +92 -0
  62. data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +79 -0
  63. data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +16 -0
  64. data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +16 -0
  65. data/embulk-core/src/main/java/org/embulk/spi/Exec.java +76 -0
  66. data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +6 -0
  67. data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +105 -0
  68. data/embulk-core/src/main/java/org/embulk/spi/Extension.java +42 -0
  69. data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +11 -0
  70. data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +19 -0
  71. data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +113 -0
  72. data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +13 -0
  73. data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +20 -0
  74. data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +167 -0
  75. data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +18 -0
  76. data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +9 -0
  77. data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +20 -0
  78. data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +21 -0
  79. data/embulk-core/src/main/java/org/embulk/spi/Page.java +45 -0
  80. data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +327 -0
  81. data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +47 -0
  82. data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +11 -0
  83. data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +227 -0
  84. data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
  85. data/embulk-core/src/main/java/org/embulk/spi/Schema.java +101 -0
  86. data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +52 -0
  87. data/embulk-core/src/main/java/org/embulk/spi/SchemaVisitor.java +14 -0
  88. data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +10 -0
  89. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +17 -0
  90. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +19 -0
  91. data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +17 -0
  92. data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +57 -0
  93. data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelper.java +8 -0
  94. data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelperFactory.java +6 -0
  95. data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +159 -0
  96. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +98 -0
  97. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +55 -0
  98. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +6 -0
  99. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +60 -0
  100. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +50 -0
  101. data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +55 -0
  102. data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +12 -0
  103. data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +12 -0
  104. data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +12 -0
  105. data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +12 -0
  106. data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +39 -0
  107. data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +15 -0
  108. data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +47 -0
  109. data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
  110. data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +55 -0
  111. data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +81 -0
  112. data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +81 -0
  113. data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +110 -0
  114. data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +94 -0
  115. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +111 -0
  116. data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +74 -0
  117. data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +118 -0
  118. data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +109 -0
  119. data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +52 -0
  120. data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +38 -0
  121. data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +102 -0
  122. data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +139 -0
  123. data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +110 -0
  124. data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +72 -0
  125. data/embulk-core/src/test/java/org/embulk/RandomManager.java +53 -0
  126. data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +23 -0
  127. data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +17 -0
  128. data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +114 -0
  129. data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +70 -0
  130. data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +57 -0
  131. data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +18 -0
  132. data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +63 -0
  133. data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +101 -0
  134. data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +73 -0
  135. data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +78 -0
  136. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +67 -0
  137. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +180 -0
  138. data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +192 -0
  139. data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +188 -0
  140. data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +301 -0
  141. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +116 -0
  142. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +52 -0
  143. data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
  144. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +132 -0
  145. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +123 -0
  146. data/embulk-standards/build.gradle +6 -0
  147. data/embulk-standards/pom.xml +68 -0
  148. data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +158 -0
  149. data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +233 -0
  150. data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +355 -0
  151. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +55 -0
  152. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +39 -0
  153. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +138 -0
  154. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +128 -0
  155. data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +46 -0
  156. data/embulk-standards/src/main/java/org/embulk/standards/S3FileInputPlugin.java +238 -0
  157. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +16 -0
  158. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +44 -0
  159. data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +71 -0
  160. data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +1 -0
  161. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +69 -0
  162. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +291 -0
  163. data/embulk-standards/src/test/java/org/embulk/standards/TestS3FileInputPlugin.java +43 -0
  164. data/embulk.gemspec +27 -0
  165. data/examples/config.yml +34 -0
  166. data/examples/csv/sample.csv.gz +0 -0
  167. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  168. data/gradle/wrapper/gradle-wrapper.properties +6 -0
  169. data/gradlew +164 -0
  170. data/gradlew.bat +90 -0
  171. data/lib/embulk.rb +16 -0
  172. data/lib/embulk/buffer.rb +17 -0
  173. data/lib/embulk/column.rb +47 -0
  174. data/lib/embulk/command/embulk.rb +39 -0
  175. data/lib/embulk/command/embulk_example.rb +32 -0
  176. data/lib/embulk/command/embulk_generate_bin.rb +62 -0
  177. data/lib/embulk/command/embulk_run.rb +243 -0
  178. data/lib/embulk/data/bundle/.bundle/config +3 -0
  179. data/lib/embulk/data/bundle/Gemfile +31 -0
  180. data/lib/embulk/data/bundle/Gemfile.lock +8 -0
  181. data/lib/embulk/data/bundle/embulk/input_example.rb +40 -0
  182. data/lib/embulk/data/bundle/embulk/output_example.rb +51 -0
  183. data/lib/embulk/data_source.rb +66 -0
  184. data/lib/embulk/error.rb +5 -0
  185. data/lib/embulk/guess_charset.rb +26 -0
  186. data/lib/embulk/guess_csv.rb +195 -0
  187. data/lib/embulk/guess_gzip.rb +18 -0
  188. data/lib/embulk/guess_newline.rb +20 -0
  189. data/lib/embulk/guess_plugin.rb +113 -0
  190. data/lib/embulk/input_plugin.rb +53 -0
  191. data/lib/embulk/java/bootstrap.rb +12 -0
  192. data/lib/embulk/java/imports.rb +26 -0
  193. data/lib/embulk/java/time_helper.rb +77 -0
  194. data/lib/embulk/output_plugin.rb +104 -0
  195. data/lib/embulk/page.rb +28 -0
  196. data/lib/embulk/page_builder.rb +22 -0
  197. data/lib/embulk/plugin.rb +152 -0
  198. data/lib/embulk/plugin_registry.rb +70 -0
  199. data/lib/embulk/schema.rb +85 -0
  200. data/lib/embulk/time_format_guess.rb +331 -0
  201. data/lib/embulk/version.rb +3 -0
  202. data/pom.xml +533 -0
  203. data/settings.gradle +5 -0
  204. metadata +370 -0
@@ -0,0 +1,8 @@
1
+ package org.embulk.spi;
2
+
3
+ public interface BufferAllocator
4
+ {
5
+ public Buffer allocate();
6
+
7
+ public Buffer allocate(int minimumCapacity);
8
+ }
@@ -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,6 @@
1
+ package org.embulk.spi;
2
+
3
+ public interface ExecAction <T>
4
+ {
5
+ public T run();
6
+ }
@@ -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
+ }