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,129 @@
1
+ module Embulk
2
+
3
+ require 'embulk/guess/schema_guess'
4
+
5
+ class GuessPlugin
6
+ def guess(config, sample_buffer)
7
+ raise NotImplementedError, "GuessPlugin#guess(config, sample_buffer) must be implemented"
8
+ end
9
+
10
+ if Embulk.java?
11
+ def self.new_java
12
+ JavaAdapter.new(new)
13
+ end
14
+
15
+ class JavaAdapter
16
+ include Java::GuessPlugin
17
+
18
+ def initialize(ruby_guess)
19
+ @ruby_guess = ruby_guess
20
+ end
21
+
22
+ def guess(java_config, java_sample)
23
+ config = DataSource.from_java(java_config)
24
+ sample = Buffer.from_java(java_sample)
25
+ config_diff_hash = @ruby_guess.guess(config, sample)
26
+ return DataSource.from_ruby_hash(config_diff_hash).to_java
27
+ end
28
+ end
29
+
30
+ def self.from_java(java_class)
31
+ JavaPlugin.ruby_adapter(java_class, GuessPlugin, RubyAdapter)
32
+ end
33
+
34
+ module RubyAdapter
35
+ module ClassMethods
36
+ end
37
+
38
+ def guess(config, sample)
39
+ java_config = config.to_java
40
+ java_sample = sample.to_java
41
+ java_config_diff = java_object.guess(java_config, java_sample)
42
+ return DataSource.from_java(java_config_diff)
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ class TextGuessPlugin < GuessPlugin
49
+ def guess(config, sample)
50
+ if config.fetch('parser', {}).fetch('charset', nil).nil?
51
+ require 'embulk/guess/charset'
52
+ charset_guess = Guess::CharsetGuessPlugin.new
53
+ return charset_guess.guess(config, sample)
54
+ end
55
+
56
+ # TODO pure-ruby LineDecoder implementation?
57
+ begin
58
+ parser_task = config.param("parser", :hash, default: {}).load_config(Java::LineDecoder::DecoderTask)
59
+ rescue
60
+ # TODO log?
61
+ p $!
62
+ p $!.backtrace
63
+ return DataSource.new
64
+ end
65
+
66
+ decoder = Java::LineDecoder.new(Java::ListFileInput.new([[sample.to_java]]), parser_task)
67
+ sample_text = ''
68
+ while decoder.nextFile
69
+ first = true
70
+ while line = decoder.poll
71
+ if first
72
+ first = false
73
+ else
74
+ sample_text << parser_task.getNewline().getString()
75
+ end
76
+ sample_text << line
77
+ end
78
+ end
79
+
80
+ return guess_text(config, sample_text);
81
+ end
82
+
83
+ def guess_text(config, sample_text)
84
+ raise NotImplementedError, "TextGuessPlugin#guess_text(config, sample_text) must be implemented"
85
+ end
86
+ end
87
+
88
+ class LineGuessPlugin < GuessPlugin
89
+ def guess(config, sample)
90
+ if config.fetch('parser', {}).fetch('charset', nil).nil?
91
+ require 'embulk/guess/charset'
92
+ charset_guess = Guess::CharsetGuessPlugin.new
93
+ return charset_guess.guess(config, sample)
94
+ end
95
+
96
+ if config.fetch('parser', {}).fetch('newline', nil).nil?
97
+ require 'embulk/guess/newline'
98
+ newline_guess = Guess::NewlineGuessPlugin.new
99
+ return newline_guess.guess(config, sample)
100
+ end
101
+
102
+ # TODO pure-ruby LineDecoder implementation?
103
+ begin
104
+ parser_task = config.param("parser", :hash, default: {}).load_config(Java::LineDecoder::DecoderTask)
105
+ rescue
106
+ # TODO log?
107
+ p $!
108
+ p $!.backtrace
109
+ return DataSource.new
110
+ end
111
+
112
+ decoder = Java::LineDecoder.new(Java::ListFileInput.new([[sample.to_java]]), parser_task)
113
+ sample_lines = []
114
+ while decoder.nextFile
115
+ while line = decoder.poll
116
+ sample_lines << line
117
+ end
118
+ sample_lines.pop unless sample_lines.empty? # last line can be partial
119
+ end
120
+
121
+ return guess_lines(config, sample_lines);
122
+ end
123
+
124
+ def guess_lines(config, sample_lines)
125
+ raise NotImplementedError, "LineGuessPlugin#guess_lines(config, sample_lines) must be implemented"
126
+ end
127
+ end
128
+
129
+ end
@@ -0,0 +1,121 @@
1
+ module Embulk
2
+
3
+ require 'embulk/data_source'
4
+ require 'embulk/schema'
5
+ require 'embulk/page_builder'
6
+
7
+ class InputPlugin
8
+ def self.transaction(config, &control)
9
+ raise NotImplementedError, "InputPlugin.transaction(config, &control) must be implemented"
10
+ end
11
+
12
+ def self.resume(task, columns, count, &control)
13
+ raise NotImplementedError, "#{self}.resume(task, columns, count, &control) is not implemented. This plugin is not resumable"
14
+ end
15
+
16
+ def self.cleanup(task, schema, count, task_reports)
17
+ # do nothing by default
18
+ end
19
+
20
+ def self.guess(config)
21
+ raise NotImplementedError, "#{self}.guess(config) is not implemented. This input plugin does not support guess."
22
+ end
23
+
24
+ def initialize(task, schema, index, page_builder)
25
+ @task = task
26
+ @schema = schema
27
+ @index = index
28
+ @page_builder = page_builder
29
+ init
30
+ end
31
+
32
+ attr_reader :task, :schema, :index, :page_builder
33
+
34
+ def init
35
+ end
36
+
37
+ def run
38
+ raise NotImplementedError, "InputPlugin#run must be implemented"
39
+ end
40
+
41
+ if Embulk.java?
42
+ def self.new_java
43
+ JavaAdapter.new(self)
44
+ end
45
+
46
+ class JavaAdapter
47
+ include Java::InputPlugin
48
+
49
+ def initialize(ruby_class)
50
+ @ruby_class = ruby_class
51
+ end
52
+
53
+ def transaction(java_config, java_control)
54
+ config = DataSource.from_java(java_config)
55
+ config_diff_hash = @ruby_class.transaction(config) do |task_source_hash,columns,task_count|
56
+ java_task_source = DataSource.from_ruby_hash(task_source_hash).to_java
57
+ java_schema = Schema.new(columns).to_java
58
+ java_task_reports = java_control.run(java_task_source, java_schema, task_count)
59
+ java_task_reports.map {|java_task_report|
60
+ DataSource.from_java(java_task_report)
61
+ }
62
+ end
63
+ # TODO check return type of #transaction
64
+ return DataSource.from_ruby_hash(config_diff_hash).to_java
65
+ end
66
+
67
+ def resume(java_task_source, java_schema, task_count, java_control)
68
+ task_source = DataSource.from_java(java_task_source)
69
+ schema = Schema.from_java(java_schema)
70
+ config_diff_hash = @ruby_class.resume(task_source, schema, task_count) do |task_source_hash,columns,task_count|
71
+ java_task_source = DataSource.from_ruby_hash(task_source_hash).to_java
72
+ java_schema = Schema.new(columns).to_java
73
+ java_task_reports = java_control.run(java_task_source, java_schema, task_count)
74
+ java_task_reports.map {|java_task_report|
75
+ DataSource.from_java(java_task_report)
76
+ }
77
+ end
78
+ # TODO check return type of #resume
79
+ return DataSource.from_ruby_hash(config_diff_hash).to_java
80
+ end
81
+
82
+ def cleanup(java_task_source, java_schema, task_count, java_task_reports)
83
+ task_source = DataSource.from_java(java_task_source)
84
+ schema = Schema.from_java(java_schema)
85
+ task_reports = java_task_reports.map {|c| DataSource.from_java(c) }
86
+ @ruby_class.cleanup(task_source, schema, task_count, task_reports)
87
+ return nil
88
+ end
89
+
90
+ def guess(java_config)
91
+ config = DataSource.from_java(java_config)
92
+ config_diff_hash = @ruby_class.guess(config)
93
+ return DataSource.from_ruby_hash(config_diff_hash).to_java
94
+ end
95
+
96
+ def run(java_task_source, java_schema, processor_index, java_output)
97
+ task_source = DataSource.from_java(java_task_source)
98
+ schema = Schema.from_java(java_schema)
99
+ page_builder = PageBuilder.new(schema, java_output)
100
+ begin
101
+ task_report_hash = @ruby_class.new(task_source, schema, processor_index, page_builder).run
102
+ return DataSource.from_ruby_hash(task_report_hash).to_java
103
+ ensure
104
+ page_builder.close
105
+ end
106
+ end
107
+ end
108
+
109
+ def self.from_java(java_class)
110
+ JavaPlugin.ruby_adapter_class(java_class, InputPlugin, RubyAdapter)
111
+ end
112
+
113
+ module RubyAdapter
114
+ module ClassMethods
115
+ end
116
+ # TODO
117
+ end
118
+ end
119
+ end
120
+
121
+ end
@@ -0,0 +1,24 @@
1
+ module Embulk
2
+ module Java
3
+ require 'embulk/java/imports'
4
+ require 'embulk/java/time_helper'
5
+
6
+ module Injected
7
+ # Following constats are set by org.embulk.jruby.JRubyScriptingModule:
8
+ # Injector
9
+ # ModelManager
10
+ # BufferAllocator
11
+ end
12
+
13
+ def self.injector
14
+ Injected::Injector
15
+ end
16
+
17
+ require 'embulk'
18
+ require 'embulk/error'
19
+ require 'embulk/buffer'
20
+ require 'embulk/data_source'
21
+ require 'embulk/plugin'
22
+ require 'embulk/runner'
23
+ end
24
+ end
@@ -0,0 +1,69 @@
1
+ require 'java'
2
+
3
+ #
4
+ # this file is loaded by embulk/java/bootstrap.rb
5
+ #
6
+
7
+ module Embulk::Java
8
+ module Config
9
+ include_package 'org.embulk.config'
10
+ end
11
+
12
+ module Exec
13
+ include_package 'org.embulk.exec'
14
+ end
15
+
16
+ module Plugin
17
+ include_package 'org.embulk.plugin'
18
+ end
19
+
20
+ module SPI
21
+ module Time
22
+ include_package 'org.embulk.time'
23
+ end
24
+
25
+ module Type
26
+ include_package 'org.embulk.type'
27
+ end
28
+
29
+ module Unit
30
+ include_package 'org.embulk.unit'
31
+ end
32
+
33
+ module Util
34
+ include_package 'org.embulk.util'
35
+ end
36
+
37
+ include_package 'org.embulk.spi'
38
+ end
39
+
40
+ include_package 'org.embulk'
41
+
42
+ java_import 'org.embulk.spi.Buffer'
43
+ java_import 'org.embulk.config.DataSourceImpl'
44
+ java_import 'org.embulk.spi.time.Timestamp'
45
+ java_import 'org.embulk.spi.time.TimestampParseException'
46
+ java_import 'org.embulk.spi.GuessPlugin'
47
+ java_import 'org.embulk.spi.OutputPlugin'
48
+ java_import 'org.embulk.spi.FilterPlugin'
49
+ java_import 'org.embulk.spi.InputPlugin'
50
+ java_import 'org.embulk.spi.ParserPlugin'
51
+ java_import 'org.embulk.spi.FormatterPlugin'
52
+ java_import 'org.embulk.spi.EncoderPlugin'
53
+ java_import 'org.embulk.spi.DecoderPlugin'
54
+ java_import 'org.embulk.spi.TransactionalPageOutput'
55
+ java_import 'org.embulk.spi.PageReader'
56
+ java_import 'org.embulk.spi.PageBuilder'
57
+ java_import 'org.embulk.spi.util.DynamicPageBuilder'
58
+ java_import 'org.embulk.spi.util.LineDecoder'
59
+ java_import 'org.embulk.spi.util.ListFileInput'
60
+ java_import 'org.embulk.spi.Schema'
61
+ java_import 'org.embulk.spi.Column'
62
+ java_import 'org.embulk.spi.type.Type'
63
+ java_import 'org.embulk.spi.type.Types'
64
+ java_import 'org.embulk.spi.FileInputRunner'
65
+ java_import 'org.embulk.spi.FileOutputRunner'
66
+ java_import 'org.embulk.plugin.PluginClassLoaderFactory'
67
+
68
+ # TODO
69
+ end
@@ -0,0 +1,79 @@
1
+ module Embulk
2
+ module Java
3
+ #require 'embulk/java/imports'
4
+ require 'time' # Date._strptime
5
+
6
+ class TimeParserHelper
7
+ #include Java::JRubyTimeParserHelper
8
+ include org.embulk.spi.time.JRubyTimeParserHelper
9
+
10
+ class Factory
11
+ #include Java::JRubyTimeParserHelperFactory
12
+ include org.embulk.spi.time.JRubyTimeParserHelperFactory
13
+
14
+ def newInstance(format_string, year, mon, day, hour, min, sec, usec)
15
+ default_time = Time.utc(year, mon, day, hour, min, sec, usec)
16
+ TimeParserHelper.new(format_string, default_time)
17
+ end
18
+ end
19
+
20
+ def initialize(format_string, default_time)
21
+ @format_string = format_string
22
+ @default_time = default_time
23
+ end
24
+
25
+ # Override
26
+ def strptimeUsec(text)
27
+ hash = Date._strptime(text, @format_string)
28
+ unless hash
29
+ raise Java::TimestampParseException.new("Failed to parse '" + text + "'")
30
+ end
31
+
32
+ if seconds = hash[:seconds]
33
+ sec_fraction = hash[:sec_fraction] # Rational
34
+ usec = sec_fraction * 1_000_000 if sec_fraction
35
+ return seconds * 1_000_000 + usec.to_i
36
+
37
+ else
38
+ year = hash[:year]
39
+ mon = hash[:mon]
40
+ day = hash[:mday]
41
+ hour = hash[:hour]
42
+ min = hash[:min]
43
+ sec = hash[:sec]
44
+ sec_fraction = hash[:sec_fraction]
45
+ usec = sec_fraction * 1_000_000 if sec_fraction
46
+ zone = hash[:zone]
47
+
48
+ now = @default_time
49
+ begin
50
+ break if year; year = now.year
51
+ break if mon; mon = now.mon
52
+ break if day; day = now.day
53
+ break if hour; hour = now.hour
54
+ break if min; min = now.min
55
+ break if sec; sec = now.sec
56
+ break if sec_fraction; usec = now.tv_usec
57
+ end until true
58
+
59
+ year ||= 1970
60
+ mon ||= 1
61
+ day ||= 1
62
+ hour ||= 0
63
+ min ||= 0
64
+ sec ||= 0
65
+ usec ||= 0
66
+
67
+ @zone = zone
68
+ time = Time.utc(year, mon, day, hour, min, sec, usec)
69
+ return time.tv_sec * 1_000_000 + time.tv_usec
70
+ end
71
+ end
72
+
73
+ # Override
74
+ def getZone
75
+ @zone
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,90 @@
1
+ module Embulk
2
+
3
+ require 'embulk/plugin'
4
+
5
+ class JavaPlugin
6
+ def self.classloader(dir)
7
+ jars = Dir["#{dir}/**/*.jar"]
8
+ urls = jars.map {|jar| java.io.File.new(File.expand_path(jar)).toURI.toURL }
9
+ factory = Java.injector.getInstance(Java::PluginClassLoaderFactory.java_class)
10
+ factory.create(urls, JRuby.runtime.getJRubyClassLoader())
11
+ end
12
+
13
+ def self.register_input(name, class_fqdn, jar_dir)
14
+ java_class = classloader(jar_dir).loadClass(class_fqdn) # TODO handle class not found error
15
+ Plugin.register_java_input(name, java_class)
16
+ end
17
+
18
+ def self.register_output(name, class_fqdn, jar_dir)
19
+ java_class = classloader(jar_dir).loadClass(class_fqdn)
20
+ Plugin.register_java_output(name, java_class)
21
+ end
22
+
23
+ def self.register_filter(name, class_fqdn, jar_dir)
24
+ java_class = classloader(jar_dir).loadClass(class_fqdn)
25
+ Plugin.register_java_filter(name, java_class)
26
+ end
27
+
28
+ def self.register_parser(name, class_fqdn, jar_dir)
29
+ java_class = classloader(jar_dir).loadClass(class_fqdn)
30
+ Plugin.register_java_parser(name, java_class)
31
+ end
32
+
33
+ def self.register_formatter(name, class_fqdn, jar_dir)
34
+ java_class = classloader(jar_dir).loadClass(class_fqdn)
35
+ Plugin.register_java_formatter(name, java_class)
36
+ end
37
+
38
+ def self.register_decoder(name, class_fqdn, jar_dir)
39
+ java_class = classloader(jar_dir).loadClass(class_fqdn)
40
+ Plugin.register_java_decoder(name, java_class)
41
+ end
42
+
43
+ def self.register_encoder(name, class_fqdn, jar_dir)
44
+ java_class = classloader(jar_dir).loadClass(class_fqdn)
45
+ Plugin.register_java_encoder(name, java_class)
46
+ end
47
+
48
+ def self.register_guess(name, class_fqdn, jar_dir)
49
+ java_class = classloader(jar_dir).loadClass(class_fqdn)
50
+ Plugin.register_java_guess(name, java_class)
51
+ end
52
+
53
+ def self.register_executor(name, class_fqdn, jar_dir)
54
+ java_class = classloader(jar_dir).loadClass(class_fqdn)
55
+ Plugin.register_java_executor(name, java_class)
56
+ end
57
+
58
+ def self.ruby_adapter_class(java_class, ruby_base_class, ruby_module)
59
+ Class.new(ruby_base_class) do
60
+ const_set(:JAVA_CLASS, java_class)
61
+
62
+ include ruby_module
63
+ extend ruby_module::ClassMethods
64
+
65
+ unless method_defined?(:java_object)
66
+ def java_object
67
+ @java_object ||= self.class.new_java
68
+ end
69
+ end
70
+
71
+ unless (class<<self;self;end).method_defined?(:java_class)
72
+ def self.java_class
73
+ self::JAVA_CLASS
74
+ end
75
+ end
76
+
77
+ # TODO ruby_base_class already implements new_java. So
78
+ # this line returns always true:
79
+ #unless (class<<self;self;end).method_defined?(:new_java)
80
+ # but this line could return false unexpectedly if
81
+ # ruby_module::ClassMethods includes other modules.
82
+ unless ruby_module::ClassMethods.method_defined?(:new_java)
83
+ def self.new_java
84
+ Java.injector.getInstance(java_class)
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end