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,239 @@
1
+
2
+ module Embulk
3
+ require 'forwardable'
4
+ require 'embulk/error'
5
+ require 'embulk/plugin_registry'
6
+ require 'embulk/input_plugin'
7
+ require 'embulk/file_input_plugin'
8
+ require 'embulk/output_plugin'
9
+ require 'embulk/file_output_plugin'
10
+ require 'embulk/filter_plugin'
11
+ require 'embulk/parser_plugin'
12
+ require 'embulk/formatter_plugin'
13
+ require 'embulk/decoder_plugin'
14
+ require 'embulk/encoder_plugin'
15
+ require 'embulk/guess_plugin'
16
+ require 'embulk/executor_plugin'
17
+ require 'embulk/java_plugin' if Embulk.java?
18
+
19
+ class PluginManager
20
+ def initialize
21
+ @registries = {}
22
+ %w[input output parser formatter decoder encoder line_filter filter guess executor].each do |category|
23
+ @registries[category.to_sym] = PluginRegistry.new(category, "embulk/#{category}/")
24
+ end
25
+ end
26
+
27
+ def register_input(type, klass)
28
+ register_plugin(:input, type, klass, InputPlugin)
29
+ end
30
+
31
+ def register_output(type, klass)
32
+ register_plugin(:output, type, klass, OutputPlugin,
33
+ "Output plugin #{klass} must extend OutputPlugin")
34
+ end
35
+
36
+ def register_filter(type, klass)
37
+ register_plugin(:filter, type, klass, FilterPlugin)
38
+ end
39
+
40
+ def register_parser(type, klass)
41
+ register_plugin(:parser, type, klass, ParserPlugin)
42
+ end
43
+
44
+ def register_formatter(type, klass)
45
+ register_plugin(:formatter, type, klass, FormatterPlugin)
46
+ end
47
+
48
+ ## TODO DecoderPlugin JRuby API is not written by anyone yet
49
+ #def register_decoder(type, klass)
50
+ # register_plugin(:decoder, type, klass, DecoderPlugin)
51
+ #end
52
+
53
+ ## TODO EncoderPlugin JRuby API is not written by anyone yet
54
+ #def register_encoder(type, klass)
55
+ # register_plugin(:encoder, type, klass, EncoderPlugin)
56
+ #end
57
+
58
+ def register_guess(type, klass)
59
+ register_plugin(:guess, type, klass, GuessPlugin,
60
+ "Guess plugin #{klass} must extend GuessPlugin, LineGuessPlugin, or TextGuessPlugin class")
61
+ end
62
+
63
+ # TODO InputPlugin::RubyAdapter is not written by anyone yet
64
+ #def get_input(type)
65
+ # lookup(:input, type)
66
+ #end
67
+
68
+ # TODO OutputPlugin::RubyAdapter is not written by anyone yet
69
+ #def get_output(type)
70
+ # lookup(:output, type)
71
+ #end
72
+
73
+ # TODO FilterPlugin::RubyAdapter is not written by anyone yet
74
+ #def get_filter(type)
75
+ # lookup(:filter, type)
76
+ #end
77
+
78
+ # TODO FilterPlugin::RubyAdapter is not written by anyone yet
79
+ #def get_parser(type)
80
+ # # TODO not implemented yet
81
+ # lookup(:parser, type)
82
+ #end
83
+
84
+ # TODO FormatterPlugin::RubyAdapter is not written by anyone yet
85
+ #def get_formatter(type)
86
+ # # TODO not implemented yet
87
+ # lookup(:formatter, type)
88
+ #end
89
+
90
+ # TODO DecoderPlugin::RubyAdapter is not written by anyone yet
91
+ #def get_decoder(type)
92
+ # # TODO not implemented yet
93
+ # lookup(:decoder, type)
94
+ #end
95
+
96
+ # TODO EncoderPlugin::RubyAdapter is not written by anyone yet
97
+ #def get_encoder(type)
98
+ # # TODO not implemented yet
99
+ # lookup(:encoder, type)
100
+ #end
101
+
102
+ def get_guess(type)
103
+ lookup(:guess, type)
104
+ end
105
+
106
+ def register_java_input(type, klass)
107
+ register_java_plugin(:input, type, klass,
108
+ "org.embulk.spi.InputPlugin" => InputPlugin,
109
+ "org.embulk.spi.FileInputPlugin" => FileInputPlugin)
110
+ end
111
+
112
+ def register_java_output(type, klass)
113
+ register_java_plugin(:output, type, klass,
114
+ "org.embulk.spi.OutputPlugin" => OutputPlugin,
115
+ "org.embulk.spi.FileOutputPlugin" => FileOutputPlugin)
116
+ end
117
+
118
+ def register_java_filter(type, klass)
119
+ register_java_plugin(:filter, type, klass,
120
+ "org.embulk.spi.FilterPlugin" => FilterPlugin)
121
+ end
122
+
123
+ def register_java_parser(type, klass)
124
+ register_java_plugin(:parser, type, klass,
125
+ "org.embulk.spi.ParserPlugin" => ParserPlugin)
126
+ end
127
+
128
+ def register_java_formatter(type, klass)
129
+ register_java_plugin(:formatter, type, klass,
130
+ "org.embulk.spi.FormatterPlugin" => FormatterPlugin)
131
+ end
132
+
133
+ def register_java_decoder(type, klass)
134
+ register_java_plugin(:decoder, type, klass,
135
+ "org.embulk.spi.DecoderPlugin" => DecoderPlugin)
136
+ end
137
+
138
+ def register_java_encoder(type, klass)
139
+ register_java_plugin(:encoder, type, klass,
140
+ "org.embulk.spi.EncoderPlugin" => EncoderPlugin)
141
+ end
142
+
143
+ def register_java_guess(type, klass)
144
+ register_java_plugin(:guess, type, klass,
145
+ "org.embulk.spi.GuessPlugin" => GuessPlugin)
146
+ end
147
+
148
+ def register_java_executor(type, klass)
149
+ register_java_plugin(:executor, type, klass,
150
+ "org.embulk.spi.ExecutorPlugin" => ExecutorPlugin)
151
+ end
152
+
153
+ def new_java_input(type)
154
+ lookup(:input, type).new_java
155
+ end
156
+
157
+ def new_java_output(type)
158
+ lookup(:output, type).new_java
159
+ end
160
+
161
+ def new_java_filter(type)
162
+ lookup(:filter, type).new_java
163
+ end
164
+
165
+ def new_java_parser(type)
166
+ lookup(:parser, type).new_java
167
+ end
168
+
169
+ def new_java_formatter(type)
170
+ lookup(:formatter, type).new_java
171
+ end
172
+
173
+ def new_java_decoder(type)
174
+ lookup(:decoder, type).new_java
175
+ end
176
+
177
+ def new_java_encoder(type)
178
+ lookup(:encoder, type).new_java
179
+ end
180
+
181
+ def new_java_guess(type)
182
+ lookup(:guess, type).new_java
183
+ end
184
+
185
+ def new_java_executor(type)
186
+ lookup(:executor, type).new_java
187
+ end
188
+
189
+ private
190
+
191
+ # TODO lookup should fallback to Java PluginSource
192
+ # if not found so that ruby plugins can call java plugins.
193
+ # call Java.injector.newPlugin and wrap the instance in a reverse bridge object.
194
+
195
+ def lookup(category, type)
196
+ @registries[category].lookup(type)
197
+ end
198
+
199
+ def register_plugin(category, type, klass, base_class, message=nil)
200
+ unless klass < base_class
201
+ message ||= "Plugin #{klass} must inherit #{base_class}"
202
+ raise message
203
+ end
204
+ @registries[category].register(type, klass)
205
+ end
206
+
207
+ def register_java_plugin(category, type, klass, iface_map, message=nil)
208
+ found = iface_map.find do |iface_name,ruby_base_class|
209
+ iface = JRuby.runtime.getJRubyClassLoader.load_class(iface_name)
210
+ iface.isAssignableFrom(klass)
211
+ end
212
+ unless found
213
+ message ||= "Java plugin #{klass} must implement #{iface_map.keys.join(' or ')}"
214
+ raise message
215
+ end
216
+ adapted = found.last.from_java(klass)
217
+ @registries[category].register(type, adapted)
218
+ end
219
+ end
220
+
221
+ module Plugin
222
+ class <<self
223
+ INSTANCE = PluginManager.new
224
+
225
+ extend Forwardable
226
+
227
+ def_delegators 'INSTANCE',
228
+ :register_input, :get_input, :register_java_input, :new_java_input,
229
+ :register_output, :get_output, :register_java_output, :new_java_output,
230
+ :register_filter, :get_filter, :register_java_filter, :new_java_filter,
231
+ :register_parser, :get_parser, :register_java_parser, :new_java_parser,
232
+ :register_formatter, :get_formatter, :register_java_formatter, :new_java_formatter,
233
+ :register_decoder, :get_decoder, :register_java_decoder, :new_java_decoder,
234
+ :register_encoder, :get_encoder, :register_java_encoder, :new_java_encoder,
235
+ :register_guess, :get_guess, :register_java_guess, :new_java_guess,
236
+ :register_executor, :get_executor, :register_java_executor, :new_java_executor
237
+ end
238
+ end
239
+ end
@@ -0,0 +1,96 @@
1
+
2
+ module Embulk
3
+ require 'embulk/error'
4
+ require 'embulk/logger'
5
+
6
+ class PluginRegistry
7
+ def initialize(category, search_prefix)
8
+ @category = category
9
+ @search_prefix = search_prefix
10
+ @loaded_gems = {}
11
+ @map = {}
12
+ end
13
+
14
+ attr_reader :category
15
+
16
+ def register(type, value)
17
+ type = type.to_sym
18
+ @map[type] = value
19
+ end
20
+
21
+ def lookup(type)
22
+ type = type.to_sym
23
+ if value = @map[type]
24
+ return value
25
+ end
26
+ if search(type)
27
+ if value = @map[type]
28
+ return value
29
+ end
30
+ raise PluginLoadError, "Unknown #{@category} plugin '#{type}'. #{@search_prefix}#{type}.rb is installed but it does not correctly register plugin."
31
+ else
32
+ raise PluginLoadError, "Unknown #{@category} plugin '#{type}'. #{@search_prefix}#{type}.rb is not installed. Run 'embulk gem search -rd embulk-#{@category}' command to find plugins."
33
+ end
34
+ end
35
+
36
+ def search(type)
37
+ name = "#{@search_prefix}#{type}"
38
+ begin
39
+ require_and_show name
40
+ return true
41
+ rescue LoadError => e
42
+ # catch LoadError but don't catch ClassNotFoundException
43
+ raise e if e.to_s =~ /java.lang.ClassNotFoundException/
44
+ raise e if $LOAD_PATH.any? {|dir| File.exists? File.join(dir, "#{name}.rb") }
45
+ end
46
+
47
+ # search from $LOAD_PATH
48
+ load_path_files = $LOAD_PATH.map do |lp|
49
+ lpath = File.expand_path(File.join(lp, "#{name}.rb"))
50
+ File.exist?(lpath) ? lpath : nil
51
+ end
52
+
53
+ paths = load_path_files.compact.sort # sort to prefer newer version
54
+ paths.each do |path|
55
+ require_and_show path
56
+ return true
57
+ end
58
+
59
+ # search gems
60
+ if defined?(::Gem::Specification) && ::Gem::Specification.respond_to?(:find_all)
61
+ specs = Gem::Specification.find_all do |spec|
62
+ spec.contains_requirable_file? name
63
+ end
64
+
65
+ # prefer newer version
66
+ specs = specs.sort_by {|spec| spec.version }
67
+ if spec = specs.last
68
+ spec.require_paths.each do |lib|
69
+ require_and_show "#{spec.full_gem_path}/#{lib}/#{name}", spec
70
+ end
71
+ return true
72
+ end
73
+ end
74
+
75
+ return false
76
+ end
77
+
78
+ def require_and_show(path, spec=nil)
79
+ require path
80
+ unless spec
81
+ name, spec = Gem.loaded_specs.find {|name,spec|
82
+ #spec.files.include?(path)
83
+ spec.contains_requirable_file?(path)
84
+ }
85
+ end
86
+ if spec
87
+ unless @loaded_gems[spec.name]
88
+ Embulk.logger.info "Loaded plugin #{spec.name} (#{spec.version})"
89
+ @loaded_gems[spec.name]
90
+ end
91
+ else
92
+ Embulk.logger.info "Loaded plugin #{path} from a load path"
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,184 @@
1
+ module Embulk
2
+
3
+ # Embulk.setup initializes:
4
+ # Runner = EmbulkRunner.new
5
+
6
+ class EmbulkRunner
7
+ def initialize(embed)
8
+ @embed = embed # org.embulk.EmbulkEmbed
9
+ end
10
+
11
+ def guess(config, options={})
12
+ configSource = read_config(config, options)
13
+ output_path = options[:next_config_output_path]
14
+
15
+ check_file_writable(output_path)
16
+
17
+ configDiff = @embed.guess(configSource)
18
+
19
+ guessedConfigSource = configSource.merge(configDiff)
20
+ yaml = write_config(output_path, guessedConfigSource)
21
+ STDERR.puts yaml
22
+ if output_path
23
+ puts "Created '#{output_path}' file."
24
+ else
25
+ puts "Use -o PATH option to write the guessed config file to a file."
26
+ end
27
+
28
+ nil
29
+ end
30
+
31
+ def preview(config, options={})
32
+ configSource = read_config(config, options)
33
+ format = options[:format]
34
+
35
+ previewResult = @embed.preview(configSource)
36
+
37
+ modelManager = @embed.getModelManager
38
+ printer =
39
+ case format || "table"
40
+ when "table"
41
+ org.embulk.command.TablePreviewPrinter.new(java.lang.System.out, modelManager, previewResult.getSchema)
42
+ when "vertical"
43
+ org.embulk.command.VerticalPreviewPrinter.new(java.lang.System.out, modelManager, previewResult.getSchema)
44
+ else
45
+ raise ArgumentError, "Unknown preview output format '#{format}'. Supported formats: table, vertical"
46
+ end
47
+
48
+ printer.printAllPages(previewResult.getPages)
49
+ printer.finish
50
+
51
+ nil
52
+ end
53
+
54
+ def run(config, options={})
55
+ configSource = read_config(config, options)
56
+ output_path = options[:next_config_output_path]
57
+ resume_state_path = options[:resume_state_path]
58
+
59
+ check_file_writable(output_path)
60
+ check_file_writable(resume_state_path)
61
+
62
+ if resume_state_path
63
+ begin
64
+ resumeConfig = read_yaml_config_file(resume_state_path)
65
+ resumeConfig = nil if resumeConfig.isEmpty
66
+ rescue
67
+ # TODO log?
68
+ resumeConfig = nil
69
+ end
70
+ end
71
+
72
+ if resumeConfig
73
+ resumableResult = @embed.resumeState(configSource, resumeConfig).resume
74
+ elsif resume_state_path
75
+ resumableResult = @embed.runResumable(configSource)
76
+ else
77
+ executionResult = @embed.run(configSource)
78
+ end
79
+
80
+ unless executionResult
81
+ unless resumableResult.isSuccessful
82
+ Embulk.logger.info "Writing resume state to '#{resume_state_path}'"
83
+ write_config(resume_state_path, resumableResult.getResumeState)
84
+ Embulk.logger.info "Resume state is written. Run the transaction again with -r option to resume or use \"cleanup\" subcommand to delete intermediate data."
85
+ raise resumableResult.getCause
86
+ end
87
+ executionResult = resumableResult.getSuccessfulResult
88
+ end
89
+
90
+ # delete resume file
91
+ if resume_state_path
92
+ File.delete(resume_state_path) rescue nil
93
+ end
94
+
95
+ configDiff = executionResult.getConfigDiff
96
+ Embulk.logger.info("Committed.")
97
+ Embulk.logger.info("Next config diff: #{configDiff.toString}")
98
+
99
+ write_config(output_path, configSource.merge(configDiff))
100
+ end
101
+
102
+ #def resume_state(config, options={})
103
+ # configSource = read_config(config, options)
104
+ # Resumed.new(self, DataSource.from_java(configSource), options)
105
+ #end
106
+
107
+ private
108
+
109
+ def read_config(config, options={})
110
+ case config
111
+ when String
112
+ case config
113
+ when /\.yml\.liquid$/
114
+ require 'liquid'
115
+ template_params = options[:template_params] || {}
116
+ @embed.newConfigLoader.fromYamlString run_liquid(File.read(config), template_params)
117
+ when /\.yml$/
118
+ @embed.newConfigLoader.fromYamlString File.read(config)
119
+ else
120
+ raise ConfigError, "Unsupported file extension. Supported file extensions are .yml and .yml.liquid: #{config}"
121
+ end
122
+
123
+ when Hash, DataSource
124
+ DataSource.new(config).to_java
125
+ end
126
+ end
127
+
128
+ def read_yaml_config_file(path)
129
+ @embed.newConfigLoader.fromYamlString File.read(config)
130
+ end
131
+
132
+ def run_liquid(source, params)
133
+ require 'liquid'
134
+ template = Liquid::Template.parse(source)
135
+
136
+ data = {
137
+ "env" => ENV.to_h,
138
+ }.merge(params)
139
+
140
+ template.render(data)
141
+ end
142
+
143
+ def check_file_writable(path)
144
+ if path
145
+ # Open file with append mode and do nothing.
146
+ # If file is not writable, it throws an exception.
147
+ File.open(path, "ab")
148
+ end
149
+ end
150
+
151
+ def write_config(path, modelObject)
152
+ yaml = dump_yaml(modelObject)
153
+ if path
154
+ File.write(path, yaml)
155
+ end
156
+ yaml
157
+ end
158
+
159
+ def dump_yaml(modelObject)
160
+ modelManager = @embed.getModelManager
161
+ obj = modelManager.readObject(java.lang.Object.java_class, modelManager.writeObject(modelObject))
162
+ return org.yaml.snakeyaml.Yaml.new.dump(obj)
163
+ end
164
+
165
+ #class Runnable
166
+ # def initialize(runner, config, options)
167
+ # @runner = runner
168
+ # @config = config
169
+ # @options = options
170
+ # end
171
+ #
172
+ # attr_reader :config
173
+ #
174
+ # def preview(options={})
175
+ # @runner.preview(@config, @options.merge(options))
176
+ # end
177
+ #
178
+ # def run(options={})
179
+ # @runner.run(@config, @options.merge(options))
180
+ # end
181
+ #end
182
+ end
183
+
184
+ end