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,23 @@
1
+ package org.embulk.cli;
2
+
3
+ import java.io.BufferedWriter;
4
+ import java.io.File;
5
+ import java.io.FileOutputStream;
6
+ import java.io.OutputStreamWriter;
7
+ import java.nio.charset.Charset;
8
+ import java.util.Arrays;
9
+
10
+ public class DummyMain {
11
+
12
+ public static void main(String[] args) throws Exception {
13
+ System.out.println(Arrays.asList(args));
14
+ File thisFolder = new File(SelfrunTest.class.getResource("/org/embulk/cli/DummyMain.class").toURI()).getParentFile();
15
+ try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(thisFolder, "args.txt")), Charset.defaultCharset()))) {
16
+ for (String arg : args) {
17
+ writer.write(arg);
18
+ writer.newLine();
19
+ }
20
+ }
21
+ }
22
+
23
+ }
@@ -0,0 +1,281 @@
1
+ package org.embulk.cli;
2
+
3
+ import static org.junit.Assert.assertEquals;
4
+
5
+ import java.io.BufferedReader;
6
+ import java.io.BufferedWriter;
7
+ import java.io.File;
8
+ import java.io.FileOutputStream;
9
+ import java.io.IOException;
10
+ import java.io.InputStreamReader;
11
+ import java.io.OutputStreamWriter;
12
+ import java.nio.charset.Charset;
13
+ import java.nio.file.FileSystem;
14
+ import java.nio.file.FileSystems;
15
+ import java.nio.file.Files;
16
+ import java.nio.file.StandardOpenOption;
17
+ import java.util.Arrays;
18
+ import java.util.List;
19
+
20
+ import org.junit.BeforeClass;
21
+ import org.junit.Test;
22
+
23
+
24
+ public class SelfrunTest {
25
+
26
+ private static File testSelfrun;
27
+
28
+ @BeforeClass
29
+ public static void prepare() throws Exception {
30
+ File selfrun = findSelfrun();
31
+ FileSystem fs = FileSystems.getDefault();
32
+ String line = new String(Files.readAllBytes(fs.getPath(selfrun.getAbsolutePath())), Charset.defaultCharset());
33
+
34
+ File thisFolder = new File(SelfrunTest.class.getResource("/org/embulk/cli/SelfrunTest.class").toURI()).getParentFile();
35
+ testSelfrun = new File(thisFolder, System.getProperty("file.separator").equals("\\") ? "selfrun.bat" : "selfrun.sh");
36
+
37
+ File classpath = thisFolder.getParentFile().getParentFile().getParentFile();
38
+ line = line.replaceAll("java ", "java -classpath " + classpath.getAbsolutePath().replaceAll("\\\\", "\\\\\\\\") + " org.embulk.cli.DummyMain ");
39
+
40
+ // Modify selfrun so that arguments are written in 'args.txt' .
41
+ Files.write(fs.getPath(testSelfrun.getAbsolutePath()), line.getBytes(Charset.defaultCharset()), StandardOpenOption.CREATE);
42
+ if (!testSelfrun.setExecutable(true)) {
43
+ throw new Exception("Cannot se executable.");
44
+ }
45
+ }
46
+
47
+
48
+ @Test
49
+ public void testNoArgument() throws Exception {
50
+ List<String> args = execute();
51
+ assertEquals(Arrays.asList(
52
+ "-XX:+AggressiveOpts",
53
+ "-XX:+TieredCompilation",
54
+ "-XX:TieredStopAtLevel=1",
55
+ "-Xverify:none",
56
+ "-jar",
57
+ testSelfrun.getAbsolutePath()),
58
+ args);
59
+ }
60
+
61
+ @Test
62
+ public void testArguments() throws Exception {
63
+ List<String> args = execute("a1", "a2", "\"a3=v3\"");
64
+ assertEquals(Arrays.asList(
65
+ "-XX:+AggressiveOpts",
66
+ "-XX:+TieredCompilation",
67
+ "-XX:TieredStopAtLevel=1",
68
+ "-Xverify:none",
69
+ "-jar",
70
+ testSelfrun.getAbsolutePath(),
71
+ "a1",
72
+ "a2",
73
+ "a3=v3"),
74
+ args);
75
+ }
76
+
77
+ @Test
78
+ public void testRun() throws Exception {
79
+ List<String> args = execute("run", "a1");
80
+ assertEquals(Arrays.asList(
81
+ "-XX:+AggressiveOpts",
82
+ "-XX:+UseConcMarkSweepGC",
83
+ "-jar",
84
+ testSelfrun.getAbsolutePath(),
85
+ "run",
86
+ "a1"),
87
+ args);
88
+ }
89
+
90
+ @Test
91
+ public void testJpO() throws Exception {
92
+ List<String> args = execute("-J+O", "a1", "a2");
93
+ assertEquals(Arrays.asList(
94
+ "-XX:+AggressiveOpts",
95
+ "-XX:+UseConcMarkSweepGC",
96
+ "-jar",
97
+ testSelfrun.getAbsolutePath(),
98
+ "a1",
99
+ "a2"),
100
+ args);
101
+ }
102
+
103
+ @Test
104
+ public void testJmO() throws Exception {
105
+ List<String> args = execute("-J-O", "a1", "a2");
106
+ assertEquals(Arrays.asList(
107
+ "-XX:+AggressiveOpts",
108
+ "-XX:+TieredCompilation",
109
+ "-XX:TieredStopAtLevel=1",
110
+ "-Xverify:none",
111
+ "-jar",
112
+ testSelfrun.getAbsolutePath(),
113
+ "a1",
114
+ "a2"),
115
+ args);
116
+ }
117
+
118
+ @Test
119
+ public void testR1() throws Exception {
120
+ List<String> args = execute("-Rr1", "a1", "a2");
121
+ assertEquals(Arrays.asList(
122
+ "-XX:+AggressiveOpts",
123
+ "-XX:+TieredCompilation",
124
+ "-XX:TieredStopAtLevel=1",
125
+ "-Xverify:none",
126
+ "-jar",
127
+ testSelfrun.getAbsolutePath(),
128
+ "r1",
129
+ "a1",
130
+ "a2"),
131
+ args);
132
+ }
133
+
134
+ @Test
135
+ public void testR2() throws Exception {
136
+ List<String> args = execute("\"-Rr1=v1\"", "\"-Rr2=v2\"", "a1", "a2");
137
+ assertEquals(Arrays.asList(
138
+ "-XX:+AggressiveOpts",
139
+ "-XX:+TieredCompilation",
140
+ "-XX:TieredStopAtLevel=1",
141
+ "-Xverify:none",
142
+ "-jar",
143
+ testSelfrun.getAbsolutePath(),
144
+ "r1=v1",
145
+ "r2=v2",
146
+ "a1",
147
+ "a2"),
148
+ args);
149
+ }
150
+
151
+ @Test
152
+ public void testRRun() throws Exception {
153
+ List<String> args = execute("-Rr1", "run", "a1");
154
+ assertEquals(Arrays.asList(
155
+ "-XX:+AggressiveOpts",
156
+ "-XX:+UseConcMarkSweepGC",
157
+ "-jar",
158
+ testSelfrun.getAbsolutePath(),
159
+ "r1",
160
+ "run",
161
+ "a1"),
162
+ args);
163
+ }
164
+
165
+ @Test
166
+ public void testJ1() throws Exception {
167
+ List<String> args = execute("-J-Dj1", "a1", "a2");
168
+ assertEquals(Arrays.asList(
169
+ "-XX:+AggressiveOpts",
170
+ "-XX:+TieredCompilation",
171
+ "-XX:TieredStopAtLevel=1",
172
+ "-Xverify:none",
173
+ "-Dj1",
174
+ "-jar",
175
+ testSelfrun.getAbsolutePath(),
176
+ "a1",
177
+ "a2"),
178
+ args);
179
+ }
180
+
181
+ @Test
182
+ public void testJ2() throws Exception {
183
+ List<String> args = execute("\"-J-Dj1=v1\"", "\"-J-Dj2=v2\"", "a1", "a2");
184
+ assertEquals(Arrays.asList(
185
+ "-XX:+AggressiveOpts",
186
+ "-XX:+TieredCompilation",
187
+ "-XX:TieredStopAtLevel=1",
188
+ "-Xverify:none",
189
+ "-Dj1=v1",
190
+ "-Dj2=v2",
191
+ "-jar",
192
+ testSelfrun.getAbsolutePath(),
193
+ "a1",
194
+ "a2"),
195
+ args);
196
+ }
197
+
198
+ @Test
199
+ public void testJR() throws Exception {
200
+ List<String> args = execute("-Jj1", "-Rr1", "a1", "a2");
201
+ assertEquals(Arrays.asList(
202
+ "-XX:+AggressiveOpts",
203
+ "-XX:+TieredCompilation",
204
+ "-XX:TieredStopAtLevel=1",
205
+ "-Xverify:none",
206
+ "j1",
207
+ "-jar",
208
+ testSelfrun.getAbsolutePath(),
209
+ "r1",
210
+ "a1",
211
+ "a2"),
212
+ args);
213
+ }
214
+
215
+ @Test
216
+ public void testJFile() throws Exception {
217
+ File javaArgsFile = new File(testSelfrun.getParentFile(), "java_args.txt");
218
+ FileSystem fs = FileSystems.getDefault();
219
+ Files.write(fs.getPath(javaArgsFile.getAbsolutePath()), "j1 j2 j3".getBytes(Charset.defaultCharset()), StandardOpenOption.CREATE);
220
+
221
+ List<String> args = execute("-J", javaArgsFile.getAbsolutePath(), "a1", "a2");
222
+ assertEquals(Arrays.asList(
223
+ "-XX:+AggressiveOpts",
224
+ "-XX:+TieredCompilation",
225
+ "-XX:TieredStopAtLevel=1",
226
+ "-Xverify:none",
227
+ "j1",
228
+ "j2",
229
+ "j3",
230
+ "-jar",
231
+ testSelfrun.getAbsolutePath(),
232
+ "a1",
233
+ "a2"),
234
+ args);
235
+ }
236
+
237
+ private List<String> execute(String... arguments) throws Exception {
238
+ File temp = new File(testSelfrun.getParentFile(), "call-" + testSelfrun.getName());
239
+ try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(temp), Charset.defaultCharset()))) {
240
+ writer.write(testSelfrun.getAbsolutePath());
241
+ for (String argument : arguments) {
242
+ writer.write(" ");
243
+ writer.write(argument);
244
+ }
245
+ }
246
+ if (!temp.setExecutable(true)) {
247
+ throw new Exception("Cannot se executable.");
248
+ }
249
+
250
+ File argsFile = new File(testSelfrun.getParentFile(), "args.txt");
251
+ if (argsFile.exists()) {
252
+ if (!argsFile.delete()) {
253
+ throw new IOException("Cannot delete " + argsFile);
254
+ }
255
+ }
256
+
257
+ Process process = Runtime.getRuntime().exec(temp.getAbsolutePath());
258
+ int exitCode = process.waitFor();
259
+ if (exitCode != 0 || !argsFile.exists()) {
260
+ StringBuilder builder = new StringBuilder();
261
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream(), Charset.defaultCharset()))) {
262
+ builder.append(reader.readLine());
263
+ builder.append(System.getProperty("line.separator"));
264
+ }
265
+ throw new Exception(builder.toString());
266
+ }
267
+
268
+ FileSystem fs = FileSystems.getDefault();
269
+ List<String> args = Files.readAllLines(fs.getPath(argsFile.getAbsolutePath()), Charset.defaultCharset());
270
+ return args;
271
+ }
272
+
273
+ private static File findSelfrun() {
274
+ File folder = new File(".");
275
+ if (new File(folder, "embulk-cli").exists()) {
276
+ folder = new File(folder, "embulk-cli");
277
+ }
278
+ return new File(new File(new File(new File(folder, "src"), "main"), "sh"), "selfrun.sh");
279
+ }
280
+
281
+ }
@@ -0,0 +1,59 @@
1
+ apply plugin: "com.github.jruby-gradle.jar"
2
+
3
+ // include ruby scripts to jar. don't use sourceSets.main.resources.srcDirs
4
+ // because IntelliJ causes error if srcDirs includes files out of projectDir.
5
+ processResources.from("${rootProject.projectDir}/lib/", "${buildDir}/gemlib")
6
+
7
+ configurations {
8
+ // com.google.inject:guice depends on asm and cglib but version of the libraries conflict
9
+ // with ones bundled in jruby-complete and cause bytecode compatibility error
10
+ compile.exclude group: 'asm', module: 'asm'
11
+ compile.exclude group: 'org.sonatype.sisu.inject', module: 'cglib'
12
+ }
13
+
14
+ import com.github.jrubygradle.JRubyExec
15
+ import com.github.jrubygradle.JRubyPrepare
16
+
17
+ // determine which dependencies have updates: $ gradle dependencyUpdates
18
+ dependencies {
19
+ compile 'com.google.guava:guava:18.0'
20
+ compile 'com.google.inject:guice:4.0'
21
+ compile 'com.google.inject.extensions:guice-multibindings:4.0'
22
+ compile 'javax.inject:javax.inject:1'
23
+ compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3'
24
+ compile 'com.fasterxml.jackson.core:jackson-core:2.5.3'
25
+ compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3'
26
+ compile 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.5.3'
27
+ compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.5.3'
28
+ compile 'com.fasterxml.jackson.module:jackson-module-guice:2.5.3'
29
+ compile 'ch.qos.logback:logback-classic:1.1.3'
30
+ compile 'org.slf4j:slf4j-api:1.7.12'
31
+ compile 'org.jruby:jruby-complete:' + project.jrubyVersion
32
+ compile 'com.google.code.findbugs:annotations:3.0.0'
33
+ compile 'org.yaml:snakeyaml:1.14'
34
+ compile 'javax.validation:validation-api:1.1.0.Final'
35
+ compile 'org.apache.bval:bval-jsr303:0.5'
36
+ compile 'io.airlift:slice:0.9'
37
+ compile 'joda-time:joda-time:2.8.1'
38
+ compile 'io.netty:netty-buffer:5.0.0.Alpha1'
39
+ compile 'org.fusesource.jansi:jansi:1.11'
40
+
41
+ // For embulk/guess/charset.rb. See also embulk.gemspec
42
+ compile 'com.ibm.icu:icu4j:54.1.1'
43
+
44
+ gems 'rubygems:liquid:3.0.6'
45
+ }
46
+
47
+ task unpackGems(type: JRubyPrepare) {
48
+ outputDir file("${buildDir}/gem")
49
+ dependencies configurations.gems
50
+ doLast {
51
+ // move to build/gem/*/lib/* to build/gemlib/
52
+ file("${buildDir}/gemlib").mkdirs()
53
+ file("${buildDir}/gem/gems").eachDir { gemDir ->
54
+ file("${gemDir}/lib").renameTo("${buildDir}/gemlib/")
55
+ }
56
+ fileTree(dir: "${buildDir}/gemlib", include: "**/.jrubydir").each { f -> f.delete() }
57
+ }
58
+ }
59
+ processResources.dependsOn("unpackGems")
@@ -0,0 +1,315 @@
1
+ package org.embulk;
2
+
3
+ import java.util.ArrayList;
4
+ import java.util.Arrays;
5
+ import java.util.List;
6
+ import com.google.common.base.Function;
7
+ import com.google.common.base.Throwables;
8
+ import com.google.common.collect.ImmutableList;
9
+ import com.google.common.collect.Iterables;
10
+ import com.google.inject.Injector;
11
+ import com.google.inject.Module;
12
+ import com.fasterxml.jackson.databind.ObjectMapper;
13
+ import org.embulk.config.ModelManager;
14
+ import org.embulk.config.ConfigSource;
15
+ import org.embulk.config.ConfigDiff;
16
+ import org.embulk.config.ConfigLoader;
17
+ import org.embulk.exec.BulkLoader;
18
+ import org.embulk.exec.GuessExecutor;
19
+ import org.embulk.exec.PreviewExecutor;
20
+ import org.embulk.exec.PreviewResult;
21
+ import org.embulk.exec.ExecutionResult;
22
+ import org.embulk.exec.PartialExecutionException;
23
+ import org.embulk.exec.ResumeState;
24
+ import org.embulk.spi.BufferAllocator;
25
+ import org.embulk.spi.ExecSession;
26
+ import org.embulk.guice.Bootstrap;
27
+ import org.embulk.guice.LifeCycleInjector;
28
+ import static com.google.common.base.Preconditions.checkState;
29
+ import static com.google.common.base.Preconditions.checkNotNull;
30
+
31
+ public class EmbulkEmbed
32
+ {
33
+ public static ConfigLoader newSystemConfigLoader()
34
+ {
35
+ return new ConfigLoader(new ModelManager(null, new ObjectMapper()));
36
+ }
37
+
38
+ public static class Bootstrap
39
+ {
40
+ private final ConfigLoader systemConfigLoader;
41
+
42
+ private ConfigSource systemConfig;
43
+
44
+ private final List<Function<? super List<Module>, ? extends Iterable<? extends Module>>> moduleOverrides;
45
+
46
+ public Bootstrap()
47
+ {
48
+ this.systemConfigLoader = newSystemConfigLoader();
49
+ this.systemConfig = systemConfigLoader.newConfigSource();
50
+ this.moduleOverrides = new ArrayList<>();
51
+ }
52
+
53
+ public ConfigLoader getSystemConfigLoader()
54
+ {
55
+ return systemConfigLoader;
56
+ }
57
+
58
+ public Bootstrap setSystemConfig(ConfigSource systemConfig)
59
+ {
60
+ this.systemConfig = systemConfig.deepCopy();
61
+ return this;
62
+ }
63
+
64
+ public Bootstrap addModules(Module... additionalModules)
65
+ {
66
+ return addModules(Arrays.asList(additionalModules));
67
+ }
68
+
69
+ public Bootstrap addModules(Iterable<? extends Module> additionalModules)
70
+ {
71
+ final List<Module> copy = ImmutableList.copyOf(additionalModules);
72
+ return overrideModules(
73
+ new Function<List<Module>, Iterable<Module>>()
74
+ {
75
+ public Iterable<Module> apply(List<Module> modules)
76
+ {
77
+ return Iterables.concat(modules, copy);
78
+ }
79
+ });
80
+ }
81
+
82
+ public Bootstrap overrideModules(Function<? super List<Module>, ? extends Iterable<? extends Module>> function)
83
+ {
84
+ moduleOverrides.add(function);
85
+ return this;
86
+ }
87
+
88
+ public EmbulkEmbed initialize()
89
+ {
90
+ return build(true);
91
+ }
92
+
93
+ public EmbulkEmbed initializeCloseable()
94
+ {
95
+ return build(false);
96
+ }
97
+
98
+ private EmbulkEmbed build(boolean destroyOnShutdownHook)
99
+ {
100
+ org.embulk.guice.Bootstrap bootstrap = new org.embulk.guice.Bootstrap()
101
+ .requireExplicitBindings(false)
102
+ .addModules(EmbulkService.standardModuleList(systemConfig));
103
+
104
+ for (Function<? super List<Module>, ? extends Iterable<? extends Module>> override : moduleOverrides) {
105
+ bootstrap = bootstrap.overrideModules(override);
106
+ }
107
+
108
+ LifeCycleInjector injector;
109
+ if (destroyOnShutdownHook) {
110
+ injector = bootstrap.initialize();
111
+ } else {
112
+ injector = bootstrap.initializeCloseable();
113
+ }
114
+
115
+ return new EmbulkEmbed(systemConfig, injector);
116
+ }
117
+ }
118
+
119
+ private final LifeCycleInjector injector;
120
+ private final BulkLoader bulkLoader;
121
+ private final GuessExecutor guessExecutor;
122
+ private final PreviewExecutor previewExecutor;
123
+
124
+ EmbulkEmbed(ConfigSource systemConfig, LifeCycleInjector injector)
125
+ {
126
+ this.injector = injector;
127
+ injector.getInstance(org.slf4j.ILoggerFactory.class);
128
+ this.bulkLoader = new BulkLoader(injector, systemConfig);
129
+ this.guessExecutor = injector.getInstance(GuessExecutor.class);
130
+ this.previewExecutor = injector.getInstance(PreviewExecutor.class);
131
+ }
132
+
133
+ public Injector getInjector()
134
+ {
135
+ return injector;
136
+ }
137
+
138
+ public ModelManager getModelManager()
139
+ {
140
+ return injector.getInstance(ModelManager.class);
141
+ }
142
+
143
+ public BufferAllocator getBufferAllocator()
144
+ {
145
+ return injector.getInstance(BufferAllocator.class);
146
+ }
147
+
148
+ public ConfigLoader newConfigLoader()
149
+ {
150
+ return injector.getInstance(ConfigLoader.class);
151
+ }
152
+
153
+ public ConfigDiff guess(ConfigSource config)
154
+ {
155
+ ExecSession exec = newExecSession(config);
156
+ try {
157
+ return guessExecutor.guess(exec, config);
158
+ }
159
+ finally {
160
+ exec.cleanup();
161
+ }
162
+ }
163
+
164
+ public PreviewResult preview(ConfigSource config)
165
+ {
166
+ ExecSession exec = newExecSession(config);
167
+ try {
168
+ return previewExecutor.preview(exec, config);
169
+ }
170
+ finally {
171
+ exec.cleanup();
172
+ }
173
+ }
174
+
175
+ public ExecutionResult run(ConfigSource config)
176
+ {
177
+ ExecSession exec = newExecSession(config);
178
+ try {
179
+ return bulkLoader.run(exec, config);
180
+ }
181
+ catch (PartialExecutionException partial) {
182
+ try {
183
+ bulkLoader.cleanup(config, partial.getResumeState());
184
+ } catch (Throwable ex) {
185
+ partial.addSuppressed(ex);
186
+ }
187
+ throw partial;
188
+ }
189
+ finally {
190
+ try {
191
+ exec.cleanup();
192
+ }
193
+ catch (Exception ex) {
194
+ // TODO add this exception to ExecutionResult.getIgnoredExceptions
195
+ // or partial.addSuppressed
196
+ ex.printStackTrace(System.err);
197
+ }
198
+ }
199
+ }
200
+
201
+ public ResumableResult runResumable(ConfigSource config)
202
+ {
203
+ ExecSession exec = newExecSession(config);
204
+ try {
205
+ ExecutionResult result;
206
+ try {
207
+ result = bulkLoader.run(exec, config);
208
+ } catch (PartialExecutionException partial) {
209
+ return new ResumableResult(partial);
210
+ }
211
+ return new ResumableResult(result);
212
+ }
213
+ finally {
214
+ try {
215
+ exec.cleanup();
216
+ }
217
+ catch (Exception ex) {
218
+ // TODO add this exception to ExecutionResult.getIgnoredExceptions
219
+ // or partial.addSuppressed
220
+ ex.printStackTrace(System.err);
221
+ }
222
+ }
223
+ }
224
+
225
+ private ExecSession newExecSession(ConfigSource config)
226
+ {
227
+ ConfigSource execConfig = config.deepCopy().getNestedOrSetEmpty("exec");
228
+ return ExecSession.builder(injector).fromExecConfig(execConfig).build();
229
+ }
230
+
231
+ public ResumeStateAction resumeState(ConfigSource config, ConfigSource resumeStateConfig)
232
+ {
233
+ ResumeState resumeState = resumeStateConfig.loadConfig(ResumeState.class);
234
+ return new ResumeStateAction(config, resumeState);
235
+ }
236
+
237
+ public static class ResumableResult
238
+ {
239
+ private final ExecutionResult successfulResult;
240
+ private final PartialExecutionException partialExecutionException;
241
+
242
+ public ResumableResult(PartialExecutionException partialExecutionException)
243
+ {
244
+ this.successfulResult = null;
245
+ this.partialExecutionException = checkNotNull(partialExecutionException);
246
+ }
247
+
248
+ public ResumableResult(ExecutionResult successfulResult)
249
+ {
250
+ this.successfulResult = checkNotNull(successfulResult);
251
+ this.partialExecutionException = null;
252
+ }
253
+
254
+ public boolean isSuccessful()
255
+ {
256
+ return successfulResult != null;
257
+ }
258
+
259
+ public ExecutionResult getSuccessfulResult()
260
+ {
261
+ checkState(successfulResult != null);
262
+ return successfulResult;
263
+ }
264
+
265
+ public Throwable getCause()
266
+ {
267
+ checkState(partialExecutionException != null);
268
+ return partialExecutionException.getCause();
269
+ }
270
+
271
+ public ResumeState getResumeState()
272
+ {
273
+ checkState(partialExecutionException != null);
274
+ return partialExecutionException.getResumeState();
275
+ }
276
+ }
277
+
278
+ public class ResumeStateAction
279
+ {
280
+ private final ConfigSource config;
281
+ private final ResumeState resumeState;
282
+
283
+ public ResumeStateAction(ConfigSource config, ResumeState resumeState)
284
+ {
285
+ this.config = config;
286
+ this.resumeState = resumeState;
287
+ }
288
+
289
+ public ResumableResult resume()
290
+ {
291
+ ExecutionResult result;
292
+ try {
293
+ result = bulkLoader.resume(config, resumeState);
294
+ } catch (PartialExecutionException partial) {
295
+ return new ResumableResult(partial);
296
+ }
297
+ return new ResumableResult(result);
298
+ }
299
+
300
+ public void cleanup()
301
+ {
302
+ bulkLoader.cleanup(config, resumeState);
303
+ }
304
+ }
305
+
306
+ public void destroy()
307
+ {
308
+ try {
309
+ injector.destroy();
310
+ }
311
+ catch (Exception ex) {
312
+ throw Throwables.propagate(ex);
313
+ }
314
+ }
315
+ }