embulk 0.8.38-java → 0.10.27-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 (603) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +1 -1
  3. data/LICENSE +202 -0
  4. data/embulk.gemspec +34 -33
  5. data/lib/embulk.rb +5 -61
  6. data/lib/embulk/buffer.rb +1 -2
  7. data/lib/embulk/gem_version.rb +3 -0
  8. data/lib/embulk/guess/charset.rb +2 -11
  9. data/lib/embulk/java/bootstrap.rb +0 -1
  10. data/lib/embulk/java_plugin.rb +9 -1
  11. data/lib/embulk/logger.rb +2 -1
  12. data/lib/embulk/page_builder.rb +2 -2
  13. data/lib/embulk/plugin.rb +2 -2
  14. data/lib/embulk/schema.rb +3 -4
  15. data/lib/embulk/version.rb +43 -19
  16. metadata +23 -761
  17. data/.gitignore +0 -15
  18. data/.ruby-version +0 -1
  19. data/.travis.yml +0 -28
  20. data/COPYING +0 -14
  21. data/Gemfile.lock +0 -30
  22. data/README.md +0 -229
  23. data/Rakefile +0 -26
  24. data/appveyor.yml +0 -28
  25. data/bin/embulk +0 -139
  26. data/build.gradle +0 -419
  27. data/embulk-cli/build.gradle +0 -9
  28. data/embulk-cli/src/main/bat/selfrun.bat +0 -107
  29. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkArguments.java +0 -54
  30. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLine.java +0 -227
  31. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLineException.java +0 -25
  32. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkExample.java +0 -86
  33. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkMigrate.java +0 -480
  34. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkNew.java +0 -419
  35. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkRun.java +0 -786
  36. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkSelfUpdate.java +0 -235
  37. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkSubcommand.java +0 -47
  38. data/embulk-cli/src/main/java/org/embulk/cli/Main.java +0 -31
  39. data/embulk-cli/src/main/java/org/embulk/cli/parse/AbstractHelpLineDefinition.java +0 -15
  40. data/embulk-cli/src/main/java/org/embulk/cli/parse/CliHelpFormatterWithHelpMessages.java +0 -141
  41. data/embulk-cli/src/main/java/org/embulk/cli/parse/CliOptionsWithHelpMessages.java +0 -45
  42. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineHelpRequired.java +0 -10
  43. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineParseException.java +0 -25
  44. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineParser.java +0 -187
  45. data/embulk-cli/src/main/java/org/embulk/cli/parse/HelpMessageAsCliOption.java +0 -36
  46. data/embulk-cli/src/main/java/org/embulk/cli/parse/HelpMessageLineDefinition.java +0 -20
  47. data/embulk-cli/src/main/java/org/embulk/cli/parse/OptionBehavior.java +0 -39
  48. data/embulk-cli/src/main/java/org/embulk/cli/parse/OptionDefinition.java +0 -120
  49. data/embulk-cli/src/main/sh/selfrun.sh +0 -60
  50. data/embulk-cli/src/test/java/org/embulk/cli/DummyMain.java +0 -23
  51. data/embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java +0 -296
  52. data/embulk-core/build.gradle +0 -83
  53. data/embulk-core/src/main/java/org/embulk/EmbulkEmbed.java +0 -321
  54. data/embulk-core/src/main/java/org/embulk/EmbulkRunner.java +0 -531
  55. data/embulk-core/src/main/java/org/embulk/EmbulkService.java +0 -78
  56. data/embulk-core/src/main/java/org/embulk/EmbulkSetup.java +0 -49
  57. data/embulk-core/src/main/java/org/embulk/EmbulkVersion.java +0 -109
  58. data/embulk-core/src/main/java/org/embulk/command/PreviewPrinter.java +0 -87
  59. data/embulk-core/src/main/java/org/embulk/command/TablePreviewPrinter.java +0 -107
  60. data/embulk-core/src/main/java/org/embulk/command/VerticalPreviewPrinter.java +0 -47
  61. data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +0 -36
  62. data/embulk-core/src/main/java/org/embulk/config/Config.java +0 -15
  63. data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +0 -15
  64. data/embulk-core/src/main/java/org/embulk/config/ConfigDiff.java +0 -32
  65. data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +0 -26
  66. data/embulk-core/src/main/java/org/embulk/config/ConfigInject.java +0 -14
  67. data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +0 -149
  68. data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +0 -34
  69. data/embulk-core/src/main/java/org/embulk/config/DataSource.java +0 -41
  70. data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +0 -243
  71. data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +0 -84
  72. data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +0 -20
  73. data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +0 -123
  74. data/embulk-core/src/main/java/org/embulk/config/Task.java +0 -10
  75. data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +0 -180
  76. data/embulk-core/src/main/java/org/embulk/config/TaskReport.java +0 -32
  77. data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +0 -349
  78. data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +0 -34
  79. data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +0 -38
  80. data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +0 -24
  81. data/embulk-core/src/main/java/org/embulk/config/UserDataException.java +0 -4
  82. data/embulk-core/src/main/java/org/embulk/config/UserDataExceptions.java +0 -17
  83. data/embulk-core/src/main/java/org/embulk/config/YamlTagResolver.java +0 -53
  84. data/embulk-core/src/main/java/org/embulk/exec/BufferFileInputPlugin.java +0 -88
  85. data/embulk-core/src/main/java/org/embulk/exec/BulkLoader.java +0 -754
  86. data/embulk-core/src/main/java/org/embulk/exec/ConfigurableGuessInputPlugin.java +0 -9
  87. data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +0 -53
  88. data/embulk-core/src/main/java/org/embulk/exec/ExecutionInterruptedException.java +0 -10
  89. data/embulk-core/src/main/java/org/embulk/exec/ExecutionResult.java +0 -33
  90. data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +0 -43
  91. data/embulk-core/src/main/java/org/embulk/exec/ForGuess.java +0 -16
  92. data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +0 -16
  93. data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +0 -309
  94. data/embulk-core/src/main/java/org/embulk/exec/LocalExecutorPlugin.java +0 -563
  95. data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +0 -68
  96. data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +0 -10
  97. data/embulk-core/src/main/java/org/embulk/exec/PartialExecutionException.java +0 -26
  98. data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +0 -77
  99. data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +0 -222
  100. data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +0 -27
  101. data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +0 -17
  102. data/embulk-core/src/main/java/org/embulk/exec/ResumeState.java +0 -100
  103. data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +0 -215
  104. data/embulk-core/src/main/java/org/embulk/exec/SetCurrentThreadName.java +0 -22
  105. data/embulk-core/src/main/java/org/embulk/exec/SkipTransactionException.java +0 -23
  106. data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +0 -24
  107. data/embulk-core/src/main/java/org/embulk/exec/TempFileAllocator.java +0 -35
  108. data/embulk-core/src/main/java/org/embulk/exec/TransactionStage.java +0 -27
  109. data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +0 -76
  110. data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +0 -395
  111. data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +0 -17
  112. data/embulk-core/src/main/java/org/embulk/plugin/DefaultPluginType.java +0 -50
  113. data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +0 -100
  114. data/embulk-core/src/main/java/org/embulk/plugin/MavenPluginType.java +0 -112
  115. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java +0 -993
  116. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderFactory.java +0 -16
  117. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderModule.java +0 -102
  118. data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +0 -78
  119. data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +0 -49
  120. data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +0 -25
  121. data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +0 -122
  122. data/embulk-core/src/main/java/org/embulk/plugin/compat/InputPluginWrapper.java +0 -102
  123. data/embulk-core/src/main/java/org/embulk/plugin/compat/PluginWrappers.java +0 -30
  124. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileInputWrapper.java +0 -96
  125. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileOutputWrapper.java +0 -102
  126. data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalPageOutputWrapper.java +0 -95
  127. data/embulk-core/src/main/java/org/embulk/plugin/jar/InvalidJarPluginException.java +0 -14
  128. data/embulk-core/src/main/java/org/embulk/plugin/jar/JarPluginLoader.java +0 -232
  129. data/embulk-core/src/main/java/org/embulk/plugin/maven/MavenArtifactFinder.java +0 -134
  130. data/embulk-core/src/main/java/org/embulk/plugin/maven/MavenArtifactNotFoundException.java +0 -20
  131. data/embulk-core/src/main/java/org/embulk/plugin/maven/MavenPluginSource.java +0 -187
  132. data/embulk-core/src/main/java/org/embulk/plugin/maven/MavenPluginSourceModule.java +0 -22
  133. data/embulk-core/src/main/java/org/embulk/plugin/maven/MavenRepositoryNotFoundException.java +0 -31
  134. data/embulk-core/src/main/java/org/embulk/spi/AbortTransactionResource.java +0 -36
  135. data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +0 -148
  136. data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +0 -8
  137. data/embulk-core/src/main/java/org/embulk/spi/CloseResource.java +0 -42
  138. data/embulk-core/src/main/java/org/embulk/spi/Column.java +0 -95
  139. data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +0 -112
  140. data/embulk-core/src/main/java/org/embulk/spi/ColumnVisitor.java +0 -16
  141. data/embulk-core/src/main/java/org/embulk/spi/DataException.java +0 -23
  142. data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +0 -16
  143. data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +0 -16
  144. data/embulk-core/src/main/java/org/embulk/spi/Exec.java +0 -113
  145. data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +0 -6
  146. data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +0 -220
  147. data/embulk-core/src/main/java/org/embulk/spi/ExecutorPlugin.java +0 -19
  148. data/embulk-core/src/main/java/org/embulk/spi/Extension.java +0 -44
  149. data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +0 -11
  150. data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +0 -30
  151. data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +0 -169
  152. data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +0 -13
  153. data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +0 -28
  154. data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +0 -199
  155. data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +0 -18
  156. data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +0 -18
  157. data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +0 -9
  158. data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +0 -33
  159. data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +0 -29
  160. data/embulk-core/src/main/java/org/embulk/spi/Page.java +0 -86
  161. data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +0 -696
  162. data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +0 -47
  163. data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +0 -11
  164. data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +0 -248
  165. data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +0 -17
  166. data/embulk-core/src/main/java/org/embulk/spi/ProcessState.java +0 -10
  167. data/embulk-core/src/main/java/org/embulk/spi/ProcessTask.java +0 -117
  168. data/embulk-core/src/main/java/org/embulk/spi/Schema.java +0 -139
  169. data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +0 -93
  170. data/embulk-core/src/main/java/org/embulk/spi/SchemaConfigException.java +0 -22
  171. data/embulk-core/src/main/java/org/embulk/spi/TaskState.java +0 -81
  172. data/embulk-core/src/main/java/org/embulk/spi/TempFileException.java +0 -19
  173. data/embulk-core/src/main/java/org/embulk/spi/TempFileSpace.java +0 -88
  174. data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +0 -10
  175. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +0 -17
  176. data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +0 -19
  177. data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +0 -17
  178. data/embulk-core/src/main/java/org/embulk/spi/json/JsonParseException.java +0 -17
  179. data/embulk-core/src/main/java/org/embulk/spi/json/JsonParser.java +0 -233
  180. data/embulk-core/src/main/java/org/embulk/spi/json/RubyValueApi.java +0 -100
  181. data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +0 -55
  182. data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +0 -180
  183. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +0 -127
  184. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +0 -125
  185. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +0 -12
  186. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +0 -310
  187. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +0 -49
  188. data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +0 -58
  189. data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +0 -12
  190. data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +0 -12
  191. data/embulk-core/src/main/java/org/embulk/spi/type/JsonType.java +0 -14
  192. data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +0 -12
  193. data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +0 -12
  194. data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +0 -41
  195. data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +0 -15
  196. data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +0 -45
  197. data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +0 -16
  198. data/embulk-core/src/main/java/org/embulk/spi/unit/ByteSize.java +0 -156
  199. data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFile.java +0 -106
  200. data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFileSerDe.java +0 -113
  201. data/embulk-core/src/main/java/org/embulk/spi/unit/ToString.java +0 -54
  202. data/embulk-core/src/main/java/org/embulk/spi/unit/ToStringMap.java +0 -34
  203. data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +0 -55
  204. data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +0 -81
  205. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnNotFoundException.java +0 -10
  206. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetter.java +0 -21
  207. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetterFactory.java +0 -134
  208. data/embulk-core/src/main/java/org/embulk/spi/util/DynamicPageBuilder.java +0 -200
  209. data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +0 -81
  210. data/embulk-core/src/main/java/org/embulk/spi/util/Executors.java +0 -93
  211. data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +0 -111
  212. data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +0 -119
  213. data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +0 -100
  214. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +0 -189
  215. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +0 -25
  216. data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +0 -65
  217. data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +0 -157
  218. data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +0 -123
  219. data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +0 -52
  220. data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +0 -38
  221. data/embulk-core/src/main/java/org/embulk/spi/util/OutputStreamFileOutput.java +0 -88
  222. data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +0 -126
  223. data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +0 -149
  224. data/embulk-core/src/main/java/org/embulk/spi/util/ResumableInputStream.java +0 -168
  225. data/embulk-core/src/main/java/org/embulk/spi/util/RetryExecutor.java +0 -130
  226. data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +0 -53
  227. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/AbstractDynamicColumnSetter.java +0 -94
  228. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/BooleanColumnSetter.java +0 -71
  229. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DefaultValueSetter.java +0 -20
  230. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DoubleColumnSetter.java +0 -68
  231. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/JsonColumnSetter.java +0 -64
  232. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/LongColumnSetter.java +0 -78
  233. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/NullDefaultValueSetter.java +0 -39
  234. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/SkipColumnSetter.java +0 -68
  235. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/StringColumnSetter.java +0 -63
  236. data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/TimestampColumnSetter.java +0 -72
  237. data/embulk-core/src/main/resources/embulk/logback-color.xml +0 -72
  238. data/embulk-core/src/main/resources/embulk/logback-console.xml +0 -14
  239. data/embulk-core/src/main/resources/embulk/logback-file.xml +0 -23
  240. data/embulk-core/src/main/resources/embulk/parent_first_packages.properties +0 -73
  241. data/embulk-core/src/main/resources/embulk/parent_first_resources.properties +0 -29
  242. data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +0 -122
  243. data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +0 -72
  244. data/embulk-core/src/test/java/org/embulk/RandomManager.java +0 -53
  245. data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +0 -23
  246. data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +0 -17
  247. data/embulk-core/src/test/java/org/embulk/config/TestConfigLoader.java +0 -66
  248. data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +0 -114
  249. data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +0 -70
  250. data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +0 -58
  251. data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +0 -83
  252. data/embulk-core/src/test/java/org/embulk/plugin/TestPluginTypeSerDe.java +0 -67
  253. data/embulk-core/src/test/java/org/embulk/plugin/jar/ExampleJarSpiV0.java +0 -9
  254. data/embulk-core/src/test/java/org/embulk/plugin/jar/JarBuilder.java +0 -101
  255. data/embulk-core/src/test/java/org/embulk/plugin/jar/TestJarPluginLoader.java +0 -60
  256. data/embulk-core/src/test/java/org/embulk/plugin/maven/TestMavenArtifactFinder.java +0 -41
  257. data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +0 -63
  258. data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +0 -108
  259. data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +0 -80
  260. data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +0 -59
  261. data/embulk-core/src/test/java/org/embulk/spi/TestBuffer.java +0 -24
  262. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +0 -89
  263. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +0 -199
  264. data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +0 -221
  265. data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +0 -188
  266. data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +0 -411
  267. data/embulk-core/src/test/java/org/embulk/spi/json/TestJsonParser.java +0 -102
  268. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +0 -116
  269. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +0 -75
  270. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParserDeprecated.java +0 -67
  271. data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampParser.java +0 -232
  272. data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +0 -45
  273. data/embulk-core/src/test/java/org/embulk/spi/unit/TestByteSize.java +0 -79
  274. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +0 -237
  275. data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +0 -123
  276. data/embulk-core/src/test/resources/m2.test/.gitignore +0 -1
  277. data/embulk-core/src/test/resources/m2.test/org/embulk/example/embulk-example-maven-artifact/0.1.2/embulk-example-maven-artifact-0.1.2.jar +0 -0
  278. data/embulk-core/src/test/resources/m2.test/org/embulk/example/embulk-example-maven-artifact/0.1.2/embulk-example-maven-artifact-0.1.2.jar.sha1 +0 -1
  279. data/embulk-core/src/test/resources/m2.test/org/embulk/example/embulk-example-maven-artifact/0.1.2/embulk-example-maven-artifact-0.1.2.pom +0 -9
  280. data/embulk-core/src/test/resources/m2.test/org/embulk/example/embulk-example-maven-artifact/0.1.2/embulk-example-maven-artifact-0.1.2.pom.sha1 +0 -1
  281. data/embulk-docs/Makefile +0 -178
  282. data/embulk-docs/build.gradle +0 -41
  283. data/embulk-docs/make.bat +0 -243
  284. data/embulk-docs/push-gh-pages.sh +0 -49
  285. data/embulk-docs/src/_static/embulk-architecture.png +0 -0
  286. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-oneline-tr.png +0 -0
  287. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-oneline-wt.png +0 -0
  288. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-oneline.ai +0 -396
  289. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-sq-tr-small.png +0 -0
  290. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-sq-tr.png +0 -0
  291. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-sq-wt.png +0 -0
  292. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-sq.ai +0 -417
  293. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-sq.svg +0 -1
  294. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-symbol-tr.png +0 -0
  295. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-symbol-wt.png +0 -0
  296. data/embulk-docs/src/_static/embulk-logo-v2/embulk-logo-v2-symbol.ai +1 -394
  297. data/embulk-docs/src/_static/embulk-logo.svg +0 -133
  298. data/embulk-docs/src/built-in.rst +0 -1017
  299. data/embulk-docs/src/conf.py +0 -260
  300. data/embulk-docs/src/customization.rst +0 -184
  301. data/embulk-docs/src/developers/index.rst +0 -45
  302. data/embulk-docs/src/index.rst +0 -102
  303. data/embulk-docs/src/logo.rst +0 -27
  304. data/embulk-docs/src/recipe.rst +0 -8
  305. data/embulk-docs/src/recipe/scheduled-csv-load-to-elasticsearch-kibana5.rst +0 -163
  306. data/embulk-docs/src/release.rst +0 -108
  307. data/embulk-docs/src/release/release-0.1.0.rst +0 -8
  308. data/embulk-docs/src/release/release-0.2.0.rst +0 -16
  309. data/embulk-docs/src/release/release-0.2.1.rst +0 -19
  310. data/embulk-docs/src/release/release-0.3.0.rst +0 -34
  311. data/embulk-docs/src/release/release-0.3.1.rst +0 -11
  312. data/embulk-docs/src/release/release-0.3.2.rst +0 -15
  313. data/embulk-docs/src/release/release-0.4.0.rst +0 -74
  314. data/embulk-docs/src/release/release-0.4.1.rst +0 -18
  315. data/embulk-docs/src/release/release-0.4.10.rst +0 -17
  316. data/embulk-docs/src/release/release-0.4.2.rst +0 -18
  317. data/embulk-docs/src/release/release-0.4.3.rst +0 -34
  318. data/embulk-docs/src/release/release-0.4.4.rst +0 -39
  319. data/embulk-docs/src/release/release-0.4.5.rst +0 -24
  320. data/embulk-docs/src/release/release-0.4.6.rst +0 -30
  321. data/embulk-docs/src/release/release-0.4.7.rst +0 -16
  322. data/embulk-docs/src/release/release-0.4.8.rst +0 -15
  323. data/embulk-docs/src/release/release-0.4.9.rst +0 -23
  324. data/embulk-docs/src/release/release-0.5.0.rst +0 -89
  325. data/embulk-docs/src/release/release-0.5.1.rst +0 -13
  326. data/embulk-docs/src/release/release-0.5.2.rst +0 -30
  327. data/embulk-docs/src/release/release-0.5.3.rst +0 -22
  328. data/embulk-docs/src/release/release-0.5.4.rst +0 -24
  329. data/embulk-docs/src/release/release-0.5.5.rst +0 -18
  330. data/embulk-docs/src/release/release-0.6.0.rst +0 -34
  331. data/embulk-docs/src/release/release-0.6.1.rst +0 -11
  332. data/embulk-docs/src/release/release-0.6.10.rst +0 -15
  333. data/embulk-docs/src/release/release-0.6.11.rst +0 -19
  334. data/embulk-docs/src/release/release-0.6.12.rst +0 -31
  335. data/embulk-docs/src/release/release-0.6.13.rst +0 -23
  336. data/embulk-docs/src/release/release-0.6.14.rst +0 -47
  337. data/embulk-docs/src/release/release-0.6.15.rst +0 -26
  338. data/embulk-docs/src/release/release-0.6.16.rst +0 -26
  339. data/embulk-docs/src/release/release-0.6.17.rst +0 -39
  340. data/embulk-docs/src/release/release-0.6.18.rst +0 -14
  341. data/embulk-docs/src/release/release-0.6.19.rst +0 -18
  342. data/embulk-docs/src/release/release-0.6.2.rst +0 -17
  343. data/embulk-docs/src/release/release-0.6.20.rst +0 -19
  344. data/embulk-docs/src/release/release-0.6.21.rst +0 -20
  345. data/embulk-docs/src/release/release-0.6.22.rst +0 -26
  346. data/embulk-docs/src/release/release-0.6.23.rst +0 -17
  347. data/embulk-docs/src/release/release-0.6.24.rst +0 -13
  348. data/embulk-docs/src/release/release-0.6.25.rst +0 -12
  349. data/embulk-docs/src/release/release-0.6.26.rst +0 -17
  350. data/embulk-docs/src/release/release-0.6.27.rst +0 -11
  351. data/embulk-docs/src/release/release-0.6.3.rst +0 -23
  352. data/embulk-docs/src/release/release-0.6.4.rst +0 -13
  353. data/embulk-docs/src/release/release-0.6.5.rst +0 -17
  354. data/embulk-docs/src/release/release-0.6.6.rst +0 -17
  355. data/embulk-docs/src/release/release-0.6.7.rst +0 -17
  356. data/embulk-docs/src/release/release-0.6.8.rst +0 -24
  357. data/embulk-docs/src/release/release-0.6.9.rst +0 -24
  358. data/embulk-docs/src/release/release-0.7.0.rst +0 -96
  359. data/embulk-docs/src/release/release-0.7.1.rst +0 -22
  360. data/embulk-docs/src/release/release-0.7.10.rst +0 -13
  361. data/embulk-docs/src/release/release-0.7.11.rst +0 -12
  362. data/embulk-docs/src/release/release-0.7.2.rst +0 -25
  363. data/embulk-docs/src/release/release-0.7.3.rst +0 -21
  364. data/embulk-docs/src/release/release-0.7.4.rst +0 -14
  365. data/embulk-docs/src/release/release-0.7.5.rst +0 -22
  366. data/embulk-docs/src/release/release-0.7.6.rst +0 -18
  367. data/embulk-docs/src/release/release-0.7.7.rst +0 -13
  368. data/embulk-docs/src/release/release-0.7.8.rst +0 -14
  369. data/embulk-docs/src/release/release-0.7.9.rst +0 -14
  370. data/embulk-docs/src/release/release-0.8.0.rst +0 -74
  371. data/embulk-docs/src/release/release-0.8.1.rst +0 -18
  372. data/embulk-docs/src/release/release-0.8.10.rst +0 -35
  373. data/embulk-docs/src/release/release-0.8.11.rst +0 -12
  374. data/embulk-docs/src/release/release-0.8.12.rst +0 -12
  375. data/embulk-docs/src/release/release-0.8.13.rst +0 -12
  376. data/embulk-docs/src/release/release-0.8.14.rst +0 -31
  377. data/embulk-docs/src/release/release-0.8.15.rst +0 -17
  378. data/embulk-docs/src/release/release-0.8.16.rst +0 -43
  379. data/embulk-docs/src/release/release-0.8.17.rst +0 -11
  380. data/embulk-docs/src/release/release-0.8.18.rst +0 -27
  381. data/embulk-docs/src/release/release-0.8.19.rst +0 -43
  382. data/embulk-docs/src/release/release-0.8.2.rst +0 -19
  383. data/embulk-docs/src/release/release-0.8.20.rst +0 -11
  384. data/embulk-docs/src/release/release-0.8.21.rst +0 -17
  385. data/embulk-docs/src/release/release-0.8.22.rst +0 -15
  386. data/embulk-docs/src/release/release-0.8.23.rst +0 -14
  387. data/embulk-docs/src/release/release-0.8.24.rst +0 -15
  388. data/embulk-docs/src/release/release-0.8.25.rst +0 -14
  389. data/embulk-docs/src/release/release-0.8.26.rst +0 -16
  390. data/embulk-docs/src/release/release-0.8.27.rst +0 -15
  391. data/embulk-docs/src/release/release-0.8.28.rst +0 -14
  392. data/embulk-docs/src/release/release-0.8.29.rst +0 -14
  393. data/embulk-docs/src/release/release-0.8.3.rst +0 -15
  394. data/embulk-docs/src/release/release-0.8.30.rst +0 -14
  395. data/embulk-docs/src/release/release-0.8.31.rst +0 -12
  396. data/embulk-docs/src/release/release-0.8.32.rst +0 -14
  397. data/embulk-docs/src/release/release-0.8.33.rst +0 -13
  398. data/embulk-docs/src/release/release-0.8.34.rst +0 -12
  399. data/embulk-docs/src/release/release-0.8.35.rst +0 -12
  400. data/embulk-docs/src/release/release-0.8.36.rst +0 -32
  401. data/embulk-docs/src/release/release-0.8.37.rst +0 -20
  402. data/embulk-docs/src/release/release-0.8.38.rst +0 -12
  403. data/embulk-docs/src/release/release-0.8.4.rst +0 -18
  404. data/embulk-docs/src/release/release-0.8.5.rst +0 -11
  405. data/embulk-docs/src/release/release-0.8.6.rst +0 -14
  406. data/embulk-docs/src/release/release-0.8.7.rst +0 -18
  407. data/embulk-docs/src/release/release-0.8.8.rst +0 -18
  408. data/embulk-docs/src/release/release-0.8.9.rst +0 -14
  409. data/embulk-jruby-strptime/build.gradle +0 -3
  410. data/embulk-jruby-strptime/src/main/java/org/embulk/spi/time/RubyDateParser.java +0 -121
  411. data/embulk-jruby-strptime/src/main/java/org/embulk/spi/time/StrptimeFormat.java +0 -53
  412. data/embulk-jruby-strptime/src/main/java/org/embulk/spi/time/StrptimeParser.java +0 -884
  413. data/embulk-jruby-strptime/src/main/java/org/embulk/spi/time/StrptimeToken.java +0 -111
  414. data/embulk-jruby-strptime/src/main/java/org/embulk/spi/time/TimeZoneConverter.java +0 -466
  415. data/embulk-jruby-strptime/src/main/java/org/embulk/spi/time/lexer/StrptimeLexer.flex +0 -62
  416. data/embulk-jruby-strptime/src/main/java/org/embulk/spi/time/lexer/StrptimeLexer.java +0 -577
  417. data/embulk-standards/build.gradle +0 -7
  418. data/embulk-standards/src/main/java/org/embulk/standards/Bzip2FileDecoderPlugin.java +0 -55
  419. data/embulk-standards/src/main/java/org/embulk/standards/Bzip2FileEncoderPlugin.java +0 -67
  420. data/embulk-standards/src/main/java/org/embulk/standards/ConfigInputPlugin.java +0 -170
  421. data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +0 -295
  422. data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +0 -416
  423. data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +0 -545
  424. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +0 -55
  425. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +0 -71
  426. data/embulk-standards/src/main/java/org/embulk/standards/JsonParserPlugin.java +0 -235
  427. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +0 -232
  428. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +0 -148
  429. data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +0 -59
  430. data/embulk-standards/src/main/java/org/embulk/standards/RemoveColumnsFilterPlugin.java +0 -268
  431. data/embulk-standards/src/main/java/org/embulk/standards/RenameFilterPlugin.java +0 -479
  432. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +0 -16
  433. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +0 -60
  434. data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +0 -91
  435. data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +0 -1
  436. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvFormatterPlugin.java +0 -312
  437. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +0 -75
  438. data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +0 -457
  439. data/embulk-standards/src/test/java/org/embulk/standards/TestJsonParserPlugin.java +0 -351
  440. data/embulk-standards/src/test/java/org/embulk/standards/TestRemoveColumnsFilterPlugin.java +0 -121
  441. data/embulk-standards/src/test/java/org/embulk/standards/TestRenameFilterPlugin.java +0 -1020
  442. data/embulk-standards/src/test/java/org/embulk/standards/guess/TestCsvAllStringsGuessPlugin.java +0 -38
  443. data/embulk-standards/src/test/java/org/embulk/standards/guess/TestCsvGuessPlugin.java +0 -248
  444. data/embulk-standards/src/test/java/org/embulk/standards/preview/TestFilePreview.java +0 -73
  445. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_int_single_column_row.csv +0 -1
  446. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_int_single_column_row_and_header.csv +0 -2
  447. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_int_single_column_row_and_header_guessed.yml +0 -12
  448. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_int_single_column_row_and_header_seed.yml +0 -1
  449. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_int_single_column_row_guessed.yml +0 -12
  450. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_int_single_column_row_seed.yml +0 -1
  451. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows.csv +0 -1
  452. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_and_header.csv +0 -2
  453. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_and_header_guessed.yml +0 -16
  454. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_and_header_seed.yml +0 -1
  455. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_and_header_with_trim_needed.csv +0 -2
  456. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_and_header_with_trim_needed_guessed.yml +0 -16
  457. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_and_header_with_trim_needed_seed.yml +0 -1
  458. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_guessed.yml +0 -16
  459. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_seed.yml +0 -1
  460. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_with_trim_needed.csv +0 -1
  461. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_with_trim_needed_guessed.yml +0 -16
  462. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_rows_with_trim_needed_seed.yml +0 -1
  463. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_string_single_column_row.csv +0 -1
  464. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_string_single_column_row_and_header.csv +0 -2
  465. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_string_single_column_row_and_header_guessed.yml +0 -12
  466. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_string_single_column_row_and_header_seed.yml +0 -1
  467. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_string_single_column_row_guessed.yml +0 -12
  468. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_1_string_single_column_row_seed.yml +0 -1
  469. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_int_single_column_rows.csv +0 -2
  470. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_int_single_column_rows_guessed.yml +0 -12
  471. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_int_single_column_rows_seed.yml +0 -1
  472. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_rows.csv +0 -2
  473. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_rows_and_header.csv +0 -3
  474. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_rows_and_header_guessed.yml +0 -16
  475. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_rows_and_header_seed.yml +0 -1
  476. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_rows_guessed.yml +0 -16
  477. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_rows_seed.yml +0 -1
  478. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_string_single_column_rows.csv +0 -2
  479. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_string_single_column_rows_guessed.yml +0 -12
  480. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_2_string_single_column_rows_seed.yml +0 -1
  481. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_backslash_escape.csv +0 -5
  482. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_backslash_escape_guessed.yml +0 -17
  483. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_backslash_escape_seed.yml +0 -1
  484. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_double_single_column.csv +0 -12
  485. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_double_single_column_guessed.yml +0 -12
  486. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_double_single_column_seed.yml +0 -1
  487. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_int_single_column.csv +0 -4
  488. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_int_single_column_guessed.yml +0 -12
  489. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_int_single_column_seed.yml +0 -1
  490. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_int_single_column_with_header.csv +0 -5
  491. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_int_single_column_with_header_guessed.yml +0 -12
  492. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_int_single_column_with_header_seed.yml +0 -1
  493. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_semicolon_delimiter.csv +0 -5
  494. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_semicolon_delimiter_guessed.yml +0 -17
  495. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_semicolon_delimiter_seed.yml +0 -1
  496. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_simple.csv +0 -5
  497. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_simple_guessed.yml +0 -17
  498. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_simple_seed.yml +0 -1
  499. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_single_quote.csv +0 -5
  500. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_single_quote_guessed.yml +0 -17
  501. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_single_quote_seed.yml +0 -1
  502. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_skip_suggest_if_empty_sample_records.csv +0 -5
  503. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_skip_suggest_if_empty_sample_records_guessed.yml +0 -2
  504. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_skip_suggest_if_empty_sample_records_seed.yml +0 -1
  505. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_string_single_column.csv +0 -4
  506. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_string_single_column_guessed.yml +0 -12
  507. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_string_single_column_seed.yml +0 -1
  508. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_string_single_column_with_header.csv +0 -5
  509. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_string_single_column_with_header_guessed.yml +0 -12
  510. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_string_single_column_with_header_seed.yml +0 -1
  511. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_tab_delimiter.csv +0 -4
  512. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_tab_delimiter_guessed.yml +0 -16
  513. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv/test/test_tab_delimiter_seed.yml +0 -1
  514. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv_all_strings/test/test_simple.csv +0 -5
  515. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv_all_strings/test/test_simple_guessed.yml +0 -17
  516. data/embulk-standards/src/test/resources/org/embulk/standards/guess/csv_all_strings/test/test_simple_seed.yml +0 -1
  517. data/embulk-standards/src/test/resources/org/embulk/standards/preview/file/test/test_sample_buffer_bytes.csv +0 -5
  518. data/embulk-standards/src/test/resources/org/embulk/standards/preview/file/test/test_sample_buffer_bytes_exec.yml +0 -1
  519. data/embulk-standards/src/test/resources/org/embulk/standards/preview/file/test/test_sample_buffer_bytes_load.yml +0 -19
  520. data/embulk-standards/src/test/resources/org/embulk/standards/preview/file/test/test_sample_buffer_bytes_previewed.csv +0 -1
  521. data/embulk-standards/src/test/resources/org/embulk/standards/preview/file/test/test_simple.csv +0 -5
  522. data/embulk-standards/src/test/resources/org/embulk/standards/preview/file/test/test_simple_load.yml +0 -19
  523. data/embulk-standards/src/test/resources/org/embulk/standards/preview/file/test/test_simple_previewed.csv +0 -4
  524. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep.csv +0 -5
  525. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_expected.csv +0 -4
  526. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_filter.yml +0 -2
  527. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_in.yml +0 -18
  528. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_with_duplicated_column_names.csv +0 -5
  529. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_with_duplicated_column_names.yml +0 -2
  530. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_with_duplicated_column_names_expected.csv +0 -4
  531. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_with_duplicated_column_names_in.yml +0 -17
  532. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_with_unmatched_filter.yml +0 -3
  533. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_keep_without_unmatched_filter.yml +0 -2
  534. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_remove.csv +0 -5
  535. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_remove_expected.csv +0 -4
  536. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_remove_filter.yml +0 -2
  537. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_remove_in.yml +0 -18
  538. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_remove_with_unmatched_filter.yml +0 -3
  539. data/embulk-standards/src/test/resources/org/embulk/standards/remove_columns/test/test_remove_without_unmatched_filter.yml +0 -2
  540. data/embulk-test/build.gradle +0 -6
  541. data/embulk-test/src/main/java/org/embulk/test/EmbulkTests.java +0 -75
  542. data/embulk-test/src/main/java/org/embulk/test/PreviewResultInputPlugin.java +0 -65
  543. data/embulk-test/src/main/java/org/embulk/test/TestingBulkLoader.java +0 -129
  544. data/embulk-test/src/main/java/org/embulk/test/TestingEmbulk.java +0 -710
  545. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  546. data/gradle/wrapper/gradle-wrapper.properties +0 -5
  547. data/gradlew +0 -172
  548. data/gradlew.bat +0 -84
  549. data/lib/embulk/data/bundle/.bundle/config +0 -3
  550. data/lib/embulk/data/bundle/.ruby-version +0 -1
  551. data/lib/embulk/data/bundle/Gemfile +0 -31
  552. data/lib/embulk/data/bundle/embulk/filter/example.rb +0 -42
  553. data/lib/embulk/data/bundle/embulk/input/example.rb +0 -54
  554. data/lib/embulk/data/bundle/embulk/output/example.rb +0 -58
  555. data/lib/embulk/data/new/LICENSE.txt +0 -21
  556. data/lib/embulk/data/new/README.md.vm +0 -106
  557. data/lib/embulk/data/new/gitignore.vm +0 -17
  558. data/lib/embulk/data/new/java/build.gradle.vm +0 -96
  559. data/lib/embulk/data/new/java/config/checkstyle/checkstyle.xml +0 -128
  560. data/lib/embulk/data/new/java/config/checkstyle/default.xml +0 -108
  561. data/lib/embulk/data/new/java/decoder.java.vm +0 -86
  562. data/lib/embulk/data/new/java/encoder.java.vm +0 -88
  563. data/lib/embulk/data/new/java/file_input.java.vm +0 -145
  564. data/lib/embulk/data/new/java/file_output.java.vm +0 -95
  565. data/lib/embulk/data/new/java/filter.java.vm +0 -57
  566. data/lib/embulk/data/new/java/formatter.java.vm +0 -55
  567. data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
  568. data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +0 -5
  569. data/lib/embulk/data/new/java/gradlew +0 -172
  570. data/lib/embulk/data/new/java/gradlew.bat +0 -84
  571. data/lib/embulk/data/new/java/input.java.vm +0 -89
  572. data/lib/embulk/data/new/java/output.java.vm +0 -79
  573. data/lib/embulk/data/new/java/parser.java.vm +0 -61
  574. data/lib/embulk/data/new/java/plugin_loader.rb.vm +0 -3
  575. data/lib/embulk/data/new/java/test.java.vm +0 -5
  576. data/lib/embulk/data/new/ruby/.ruby-version +0 -1
  577. data/lib/embulk/data/new/ruby/Gemfile +0 -2
  578. data/lib/embulk/data/new/ruby/Rakefile +0 -3
  579. data/lib/embulk/data/new/ruby/decoder_guess.rb.vm +0 -25
  580. data/lib/embulk/data/new/ruby/filter.rb.vm +0 -50
  581. data/lib/embulk/data/new/ruby/formatter.rb.vm +0 -49
  582. data/lib/embulk/data/new/ruby/gemspec.vm +0 -20
  583. data/lib/embulk/data/new/ruby/input.rb.vm +0 -59
  584. data/lib/embulk/data/new/ruby/output.rb.vm +0 -61
  585. data/lib/embulk/data/new/ruby/parser.rb.vm +0 -44
  586. data/lib/embulk/data/new/ruby/parser_guess.rb.vm +0 -65
  587. data/lib/embulk/data/package_data.rb +0 -59
  588. data/lib/embulk/guess/bzip2.rb +0 -23
  589. data/lib/embulk/guess/csv.rb +0 -374
  590. data/lib/embulk/guess/csv_all_strings.rb +0 -13
  591. data/lib/embulk/guess/gzip.rb +0 -18
  592. data/lib/embulk/guess/json.rb +0 -50
  593. data/lib/embulk/runner.rb +0 -53
  594. data/settings.gradle +0 -8
  595. data/test/helper.rb +0 -23
  596. data/test/monkey_strptime/mri/date/test_date_strptime.rb +0 -515
  597. data/test/monkey_strptime/run-test.rb +0 -29
  598. data/test/vanilla/guess/test_csv_all_strings.rb +0 -43
  599. data/test/vanilla/guess/test_csv_guess.rb +0 -170
  600. data/test/vanilla/guess/test_schema_guess.rb +0 -47
  601. data/test/vanilla/guess/test_time_format_guess.rb +0 -135
  602. data/test/vanilla/run-test.rb +0 -14
  603. data/test/vanilla/time/test_timestamp_parser.rb +0 -102
@@ -1,17 +0,0 @@
1
- package org.embulk.plugin;
2
-
3
- import com.google.inject.Module;
4
- import com.google.inject.Binder;
5
- import com.google.inject.multibindings.Multibinder;
6
-
7
- public class BuiltinPluginSourceModule
8
- implements Module
9
- {
10
- @Override
11
- public void configure(Binder binder)
12
- {
13
- Multibinder<PluginSource> multibinder = Multibinder.newSetBinder(binder, PluginSource.class);
14
- //multibinder.addBinding().to(LocalDirectoryPluginSource.class); // TODO
15
- multibinder.addBinding().to(InjectedPluginSource.class);
16
- }
17
- }
@@ -1,50 +0,0 @@
1
- package org.embulk.plugin;
2
-
3
- import com.fasterxml.jackson.annotation.JsonValue;
4
- import java.util.Objects;
5
-
6
- public final class DefaultPluginType
7
- extends PluginType
8
- {
9
- private DefaultPluginType(final String name)
10
- {
11
- super("default", name);
12
- }
13
-
14
- public static PluginType create(final String name)
15
- {
16
- if (name == null) {
17
- throw new NullPointerException("name must not be null");
18
- }
19
- return new DefaultPluginType(name);
20
- }
21
-
22
- @JsonValue
23
- public final String getJsonValue()
24
- {
25
- return this.getName();
26
- }
27
-
28
- @Override
29
- public final int hashCode()
30
- {
31
- return Objects.hash(getSourceType(), getName());
32
- }
33
-
34
- @Override
35
- public final boolean equals(final Object objectOther)
36
- {
37
- if (!(objectOther instanceof DefaultPluginType)) {
38
- return false;
39
- }
40
- final DefaultPluginType other = (DefaultPluginType) objectOther;
41
- return (this.getSourceType().equals(other.getSourceType()) &&
42
- this.getName().equals(other.getName()));
43
- }
44
-
45
- @Override
46
- public final String toString()
47
- {
48
- return this.getName();
49
- }
50
- }
@@ -1,100 +0,0 @@
1
- package org.embulk.plugin;
2
-
3
- import com.google.inject.Binder;
4
- import com.google.inject.Inject;
5
- import com.google.inject.Injector;
6
- import com.google.inject.Key;
7
- import com.google.inject.name.Names;
8
- import com.google.inject.name.Named;
9
- import com.google.common.base.Preconditions;
10
- import org.embulk.spi.InputPlugin;
11
- import org.embulk.spi.FileInputPlugin;
12
- import org.embulk.spi.FileInputRunner;
13
- import org.embulk.spi.OutputPlugin;
14
- import org.embulk.spi.FileOutputPlugin;
15
- import org.embulk.spi.FileOutputRunner;
16
-
17
- /**
18
- * InjectedPluginSource loads plugins bound by Guice.
19
- * This plugin source is intended to be used in test cases.
20
- * Plugins need to be bound to Binder following:
21
- *
22
- * // Module
23
- * public void configure(Binder binder)
24
- * {
25
- * InjectedPluginSource.registerPluginTo(InputPluginclass, "my", MyInputPlugin.class);
26
- * }
27
- *
28
- */
29
- public class InjectedPluginSource
30
- implements PluginSource
31
- {
32
- private final Injector injector;
33
-
34
- @Inject
35
- public InjectedPluginSource(Injector injector)
36
- {
37
- this.injector = injector;
38
- }
39
-
40
- private static interface PluginFactory <T>
41
- {
42
- public T newPlugin(Injector injector);
43
- }
44
-
45
- public <T> T newPlugin(Class<T> iface, PluginType type) throws PluginSourceNotMatchException
46
- {
47
- if (type.getSourceType() != PluginSource.Type.DEFAULT) {
48
- throw new PluginSourceNotMatchException();
49
- }
50
-
51
- final String name = type.getName();
52
- try {
53
- @SuppressWarnings("unchecked")
54
- PluginFactory<T> factory = (PluginFactory<T>) injector.getInstance(
55
- Key.get(PluginFactory.class, pluginFactoryName(iface, name)));
56
- return factory.newPlugin(injector);
57
- } catch (com.google.inject.ConfigurationException ex) {
58
- throw new PluginSourceNotMatchException();
59
- }
60
- }
61
-
62
- public static <T> void registerPluginTo(Binder binder, Class<T> iface, String name, final Class<?> impl)
63
- {
64
- PluginFactory<T> factory;
65
- if (FileInputPlugin.class.isAssignableFrom(impl)) {
66
- Preconditions.checkArgument(InputPlugin.class.equals(iface));
67
- factory = new PluginFactory<T>() {
68
- @SuppressWarnings("unchecked")
69
- public T newPlugin(Injector injector)
70
- {
71
- return (T) new FileInputRunner((FileInputPlugin) injector.getInstance(impl));
72
- }
73
- };
74
- } else if (FileOutputPlugin.class.isAssignableFrom(impl)) {
75
- Preconditions.checkArgument(OutputPlugin.class.equals(iface));
76
- factory = new PluginFactory<T>() {
77
- @SuppressWarnings("unchecked")
78
- public T newPlugin(Injector injector)
79
- {
80
- return (T) new FileOutputRunner((FileOutputPlugin) injector.getInstance(impl));
81
- }
82
- };
83
- } else {
84
- Preconditions.checkArgument(iface.isAssignableFrom(impl));
85
- factory = new PluginFactory<T>() {
86
- @SuppressWarnings("unchecked")
87
- public T newPlugin(Injector injector)
88
- {
89
- return (T) injector.getInstance(impl);
90
- }
91
- };
92
- }
93
- binder.bind(PluginFactory.class).annotatedWith(pluginFactoryName(iface, name)).toInstance(factory);
94
- }
95
-
96
- private static Named pluginFactoryName(Class<?> iface, String name)
97
- {
98
- return Names.named(iface.getName() + "." + name);
99
- }
100
- }
@@ -1,112 +0,0 @@
1
- package org.embulk.plugin;
2
-
3
- import com.fasterxml.jackson.annotation.JsonProperty;
4
- import com.fasterxml.jackson.annotation.JsonValue;
5
- import java.util.Collections;
6
- import java.util.HashMap;
7
- import java.util.Map;
8
- import java.util.Objects;
9
-
10
- public final class MavenPluginType
11
- extends PluginType
12
- {
13
- private MavenPluginType(final String name, final String group, final String classifier, final String version)
14
- {
15
- super("maven", name);
16
- this.group = group;
17
- this.classifier = classifier;
18
- this.version = version;
19
-
20
- final StringBuilder fullNameBuilder = new StringBuilder();
21
- fullNameBuilder.append("maven:");
22
- fullNameBuilder.append(group);
23
- fullNameBuilder.append(":");
24
- fullNameBuilder.append(name);
25
- fullNameBuilder.append(":");
26
- fullNameBuilder.append(version);
27
- if (classifier != null) {
28
- fullNameBuilder.append(":");
29
- fullNameBuilder.append(classifier);
30
- }
31
- this.fullName = fullNameBuilder.toString();
32
-
33
- final HashMap<String, String> fullMapMutable = new HashMap<String, String>();
34
- fullMapMutable.put("source", "maven");
35
- fullMapMutable.put("name", name);
36
- fullMapMutable.put("group", group);
37
- fullMapMutable.put("version", version);
38
- this.fullMap = Collections.unmodifiableMap(fullMapMutable);
39
- }
40
-
41
- public static MavenPluginType create(
42
- final String name, final String group, final String classifier, final String version)
43
- {
44
- if (name == null || group == null || version == null) {
45
- throw new NullPointerException("\"name\", \"group\" and \"version\" must be present.");
46
- }
47
- return new MavenPluginType(name, group, classifier, version);
48
- }
49
-
50
- @JsonValue
51
- public final Map<String, String> getJsonValue()
52
- {
53
- return this.fullMap;
54
- }
55
-
56
- @JsonProperty("group")
57
- public final String getGroup()
58
- {
59
- return this.group;
60
- }
61
-
62
- @JsonProperty("classifier")
63
- public final String getClassifier()
64
- {
65
- return this.classifier;
66
- }
67
-
68
- @JsonProperty("version")
69
- public final String getVersion()
70
- {
71
- return this.version;
72
- }
73
-
74
- public final String getFullName()
75
- {
76
- return this.fullName;
77
- }
78
-
79
- @Override
80
- public final int hashCode()
81
- {
82
- return Objects.hash(getSourceType(), getName(), this.group, this.classifier, this.version);
83
- }
84
-
85
- @Override
86
- public boolean equals(Object objectOther)
87
- {
88
- if (!(objectOther instanceof MavenPluginType)) {
89
- return false;
90
- }
91
- MavenPluginType other = (MavenPluginType) objectOther;
92
- return (this.getSourceType().equals(other.getSourceType()) &&
93
- this.getName().equals(other.getName()) &&
94
- this.getGroup().equals(other.getGroup()) &&
95
- ((this.getClassifier() == null && other.getClassifier() == null) ||
96
- (this.getClassifier() != null && this.getClassifier().equals(other.getClassifier()))) &&
97
- this.getVersion().equals(other.getVersion()));
98
- }
99
-
100
- @JsonValue
101
- @Override
102
- public String toString()
103
- {
104
- return this.fullName;
105
- }
106
-
107
- private final String group;
108
- private final String classifier; // |classifier| can be null.
109
- private final String version;
110
- private final String fullName;
111
- private final Map<String, String> fullMap;
112
- }
@@ -1,993 +0,0 @@
1
- package org.embulk.plugin;
2
-
3
- import com.google.common.base.Function;
4
- import com.google.common.collect.ImmutableList;
5
- import com.google.common.collect.Iterables;
6
- import com.google.common.collect.Iterators;
7
- import java.io.ByteArrayOutputStream;
8
- import java.io.InputStream;
9
- import java.io.IOException;
10
- import java.net.JarURLConnection;
11
- import java.net.MalformedURLException;
12
- import java.net.URL;
13
- import java.net.URLClassLoader;
14
- import java.net.URLConnection;
15
- import java.net.URLStreamHandler;
16
- import java.nio.file.Path;
17
- import java.security.AccessControlContext;
18
- import java.security.AccessController;
19
- import java.security.CodeSigner;
20
- import java.security.CodeSource;
21
- import java.security.PrivilegedActionException;
22
- import java.security.PrivilegedExceptionAction;
23
- import java.util.ArrayList;
24
- import java.util.Collection;
25
- import java.util.Collections;
26
- import java.util.Enumeration;
27
- import java.util.Iterator;
28
- import java.util.List;
29
- import java.util.Vector;
30
- import java.util.jar.Attributes;
31
- import java.util.jar.JarEntry;
32
- import java.util.jar.JarInputStream;
33
- import java.util.jar.Manifest;
34
-
35
- public class PluginClassLoader
36
- extends URLClassLoader
37
- {
38
- private PluginClassLoader(
39
- final ClassLoader parentClassLoader,
40
- final URL oneNestedJarFileUrl,
41
- final Collection<String> embeddedJarPathsInNestedJar,
42
- final Collection<URL> flatJarUrls,
43
- final Collection<String> parentFirstPackages,
44
- final Collection<String> parentFirstResources)
45
- {
46
- super(combineUrlsToArray(oneNestedJarFileUrl, flatJarUrls == null ? Collections.<URL>emptyList() : flatJarUrls),
47
- parentClassLoader);
48
-
49
- // Given |oneNestedJarFileUrl| should be "file:...". |this.oneNestedJarUrlBase| should be "jar:file:...".
50
- URL oneNestedJarUrlBaseBuilt = null;
51
- if (oneNestedJarFileUrl != null) {
52
- try {
53
- oneNestedJarUrlBaseBuilt = new URL("jar", "", -1, oneNestedJarFileUrl + "!/");
54
- }
55
- catch (MalformedURLException ex) {
56
- // TODO: Notify this to reporters as far as possible.
57
- System.err.println("FATAL: Invalid JAR file URL: " + oneNestedJarFileUrl.toString());
58
- ex.printStackTrace();
59
- }
60
- }
61
- this.oneNestedJarUrlBase = oneNestedJarUrlBaseBuilt;
62
-
63
- if (embeddedJarPathsInNestedJar == null) {
64
- this.embeddedJarPathsInNestedJar = Collections.<String>emptyList();
65
- }
66
- else {
67
- this.embeddedJarPathsInNestedJar = Collections.unmodifiableCollection(embeddedJarPathsInNestedJar);
68
- }
69
- this.parentFirstPackagePrefixes = ImmutableList.copyOf(
70
- Iterables.transform(parentFirstPackages, new Function<String, String>() {
71
- public String apply(String pkg)
72
- {
73
- return pkg + ".";
74
- }
75
- }));
76
- this.parentFirstResourcePrefixes = ImmutableList.copyOf(
77
- Iterables.transform(parentFirstResources, new Function<String, String>() {
78
- public String apply(String pkg)
79
- {
80
- return pkg + "/";
81
- }
82
- }));
83
- this.accessControlContext = AccessController.getContext();
84
- }
85
-
86
- @Deprecated // Constructing directly with the constructor is deprecated (no warnings). Use static creator methods.
87
- public PluginClassLoader(
88
- final Collection<URL> flatJarUrls,
89
- final ClassLoader parentClassLoader,
90
- final Collection<String> parentFirstPackages,
91
- final Collection<String> parentFirstResources)
92
- {
93
- this(parentClassLoader, null, null, flatJarUrls, parentFirstPackages, parentFirstResources);
94
- }
95
-
96
- /**
97
- * Creates PluginClassLoader for plugins with dependency JARs flat on the file system, like Gem-based plugins.
98
- */
99
- public static PluginClassLoader createForFlatJars(
100
- final ClassLoader parentClassLoader,
101
- final Collection<URL> flatJarUrls,
102
- final Collection<String> parentFirstPackages,
103
- final Collection<String> parentFirstResources)
104
- {
105
- return new PluginClassLoader(
106
- parentClassLoader,
107
- null,
108
- null,
109
- flatJarUrls,
110
- parentFirstPackages,
111
- parentFirstResources);
112
- }
113
-
114
- /**
115
- * Creates PluginClassLoader for plugins with dependency JARs embedded in the plugin JAR itself.
116
- *
117
- * @param parentClassLoader the parent ClassLoader of this PluginClassLoader instance
118
- * @param oneNestedJarFileUrl "file:" URL of the plugin JAR file
119
- * @param embeddedJarPathsInNestedJar collection of resource names of embedded dependency JARs in the plugin JAR
120
- * @param parentFirstPackages collection of package names that are to be loaded first before the plugin's
121
- * @param parentFirstResources collection of resource names that are to be loaded first before the plugin's
122
- */
123
- public static PluginClassLoader createForNestedJar(
124
- final ClassLoader parentClassLoader,
125
- final URL oneNestedJarFileUrl,
126
- final Collection<String> embeddedJarPathsInNestedJar,
127
- final Collection<String> parentFirstPackages,
128
- final Collection<String> parentFirstResources)
129
- {
130
- return new PluginClassLoader(
131
- parentClassLoader,
132
- oneNestedJarFileUrl,
133
- embeddedJarPathsInNestedJar,
134
- null,
135
- parentFirstPackages,
136
- parentFirstResources);
137
- }
138
-
139
- /**
140
- * Adds the specified path to the list of URLs (for {@code URLClassLoader}) to search for classes and resources.
141
- *
142
- * It internally calls {@code URLClassLoader#addURL}.
143
- *
144
- * Some plugins (embulk-input-jdbc, for example) are calling this method to load external JAR files.
145
- *
146
- * @see <a href="https://github.com/embulk/embulk-input-jdbc/blob/ebfff0b249d507fc730c87e08b56e6aa492060ca/embulk-input-jdbc/src/main/java/org/embulk/input/jdbc/AbstractJdbcInputPlugin.java#L586-L595">embulk-input-jdbc</a>
147
- */
148
- public void addPath(Path path)
149
- {
150
- try {
151
- addUrl(path.toUri().toURL());
152
- } catch (MalformedURLException ex) {
153
- throw new IllegalArgumentException(ex);
154
- }
155
- }
156
-
157
- public void addUrl(URL url)
158
- {
159
- super.addURL(url);
160
- }
161
-
162
- /**
163
- * Finds a class defined by the given name from given JARs and JARs in the given JAR.
164
- *
165
- * Classes directly inthe given JARs are always prioritized. Only if no such a class is found
166
- * directly in the given JAR, it tries to find the class in JARs in the given JAR.
167
- */
168
- @Override
169
- protected Class<?> findClass(final String className)
170
- throws ClassNotFoundException
171
- {
172
- if (this.oneNestedJarUrlBase == null || this.embeddedJarPathsInNestedJar.isEmpty()) {
173
- // Multiple flat JARs -- Gem-based plugins, or Single JAR (JAR-based plugins) without any embedded JAR
174
- return super.findClass(className);
175
- }
176
- else {
177
- // Single nested JAR -- JAR-based plugins
178
- try {
179
- // Classes directly in the plugin JAR are always prioritized.
180
- return super.findClass(className);
181
- }
182
- catch (ClassNotFoundException directClassNotFoundException) {
183
- try {
184
- return AccessController.doPrivileged(
185
- new PrivilegedExceptionAction<Class<?>>() {
186
- public Class<?> run()
187
- throws ClassNotFoundException
188
- {
189
- try {
190
- return defineClassFromEmbeddedJars(className);
191
- }
192
- catch (ClassNotFoundException | LinkageError | ClassCastException ex) {
193
- throw ex;
194
- }
195
- catch (Throwable ex) {
196
- // Resource found from JARs in the JAR, but failed to load it as a class.
197
- throw new ClassNotFoundException(className, ex);
198
- }
199
- }
200
- }, this.accessControlContext);
201
- } catch (PrivilegedActionException ex) {
202
- final Throwable internalException = ex.getException();
203
- if (internalException instanceof ClassNotFoundException) {
204
- throw (ClassNotFoundException) internalException;
205
- }
206
- if (internalException instanceof LinkageError) {
207
- throw (LinkageError) internalException;
208
- }
209
- if (internalException instanceof ClassCastException) {
210
- throw (ClassCastException) internalException;
211
- }
212
- throw new ClassNotFoundException(className, ex);
213
- }
214
- }
215
- }
216
- }
217
-
218
- /**
219
- * Loads the class with the specified binary name prioritized by the "parent-first" condition.
220
- *
221
- * It copy-cats {@code ClassLoader#loadClass} while the "parent-first" priorities are considered.
222
- *
223
- * If the specified class is "parent-first", it behaves the same as {@code ClassLoader#loadClass} ordered as below.
224
- *
225
- * <ol>
226
- *
227
- * <li><p>Invoke the {@code #findLoadedClass} method to check if the class has already been loaded.</p></li>
228
- *
229
- * <li><p>Invoke the parent's {@code #loadClass} method.
230
- *
231
- * <li><p>Invoke the {@code #findClass} method of this class loader to find the class.</p></li>
232
- *
233
- * </ol>
234
- *
235
- * If the specified class is "NOT parent-first", the 2nd and 3rd actions are swapped.
236
- *
237
- * @see <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#loadClass(java.lang.String,%20boolean)">Oracle Java7's ClassLoader#loadClass</a>
238
- * @see <a href="http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/jdk7u141-b02/src/share/classes/java/lang/ClassLoader.java">OpenJDK7's ClassLoader</a>
239
- */
240
- @Override
241
- protected Class<?> loadClass(String name, boolean resolve)
242
- throws ClassNotFoundException
243
- {
244
- synchronized (getClassLoadingLock(name)) {
245
- // If the class has already been loaded by this {@code ClassLoader} or the parent's {@code ClassLoader},
246
- // find the loaded class and return it.
247
- final Class<?> loadedClass = findLoadedClass(name);
248
-
249
- if (loadedClass != null) {
250
- return resolveClass(loadedClass, resolve);
251
- }
252
-
253
- final boolean parentFirst = isParentFirstPackage(name);
254
-
255
- // If the class is "not parent-first" (not to be loaded by the parent at first),
256
- // try {@code #findClass} of the child's ({@code PluginClassLoader}'s).
257
- if (!parentFirst) {
258
- try {
259
- return resolveClass(findClass(name), resolve);
260
- } catch (ClassNotFoundException ignored) {
261
- }
262
- }
263
-
264
- // If the class is "parent-first" (to be loaded by the parent at first), try this part at first.
265
- // If the class is "not parent-first" (not to be loaded by the parent at first), the above part runs first.
266
- try {
267
- return resolveClass(getParent().loadClass(name), resolve);
268
- } catch (ClassNotFoundException ignored) {
269
- }
270
-
271
- // If the class is "parent-first" (to be loaded by the parent at first), this part runs after the above.
272
- if (parentFirst) {
273
- return resolveClass(findClass(name), resolve);
274
- }
275
-
276
- throw new ClassNotFoundException(name);
277
- }
278
- }
279
-
280
- private Class<?> resolveClass(Class<?> clazz, boolean resolve)
281
- {
282
- if (resolve) {
283
- resolveClass(clazz);
284
- }
285
- return clazz;
286
- }
287
-
288
- /**
289
- * Finds a resource recognized as the given name from given JARs and JARs in the given JAR.
290
- *
291
- * Resources directly in the given JARs are always prioritized. Only if no such a resource is found
292
- * directly in the given JAR, it tries to find the resource in JARs in the given JAR.
293
- *
294
- * Note that URLClassLoader#findResource is public while ClassLoader#findResource is protected.
295
- */
296
- @Override
297
- public URL findResource(final String resourceName)
298
- {
299
- if (this.oneNestedJarUrlBase == null || this.embeddedJarPathsInNestedJar.isEmpty()) {
300
- // Multiple flat JARs -- Gem-based plugins, or Single JAR (JAR-based plugins) without any embedded JAR
301
- return super.findResource(resourceName);
302
- }
303
- else {
304
- // Single nested JAR -- JAR-based plugins
305
- // Classes directly in the plugin JAR are always prioritized.
306
- final URL rootUrl = super.findResource(resourceName);
307
- if (rootUrl != null) {
308
- return rootUrl;
309
- }
310
-
311
- try {
312
- return AccessController.doPrivileged(
313
- new PrivilegedExceptionAction<URL>() {
314
- public URL run()
315
- {
316
- return findResourceFromEmbeddedJars(resourceName);
317
- }
318
- }, this.accessControlContext);
319
- } catch (PrivilegedActionException ignored) {
320
- }
321
-
322
- return null;
323
- }
324
- }
325
-
326
- /**
327
- * Finds resources recognized as the given name from given JARs and JARs in the given JAR.
328
- *
329
- * Resources directly in the given JARs precede. Resources in JARs in the given JAR follow resources
330
- * directly in the given JARs.
331
- *
332
- * Note that URLClassLoader#findResources is public while ClassLoader#findResources is protected.
333
- */
334
- @Override
335
- public Enumeration<URL> findResources(final String resourceName)
336
- throws IOException
337
- {
338
- if (this.oneNestedJarUrlBase == null || this.embeddedJarPathsInNestedJar.isEmpty()) {
339
- // Multiple flat JARs -- Gem-based plugins, or Single JAR (JAR-based plugins) without any embedded JAR
340
- return super.findResources(resourceName);
341
- }
342
- else {
343
- // Single nested JAR -- JAR-based plugins
344
- final Vector<URL> urls = new Vector<URL>();
345
-
346
- // Classes directly in the plugin JAR are always prioritized.
347
- // Note that |super.findResources| may throw IOException.
348
- for (final Enumeration<URL> rootUrls = super.findResources(resourceName); rootUrls.hasMoreElements(); ) {
349
- urls.add(rootUrls.nextElement());
350
- }
351
-
352
- try {
353
- final List<URL> childUrls = AccessController.doPrivileged(
354
- new PrivilegedExceptionAction<List<URL>>() {
355
- public List<URL> run()
356
- throws IOException
357
- {
358
- return findResourcesFromEmbeddedJars(resourceName);
359
- }
360
- }, this.accessControlContext);
361
- urls.addAll(childUrls);
362
- } catch (PrivilegedActionException ignored) {
363
- }
364
-
365
- return urls.elements();
366
- }
367
- }
368
-
369
- @Override
370
- public URL getResource(String name)
371
- {
372
- boolean childFirst = isParentFirstPath(name);
373
-
374
- if (childFirst) {
375
- URL childUrl = findResource(name);
376
- if (childUrl != null) {
377
- return childUrl;
378
- }
379
- }
380
-
381
- URL parentUrl = getParent().getResource(name);
382
- if (parentUrl != null) {
383
- return parentUrl;
384
- }
385
-
386
- if (!childFirst) {
387
- URL childUrl = findResource(name);
388
- if (childUrl != null) {
389
- return childUrl;
390
- }
391
- }
392
-
393
- return null;
394
- }
395
-
396
- @Override
397
- public InputStream getResourceAsStream(final String resourceName)
398
- {
399
- final boolean childFirst = isParentFirstPath(resourceName);
400
-
401
- if (childFirst) {
402
- final InputStream childInputStream = getResourceAsStreamFromChild(resourceName);
403
- if (childInputStream != null) {
404
- return childInputStream;
405
- }
406
- }
407
-
408
- final InputStream parentInputStream = getParent().getResourceAsStream(resourceName);
409
- if (parentInputStream != null) {
410
- return parentInputStream;
411
- }
412
-
413
- if (!childFirst) {
414
- final InputStream childInputStream = getResourceAsStreamFromChild(resourceName);
415
- if (childInputStream != null) {
416
- return childInputStream;
417
- }
418
- }
419
-
420
- return null;
421
- }
422
-
423
- @Override
424
- public Enumeration<URL> getResources(String name)
425
- throws IOException
426
- {
427
- List<Iterator<URL>> resources = new ArrayList<>();
428
-
429
- boolean parentFirst = isParentFirstPath(name);
430
-
431
- if (!parentFirst) {
432
- Iterator<URL> childResources = Iterators.forEnumeration(findResources(name));
433
- resources.add(childResources);
434
- }
435
-
436
- Iterator<URL> parentResources = Iterators.forEnumeration(getParent().getResources(name));
437
- resources.add(parentResources);
438
-
439
- if (parentFirst) {
440
- Iterator<URL> childResources = Iterators.forEnumeration(findResources(name));
441
- resources.add(childResources);
442
- }
443
-
444
- return Iterators.asEnumeration(Iterators.concat(resources.iterator()));
445
- }
446
-
447
- /**
448
- * URLStreamHandler to handle resources in embedded JARs in the plugin JAR.
449
- */
450
- private static class PluginClassURLStreamHandler
451
- extends URLStreamHandler
452
- {
453
- public PluginClassURLStreamHandler(final String protocol)
454
- {
455
- this.protocol = protocol;
456
- }
457
-
458
- @Override
459
- protected URLConnection openConnection(final URL url)
460
- throws IOException
461
- {
462
- // Note that declaring variables here may cause unexpected behaviors.
463
- // https://stackoverflow.com/questions/9952815/s3-java-client-fails-a-lot-with-premature-end-of-content-length-delimited-messa
464
- return new URLConnection(url) {
465
- @Override
466
- public void connect()
467
- {
468
- }
469
-
470
- @Override
471
- public InputStream getInputStream()
472
- throws IOException
473
- {
474
- final URL embulkPluginJarUrl = getURL();
475
- if (!embulkPluginJarUrl.getProtocol().equals(protocol)) {
476
- return null;
477
- }
478
- final String[] embulkPluginJarUrlSeparate = embulkPluginJarUrl.getPath().split("!!/");
479
- if (embulkPluginJarUrlSeparate.length != 2) {
480
- return null;
481
- }
482
- final URL embeddedJarUrl = new URL(embulkPluginJarUrlSeparate[0]);
483
- final String embeddedResourceName = embulkPluginJarUrlSeparate[1];
484
-
485
- final JarURLConnection embeddedJarURLConnection;
486
- try {
487
- final URLConnection urlConnection = embeddedJarUrl.openConnection();
488
- embeddedJarURLConnection = (JarURLConnection) urlConnection;
489
- }
490
- catch (ClassCastException ex) {
491
- return null;
492
- }
493
-
494
- final JarInputStream embeddedJarInputStream =
495
- new JarInputStream(embeddedJarURLConnection.getInputStream());
496
-
497
- // Note that |JarInputStream.getNextJarEntry| may throw IOException.
498
- JarEntry jarEntry = embeddedJarInputStream.getNextJarEntry();
499
- while (jarEntry != null) {
500
- if (jarEntry.getName().equals(embeddedResourceName)) {
501
- return embeddedJarInputStream; // The InputStream points the specific "JAR entry".
502
- }
503
- // Note that |JarInputStream.getNextJarEntry| may throw IOException.
504
- jarEntry = embeddedJarInputStream.getNextJarEntry();
505
- }
506
- return null;
507
- }
508
- };
509
- }
510
-
511
- public final String protocol;
512
- }
513
-
514
- private static URL[] combineUrlsToArray(final URL oneNestedJarFileUrl, final Collection<URL> flatJarUrls)
515
- {
516
- final int offset;
517
- final URL[] allDirectJarUrls;
518
- if (oneNestedJarFileUrl == null) {
519
- offset = 0;
520
- allDirectJarUrls = new URL[flatJarUrls.size()];
521
- }
522
- else {
523
- offset = 1;
524
- allDirectJarUrls = new URL[flatJarUrls.size() + 1];
525
- allDirectJarUrls[0] = oneNestedJarFileUrl;
526
- }
527
- int i = 0;
528
- for (final URL flatJarUrl : flatJarUrls) {
529
- allDirectJarUrls[i + offset] = flatJarUrl;
530
- ++i;
531
- }
532
- return allDirectJarUrls;
533
- }
534
-
535
- /**
536
- * Defines a class with given class name from JARs embedded in the plugin JAR.
537
- *
538
- * It tries to continue even if Exceptions are throws in one of embedded JARs so that
539
- * it can find the target class without affected from other unrelated JARs.
540
- */
541
- private Class<?> defineClassFromEmbeddedJars(final String className)
542
- throws ClassNotFoundException
543
- {
544
- final String classResourceName = className.replace('.', '/').concat(".class");
545
-
546
- Throwable lastException = null;
547
- // TODO: Speed up class loading by caching?
548
- for (final String embeddedJarPath : this.embeddedJarPathsInNestedJar) {
549
- final URL embeddedJarUrl;
550
- final JarURLConnection embeddedJarUrlConnection;
551
- final JarInputStream embeddedJarInputStream;
552
- try {
553
- embeddedJarUrl = getEmbeddedJarUrl(embeddedJarPath);
554
- embeddedJarUrlConnection = getEmbeddedJarURLConnection(embeddedJarUrl);
555
- embeddedJarInputStream = getEmbeddedJarInputStream(embeddedJarUrlConnection);
556
- }
557
- catch (IOException ex) {
558
- lastException = ex;
559
- continue;
560
- }
561
-
562
- final Manifest manifest;
563
- try {
564
- manifest = embeddedJarUrlConnection.getManifest();
565
- }
566
- catch (IOException ex) {
567
- // TODO: Notify this to reporters as far as possible.
568
- lastException = ex;
569
- System.err.println("Failed to load manifest in embedded JAR: " + embeddedJarPath);
570
- ex.printStackTrace();
571
- continue;
572
- }
573
-
574
- JarEntry jarEntry;
575
- try {
576
- jarEntry = embeddedJarInputStream.getNextJarEntry();
577
- }
578
- catch (IOException ex) {
579
- // TODO: Notify this to reporters as far as possible.
580
- lastException = ex;
581
- System.err.println("Failed to load entry in embedded JAR: " + embeddedJarPath);
582
- ex.printStackTrace();
583
- continue;
584
- }
585
- jarEntries: while (jarEntry != null) {
586
- if (jarEntry.getName().equals(classResourceName)) {
587
- final int lastDotIndexInClassName = className.lastIndexOf('.');
588
- final String packageName;
589
- if (lastDotIndexInClassName != -1) {
590
- packageName = className.substring(0, lastDotIndexInClassName);
591
- }
592
- else {
593
- packageName = null;
594
- }
595
-
596
- final URL codeSourceUrl = embeddedJarUrl;
597
-
598
- // Define the package if the package is not loaded / defined yet.
599
- if (packageName != null) {
600
- // TODO: Consider package sealing.
601
- // https://docs.oracle.com/javase/tutorial/deployment/jar/sealman.html
602
- if (this.getPackage(packageName) == null) {
603
- try {
604
- final Attributes fileAttributes;
605
- final Attributes mainAttributes;
606
- if (manifest != null) {
607
- fileAttributes = manifest.getAttributes(classResourceName);
608
- mainAttributes = manifest.getMainAttributes();
609
- }
610
- else {
611
- fileAttributes = null;
612
- mainAttributes = null;
613
- }
614
-
615
- this.definePackage(
616
- packageName,
617
- getAttributeFromAttributes(mainAttributes, fileAttributes, classResourceName,
618
- Attributes.Name.SPECIFICATION_TITLE),
619
- getAttributeFromAttributes(mainAttributes, fileAttributes, classResourceName,
620
- Attributes.Name.SPECIFICATION_VERSION),
621
- getAttributeFromAttributes(mainAttributes, fileAttributes, classResourceName,
622
- Attributes.Name.SPECIFICATION_VENDOR),
623
- getAttributeFromAttributes(mainAttributes, fileAttributes, classResourceName,
624
- Attributes.Name.IMPLEMENTATION_TITLE),
625
- getAttributeFromAttributes(mainAttributes, fileAttributes, classResourceName,
626
- Attributes.Name.IMPLEMENTATION_VERSION),
627
- getAttributeFromAttributes(mainAttributes, fileAttributes, classResourceName,
628
- Attributes.Name.IMPLEMENTATION_VENDOR),
629
- null);
630
- }
631
- catch (IllegalArgumentException ex) {
632
- // The package duplicates -- in parallel cases
633
- if (getPackage(packageName) == null) {
634
- // TODO: Notify this to reporters as far as possible.
635
- lastException = ex;
636
- System.err.println("FATAL: Should not happen. Package duplicated: " + packageName);
637
- ex.printStackTrace();
638
- continue;
639
- }
640
- }
641
- }
642
- }
643
-
644
- final long classResourceSize = jarEntry.getSize();
645
- final byte[] classResourceBytes;
646
- final long actualSize;
647
-
648
- if (classResourceSize > -1) { // JAR entry size available
649
- classResourceBytes = new byte[(int) classResourceSize];
650
- try {
651
- actualSize = embeddedJarInputStream.read(classResourceBytes, 0, (int) classResourceSize);
652
- }
653
- catch (IOException ex) {
654
- // TODO: Notify this to reporters as far as possible.
655
- lastException = ex;
656
- System.err.println("Failed to load entry in embedded JAR: " + classResourceName);
657
- ex.printStackTrace();
658
- break jarEntries; // Breaking from loading since this JAR looks broken.
659
- }
660
- if (actualSize != classResourceSize) {
661
- // TODO: Notify this to reporters as far as possible.
662
- System.err.println("Broken entry in embedded JAR: " + classResourceName);
663
- break jarEntries; // Breaking from loading since this JAR looks broken.
664
- }
665
- }
666
- else { // JAR entry size unavailable
667
- final ByteArrayOutputStream bytesStream = new ByteArrayOutputStream();
668
- final byte[] buffer = new byte[1024];
669
- long accumulatedSize = 0;
670
- while (true) {
671
- final long readSize;
672
- try {
673
- readSize = embeddedJarInputStream.read(buffer, 0, 1024);
674
- }
675
- catch (IOException ex) {
676
- // TODO: Notify this to reporters as far as possible.
677
- lastException = ex;
678
- System.err.println("Failed to load entry in embedded JAR: " + classResourceName);
679
- ex.printStackTrace();
680
- break jarEntries; // Breaking from loading since this JAR looks broken.
681
- }
682
-
683
- if (readSize < 0) {
684
- break;
685
- }
686
-
687
- bytesStream.write(buffer, 0, (int) readSize);
688
- accumulatedSize += readSize;
689
- }
690
- actualSize = accumulatedSize;
691
- classResourceBytes = bytesStream.toByteArray();
692
- }
693
-
694
- final CodeSource codeSource = new CodeSource(codeSourceUrl, (CodeSigner[]) null);
695
- final Class<?> definedClass;
696
- try {
697
- definedClass = defineClass(className, classResourceBytes, 0, (int) actualSize, codeSource);
698
- }
699
- catch (Throwable ex) {
700
- // TODO: Notify this to reporters as far as possible.
701
- lastException = ex;
702
- System.err.println("Failed to load entry in embedded JAR: " + classResourceName);
703
- ex.printStackTrace();
704
- continue;
705
- }
706
- return definedClass;
707
- }
708
- try {
709
- jarEntry = embeddedJarInputStream.getNextJarEntry();
710
- }
711
- catch (IOException ex) {
712
- // TODO: Notify this to reporters as far as possible.
713
- lastException = ex;
714
- System.err.println("Failed to load entry in embedded JAR: " + classResourceName);
715
- ex.printStackTrace();
716
- break jarEntries; // Breaking from loading since this JAR looks broken.
717
- }
718
- }
719
- }
720
- if (lastException != null) {
721
- throw new ClassNotFoundException(className, lastException);
722
- }
723
- else {
724
- throw new ClassNotFoundException(className);
725
- }
726
- }
727
-
728
- private InputStream getResourceAsStreamFromChild(final String resourceName)
729
- {
730
- if (this.oneNestedJarUrlBase == null || this.embeddedJarPathsInNestedJar.isEmpty()) {
731
- // Multiple flat JARs -- Gem-based plugins, or Single JAR (JAR-based plugins) without any embedded JAR
732
- return super.getResourceAsStream(resourceName);
733
- }
734
- else {
735
- // Single nested JAR -- JAR-based plugins
736
- // Resources directly in the plugin JAR are prioritized.
737
- final InputStream inputStream = super.getResourceAsStream(resourceName);
738
- if (inputStream == null) {
739
- try {
740
- final InputStream childInputStream = AccessController.doPrivileged(
741
- new PrivilegedExceptionAction<InputStream>() {
742
- public InputStream run()
743
- {
744
- return getResourceAsStreamFromEmbeddedJars(resourceName);
745
- }
746
- }, this.accessControlContext);
747
- if (childInputStream != null) {
748
- return childInputStream;
749
- }
750
- } catch (PrivilegedActionException ignored) {
751
- }
752
- }
753
- }
754
- return null;
755
- }
756
-
757
- private InputStream getResourceAsStreamFromEmbeddedJars(final String resourceName)
758
- {
759
- for (final String embeddedJarPath : this.embeddedJarPathsInNestedJar) {
760
- final JarInputStream embeddedJarInputStream;
761
- try {
762
- embeddedJarInputStream = getEmbeddedJarInputStream(embeddedJarPath);
763
- }
764
- catch (IOException ex) {
765
- // TODO: Notify this to reporters as far as possible.
766
- System.err.println("Failed to load entry in embedded JAR: " + resourceName + " / " + embeddedJarPath);
767
- ex.printStackTrace();
768
- continue;
769
- }
770
-
771
- JarEntry jarEntry;
772
- try {
773
- jarEntry = embeddedJarInputStream.getNextJarEntry();
774
- }
775
- catch (IOException ex) {
776
- // TODO: Notify this to reporters as far as possible.
777
- System.err.println("Failed to load entry in embedded JAR: " + resourceName + " / " + embeddedJarPath);
778
- ex.printStackTrace();
779
- continue;
780
- }
781
- while (jarEntry != null) {
782
- if (jarEntry.getName().equals(resourceName)) {
783
- return embeddedJarInputStream; // Pointing the specific "JAR entry"
784
- }
785
- }
786
- }
787
- return null;
788
- }
789
-
790
- private URL findResourceFromEmbeddedJars(final String resourceName)
791
- {
792
- for (final String embeddedJarPath : this.embeddedJarPathsInNestedJar) {
793
- final URL embeddedJarUrl;
794
- final JarURLConnection embeddedJarUrlConnection;
795
- final JarInputStream embeddedJarInputStream;
796
- try {
797
- embeddedJarUrl = getEmbeddedJarUrl(embeddedJarPath);
798
- embeddedJarUrlConnection = getEmbeddedJarURLConnection(embeddedJarUrl);
799
- embeddedJarInputStream = getEmbeddedJarInputStream(embeddedJarUrlConnection);
800
- }
801
- catch (IOException ex) {
802
- // TODO: Notify this to reporters as far as possible.
803
- System.err.println("Failed to load entry in embedded JAR: " +
804
- resourceName + " / " + embeddedJarPath);
805
- ex.printStackTrace();
806
- continue;
807
- }
808
-
809
- JarEntry jarEntry;
810
- try {
811
- jarEntry = embeddedJarInputStream.getNextJarEntry();
812
- }
813
- catch (IOException ex) {
814
- // TODO: Notify this to reporters as far as possible.
815
- System.err.println("Failed to load entry in embedded JAR: " +
816
- resourceName + " / " + embeddedJarPath);
817
- ex.printStackTrace();
818
- continue;
819
- }
820
- jarEntries: while (jarEntry != null) {
821
- if (jarEntry.getName().equals(resourceName)) {
822
- // For resources (not classes) in nested JARs, the schema and the URL should be like:
823
- // "embulk-plugin-jar:jar:file://.../plugin.jar!/classpath/library.jar!!/org.library/resource.txt"
824
- //
825
- // The "embulk-plugin-jar" URL is processed with |PluginClassURLStreamHandler|.
826
- // See also: https://www.ibm.com/developerworks/library/j-onejar/index.html
827
- //
828
- // The URL lives only in the JVM execution.
829
- try {
830
- // The URL lives only in the JVM execution.
831
- return new URL("embulk-plugin-jar", "", -1, embeddedJarUrl + "!!/" + resourceName,
832
- new PluginClassURLStreamHandler("embulk-plugin-jar"));
833
- }
834
- catch (MalformedURLException ex) {
835
- // TODO: Notify this to reporters as far as possible.
836
- System.err.println("Failed to load entry in embedded JAR: " +
837
- resourceName + " / " + embeddedJarPath);
838
- ex.printStackTrace();
839
- break jarEntries;
840
- }
841
- }
842
- try {
843
- jarEntry = embeddedJarInputStream.getNextJarEntry();
844
- }
845
- catch (IOException ex) {
846
- // TODO: Notify this to reporters as far as possible.
847
- System.err.println("Failed to load entry in embedded JAR: " +
848
- resourceName + " / " + embeddedJarPath);
849
- ex.printStackTrace();
850
- break jarEntries;
851
- }
852
- }
853
- }
854
- return null;
855
- }
856
-
857
- private List<URL> findResourcesFromEmbeddedJars(final String resourceName)
858
- throws IOException
859
- {
860
- final ArrayList<URL> resourceUrls = new ArrayList<URL>();
861
- for (final String embeddedJarPath : this.embeddedJarPathsInNestedJar) {
862
- final URL embeddedJarUrl = getEmbeddedJarUrl(embeddedJarPath);
863
- final JarURLConnection embeddedJarUrlConnection = getEmbeddedJarURLConnection(embeddedJarUrl);
864
- final JarInputStream embeddedJarInputStream = getEmbeddedJarInputStream(embeddedJarUrlConnection);
865
-
866
- // Note that |JarInputStream.getNextJarEntry| may throw IOException.
867
- JarEntry jarEntry = embeddedJarInputStream.getNextJarEntry();
868
- while (jarEntry != null) {
869
- if (jarEntry.getName().equals(resourceName)) {
870
- // For resources (not classes) in nested JARs, the schema and the URL should be like:
871
- // "embulk-plugin-jar:jar:file://.../plugin.jar!/classpath/library.jar!/org.library/resource.txt"
872
- //
873
- // The "embulk-plugin-jar" URL is processed with |PluginClassURLStreamHandler|.
874
- // See also: https://www.ibm.com/developerworks/library/j-onejar/index.html
875
- //
876
- // The URL lives only in the JVM execution.
877
- //
878
- // Note that |new URL| may throw MalformedURLException (extending IOException).
879
- resourceUrls.add(new URL("embulk-plugin-jar", "", -1, embeddedJarUrl + "!!/" + resourceName,
880
- new PluginClassURLStreamHandler("embulk-plugin-jar")));
881
- }
882
- // Note that |JarInputStream.getNextJarEntry| may throw IOException.
883
- jarEntry = embeddedJarInputStream.getNextJarEntry();
884
- }
885
- }
886
- return resourceUrls;
887
- }
888
-
889
- private URL getEmbeddedJarUrl(final String embeddedJarPath)
890
- throws MalformedURLException
891
- {
892
- final URL embeddedJarUrl;
893
- try {
894
- embeddedJarUrl = new URL(this.oneNestedJarUrlBase, embeddedJarPath);
895
- }
896
- catch (MalformedURLException ex) {
897
- // TODO: Notify this to reporters as far as possible.
898
- System.err.println("Failed to load entry in embedded JAR: " + embeddedJarPath);
899
- ex.printStackTrace();
900
- throw ex;
901
- }
902
- return embeddedJarUrl;
903
- }
904
-
905
- private JarURLConnection getEmbeddedJarURLConnection(final URL embeddedJarUrl)
906
- throws IOException
907
- {
908
- final JarURLConnection embeddedJarURLConnection;
909
- try {
910
- final URLConnection urlConnection = embeddedJarUrl.openConnection();
911
- embeddedJarURLConnection = (JarURLConnection) urlConnection;
912
- }
913
- catch (IOException ex) {
914
- // TODO: Notify this to reporters as far as possible.
915
- System.err.println("Failed to load entry in embedded JAR: " + embeddedJarUrl.toString());
916
- ex.printStackTrace();
917
- throw ex;
918
- }
919
- return embeddedJarURLConnection;
920
- }
921
-
922
- private JarInputStream getEmbeddedJarInputStream(final JarURLConnection embeddedJarURLConnection)
923
- throws IOException
924
- {
925
- final JarInputStream embeddedJarInputStream;
926
- try {
927
- final InputStream inputStream = embeddedJarURLConnection.getInputStream();
928
- embeddedJarInputStream = new JarInputStream(inputStream);
929
- }
930
- catch (IOException ex) {
931
- // TODO: Notify this to reporters as far as possible.
932
- System.err.println("Failed to load entry in embedded JAR: " + embeddedJarURLConnection.toString());
933
- ex.printStackTrace();
934
- throw ex;
935
- }
936
- return embeddedJarInputStream;
937
- }
938
-
939
- private JarInputStream getEmbeddedJarInputStream(final String embeddedJarPath)
940
- throws IOException
941
- {
942
- final URL embeddedJarUrl = getEmbeddedJarUrl(embeddedJarPath);
943
- final JarURLConnection embeddedJarUrlConnection = getEmbeddedJarURLConnection(embeddedJarUrl);
944
- return getEmbeddedJarInputStream(embeddedJarUrlConnection);
945
- }
946
-
947
- private static String getAttributeFromAttributes(
948
- final Attributes mainAttributes,
949
- final Attributes fileAttributes,
950
- final String classResourceName,
951
- final Attributes.Name attributeName)
952
- {
953
- if (fileAttributes != null) {
954
- final String value = fileAttributes.getValue(attributeName);
955
- if (value != null) {
956
- return value;
957
- }
958
- }
959
- if (mainAttributes != null) {
960
- final String value = mainAttributes.getValue(attributeName);
961
- if (value != null) {
962
- return value;
963
- }
964
- }
965
- return null;
966
- }
967
-
968
- private boolean isParentFirstPackage(String name)
969
- {
970
- for (String pkg : parentFirstPackagePrefixes) {
971
- if (name.startsWith(pkg)) {
972
- return true;
973
- }
974
- }
975
- return false;
976
- }
977
-
978
- private boolean isParentFirstPath(String name)
979
- {
980
- for (String path : parentFirstResourcePrefixes) {
981
- if (name.startsWith(path)) {
982
- return true;
983
- }
984
- }
985
- return false;
986
- }
987
-
988
- private final URL oneNestedJarUrlBase;
989
- private final Collection<String> embeddedJarPathsInNestedJar;
990
- private final List<String> parentFirstPackagePrefixes;
991
- private final List<String> parentFirstResourcePrefixes;
992
- private final AccessControlContext accessControlContext;
993
- }