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,141 @@
1
+ package org.embulk.config;
2
+
3
+ import java.io.File;
4
+ import java.io.FileInputStream;
5
+ import java.io.InputStream;
6
+ import java.io.IOException;
7
+ import java.util.Map;
8
+ import java.util.Properties;
9
+ import com.google.common.collect.ImmutableMap;
10
+ import com.google.inject.Inject;
11
+ import com.fasterxml.jackson.databind.ObjectMapper;
12
+ import com.fasterxml.jackson.core.JsonParser;
13
+ import com.fasterxml.jackson.databind.JsonNode;
14
+ import com.fasterxml.jackson.databind.RuntimeJsonMappingException;
15
+ import com.fasterxml.jackson.databind.node.ObjectNode;
16
+ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
17
+ import org.yaml.snakeyaml.Yaml;
18
+
19
+ public class ConfigLoader
20
+ {
21
+ private final ModelManager model;
22
+
23
+ @Inject
24
+ public ConfigLoader(ModelManager model)
25
+ {
26
+ this.model = model;
27
+ }
28
+
29
+ public ConfigSource newConfigSource()
30
+ {
31
+ return new DataSourceImpl(model);
32
+ }
33
+
34
+ public ConfigSource fromJsonString(String string)
35
+ {
36
+ JsonNode node;
37
+ try {
38
+ node = new ObjectMapper().readTree(string);
39
+ }
40
+ catch (IOException ex) {
41
+ throw new RuntimeException(ex);
42
+ }
43
+ validateJsonNode(node);
44
+ return new DataSourceImpl(model, (ObjectNode) node);
45
+ }
46
+
47
+ public ConfigSource fromJsonFile(File file) throws IOException
48
+ {
49
+ try (FileInputStream is = new FileInputStream(file)) {
50
+ return fromJson(is);
51
+ }
52
+ }
53
+
54
+ public ConfigSource fromJson(InputStream stream) throws IOException
55
+ {
56
+ JsonNode node = new ObjectMapper().readTree(stream);
57
+ validateJsonNode(node);
58
+ return new DataSourceImpl(model, (ObjectNode) node);
59
+ }
60
+
61
+ public ConfigSource fromYamlString(String string)
62
+ {
63
+ JsonNode node = objectToJson(new Yaml().load(string));
64
+ validateJsonNode(node);
65
+ return new DataSourceImpl(model, (ObjectNode) node);
66
+ }
67
+
68
+ public ConfigSource fromYamlFile(File file) throws IOException
69
+ {
70
+ try (FileInputStream stream = new FileInputStream(file)) {
71
+ return fromYaml(stream);
72
+ }
73
+ }
74
+
75
+ public ConfigSource fromYaml(InputStream stream) throws IOException
76
+ {
77
+ JsonNode node = objectToJson(new Yaml().load(stream));
78
+ validateJsonNode(node);
79
+ return new DataSourceImpl(model, (ObjectNode) node);
80
+ }
81
+
82
+ private static void validateJsonNode(JsonNode node)
83
+ {
84
+ if (!node.isObject()) {
85
+ throw new RuntimeJsonMappingException("Expected object to load ConfigSource but got "+node);
86
+ }
87
+ }
88
+
89
+ @Deprecated
90
+ public ConfigSource fromJson(JsonParser parser) throws IOException
91
+ {
92
+ // TODO check parsed.isObject()
93
+ ObjectNode source = (ObjectNode) new ObjectMapper().readTree(parser);
94
+ return new DataSourceImpl(model, source);
95
+ }
96
+
97
+ public ConfigSource fromPropertiesYamlLiteral(Properties props, String keyPrefix)
98
+ {
99
+ ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
100
+ for (String propName : props.stringPropertyNames()) {
101
+ builder.put(propName, props.getProperty(propName));
102
+ }
103
+ return fromPropertiesYamlLiteral(builder.build(), keyPrefix);
104
+ }
105
+
106
+ public ConfigSource fromPropertiesYamlLiteral(Map<String, String> props, String keyPrefix)
107
+ {
108
+ ObjectNode source = new ObjectNode(JsonNodeFactory.instance);
109
+ DataSource ds = new DataSourceImpl(model, source);
110
+ Yaml yaml = new Yaml();
111
+ for (Map.Entry<String, String> pair : props.entrySet()) {
112
+ if (!pair.getKey().startsWith(keyPrefix)) {
113
+ continue;
114
+ }
115
+ String keyName = pair.getKey().substring(keyPrefix.length());
116
+ Object parsedValue = yaml.load(pair.getValue()); // TODO exception handling
117
+ JsonNode node = objectToJson(parsedValue);
118
+
119
+ // handle "." as a map acccessor. for example:
120
+ // in.parser.type=csv => {"in": {"parser": {"type": "csv"}}}
121
+ // TODO handle "[]" as array index
122
+ String[] fragments = keyName.split("\\.");
123
+ DataSource key = ds;
124
+ for (int i=0; i < fragments.length - 1; i++) {
125
+ key = key.getNestedOrSetEmpty(fragments[i]); // TODO exception handling
126
+ }
127
+ key.set(fragments[fragments.length - 1], node);
128
+ }
129
+ return new DataSourceImpl(model, source);
130
+ }
131
+
132
+ private JsonNode objectToJson(Object object)
133
+ {
134
+ ObjectMapper objectMapper = new ObjectMapper();
135
+ try {
136
+ return objectMapper.readTree(objectMapper.writeValueAsString(object));
137
+ } catch (IOException ex) {
138
+ throw new RuntimeException(ex);
139
+ }
140
+ }
141
+ }
@@ -0,0 +1,31 @@
1
+ package org.embulk.config;
2
+
3
+ public interface ConfigSource
4
+ extends DataSource
5
+ {
6
+ <T> T loadConfig(Class<T> taskType);
7
+
8
+ @Override
9
+ ConfigSource getNested(String attrName);
10
+
11
+ @Override
12
+ ConfigSource getNestedOrSetEmpty(String attrName);
13
+
14
+ @Override
15
+ ConfigSource set(String attrName, Object v);
16
+
17
+ @Override
18
+ ConfigSource setNested(String attrName, DataSource v);
19
+
20
+ @Override
21
+ ConfigSource setAll(DataSource other);
22
+
23
+ @Override
24
+ ConfigSource remove(String attrName);
25
+
26
+ @Override
27
+ ConfigSource deepCopy();
28
+
29
+ @Override
30
+ ConfigSource merge(DataSource other);
31
+ }
@@ -0,0 +1,39 @@
1
+ package org.embulk.config;
2
+
3
+ import java.util.List;
4
+ import java.util.Map;
5
+ import com.fasterxml.jackson.databind.JsonNode;
6
+ import com.fasterxml.jackson.databind.node.ObjectNode;
7
+
8
+ public interface DataSource
9
+ {
10
+ List<String> getAttributeNames();
11
+
12
+ Iterable<Map.Entry<String, JsonNode>> getAttributes();
13
+
14
+ boolean isEmpty();
15
+
16
+ boolean has(String attrName);
17
+
18
+ <E> E get(Class<E> type, String attrName);
19
+
20
+ <E> E get(Class<E> type, String attrName, E defaultValue);
21
+
22
+ DataSource getNested(String attrName);
23
+
24
+ DataSource getNestedOrSetEmpty(String attrName);
25
+
26
+ DataSource set(String attrName, Object v);
27
+
28
+ DataSource setNested(String attrName, DataSource v);
29
+
30
+ DataSource setAll(DataSource other);
31
+
32
+ DataSource remove(String attrName);
33
+
34
+ DataSource deepCopy();
35
+
36
+ DataSource merge(DataSource other);
37
+
38
+ ObjectNode getObjectNode();
39
+ }
@@ -0,0 +1,231 @@
1
+ package org.embulk.config;
2
+
3
+ import java.util.List;
4
+ import java.util.Map;
5
+ import java.util.Iterator;
6
+ import com.google.common.collect.ImmutableList;
7
+ import com.fasterxml.jackson.databind.JsonNode;
8
+ import com.fasterxml.jackson.databind.node.ObjectNode;
9
+ import com.fasterxml.jackson.databind.node.ArrayNode;
10
+ import com.fasterxml.jackson.databind.node.JsonNodeFactory;
11
+
12
+ public class DataSourceImpl
13
+ implements ConfigSource, TaskSource, TaskReport, /* Deprecated */ CommitReport, ConfigDiff
14
+ {
15
+ protected final ObjectNode data;
16
+ protected final ModelManager model;
17
+
18
+ public DataSourceImpl(ModelManager model)
19
+ {
20
+ this(model, new ObjectNode(JsonNodeFactory.instance));
21
+ }
22
+
23
+ // visible for DataSourceSerDe, ConfigSourceLoader and TaskInvocationHandler.dump
24
+ public DataSourceImpl(ModelManager model, ObjectNode data)
25
+ {
26
+ this.data = data;
27
+ this.model = model;
28
+ }
29
+
30
+ protected DataSourceImpl newInstance(ModelManager model, ObjectNode data)
31
+ {
32
+ return new DataSourceImpl(model, (ObjectNode) data);
33
+ }
34
+
35
+ // visible for DataSourceSerDe.DataSourceSerializer
36
+ @Override
37
+ public ObjectNode getObjectNode()
38
+ {
39
+ return data;
40
+ }
41
+
42
+ @Override
43
+ public List<String> getAttributeNames()
44
+ {
45
+ return ImmutableList.copyOf(data.fieldNames());
46
+ }
47
+
48
+ @Override
49
+ public Iterable<Map.Entry<String, JsonNode>> getAttributes()
50
+ {
51
+ return new Iterable<Map.Entry<String,JsonNode>>() {
52
+ public Iterator<Map.Entry<String, JsonNode>> iterator()
53
+ {
54
+ return data.fields();
55
+ }
56
+ };
57
+ }
58
+
59
+ @Override
60
+ public boolean isEmpty()
61
+ {
62
+ return !data.fieldNames().hasNext();
63
+ }
64
+
65
+ @Override
66
+ public boolean has(String attrName)
67
+ {
68
+ return data.has(attrName);
69
+ }
70
+
71
+ @Override
72
+ public <E> E get(Class<E> type, String attrName)
73
+ {
74
+ JsonNode json = data.get(attrName);
75
+ if (json == null) {
76
+ throw new ConfigException("Attribute "+attrName+" is required but not set");
77
+ }
78
+ return model.readObject(type, json.traverse());
79
+ }
80
+
81
+ @Override
82
+ public <E> E get(Class<E> type, String attrName, E defaultValue)
83
+ {
84
+ JsonNode json = data.get(attrName);
85
+ if (json == null) {
86
+ return defaultValue;
87
+ }
88
+ return model.readObject(type, json.traverse());
89
+ }
90
+
91
+ @Override
92
+ public DataSourceImpl getNested(String attrName)
93
+ {
94
+ JsonNode json = data.get(attrName);
95
+ if (json == null) {
96
+ throw new ConfigException("Attribute "+attrName+" is required but not set");
97
+ }
98
+ if (!json.isObject()) {
99
+ throw new ConfigException("Attribute "+attrName+" must be an object");
100
+ }
101
+ return newInstance(model, (ObjectNode) json);
102
+ }
103
+
104
+ @Override
105
+ public DataSourceImpl getNestedOrSetEmpty(String attrName)
106
+ {
107
+ JsonNode json = data.get(attrName);
108
+ if (json == null) {
109
+ json = data.objectNode();
110
+ data.set(attrName, json);
111
+ } else if (!json.isObject()) {
112
+ throw new ConfigException("Attribute "+attrName+" must be an object");
113
+ }
114
+ return newInstance(model, (ObjectNode) json);
115
+ }
116
+
117
+ @Override
118
+ public DataSourceImpl set(String attrName, Object v)
119
+ {
120
+ if (v == null) {
121
+ remove(attrName);
122
+ } else {
123
+ data.set(attrName, model.writeObjectAsJsonNode(v));
124
+ }
125
+ return this;
126
+ }
127
+
128
+ @Override
129
+ public DataSourceImpl setNested(String attrName, DataSource v)
130
+ {
131
+ data.set(attrName, v.getObjectNode());
132
+ return this;
133
+ }
134
+
135
+ @Override
136
+ public DataSourceImpl setAll(DataSource other)
137
+ {
138
+ for (Map.Entry<String, JsonNode> field : other.getAttributes()) {
139
+ data.set(field.getKey(), field.getValue());
140
+ }
141
+ return this;
142
+ }
143
+
144
+ @Override
145
+ public DataSourceImpl remove(String attrName)
146
+ {
147
+ data.remove(attrName);
148
+ return this;
149
+ }
150
+
151
+ @Override
152
+ public DataSourceImpl deepCopy()
153
+ {
154
+ return newInstance(model, data.deepCopy());
155
+ }
156
+
157
+ @Override
158
+ public DataSourceImpl merge(DataSource other)
159
+ {
160
+ mergeJsonObject(data, other.deepCopy().getObjectNode());
161
+ return this;
162
+ }
163
+
164
+ private static void mergeJsonObject(ObjectNode src, ObjectNode other)
165
+ {
166
+ Iterator<Map.Entry<String, JsonNode>> ite = other.fields();
167
+ while (ite.hasNext()) {
168
+ Map.Entry<String, JsonNode> pair = ite.next();
169
+ JsonNode s = src.get(pair.getKey());
170
+ JsonNode v = pair.getValue();
171
+ if (v.isObject() && s != null && s.isObject()) {
172
+ mergeJsonObject((ObjectNode) s, (ObjectNode) v);
173
+ } else if (v.isArray() && s != null && s.isArray()) {
174
+ mergeJsonArray((ArrayNode) s, (ArrayNode) v);
175
+ } else {
176
+ src.replace(pair.getKey(), v);
177
+ }
178
+ }
179
+ }
180
+
181
+ private static void mergeJsonArray(ArrayNode src, ArrayNode other)
182
+ {
183
+ for (int i=0; i < other.size(); i++) {
184
+ JsonNode s = src.get(i);
185
+ JsonNode v = other.get(i);
186
+ if (s == null) {
187
+ src.add(v);
188
+ } else if (v.isObject() && s.isObject()) {
189
+ mergeJsonObject((ObjectNode) s, (ObjectNode) v);
190
+ } else if (v.isArray() && s.isArray()) {
191
+ mergeJsonArray((ArrayNode) s, (ArrayNode) v);
192
+ } else {
193
+ src.remove(i);
194
+ src.insert(i, v);
195
+ }
196
+ }
197
+ }
198
+
199
+ @Override
200
+ public <T> T loadTask(Class<T> taskType)
201
+ {
202
+ return model.readObject(taskType, data.traverse());
203
+ }
204
+
205
+ @Override
206
+ public <T> T loadConfig(Class<T> taskType)
207
+ {
208
+ return model.readObjectWithConfigSerDe(taskType, data.traverse());
209
+ }
210
+
211
+ @Override
212
+ public String toString()
213
+ {
214
+ return data.toString();
215
+ }
216
+
217
+ @Override
218
+ public boolean equals(Object other)
219
+ {
220
+ if (!(other instanceof DataSource)) {
221
+ return false;
222
+ }
223
+ return data.equals(((DataSource) other).getObjectNode());
224
+ }
225
+
226
+ @Override
227
+ public int hashCode()
228
+ {
229
+ return data.hashCode();
230
+ }
231
+ }
@@ -0,0 +1,84 @@
1
+ package org.embulk.config;
2
+
3
+ import java.io.IOException;
4
+ import com.fasterxml.jackson.core.JsonGenerator;
5
+ import com.fasterxml.jackson.core.JsonParser;
6
+ import com.fasterxml.jackson.databind.module.SimpleModule;
7
+ import com.fasterxml.jackson.databind.ObjectMapper;
8
+ import com.fasterxml.jackson.databind.JsonSerializer;
9
+ import com.fasterxml.jackson.databind.JsonDeserializer;
10
+ import com.fasterxml.jackson.databind.SerializerProvider;
11
+ import com.fasterxml.jackson.databind.DeserializationContext;
12
+ import com.fasterxml.jackson.databind.JsonNode;
13
+ import com.fasterxml.jackson.databind.JsonMappingException;
14
+ import com.fasterxml.jackson.databind.node.ObjectNode;
15
+
16
+ public class DataSourceSerDe
17
+ {
18
+ public static class SerDeModule
19
+ extends SimpleModule
20
+ {
21
+ @SuppressWarnings("deprecation")
22
+ public SerDeModule(final ModelManager model)
23
+ {
24
+ // DataSourceImpl
25
+ addSerializer(DataSourceImpl.class, new DataSourceSerializer<DataSourceImpl>());
26
+ addDeserializer(DataSourceImpl.class, new DataSourceDeserializer<DataSourceImpl>(model));
27
+
28
+ // ConfigSource
29
+ addSerializer(ConfigSource.class, new DataSourceSerializer<ConfigSource>());
30
+ addDeserializer(ConfigSource.class, new DataSourceDeserializer<ConfigSource>(model));
31
+
32
+ // TaskSource
33
+ addSerializer(TaskSource.class, new DataSourceSerializer<TaskSource>());
34
+ addDeserializer(TaskSource.class, new DataSourceDeserializer<TaskSource>(model));
35
+
36
+ // TaskReport
37
+ addSerializer(TaskReport.class, new DataSourceSerializer<TaskReport>());
38
+ addDeserializer(TaskReport.class, new DataSourceDeserializer<TaskReport>(model));
39
+
40
+ // CommitReport (Deprecated)
41
+ addSerializer(CommitReport.class, new DataSourceSerializer<CommitReport>());
42
+ addDeserializer(CommitReport.class, new DataSourceDeserializer<CommitReport>(model));
43
+
44
+ // ConfigDiff
45
+ addSerializer(ConfigDiff.class, new DataSourceSerializer<ConfigDiff>());
46
+ addDeserializer(ConfigDiff.class, new DataSourceDeserializer<ConfigDiff>(model));
47
+ }
48
+ }
49
+
50
+ private static class DataSourceDeserializer <T extends DataSource> // TODO T extends DataSource super DataSourceImpl
51
+ extends JsonDeserializer<T>
52
+ {
53
+ private final ModelManager model;
54
+ private final ObjectMapper treeObjectMapper;
55
+
56
+ DataSourceDeserializer(ModelManager model)
57
+ {
58
+ this.model = model;
59
+ this.treeObjectMapper = new ObjectMapper();
60
+ }
61
+
62
+ @Override
63
+ @SuppressWarnings("unchecked")
64
+ public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException
65
+ {
66
+ JsonNode json = treeObjectMapper.readTree(jp);
67
+ if (!json.isObject()) {
68
+ throw new JsonMappingException("Expected object to deserialize DataSource", jp.getCurrentLocation());
69
+ }
70
+ return (T) new DataSourceImpl(model, (ObjectNode) json);
71
+ }
72
+ }
73
+
74
+ private static class DataSourceSerializer <T extends DataSource>
75
+ extends JsonSerializer<T>
76
+ {
77
+ @Override
78
+ public void serialize(T value, JsonGenerator jgen, SerializerProvider provider)
79
+ throws IOException
80
+ {
81
+ value.getObjectNode().serialize(jgen, provider);
82
+ }
83
+ }
84
+ }