embulk 0.7.0-java

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 (393) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +18 -0
  5. data/COPYING +14 -0
  6. data/Gemfile +2 -0
  7. data/Gemfile.lock +31 -0
  8. data/README.md +206 -0
  9. data/Rakefile +26 -0
  10. data/appveyor.yml +20 -0
  11. data/bin/embulk +106 -0
  12. data/build.gradle +338 -0
  13. data/embulk-cli/build.gradle +6 -0
  14. data/embulk-cli/src/main/java/org/embulk/cli/Main.java +22 -0
  15. data/embulk-cli/src/main/sh/selfrun.sh +158 -0
  16. data/embulk-cli/src/test/java/org/embulk/cli/DummyMain.java +23 -0
  17. data/embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java +281 -0
  18. data/embulk-core/build.gradle +59 -0
  19. data/embulk-core/src/main/java/org/embulk/EmbulkEmbed.java +315 -0
  20. data/embulk-core/src/main/java/org/embulk/EmbulkService.java +76 -0
  21. data/embulk-core/src/main/java/org/embulk/command/PreviewPrinter.java +84 -0
  22. data/embulk-core/src/main/java/org/embulk/command/TablePreviewPrinter.java +107 -0
  23. data/embulk-core/src/main/java/org/embulk/command/VerticalPreviewPrinter.java +47 -0
  24. data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +33 -0
  25. data/embulk-core/src/main/java/org/embulk/config/Config.java +15 -0
  26. data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +15 -0
  27. data/embulk-core/src/main/java/org/embulk/config/ConfigDiff.java +29 -0
  28. data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
  29. data/embulk-core/src/main/java/org/embulk/config/ConfigInject.java +14 -0
  30. data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +141 -0
  31. data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +31 -0
  32. data/embulk-core/src/main/java/org/embulk/config/DataSource.java +39 -0
  33. data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +231 -0
  34. data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +84 -0
  35. data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +20 -0
  36. data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +123 -0
  37. data/embulk-core/src/main/java/org/embulk/config/Task.java +10 -0
  38. data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +180 -0
  39. data/embulk-core/src/main/java/org/embulk/config/TaskReport.java +29 -0
  40. data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +345 -0
  41. data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +31 -0
  42. data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +38 -0
  43. data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
  44. data/embulk-core/src/main/java/org/embulk/exec/BulkLoader.java +652 -0
  45. data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +52 -0
  46. data/embulk-core/src/main/java/org/embulk/exec/ExecutionInterruptedException.java +10 -0
  47. data/embulk-core/src/main/java/org/embulk/exec/ExecutionResult.java +26 -0
  48. data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
  49. data/embulk-core/src/main/java/org/embulk/exec/ForGuess.java +16 -0
  50. data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +16 -0
  51. data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +373 -0
  52. data/embulk-core/src/main/java/org/embulk/exec/LocalExecutorPlugin.java +129 -0
  53. data/embulk-core/src/main/java/org/embulk/exec/LocalThreadExecutor.java +34 -0
  54. data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +60 -0
  55. data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
  56. data/embulk-core/src/main/java/org/embulk/exec/PartialExecutionException.java +18 -0
  57. data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +77 -0
  58. data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +183 -0
  59. data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +27 -0
  60. data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +17 -0
  61. data/embulk-core/src/main/java/org/embulk/exec/ResumeState.java +100 -0
  62. data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +136 -0
  63. data/embulk-core/src/main/java/org/embulk/exec/SetCurrentThreadName.java +19 -0
  64. data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
  65. data/embulk-core/src/main/java/org/embulk/exec/TempFileAllocator.java +35 -0
  66. data/embulk-core/src/main/java/org/embulk/guice/Bootstrap.java +157 -0
  67. data/embulk-core/src/main/java/org/embulk/guice/CloseableInjector.java +22 -0
  68. data/embulk-core/src/main/java/org/embulk/guice/InjectorProxy.java +145 -0
  69. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjector.java +26 -0
  70. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjectorProxy.java +61 -0
  71. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleManager.java +187 -0
  72. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethods.java +89 -0
  73. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethodsMap.java +38 -0
  74. data/embulk-core/src/main/java/org/embulk/guice/LifeCycleModule.java +97 -0
  75. data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +72 -0
  76. data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +119 -0
  77. data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +17 -0
  78. data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +96 -0
  79. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java +168 -0
  80. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderFactory.java +9 -0
  81. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderModule.java +71 -0
  82. data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +78 -0
  83. data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +6 -0
  84. data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +19 -0
  85. data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +47 -0
  86. data/embulk-core/src/main/java/org/embulk/plugin/compat/InputPluginWrapper.java +102 -0
  87. data/embulk-core/src/main/java/org/embulk/plugin/compat/PluginWrappers.java +30 -0
  88. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileInputWrapper.java +96 -0
  89. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileOutputWrapper.java +102 -0
  90. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalPageOutputWrapper.java +95 -0
  91. data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +148 -0
  92. data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +8 -0
  93. data/embulk-core/src/main/java/org/embulk/spi/Column.java +92 -0
  94. data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +112 -0
  95. data/embulk-core/src/main/java/org/embulk/spi/ColumnVisitor.java +14 -0
  96. data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +16 -0
  97. data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +16 -0
  98. data/embulk-core/src/main/java/org/embulk/spi/Exec.java +113 -0
  99. data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +6 -0
  100. data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +217 -0
  101. data/embulk-core/src/main/java/org/embulk/spi/ExecutorPlugin.java +19 -0
  102. data/embulk-core/src/main/java/org/embulk/spi/Extension.java +44 -0
  103. data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +11 -0
  104. data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +30 -0
  105. data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +162 -0
  106. data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +13 -0
  107. data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +28 -0
  108. data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +202 -0
  109. data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +18 -0
  110. data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +18 -0
  111. data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +9 -0
  112. data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +33 -0
  113. data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +29 -0
  114. data/embulk-core/src/main/java/org/embulk/spi/Page.java +51 -0
  115. data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +338 -0
  116. data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +47 -0
  117. data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +11 -0
  118. data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +226 -0
  119. data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
  120. data/embulk-core/src/main/java/org/embulk/spi/ProcessState.java +10 -0
  121. data/embulk-core/src/main/java/org/embulk/spi/ProcessTask.java +117 -0
  122. data/embulk-core/src/main/java/org/embulk/spi/Schema.java +134 -0
  123. data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +93 -0
  124. data/embulk-core/src/main/java/org/embulk/spi/SchemaConfigException.java +22 -0
  125. data/embulk-core/src/main/java/org/embulk/spi/TaskState.java +81 -0
  126. data/embulk-core/src/main/java/org/embulk/spi/TempFileException.java +19 -0
  127. data/embulk-core/src/main/java/org/embulk/spi/TempFileSpace.java +87 -0
  128. data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +10 -0
  129. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +17 -0
  130. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +19 -0
  131. data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +17 -0
  132. data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +55 -0
  133. data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelper.java +8 -0
  134. data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelperFactory.java +6 -0
  135. data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +159 -0
  136. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +100 -0
  137. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +97 -0
  138. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +10 -0
  139. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +104 -0
  140. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +49 -0
  141. data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +58 -0
  142. data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +12 -0
  143. data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +12 -0
  144. data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +12 -0
  145. data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +12 -0
  146. data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +41 -0
  147. data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +15 -0
  148. data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +44 -0
  149. data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
  150. data/embulk-core/src/main/java/org/embulk/spi/unit/ByteSize.java +156 -0
  151. data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFile.java +106 -0
  152. data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFileSerDe.java +113 -0
  153. data/embulk-core/src/main/java/org/embulk/spi/unit/ToString.java +54 -0
  154. data/embulk-core/src/main/java/org/embulk/spi/unit/ToStringMap.java +34 -0
  155. data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +55 -0
  156. data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +81 -0
  157. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnNotFoundException.java +10 -0
  158. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetter.java +18 -0
  159. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetterFactory.java +94 -0
  160. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicPageBuilder.java +161 -0
  161. data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +81 -0
  162. data/embulk-core/src/main/java/org/embulk/spi/util/Executors.java +95 -0
  163. data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +111 -0
  164. data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +119 -0
  165. data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +100 -0
  166. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +190 -0
  167. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +25 -0
  168. data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +65 -0
  169. data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +118 -0
  170. data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +123 -0
  171. data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +52 -0
  172. data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +38 -0
  173. data/embulk-core/src/main/java/org/embulk/spi/util/OutputStreamFileOutput.java +88 -0
  174. data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +102 -0
  175. data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +139 -0
  176. data/embulk-core/src/main/java/org/embulk/spi/util/ResumableInputStream.java +128 -0
  177. data/embulk-core/src/main/java/org/embulk/spi/util/RetryExecutor.java +130 -0
  178. data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +53 -0
  179. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/AbstractDynamicColumnSetter.java +79 -0
  180. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/BooleanColumnSetter.java +64 -0
  181. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DefaultValueSetter.java +18 -0
  182. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DoubleColumnSetter.java +61 -0
  183. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/LongColumnSetter.java +69 -0
  184. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/NullDefaultValueSetter.java +34 -0
  185. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/SkipColumnSetter.java +52 -0
  186. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/StringColumnSetter.java +56 -0
  187. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/TimestampColumnSetter.java +64 -0
  188. data/embulk-core/src/main/resources/embulk/logback-color.xml +72 -0
  189. data/embulk-core/src/main/resources/embulk/logback-console.xml +14 -0
  190. data/embulk-core/src/main/resources/embulk/logback-file.xml +25 -0
  191. data/embulk-core/src/main/resources/embulk/parent_first_packages.properties +70 -0
  192. data/embulk-core/src/main/resources/embulk/parent_first_resources.properties +28 -0
  193. data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +114 -0
  194. data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +72 -0
  195. data/embulk-core/src/test/java/org/embulk/RandomManager.java +53 -0
  196. data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +23 -0
  197. data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +17 -0
  198. data/embulk-core/src/test/java/org/embulk/config/TestConfigLoader.java +66 -0
  199. data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +114 -0
  200. data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +70 -0
  201. data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +58 -0
  202. data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +18 -0
  203. data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +63 -0
  204. data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +101 -0
  205. data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +73 -0
  206. data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +57 -0
  207. data/embulk-core/src/test/java/org/embulk/spi/TestBuffer.java +24 -0
  208. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +89 -0
  209. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +196 -0
  210. data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +207 -0
  211. data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +188 -0
  212. data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +319 -0
  213. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +116 -0
  214. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +63 -0
  215. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParserDeprecated.java +67 -0
  216. data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
  217. data/embulk-core/src/test/java/org/embulk/spi/unit/TestByteSize.java +79 -0
  218. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +132 -0
  219. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +123 -0
  220. data/embulk-docs/Makefile +178 -0
  221. data/embulk-docs/build.gradle +32 -0
  222. data/embulk-docs/make.bat +243 -0
  223. data/embulk-docs/push-gh-pages.sh +49 -0
  224. data/embulk-docs/src/_static/embulk-architecture.png +0 -0
  225. data/embulk-docs/src/_static/embulk-logo.png +0 -0
  226. data/embulk-docs/src/_static/embulk-logo.svg +133 -0
  227. data/embulk-docs/src/built-in.rst +440 -0
  228. data/embulk-docs/src/conf.py +260 -0
  229. data/embulk-docs/src/customization.rst +184 -0
  230. data/embulk-docs/src/index.rst +84 -0
  231. data/embulk-docs/src/recipe.rst +8 -0
  232. data/embulk-docs/src/recipe/scheduled-csv-load-to-elasticsearch-kibana4.rst +153 -0
  233. data/embulk-docs/src/release.rst +57 -0
  234. data/embulk-docs/src/release/release-0.1.0.rst +8 -0
  235. data/embulk-docs/src/release/release-0.2.0.rst +16 -0
  236. data/embulk-docs/src/release/release-0.2.1.rst +19 -0
  237. data/embulk-docs/src/release/release-0.3.0.rst +34 -0
  238. data/embulk-docs/src/release/release-0.3.1.rst +11 -0
  239. data/embulk-docs/src/release/release-0.3.2.rst +15 -0
  240. data/embulk-docs/src/release/release-0.4.0.rst +74 -0
  241. data/embulk-docs/src/release/release-0.4.1.rst +18 -0
  242. data/embulk-docs/src/release/release-0.4.10.rst +17 -0
  243. data/embulk-docs/src/release/release-0.4.2.rst +18 -0
  244. data/embulk-docs/src/release/release-0.4.3.rst +34 -0
  245. data/embulk-docs/src/release/release-0.4.4.rst +39 -0
  246. data/embulk-docs/src/release/release-0.4.5.rst +24 -0
  247. data/embulk-docs/src/release/release-0.4.6.rst +30 -0
  248. data/embulk-docs/src/release/release-0.4.7.rst +16 -0
  249. data/embulk-docs/src/release/release-0.4.8.rst +15 -0
  250. data/embulk-docs/src/release/release-0.4.9.rst +23 -0
  251. data/embulk-docs/src/release/release-0.5.0.rst +89 -0
  252. data/embulk-docs/src/release/release-0.5.1.rst +13 -0
  253. data/embulk-docs/src/release/release-0.5.2.rst +30 -0
  254. data/embulk-docs/src/release/release-0.5.3.rst +22 -0
  255. data/embulk-docs/src/release/release-0.5.4.rst +24 -0
  256. data/embulk-docs/src/release/release-0.5.5.rst +18 -0
  257. data/embulk-docs/src/release/release-0.6.0.rst +34 -0
  258. data/embulk-docs/src/release/release-0.6.1.rst +11 -0
  259. data/embulk-docs/src/release/release-0.6.10.rst +15 -0
  260. data/embulk-docs/src/release/release-0.6.11.rst +19 -0
  261. data/embulk-docs/src/release/release-0.6.12.rst +31 -0
  262. data/embulk-docs/src/release/release-0.6.13.rst +23 -0
  263. data/embulk-docs/src/release/release-0.6.14.rst +47 -0
  264. data/embulk-docs/src/release/release-0.6.15.rst +26 -0
  265. data/embulk-docs/src/release/release-0.6.16.rst +26 -0
  266. data/embulk-docs/src/release/release-0.6.17.rst +39 -0
  267. data/embulk-docs/src/release/release-0.6.18.rst +14 -0
  268. data/embulk-docs/src/release/release-0.6.19.rst +18 -0
  269. data/embulk-docs/src/release/release-0.6.2.rst +17 -0
  270. data/embulk-docs/src/release/release-0.6.20.rst +19 -0
  271. data/embulk-docs/src/release/release-0.6.21.rst +20 -0
  272. data/embulk-docs/src/release/release-0.6.22.rst +26 -0
  273. data/embulk-docs/src/release/release-0.6.23.rst +17 -0
  274. data/embulk-docs/src/release/release-0.6.24.rst +13 -0
  275. data/embulk-docs/src/release/release-0.6.25.rst +12 -0
  276. data/embulk-docs/src/release/release-0.6.3.rst +23 -0
  277. data/embulk-docs/src/release/release-0.6.4.rst +13 -0
  278. data/embulk-docs/src/release/release-0.6.5.rst +17 -0
  279. data/embulk-docs/src/release/release-0.6.6.rst +17 -0
  280. data/embulk-docs/src/release/release-0.6.7.rst +17 -0
  281. data/embulk-docs/src/release/release-0.6.8.rst +24 -0
  282. data/embulk-docs/src/release/release-0.6.9.rst +24 -0
  283. data/embulk-docs/src/release/release-0.7.0.rst +96 -0
  284. data/embulk-standards/build.gradle +5 -0
  285. data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +284 -0
  286. data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +379 -0
  287. data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +411 -0
  288. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +55 -0
  289. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +71 -0
  290. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +203 -0
  291. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +148 -0
  292. data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +59 -0
  293. data/embulk-standards/src/main/java/org/embulk/standards/RenameFilterPlugin.java +56 -0
  294. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +16 -0
  295. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +53 -0
  296. data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +85 -0
  297. data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +1 -0
  298. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvFormatterPlugin.java +312 -0
  299. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +75 -0
  300. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +360 -0
  301. data/embulk-standards/src/test/java/org/embulk/standards/TestRenameFilterPlugin.java +88 -0
  302. data/embulk.gemspec +39 -0
  303. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  304. data/gradle/wrapper/gradle-wrapper.properties +6 -0
  305. data/gradlew +164 -0
  306. data/gradlew.bat +90 -0
  307. data/lib/embulk.rb +72 -0
  308. data/lib/embulk/buffer.rb +22 -0
  309. data/lib/embulk/column.rb +70 -0
  310. data/lib/embulk/command/embulk_bundle.rb +56 -0
  311. data/lib/embulk/command/embulk_example.rb +32 -0
  312. data/lib/embulk/command/embulk_generate_bin.rb +62 -0
  313. data/lib/embulk/command/embulk_main.rb +2 -0
  314. data/lib/embulk/command/embulk_migrate_plugin.rb +170 -0
  315. data/lib/embulk/command/embulk_new_plugin.rb +124 -0
  316. data/lib/embulk/command/embulk_run.rb +470 -0
  317. data/lib/embulk/command/embulk_selfupdate.rb +84 -0
  318. data/lib/embulk/data/bundle/.bundle/config +3 -0
  319. data/lib/embulk/data/bundle/.ruby-version +1 -0
  320. data/lib/embulk/data/bundle/Gemfile +26 -0
  321. data/lib/embulk/data/bundle/embulk/filter/example.rb +42 -0
  322. data/lib/embulk/data/bundle/embulk/input/example.rb +54 -0
  323. data/lib/embulk/data/bundle/embulk/output/example.rb +58 -0
  324. data/lib/embulk/data/new/LICENSE.txt +21 -0
  325. data/lib/embulk/data/new/README.md.erb +111 -0
  326. data/lib/embulk/data/new/gitignore.erb +13 -0
  327. data/lib/embulk/data/new/java/build.gradle.erb +73 -0
  328. data/lib/embulk/data/new/java/decoder.java.erb +84 -0
  329. data/lib/embulk/data/new/java/encoder.java.erb +86 -0
  330. data/lib/embulk/data/new/java/file_input.java.erb +143 -0
  331. data/lib/embulk/data/new/java/file_output.java.erb +93 -0
  332. data/lib/embulk/data/new/java/filter.java.erb +56 -0
  333. data/lib/embulk/data/new/java/formatter.java.erb +54 -0
  334. data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
  335. data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +6 -0
  336. data/lib/embulk/data/new/java/gradlew +164 -0
  337. data/lib/embulk/data/new/java/gradlew.bat +90 -0
  338. data/lib/embulk/data/new/java/input.java.erb +87 -0
  339. data/lib/embulk/data/new/java/output.java.erb +77 -0
  340. data/lib/embulk/data/new/java/parser.java.erb +60 -0
  341. data/lib/embulk/data/new/java/plugin_loader.rb.erb +3 -0
  342. data/lib/embulk/data/new/java/test.java.erb +5 -0
  343. data/lib/embulk/data/new/ruby/.ruby-version +1 -0
  344. data/lib/embulk/data/new/ruby/Gemfile +2 -0
  345. data/lib/embulk/data/new/ruby/Rakefile +3 -0
  346. data/lib/embulk/data/new/ruby/decoder_guess.rb.erb +25 -0
  347. data/lib/embulk/data/new/ruby/filter.rb.erb +41 -0
  348. data/lib/embulk/data/new/ruby/formatter.rb.erb +49 -0
  349. data/lib/embulk/data/new/ruby/gemspec.erb +20 -0
  350. data/lib/embulk/data/new/ruby/input.rb.erb +59 -0
  351. data/lib/embulk/data/new/ruby/output.rb.erb +61 -0
  352. data/lib/embulk/data/new/ruby/parser.rb.erb +44 -0
  353. data/lib/embulk/data/new/ruby/parser_guess.rb.erb +65 -0
  354. data/lib/embulk/data/package_data.rb +50 -0
  355. data/lib/embulk/data_source.rb +220 -0
  356. data/lib/embulk/decoder_plugin.rb +27 -0
  357. data/lib/embulk/encoder_plugin.rb +27 -0
  358. data/lib/embulk/error.rb +8 -0
  359. data/lib/embulk/executor_plugin.rb +23 -0
  360. data/lib/embulk/file_input.rb +87 -0
  361. data/lib/embulk/file_input_plugin.rb +27 -0
  362. data/lib/embulk/file_output.rb +56 -0
  363. data/lib/embulk/file_output_plugin.rb +27 -0
  364. data/lib/embulk/filter_plugin.rb +105 -0
  365. data/lib/embulk/formatter_plugin.rb +105 -0
  366. data/lib/embulk/guess/charset.rb +44 -0
  367. data/lib/embulk/guess/csv.rb +327 -0
  368. data/lib/embulk/guess/gzip.rb +18 -0
  369. data/lib/embulk/guess/newline.rb +22 -0
  370. data/lib/embulk/guess/schema_guess.rb +118 -0
  371. data/lib/embulk/guess/time_format_guess.rb +394 -0
  372. data/lib/embulk/guess_plugin.rb +129 -0
  373. data/lib/embulk/input_plugin.rb +121 -0
  374. data/lib/embulk/java/bootstrap.rb +24 -0
  375. data/lib/embulk/java/imports.rb +69 -0
  376. data/lib/embulk/java/time_helper.rb +79 -0
  377. data/lib/embulk/java_plugin.rb +90 -0
  378. data/lib/embulk/logger.rb +154 -0
  379. data/lib/embulk/output_plugin.rb +150 -0
  380. data/lib/embulk/page.rb +30 -0
  381. data/lib/embulk/page_builder.rb +76 -0
  382. data/lib/embulk/parser_plugin.rb +78 -0
  383. data/lib/embulk/plugin.rb +239 -0
  384. data/lib/embulk/plugin_registry.rb +96 -0
  385. data/lib/embulk/runner.rb +184 -0
  386. data/lib/embulk/schema.rb +103 -0
  387. data/lib/embulk/version.rb +3 -0
  388. data/settings.gradle +6 -0
  389. data/test/guess/test_schema_guess.rb +11 -0
  390. data/test/guess/test_time_format_guess.rb +133 -0
  391. data/test/helper.rb +21 -0
  392. data/test/run-test.rb +14 -0
  393. metadata +566 -0
@@ -0,0 +1,19 @@
1
+ package org.embulk.spi;
2
+
3
+ import org.embulk.config.ConfigSource;
4
+
5
+ public interface ExecutorPlugin
6
+ {
7
+ interface Executor
8
+ {
9
+ void execute(ProcessTask task, ProcessState state);
10
+ }
11
+
12
+ interface Control
13
+ {
14
+ void transaction(Schema executorSchema, int outputTaskCount, Executor executor);
15
+ }
16
+
17
+ void transaction(ConfigSource config, Schema outputSchema, int inputTaskCount,
18
+ ExecutorPlugin.Control control);
19
+ }
@@ -0,0 +1,44 @@
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 developers to make
12
+ * core components loosely coupled.
13
+ *
14
+ * An example extension to add a custom PluginSource will be as following:
15
+ *
16
+ * <code>
17
+ * class MyPluginSourceExtension
18
+ * implements Extension, Module
19
+ * {
20
+ * public static class MyPluginSource
21
+ * implements PluginSource
22
+ * {
23
+ * // ...
24
+ * }
25
+ *
26
+ * {@literal @}Override
27
+ * public void configure(Binder binder)
28
+ * {
29
+ * Multibinder&lt;PluginSource&gt; multibinder = Multibinder.newSetBinder(binder, PluginSource.class);
30
+ * multibinder.addBinding().to(MyPluginSource.class);
31
+ * }
32
+ *
33
+ * {@literal @}Override
34
+ * public List&lt;Module&gt; getModules()
35
+ * {
36
+ * return ImmutableList.&lt;Module&gt;of(this);
37
+ * }
38
+ * }
39
+ * </code>
40
+ */
41
+ public interface Extension
42
+ {
43
+ List<Module> getModules(ConfigSource systemConfig);
44
+ }
@@ -0,0 +1,11 @@
1
+ package org.embulk.spi;
2
+
3
+ public interface FileInput
4
+ extends AutoCloseable
5
+ {
6
+ boolean nextFile();
7
+
8
+ Buffer poll();
9
+
10
+ void close();
11
+ }
@@ -0,0 +1,30 @@
1
+ package org.embulk.spi;
2
+
3
+ import java.util.List;
4
+ import org.embulk.config.TaskSource;
5
+ import org.embulk.config.ConfigSource;
6
+ import org.embulk.config.ConfigDiff;
7
+ import org.embulk.config.TaskReport;
8
+
9
+ public interface FileInputPlugin
10
+ {
11
+ interface Control
12
+ {
13
+ List<TaskReport> run(TaskSource taskSource,
14
+ int taskCount);
15
+ }
16
+
17
+ ConfigDiff transaction(ConfigSource config,
18
+ FileInputPlugin.Control control);
19
+
20
+ ConfigDiff resume(TaskSource taskSource,
21
+ int taskCount,
22
+ FileInputPlugin.Control control);
23
+
24
+ void cleanup(TaskSource taskSource,
25
+ int taskCount,
26
+ List<TaskReport> successTaskReports);
27
+
28
+ TransactionalFileInput open(TaskSource taskSource,
29
+ int taskIndex);
30
+ }
@@ -0,0 +1,162 @@
1
+ package org.embulk.spi;
2
+
3
+ import java.util.ArrayList;
4
+ import java.util.List;
5
+ import org.embulk.config.Task;
6
+ import org.embulk.config.TaskSource;
7
+ import org.embulk.config.ConfigSource;
8
+ import org.embulk.config.ConfigDiff;
9
+ import org.embulk.config.TaskReport;
10
+ import org.embulk.config.Config;
11
+ import org.embulk.config.ConfigDefault;
12
+ import org.embulk.plugin.PluginType;
13
+ import org.embulk.plugin.compat.PluginWrappers;
14
+ import org.embulk.spi.util.Decoders;
15
+ import org.embulk.exec.GuessExecutor;
16
+ import org.embulk.exec.SamplingParserPlugin;
17
+ import org.embulk.exec.NoSampleException;
18
+
19
+ public class FileInputRunner
20
+ implements InputPlugin
21
+ {
22
+ private final FileInputPlugin fileInputPlugin;
23
+
24
+ public FileInputRunner(FileInputPlugin fileInputPlugin)
25
+ {
26
+ this.fileInputPlugin = fileInputPlugin;
27
+ }
28
+
29
+ private interface RunnerTask extends Task
30
+ {
31
+ // TODO "type" needed?
32
+
33
+ @Config("decoders")
34
+ @ConfigDefault("[]")
35
+ public List<ConfigSource> getDecoderConfigs();
36
+
37
+ @Config("parser")
38
+ public ConfigSource getParserConfig();
39
+
40
+ public void setFileInputTaskSource(TaskSource v);
41
+ public TaskSource getFileInputTaskSource();
42
+
43
+ public void setDecoderTaskSources(List<TaskSource> v);
44
+ public List<TaskSource> getDecoderTaskSources();
45
+
46
+ public void setParserTaskSource(TaskSource v);
47
+ public TaskSource getParserTaskSource();
48
+ }
49
+
50
+ protected List<DecoderPlugin> newDecoderPlugins(RunnerTask task)
51
+ {
52
+ return Decoders.newDecoderPlugins(Exec.session(), task.getDecoderConfigs());
53
+ }
54
+
55
+ protected ParserPlugin newParserPlugin(RunnerTask task)
56
+ {
57
+ return Exec.newPlugin(ParserPlugin.class, task.getParserConfig().get(PluginType.class, "type"));
58
+ }
59
+
60
+ @Override
61
+ public ConfigDiff transaction(ConfigSource config, final InputPlugin.Control control)
62
+ {
63
+ final RunnerTask task = config.loadConfig(RunnerTask.class);
64
+ return fileInputPlugin.transaction(config, new RunnerControl(task, control));
65
+ }
66
+
67
+ @Override
68
+ public ConfigDiff resume(TaskSource taskSource,
69
+ Schema schema, int taskCount,
70
+ InputPlugin.Control control)
71
+ {
72
+ final RunnerTask task = taskSource.loadTask(RunnerTask.class);
73
+ return fileInputPlugin.resume(task.getFileInputTaskSource(), taskCount, new RunnerControl(task, control));
74
+ }
75
+
76
+ @Override
77
+ public ConfigDiff guess(ConfigSource config)
78
+ {
79
+ Buffer sample = SamplingParserPlugin.runFileInputSampling(this, config);
80
+ if (sample.limit() == 0) {
81
+ throw new NoSampleException("Can't get sample data because the first input file is empty");
82
+ }
83
+
84
+ GuessExecutor guessExecutor = Exec.getInjector().getInstance(GuessExecutor.class);
85
+ return guessExecutor.guessParserConfig(sample, config, Exec.session().getSessionExecConfig());
86
+ }
87
+
88
+ private class RunnerControl
89
+ implements FileInputPlugin.Control
90
+ {
91
+ private final RunnerTask task;
92
+ private final List<DecoderPlugin> decoderPlugins;
93
+ private final ParserPlugin parserPlugin;
94
+ private final InputPlugin.Control nextControl;
95
+
96
+ public RunnerControl(RunnerTask task, InputPlugin.Control nextControl)
97
+ {
98
+ this.task = task;
99
+ // create plugins earlier than run() to throw exceptions early
100
+ this.decoderPlugins = newDecoderPlugins(task);
101
+ this.parserPlugin = newParserPlugin(task);
102
+ this.nextControl = nextControl;
103
+ }
104
+
105
+ @Override
106
+ public List<TaskReport> run(final TaskSource fileInputTaskSource, final int taskCount)
107
+ {
108
+ final List<TaskReport> taskReports = new ArrayList<TaskReport>();
109
+ Decoders.transaction(decoderPlugins, task.getDecoderConfigs(), new Decoders.Control() {
110
+ public void run(final List<TaskSource> decoderTaskSources)
111
+ {
112
+ parserPlugin.transaction(task.getParserConfig(), new ParserPlugin.Control() {
113
+ public void run(final TaskSource parserTaskSource, final Schema schema)
114
+ {
115
+ task.setFileInputTaskSource(fileInputTaskSource);
116
+ task.setDecoderTaskSources(decoderTaskSources);
117
+ task.setParserTaskSource(parserTaskSource);
118
+ taskReports.addAll(nextControl.run(task.dump(), schema, taskCount));
119
+ }
120
+ });
121
+ }
122
+ });
123
+ return taskReports;
124
+ }
125
+ }
126
+
127
+ public void cleanup(TaskSource taskSource,
128
+ Schema schema, int taskCount,
129
+ List<TaskReport> successTaskReports)
130
+ {
131
+ fileInputPlugin.cleanup(taskSource, taskCount, successTaskReports);
132
+ }
133
+
134
+ @Override
135
+ public TaskReport run(TaskSource taskSource, Schema schema, int taskIndex,
136
+ PageOutput output)
137
+ {
138
+ final RunnerTask task = taskSource.loadTask(RunnerTask.class);
139
+ List<DecoderPlugin> decoderPlugins = newDecoderPlugins(task);
140
+ ParserPlugin parserPlugin = newParserPlugin(task);
141
+
142
+ TransactionalFileInput tran = PluginWrappers.transactionalFileInput(
143
+ fileInputPlugin.open(task.getFileInputTaskSource(), taskIndex));
144
+ FileInput fileInput = tran;
145
+ try {
146
+ fileInput = Decoders.open(decoderPlugins, task.getDecoderTaskSources(), fileInput);
147
+ parserPlugin.run(task.getParserTaskSource(), schema, fileInput, output);
148
+
149
+ TaskReport report = tran.commit(); // TODO check output.finish() is called. wrap
150
+ tran = null;
151
+ return report;
152
+ } finally {
153
+ try {
154
+ if (tran != null) {
155
+ tran.abort();
156
+ }
157
+ } finally {
158
+ fileInput.close();
159
+ }
160
+ }
161
+ }
162
+ }
@@ -0,0 +1,13 @@
1
+ package org.embulk.spi;
2
+
3
+ public interface FileOutput
4
+ extends AutoCloseable
5
+ {
6
+ void nextFile();
7
+
8
+ void add(Buffer buffer);
9
+
10
+ void finish();
11
+
12
+ void close();
13
+ }
@@ -0,0 +1,28 @@
1
+ package org.embulk.spi;
2
+
3
+ import java.util.List;
4
+ import org.embulk.config.TaskSource;
5
+ import org.embulk.config.ConfigSource;
6
+ import org.embulk.config.ConfigDiff;
7
+ import org.embulk.config.TaskReport;
8
+
9
+ public interface FileOutputPlugin
10
+ {
11
+ interface Control
12
+ {
13
+ List<TaskReport> run(TaskSource taskSource);
14
+ }
15
+
16
+ ConfigDiff transaction(ConfigSource config, int taskCount,
17
+ FileOutputPlugin.Control control);
18
+
19
+ ConfigDiff resume(TaskSource taskSource,
20
+ int taskCount,
21
+ FileOutputPlugin.Control control);
22
+
23
+ void cleanup(TaskSource taskSource,
24
+ int taskCount,
25
+ List<TaskReport> successTaskReports);
26
+
27
+ TransactionalFileOutput open(TaskSource taskSource, int taskIndex);
28
+ }
@@ -0,0 +1,202 @@
1
+ package org.embulk.spi;
2
+
3
+ import java.util.List;
4
+ import java.util.ArrayList;
5
+ import org.embulk.config.Task;
6
+ import org.embulk.config.TaskSource;
7
+ import org.embulk.config.ConfigSource;
8
+ import org.embulk.config.ConfigDiff;
9
+ import org.embulk.config.TaskReport;
10
+ import org.embulk.config.Config;
11
+ import org.embulk.config.ConfigDefault;
12
+ import org.embulk.plugin.PluginType;
13
+ import org.embulk.plugin.compat.PluginWrappers;
14
+ import org.embulk.spi.util.Encoders;
15
+
16
+ public class FileOutputRunner
17
+ implements OutputPlugin
18
+ {
19
+ private final FileOutputPlugin fileOutputPlugin;
20
+
21
+ public FileOutputRunner(FileOutputPlugin fileOutputPlugin)
22
+ {
23
+ this.fileOutputPlugin = fileOutputPlugin;
24
+ }
25
+
26
+ private interface RunnerTask extends Task
27
+ {
28
+ @Config("type")
29
+ public PluginType getType();
30
+
31
+ @Config("encoders")
32
+ @ConfigDefault("[]")
33
+ public List<ConfigSource> getEncoderConfigs();
34
+
35
+ @Config("formatter")
36
+ public ConfigSource getFormatterConfig();
37
+
38
+ public void setFileOutputTaskSource(TaskSource v);
39
+ public TaskSource getFileOutputTaskSource();
40
+
41
+ public void setEncoderTaskSources(List<TaskSource> v);
42
+ public List<TaskSource> getEncoderTaskSources();
43
+
44
+ public void setFormatterTaskSource(TaskSource v);
45
+ public TaskSource getFormatterTaskSource();
46
+ }
47
+
48
+ protected List<EncoderPlugin> newEncoderPlugins(RunnerTask task)
49
+ {
50
+ return Encoders.newEncoderPlugins(Exec.session(), task.getEncoderConfigs());
51
+ }
52
+
53
+ protected FormatterPlugin newFormatterPlugin(RunnerTask task)
54
+ {
55
+ return Exec.newPlugin(FormatterPlugin.class, task.getFormatterConfig().get(PluginType.class, "type"));
56
+ }
57
+
58
+ @Override
59
+ public ConfigDiff transaction(ConfigSource config,
60
+ final Schema schema, final int taskCount,
61
+ final OutputPlugin.Control control)
62
+ {
63
+ final RunnerTask task = config.loadConfig(RunnerTask.class);
64
+ return fileOutputPlugin.transaction(config, taskCount, new RunnerControl(schema, task, control));
65
+ }
66
+
67
+ public ConfigDiff resume(TaskSource taskSource,
68
+ Schema schema, int taskCount,
69
+ final OutputPlugin.Control control)
70
+ {
71
+ final RunnerTask task = taskSource.loadTask(RunnerTask.class);
72
+ return fileOutputPlugin.resume(task.getFileOutputTaskSource(), taskCount, new RunnerControl(schema, task, control));
73
+ }
74
+
75
+ private class RunnerControl
76
+ implements FileOutputPlugin.Control
77
+ {
78
+ private final Schema schema;
79
+ private final RunnerTask task;
80
+ private final List<EncoderPlugin> encoderPlugins;
81
+ private final FormatterPlugin formatterPlugin;
82
+ private final OutputPlugin.Control nextControl;
83
+
84
+ public RunnerControl(Schema schema, RunnerTask task, OutputPlugin.Control nextControl)
85
+ {
86
+ this.schema = schema;
87
+ this.task = task;
88
+ // create plugins earlier than run() to throw exceptions early
89
+ this.encoderPlugins = newEncoderPlugins(task);
90
+ this.formatterPlugin = newFormatterPlugin(task);
91
+ this.nextControl = nextControl;
92
+ }
93
+
94
+ @Override
95
+ public List<TaskReport> run(final TaskSource fileOutputTaskSource)
96
+ {
97
+ final List<TaskReport> taskReports = new ArrayList<TaskReport>();
98
+ Encoders.transaction(encoderPlugins, task.getEncoderConfigs(), new Encoders.Control() {
99
+ public void run(final List<TaskSource> encoderTaskSources)
100
+ {
101
+ formatterPlugin.transaction(task.getFormatterConfig(), schema, new FormatterPlugin.Control() {
102
+ public void run(final TaskSource formatterTaskSource)
103
+ {
104
+ task.setFileOutputTaskSource(fileOutputTaskSource);
105
+ task.setEncoderTaskSources(encoderTaskSources);
106
+ task.setFormatterTaskSource(formatterTaskSource);
107
+ taskReports.addAll(nextControl.run(task.dump()));
108
+ }
109
+ });
110
+ }
111
+ });
112
+ return taskReports;
113
+ }
114
+ }
115
+
116
+ public void cleanup(TaskSource taskSource,
117
+ Schema schema, int taskCount,
118
+ List<TaskReport> successtaskReports)
119
+ {
120
+ fileOutputPlugin.cleanup(taskSource, taskCount, successtaskReports);
121
+ }
122
+
123
+ @Override
124
+ public TransactionalPageOutput open(TaskSource taskSource, Schema schema, int taskIndex)
125
+ {
126
+ final RunnerTask task = taskSource.loadTask(RunnerTask.class);
127
+ List<EncoderPlugin> encoderPlugins = newEncoderPlugins(task);
128
+ FormatterPlugin formatterPlugin = newFormatterPlugin(task);
129
+
130
+ TransactionalFileOutput tran = null;
131
+ FileOutput fileOutput = null;
132
+ PageOutput output = null;
133
+ try {
134
+ fileOutput = tran = PluginWrappers.transactionalFileOutput(
135
+ fileOutputPlugin.open(task.getFileOutputTaskSource(), taskIndex));
136
+
137
+ fileOutput = Encoders.open(encoderPlugins, task.getEncoderTaskSources(), fileOutput);
138
+ output = formatterPlugin.open(task.getFormatterTaskSource(), schema, fileOutput);
139
+ fileOutput = null;
140
+
141
+ TransactionalPageOutput ret = new DelegateTransactionalPageOutput(tran, output);
142
+ tran = null;
143
+ output = null;
144
+ return ret;
145
+
146
+ } finally {
147
+ if (output != null) {
148
+ output.close();
149
+ }
150
+ if (fileOutput != null) {
151
+ fileOutput.close();
152
+ }
153
+ if (tran != null) {
154
+ tran.abort();
155
+ }
156
+ }
157
+ }
158
+
159
+ private static class DelegateTransactionalPageOutput
160
+ implements TransactionalPageOutput
161
+ {
162
+ private final Transactional tran;
163
+ private final PageOutput output;
164
+
165
+ public DelegateTransactionalPageOutput(Transactional tran, PageOutput output)
166
+ {
167
+ this.tran = tran;
168
+ this.output = output;
169
+ }
170
+
171
+ @Override
172
+ public void add(Page page)
173
+ {
174
+ output.add(page);
175
+ }
176
+
177
+ @Override
178
+ public void finish()
179
+ {
180
+ output.finish();
181
+ }
182
+
183
+ @Override
184
+ public void close()
185
+ {
186
+ output.close();
187
+ }
188
+
189
+ @Override
190
+ public void abort()
191
+ {
192
+ tran.abort();
193
+ }
194
+
195
+ @Override
196
+ public TaskReport commit()
197
+ {
198
+ // TODO check finished
199
+ return tran.commit();
200
+ }
201
+ }
202
+ }