embulk 0.7.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.ruby-version +1 -0
- data/.travis.yml +18 -0
- data/COPYING +14 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +31 -0
- data/README.md +206 -0
- data/Rakefile +26 -0
- data/appveyor.yml +20 -0
- data/bin/embulk +106 -0
- data/build.gradle +338 -0
- data/embulk-cli/build.gradle +6 -0
- data/embulk-cli/src/main/java/org/embulk/cli/Main.java +22 -0
- data/embulk-cli/src/main/sh/selfrun.sh +158 -0
- data/embulk-cli/src/test/java/org/embulk/cli/DummyMain.java +23 -0
- data/embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java +281 -0
- data/embulk-core/build.gradle +59 -0
- data/embulk-core/src/main/java/org/embulk/EmbulkEmbed.java +315 -0
- data/embulk-core/src/main/java/org/embulk/EmbulkService.java +76 -0
- data/embulk-core/src/main/java/org/embulk/command/PreviewPrinter.java +84 -0
- data/embulk-core/src/main/java/org/embulk/command/TablePreviewPrinter.java +107 -0
- data/embulk-core/src/main/java/org/embulk/command/VerticalPreviewPrinter.java +47 -0
- data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +33 -0
- data/embulk-core/src/main/java/org/embulk/config/Config.java +15 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +15 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigDiff.java +29 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigInject.java +14 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +141 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +31 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSource.java +39 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +231 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +84 -0
- data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +123 -0
- data/embulk-core/src/main/java/org/embulk/config/Task.java +10 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +180 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskReport.java +29 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +345 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +31 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +38 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
- data/embulk-core/src/main/java/org/embulk/exec/BulkLoader.java +652 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +52 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecutionInterruptedException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecutionResult.java +26 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
- data/embulk-core/src/main/java/org/embulk/exec/ForGuess.java +16 -0
- data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +16 -0
- data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +373 -0
- data/embulk-core/src/main/java/org/embulk/exec/LocalExecutorPlugin.java +129 -0
- data/embulk-core/src/main/java/org/embulk/exec/LocalThreadExecutor.java +34 -0
- data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +60 -0
- data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/PartialExecutionException.java +18 -0
- data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +77 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +183 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +27 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +17 -0
- data/embulk-core/src/main/java/org/embulk/exec/ResumeState.java +100 -0
- data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +136 -0
- data/embulk-core/src/main/java/org/embulk/exec/SetCurrentThreadName.java +19 -0
- data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
- data/embulk-core/src/main/java/org/embulk/exec/TempFileAllocator.java +35 -0
- data/embulk-core/src/main/java/org/embulk/guice/Bootstrap.java +157 -0
- data/embulk-core/src/main/java/org/embulk/guice/CloseableInjector.java +22 -0
- data/embulk-core/src/main/java/org/embulk/guice/InjectorProxy.java +145 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjector.java +26 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjectorProxy.java +61 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleManager.java +187 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethods.java +89 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethodsMap.java +38 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleModule.java +97 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +72 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +119 -0
- data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +17 -0
- data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +96 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java +168 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderFactory.java +9 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderModule.java +71 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +78 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +6 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +19 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +47 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/InputPluginWrapper.java +102 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/PluginWrappers.java +30 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileInputWrapper.java +96 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileOutputWrapper.java +102 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalPageOutputWrapper.java +95 -0
- data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +148 -0
- data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +8 -0
- data/embulk-core/src/main/java/org/embulk/spi/Column.java +92 -0
- data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +112 -0
- data/embulk-core/src/main/java/org/embulk/spi/ColumnVisitor.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +16 -0
- data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +16 -0
- data/embulk-core/src/main/java/org/embulk/spi/Exec.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +217 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecutorPlugin.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/Extension.java +44 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +11 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +30 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +162 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +13 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +28 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +202 -0
- data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +9 -0
- data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +33 -0
- data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +29 -0
- data/embulk-core/src/main/java/org/embulk/spi/Page.java +51 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +338 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +47 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +11 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +226 -0
- data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/ProcessState.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/ProcessTask.java +117 -0
- data/embulk-core/src/main/java/org/embulk/spi/Schema.java +134 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +93 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfigException.java +22 -0
- data/embulk-core/src/main/java/org/embulk/spi/TaskState.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/TempFileException.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/TempFileSpace.java +87 -0
- data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelper.java +8 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelperFactory.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +159 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +100 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +97 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +104 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +49 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +58 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +41 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +15 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +44 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ByteSize.java +156 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFile.java +106 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFileSerDe.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ToString.java +54 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ToStringMap.java +34 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnNotFoundException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetter.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetterFactory.java +94 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicPageBuilder.java +161 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Executors.java +95 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +111 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +119 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +100 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +190 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +25 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +65 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +118 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +123 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +38 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/OutputStreamFileOutput.java +88 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +102 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +139 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/ResumableInputStream.java +128 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/RetryExecutor.java +130 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +53 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/AbstractDynamicColumnSetter.java +79 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/BooleanColumnSetter.java +64 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DefaultValueSetter.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DoubleColumnSetter.java +61 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/LongColumnSetter.java +69 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/NullDefaultValueSetter.java +34 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/SkipColumnSetter.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/StringColumnSetter.java +56 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/TimestampColumnSetter.java +64 -0
- data/embulk-core/src/main/resources/embulk/logback-color.xml +72 -0
- data/embulk-core/src/main/resources/embulk/logback-console.xml +14 -0
- data/embulk-core/src/main/resources/embulk/logback-file.xml +25 -0
- data/embulk-core/src/main/resources/embulk/parent_first_packages.properties +70 -0
- data/embulk-core/src/main/resources/embulk/parent_first_resources.properties +28 -0
- data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +114 -0
- data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +72 -0
- data/embulk-core/src/test/java/org/embulk/RandomManager.java +53 -0
- data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +23 -0
- data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +17 -0
- data/embulk-core/src/test/java/org/embulk/config/TestConfigLoader.java +66 -0
- data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +114 -0
- data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +70 -0
- data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +58 -0
- data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +18 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +63 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +101 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +73 -0
- data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +57 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestBuffer.java +24 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +89 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +196 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +207 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +188 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +319 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +116 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +63 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParserDeprecated.java +67 -0
- data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
- data/embulk-core/src/test/java/org/embulk/spi/unit/TestByteSize.java +79 -0
- data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +132 -0
- data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +123 -0
- data/embulk-docs/Makefile +178 -0
- data/embulk-docs/build.gradle +32 -0
- data/embulk-docs/make.bat +243 -0
- data/embulk-docs/push-gh-pages.sh +49 -0
- data/embulk-docs/src/_static/embulk-architecture.png +0 -0
- data/embulk-docs/src/_static/embulk-logo.png +0 -0
- data/embulk-docs/src/_static/embulk-logo.svg +133 -0
- data/embulk-docs/src/built-in.rst +440 -0
- data/embulk-docs/src/conf.py +260 -0
- data/embulk-docs/src/customization.rst +184 -0
- data/embulk-docs/src/index.rst +84 -0
- data/embulk-docs/src/recipe.rst +8 -0
- data/embulk-docs/src/recipe/scheduled-csv-load-to-elasticsearch-kibana4.rst +153 -0
- data/embulk-docs/src/release.rst +57 -0
- data/embulk-docs/src/release/release-0.1.0.rst +8 -0
- data/embulk-docs/src/release/release-0.2.0.rst +16 -0
- data/embulk-docs/src/release/release-0.2.1.rst +19 -0
- data/embulk-docs/src/release/release-0.3.0.rst +34 -0
- data/embulk-docs/src/release/release-0.3.1.rst +11 -0
- data/embulk-docs/src/release/release-0.3.2.rst +15 -0
- data/embulk-docs/src/release/release-0.4.0.rst +74 -0
- data/embulk-docs/src/release/release-0.4.1.rst +18 -0
- data/embulk-docs/src/release/release-0.4.10.rst +17 -0
- data/embulk-docs/src/release/release-0.4.2.rst +18 -0
- data/embulk-docs/src/release/release-0.4.3.rst +34 -0
- data/embulk-docs/src/release/release-0.4.4.rst +39 -0
- data/embulk-docs/src/release/release-0.4.5.rst +24 -0
- data/embulk-docs/src/release/release-0.4.6.rst +30 -0
- data/embulk-docs/src/release/release-0.4.7.rst +16 -0
- data/embulk-docs/src/release/release-0.4.8.rst +15 -0
- data/embulk-docs/src/release/release-0.4.9.rst +23 -0
- data/embulk-docs/src/release/release-0.5.0.rst +89 -0
- data/embulk-docs/src/release/release-0.5.1.rst +13 -0
- data/embulk-docs/src/release/release-0.5.2.rst +30 -0
- data/embulk-docs/src/release/release-0.5.3.rst +22 -0
- data/embulk-docs/src/release/release-0.5.4.rst +24 -0
- data/embulk-docs/src/release/release-0.5.5.rst +18 -0
- data/embulk-docs/src/release/release-0.6.0.rst +34 -0
- data/embulk-docs/src/release/release-0.6.1.rst +11 -0
- data/embulk-docs/src/release/release-0.6.10.rst +15 -0
- data/embulk-docs/src/release/release-0.6.11.rst +19 -0
- data/embulk-docs/src/release/release-0.6.12.rst +31 -0
- data/embulk-docs/src/release/release-0.6.13.rst +23 -0
- data/embulk-docs/src/release/release-0.6.14.rst +47 -0
- data/embulk-docs/src/release/release-0.6.15.rst +26 -0
- data/embulk-docs/src/release/release-0.6.16.rst +26 -0
- data/embulk-docs/src/release/release-0.6.17.rst +39 -0
- data/embulk-docs/src/release/release-0.6.18.rst +14 -0
- data/embulk-docs/src/release/release-0.6.19.rst +18 -0
- data/embulk-docs/src/release/release-0.6.2.rst +17 -0
- data/embulk-docs/src/release/release-0.6.20.rst +19 -0
- data/embulk-docs/src/release/release-0.6.21.rst +20 -0
- data/embulk-docs/src/release/release-0.6.22.rst +26 -0
- data/embulk-docs/src/release/release-0.6.23.rst +17 -0
- data/embulk-docs/src/release/release-0.6.24.rst +13 -0
- data/embulk-docs/src/release/release-0.6.25.rst +12 -0
- data/embulk-docs/src/release/release-0.6.3.rst +23 -0
- data/embulk-docs/src/release/release-0.6.4.rst +13 -0
- data/embulk-docs/src/release/release-0.6.5.rst +17 -0
- data/embulk-docs/src/release/release-0.6.6.rst +17 -0
- data/embulk-docs/src/release/release-0.6.7.rst +17 -0
- data/embulk-docs/src/release/release-0.6.8.rst +24 -0
- data/embulk-docs/src/release/release-0.6.9.rst +24 -0
- data/embulk-docs/src/release/release-0.7.0.rst +96 -0
- data/embulk-standards/build.gradle +5 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +284 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +379 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +411 -0
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +55 -0
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +71 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +203 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +148 -0
- data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +59 -0
- data/embulk-standards/src/main/java/org/embulk/standards/RenameFilterPlugin.java +56 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +16 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +53 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +85 -0
- data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +1 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvFormatterPlugin.java +312 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +75 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +360 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestRenameFilterPlugin.java +88 -0
- data/embulk.gemspec +39 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/gradlew +164 -0
- data/gradlew.bat +90 -0
- data/lib/embulk.rb +72 -0
- data/lib/embulk/buffer.rb +22 -0
- data/lib/embulk/column.rb +70 -0
- data/lib/embulk/command/embulk_bundle.rb +56 -0
- data/lib/embulk/command/embulk_example.rb +32 -0
- data/lib/embulk/command/embulk_generate_bin.rb +62 -0
- data/lib/embulk/command/embulk_main.rb +2 -0
- data/lib/embulk/command/embulk_migrate_plugin.rb +170 -0
- data/lib/embulk/command/embulk_new_plugin.rb +124 -0
- data/lib/embulk/command/embulk_run.rb +470 -0
- data/lib/embulk/command/embulk_selfupdate.rb +84 -0
- data/lib/embulk/data/bundle/.bundle/config +3 -0
- data/lib/embulk/data/bundle/.ruby-version +1 -0
- data/lib/embulk/data/bundle/Gemfile +26 -0
- data/lib/embulk/data/bundle/embulk/filter/example.rb +42 -0
- data/lib/embulk/data/bundle/embulk/input/example.rb +54 -0
- data/lib/embulk/data/bundle/embulk/output/example.rb +58 -0
- data/lib/embulk/data/new/LICENSE.txt +21 -0
- data/lib/embulk/data/new/README.md.erb +111 -0
- data/lib/embulk/data/new/gitignore.erb +13 -0
- data/lib/embulk/data/new/java/build.gradle.erb +73 -0
- data/lib/embulk/data/new/java/decoder.java.erb +84 -0
- data/lib/embulk/data/new/java/encoder.java.erb +86 -0
- data/lib/embulk/data/new/java/file_input.java.erb +143 -0
- data/lib/embulk/data/new/java/file_output.java.erb +93 -0
- data/lib/embulk/data/new/java/filter.java.erb +56 -0
- data/lib/embulk/data/new/java/formatter.java.erb +54 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/lib/embulk/data/new/java/gradlew +164 -0
- data/lib/embulk/data/new/java/gradlew.bat +90 -0
- data/lib/embulk/data/new/java/input.java.erb +87 -0
- data/lib/embulk/data/new/java/output.java.erb +77 -0
- data/lib/embulk/data/new/java/parser.java.erb +60 -0
- data/lib/embulk/data/new/java/plugin_loader.rb.erb +3 -0
- data/lib/embulk/data/new/java/test.java.erb +5 -0
- data/lib/embulk/data/new/ruby/.ruby-version +1 -0
- data/lib/embulk/data/new/ruby/Gemfile +2 -0
- data/lib/embulk/data/new/ruby/Rakefile +3 -0
- data/lib/embulk/data/new/ruby/decoder_guess.rb.erb +25 -0
- data/lib/embulk/data/new/ruby/filter.rb.erb +41 -0
- data/lib/embulk/data/new/ruby/formatter.rb.erb +49 -0
- data/lib/embulk/data/new/ruby/gemspec.erb +20 -0
- data/lib/embulk/data/new/ruby/input.rb.erb +59 -0
- data/lib/embulk/data/new/ruby/output.rb.erb +61 -0
- data/lib/embulk/data/new/ruby/parser.rb.erb +44 -0
- data/lib/embulk/data/new/ruby/parser_guess.rb.erb +65 -0
- data/lib/embulk/data/package_data.rb +50 -0
- data/lib/embulk/data_source.rb +220 -0
- data/lib/embulk/decoder_plugin.rb +27 -0
- data/lib/embulk/encoder_plugin.rb +27 -0
- data/lib/embulk/error.rb +8 -0
- data/lib/embulk/executor_plugin.rb +23 -0
- data/lib/embulk/file_input.rb +87 -0
- data/lib/embulk/file_input_plugin.rb +27 -0
- data/lib/embulk/file_output.rb +56 -0
- data/lib/embulk/file_output_plugin.rb +27 -0
- data/lib/embulk/filter_plugin.rb +105 -0
- data/lib/embulk/formatter_plugin.rb +105 -0
- data/lib/embulk/guess/charset.rb +44 -0
- data/lib/embulk/guess/csv.rb +327 -0
- data/lib/embulk/guess/gzip.rb +18 -0
- data/lib/embulk/guess/newline.rb +22 -0
- data/lib/embulk/guess/schema_guess.rb +118 -0
- data/lib/embulk/guess/time_format_guess.rb +394 -0
- data/lib/embulk/guess_plugin.rb +129 -0
- data/lib/embulk/input_plugin.rb +121 -0
- data/lib/embulk/java/bootstrap.rb +24 -0
- data/lib/embulk/java/imports.rb +69 -0
- data/lib/embulk/java/time_helper.rb +79 -0
- data/lib/embulk/java_plugin.rb +90 -0
- data/lib/embulk/logger.rb +154 -0
- data/lib/embulk/output_plugin.rb +150 -0
- data/lib/embulk/page.rb +30 -0
- data/lib/embulk/page_builder.rb +76 -0
- data/lib/embulk/parser_plugin.rb +78 -0
- data/lib/embulk/plugin.rb +239 -0
- data/lib/embulk/plugin_registry.rb +96 -0
- data/lib/embulk/runner.rb +184 -0
- data/lib/embulk/schema.rb +103 -0
- data/lib/embulk/version.rb +3 -0
- data/settings.gradle +6 -0
- data/test/guess/test_schema_guess.rb +11 -0
- data/test/guess/test_time_format_guess.rb +133 -0
- data/test/helper.rb +21 -0
- data/test/run-test.rb +14 -0
- metadata +566 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
package org.embulk.cli;
|
|
2
|
+
|
|
3
|
+
import java.io.BufferedWriter;
|
|
4
|
+
import java.io.File;
|
|
5
|
+
import java.io.FileOutputStream;
|
|
6
|
+
import java.io.OutputStreamWriter;
|
|
7
|
+
import java.nio.charset.Charset;
|
|
8
|
+
import java.util.Arrays;
|
|
9
|
+
|
|
10
|
+
public class DummyMain {
|
|
11
|
+
|
|
12
|
+
public static void main(String[] args) throws Exception {
|
|
13
|
+
System.out.println(Arrays.asList(args));
|
|
14
|
+
File thisFolder = new File(SelfrunTest.class.getResource("/org/embulk/cli/DummyMain.class").toURI()).getParentFile();
|
|
15
|
+
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(thisFolder, "args.txt")), Charset.defaultCharset()))) {
|
|
16
|
+
for (String arg : args) {
|
|
17
|
+
writer.write(arg);
|
|
18
|
+
writer.newLine();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
package org.embulk.cli;
|
|
2
|
+
|
|
3
|
+
import static org.junit.Assert.assertEquals;
|
|
4
|
+
|
|
5
|
+
import java.io.BufferedReader;
|
|
6
|
+
import java.io.BufferedWriter;
|
|
7
|
+
import java.io.File;
|
|
8
|
+
import java.io.FileOutputStream;
|
|
9
|
+
import java.io.IOException;
|
|
10
|
+
import java.io.InputStreamReader;
|
|
11
|
+
import java.io.OutputStreamWriter;
|
|
12
|
+
import java.nio.charset.Charset;
|
|
13
|
+
import java.nio.file.FileSystem;
|
|
14
|
+
import java.nio.file.FileSystems;
|
|
15
|
+
import java.nio.file.Files;
|
|
16
|
+
import java.nio.file.StandardOpenOption;
|
|
17
|
+
import java.util.Arrays;
|
|
18
|
+
import java.util.List;
|
|
19
|
+
|
|
20
|
+
import org.junit.BeforeClass;
|
|
21
|
+
import org.junit.Test;
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
public class SelfrunTest {
|
|
25
|
+
|
|
26
|
+
private static File testSelfrun;
|
|
27
|
+
|
|
28
|
+
@BeforeClass
|
|
29
|
+
public static void prepare() throws Exception {
|
|
30
|
+
File selfrun = findSelfrun();
|
|
31
|
+
FileSystem fs = FileSystems.getDefault();
|
|
32
|
+
String line = new String(Files.readAllBytes(fs.getPath(selfrun.getAbsolutePath())), Charset.defaultCharset());
|
|
33
|
+
|
|
34
|
+
File thisFolder = new File(SelfrunTest.class.getResource("/org/embulk/cli/SelfrunTest.class").toURI()).getParentFile();
|
|
35
|
+
testSelfrun = new File(thisFolder, System.getProperty("file.separator").equals("\\") ? "selfrun.bat" : "selfrun.sh");
|
|
36
|
+
|
|
37
|
+
File classpath = thisFolder.getParentFile().getParentFile().getParentFile();
|
|
38
|
+
line = line.replaceAll("java ", "java -classpath " + classpath.getAbsolutePath().replaceAll("\\\\", "\\\\\\\\") + " org.embulk.cli.DummyMain ");
|
|
39
|
+
|
|
40
|
+
// Modify selfrun so that arguments are written in 'args.txt' .
|
|
41
|
+
Files.write(fs.getPath(testSelfrun.getAbsolutePath()), line.getBytes(Charset.defaultCharset()), StandardOpenOption.CREATE);
|
|
42
|
+
if (!testSelfrun.setExecutable(true)) {
|
|
43
|
+
throw new Exception("Cannot se executable.");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@Test
|
|
49
|
+
public void testNoArgument() throws Exception {
|
|
50
|
+
List<String> args = execute();
|
|
51
|
+
assertEquals(Arrays.asList(
|
|
52
|
+
"-XX:+AggressiveOpts",
|
|
53
|
+
"-XX:+TieredCompilation",
|
|
54
|
+
"-XX:TieredStopAtLevel=1",
|
|
55
|
+
"-Xverify:none",
|
|
56
|
+
"-jar",
|
|
57
|
+
testSelfrun.getAbsolutePath()),
|
|
58
|
+
args);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@Test
|
|
62
|
+
public void testArguments() throws Exception {
|
|
63
|
+
List<String> args = execute("a1", "a2", "\"a3=v3\"");
|
|
64
|
+
assertEquals(Arrays.asList(
|
|
65
|
+
"-XX:+AggressiveOpts",
|
|
66
|
+
"-XX:+TieredCompilation",
|
|
67
|
+
"-XX:TieredStopAtLevel=1",
|
|
68
|
+
"-Xverify:none",
|
|
69
|
+
"-jar",
|
|
70
|
+
testSelfrun.getAbsolutePath(),
|
|
71
|
+
"a1",
|
|
72
|
+
"a2",
|
|
73
|
+
"a3=v3"),
|
|
74
|
+
args);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@Test
|
|
78
|
+
public void testRun() throws Exception {
|
|
79
|
+
List<String> args = execute("run", "a1");
|
|
80
|
+
assertEquals(Arrays.asList(
|
|
81
|
+
"-XX:+AggressiveOpts",
|
|
82
|
+
"-XX:+UseConcMarkSweepGC",
|
|
83
|
+
"-jar",
|
|
84
|
+
testSelfrun.getAbsolutePath(),
|
|
85
|
+
"run",
|
|
86
|
+
"a1"),
|
|
87
|
+
args);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@Test
|
|
91
|
+
public void testJpO() throws Exception {
|
|
92
|
+
List<String> args = execute("-J+O", "a1", "a2");
|
|
93
|
+
assertEquals(Arrays.asList(
|
|
94
|
+
"-XX:+AggressiveOpts",
|
|
95
|
+
"-XX:+UseConcMarkSweepGC",
|
|
96
|
+
"-jar",
|
|
97
|
+
testSelfrun.getAbsolutePath(),
|
|
98
|
+
"a1",
|
|
99
|
+
"a2"),
|
|
100
|
+
args);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@Test
|
|
104
|
+
public void testJmO() throws Exception {
|
|
105
|
+
List<String> args = execute("-J-O", "a1", "a2");
|
|
106
|
+
assertEquals(Arrays.asList(
|
|
107
|
+
"-XX:+AggressiveOpts",
|
|
108
|
+
"-XX:+TieredCompilation",
|
|
109
|
+
"-XX:TieredStopAtLevel=1",
|
|
110
|
+
"-Xverify:none",
|
|
111
|
+
"-jar",
|
|
112
|
+
testSelfrun.getAbsolutePath(),
|
|
113
|
+
"a1",
|
|
114
|
+
"a2"),
|
|
115
|
+
args);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@Test
|
|
119
|
+
public void testR1() throws Exception {
|
|
120
|
+
List<String> args = execute("-Rr1", "a1", "a2");
|
|
121
|
+
assertEquals(Arrays.asList(
|
|
122
|
+
"-XX:+AggressiveOpts",
|
|
123
|
+
"-XX:+TieredCompilation",
|
|
124
|
+
"-XX:TieredStopAtLevel=1",
|
|
125
|
+
"-Xverify:none",
|
|
126
|
+
"-jar",
|
|
127
|
+
testSelfrun.getAbsolutePath(),
|
|
128
|
+
"r1",
|
|
129
|
+
"a1",
|
|
130
|
+
"a2"),
|
|
131
|
+
args);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@Test
|
|
135
|
+
public void testR2() throws Exception {
|
|
136
|
+
List<String> args = execute("\"-Rr1=v1\"", "\"-Rr2=v2\"", "a1", "a2");
|
|
137
|
+
assertEquals(Arrays.asList(
|
|
138
|
+
"-XX:+AggressiveOpts",
|
|
139
|
+
"-XX:+TieredCompilation",
|
|
140
|
+
"-XX:TieredStopAtLevel=1",
|
|
141
|
+
"-Xverify:none",
|
|
142
|
+
"-jar",
|
|
143
|
+
testSelfrun.getAbsolutePath(),
|
|
144
|
+
"r1=v1",
|
|
145
|
+
"r2=v2",
|
|
146
|
+
"a1",
|
|
147
|
+
"a2"),
|
|
148
|
+
args);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@Test
|
|
152
|
+
public void testRRun() throws Exception {
|
|
153
|
+
List<String> args = execute("-Rr1", "run", "a1");
|
|
154
|
+
assertEquals(Arrays.asList(
|
|
155
|
+
"-XX:+AggressiveOpts",
|
|
156
|
+
"-XX:+UseConcMarkSweepGC",
|
|
157
|
+
"-jar",
|
|
158
|
+
testSelfrun.getAbsolutePath(),
|
|
159
|
+
"r1",
|
|
160
|
+
"run",
|
|
161
|
+
"a1"),
|
|
162
|
+
args);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@Test
|
|
166
|
+
public void testJ1() throws Exception {
|
|
167
|
+
List<String> args = execute("-J-Dj1", "a1", "a2");
|
|
168
|
+
assertEquals(Arrays.asList(
|
|
169
|
+
"-XX:+AggressiveOpts",
|
|
170
|
+
"-XX:+TieredCompilation",
|
|
171
|
+
"-XX:TieredStopAtLevel=1",
|
|
172
|
+
"-Xverify:none",
|
|
173
|
+
"-Dj1",
|
|
174
|
+
"-jar",
|
|
175
|
+
testSelfrun.getAbsolutePath(),
|
|
176
|
+
"a1",
|
|
177
|
+
"a2"),
|
|
178
|
+
args);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@Test
|
|
182
|
+
public void testJ2() throws Exception {
|
|
183
|
+
List<String> args = execute("\"-J-Dj1=v1\"", "\"-J-Dj2=v2\"", "a1", "a2");
|
|
184
|
+
assertEquals(Arrays.asList(
|
|
185
|
+
"-XX:+AggressiveOpts",
|
|
186
|
+
"-XX:+TieredCompilation",
|
|
187
|
+
"-XX:TieredStopAtLevel=1",
|
|
188
|
+
"-Xverify:none",
|
|
189
|
+
"-Dj1=v1",
|
|
190
|
+
"-Dj2=v2",
|
|
191
|
+
"-jar",
|
|
192
|
+
testSelfrun.getAbsolutePath(),
|
|
193
|
+
"a1",
|
|
194
|
+
"a2"),
|
|
195
|
+
args);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@Test
|
|
199
|
+
public void testJR() throws Exception {
|
|
200
|
+
List<String> args = execute("-Jj1", "-Rr1", "a1", "a2");
|
|
201
|
+
assertEquals(Arrays.asList(
|
|
202
|
+
"-XX:+AggressiveOpts",
|
|
203
|
+
"-XX:+TieredCompilation",
|
|
204
|
+
"-XX:TieredStopAtLevel=1",
|
|
205
|
+
"-Xverify:none",
|
|
206
|
+
"j1",
|
|
207
|
+
"-jar",
|
|
208
|
+
testSelfrun.getAbsolutePath(),
|
|
209
|
+
"r1",
|
|
210
|
+
"a1",
|
|
211
|
+
"a2"),
|
|
212
|
+
args);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
@Test
|
|
216
|
+
public void testJFile() throws Exception {
|
|
217
|
+
File javaArgsFile = new File(testSelfrun.getParentFile(), "java_args.txt");
|
|
218
|
+
FileSystem fs = FileSystems.getDefault();
|
|
219
|
+
Files.write(fs.getPath(javaArgsFile.getAbsolutePath()), "j1 j2 j3".getBytes(Charset.defaultCharset()), StandardOpenOption.CREATE);
|
|
220
|
+
|
|
221
|
+
List<String> args = execute("-J", javaArgsFile.getAbsolutePath(), "a1", "a2");
|
|
222
|
+
assertEquals(Arrays.asList(
|
|
223
|
+
"-XX:+AggressiveOpts",
|
|
224
|
+
"-XX:+TieredCompilation",
|
|
225
|
+
"-XX:TieredStopAtLevel=1",
|
|
226
|
+
"-Xverify:none",
|
|
227
|
+
"j1",
|
|
228
|
+
"j2",
|
|
229
|
+
"j3",
|
|
230
|
+
"-jar",
|
|
231
|
+
testSelfrun.getAbsolutePath(),
|
|
232
|
+
"a1",
|
|
233
|
+
"a2"),
|
|
234
|
+
args);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
private List<String> execute(String... arguments) throws Exception {
|
|
238
|
+
File temp = new File(testSelfrun.getParentFile(), "call-" + testSelfrun.getName());
|
|
239
|
+
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(temp), Charset.defaultCharset()))) {
|
|
240
|
+
writer.write(testSelfrun.getAbsolutePath());
|
|
241
|
+
for (String argument : arguments) {
|
|
242
|
+
writer.write(" ");
|
|
243
|
+
writer.write(argument);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (!temp.setExecutable(true)) {
|
|
247
|
+
throw new Exception("Cannot se executable.");
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
File argsFile = new File(testSelfrun.getParentFile(), "args.txt");
|
|
251
|
+
if (argsFile.exists()) {
|
|
252
|
+
if (!argsFile.delete()) {
|
|
253
|
+
throw new IOException("Cannot delete " + argsFile);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
Process process = Runtime.getRuntime().exec(temp.getAbsolutePath());
|
|
258
|
+
int exitCode = process.waitFor();
|
|
259
|
+
if (exitCode != 0 || !argsFile.exists()) {
|
|
260
|
+
StringBuilder builder = new StringBuilder();
|
|
261
|
+
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream(), Charset.defaultCharset()))) {
|
|
262
|
+
builder.append(reader.readLine());
|
|
263
|
+
builder.append(System.getProperty("line.separator"));
|
|
264
|
+
}
|
|
265
|
+
throw new Exception(builder.toString());
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
FileSystem fs = FileSystems.getDefault();
|
|
269
|
+
List<String> args = Files.readAllLines(fs.getPath(argsFile.getAbsolutePath()), Charset.defaultCharset());
|
|
270
|
+
return args;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
private static File findSelfrun() {
|
|
274
|
+
File folder = new File(".");
|
|
275
|
+
if (new File(folder, "embulk-cli").exists()) {
|
|
276
|
+
folder = new File(folder, "embulk-cli");
|
|
277
|
+
}
|
|
278
|
+
return new File(new File(new File(new File(folder, "src"), "main"), "sh"), "selfrun.sh");
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
apply plugin: "com.github.jruby-gradle.jar"
|
|
2
|
+
|
|
3
|
+
// include ruby scripts to jar. don't use sourceSets.main.resources.srcDirs
|
|
4
|
+
// because IntelliJ causes error if srcDirs includes files out of projectDir.
|
|
5
|
+
processResources.from("${rootProject.projectDir}/lib/", "${buildDir}/gemlib")
|
|
6
|
+
|
|
7
|
+
configurations {
|
|
8
|
+
// com.google.inject:guice depends on asm and cglib but version of the libraries conflict
|
|
9
|
+
// with ones bundled in jruby-complete and cause bytecode compatibility error
|
|
10
|
+
compile.exclude group: 'asm', module: 'asm'
|
|
11
|
+
compile.exclude group: 'org.sonatype.sisu.inject', module: 'cglib'
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
import com.github.jrubygradle.JRubyExec
|
|
15
|
+
import com.github.jrubygradle.JRubyPrepare
|
|
16
|
+
|
|
17
|
+
// determine which dependencies have updates: $ gradle dependencyUpdates
|
|
18
|
+
dependencies {
|
|
19
|
+
compile 'com.google.guava:guava:18.0'
|
|
20
|
+
compile 'com.google.inject:guice:4.0'
|
|
21
|
+
compile 'com.google.inject.extensions:guice-multibindings:4.0'
|
|
22
|
+
compile 'javax.inject:javax.inject:1'
|
|
23
|
+
compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3'
|
|
24
|
+
compile 'com.fasterxml.jackson.core:jackson-core:2.5.3'
|
|
25
|
+
compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3'
|
|
26
|
+
compile 'com.fasterxml.jackson.datatype:jackson-datatype-guava:2.5.3'
|
|
27
|
+
compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.5.3'
|
|
28
|
+
compile 'com.fasterxml.jackson.module:jackson-module-guice:2.5.3'
|
|
29
|
+
compile 'ch.qos.logback:logback-classic:1.1.3'
|
|
30
|
+
compile 'org.slf4j:slf4j-api:1.7.12'
|
|
31
|
+
compile 'org.jruby:jruby-complete:' + project.jrubyVersion
|
|
32
|
+
compile 'com.google.code.findbugs:annotations:3.0.0'
|
|
33
|
+
compile 'org.yaml:snakeyaml:1.14'
|
|
34
|
+
compile 'javax.validation:validation-api:1.1.0.Final'
|
|
35
|
+
compile 'org.apache.bval:bval-jsr303:0.5'
|
|
36
|
+
compile 'io.airlift:slice:0.9'
|
|
37
|
+
compile 'joda-time:joda-time:2.8.1'
|
|
38
|
+
compile 'io.netty:netty-buffer:5.0.0.Alpha1'
|
|
39
|
+
compile 'org.fusesource.jansi:jansi:1.11'
|
|
40
|
+
|
|
41
|
+
// For embulk/guess/charset.rb. See also embulk.gemspec
|
|
42
|
+
compile 'com.ibm.icu:icu4j:54.1.1'
|
|
43
|
+
|
|
44
|
+
gems 'rubygems:liquid:3.0.6'
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
task unpackGems(type: JRubyPrepare) {
|
|
48
|
+
outputDir file("${buildDir}/gem")
|
|
49
|
+
dependencies configurations.gems
|
|
50
|
+
doLast {
|
|
51
|
+
// move to build/gem/*/lib/* to build/gemlib/
|
|
52
|
+
file("${buildDir}/gemlib").mkdirs()
|
|
53
|
+
file("${buildDir}/gem/gems").eachDir { gemDir ->
|
|
54
|
+
file("${gemDir}/lib").renameTo("${buildDir}/gemlib/")
|
|
55
|
+
}
|
|
56
|
+
fileTree(dir: "${buildDir}/gemlib", include: "**/.jrubydir").each { f -> f.delete() }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
processResources.dependsOn("unpackGems")
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
package org.embulk;
|
|
2
|
+
|
|
3
|
+
import java.util.ArrayList;
|
|
4
|
+
import java.util.Arrays;
|
|
5
|
+
import java.util.List;
|
|
6
|
+
import com.google.common.base.Function;
|
|
7
|
+
import com.google.common.base.Throwables;
|
|
8
|
+
import com.google.common.collect.ImmutableList;
|
|
9
|
+
import com.google.common.collect.Iterables;
|
|
10
|
+
import com.google.inject.Injector;
|
|
11
|
+
import com.google.inject.Module;
|
|
12
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
13
|
+
import org.embulk.config.ModelManager;
|
|
14
|
+
import org.embulk.config.ConfigSource;
|
|
15
|
+
import org.embulk.config.ConfigDiff;
|
|
16
|
+
import org.embulk.config.ConfigLoader;
|
|
17
|
+
import org.embulk.exec.BulkLoader;
|
|
18
|
+
import org.embulk.exec.GuessExecutor;
|
|
19
|
+
import org.embulk.exec.PreviewExecutor;
|
|
20
|
+
import org.embulk.exec.PreviewResult;
|
|
21
|
+
import org.embulk.exec.ExecutionResult;
|
|
22
|
+
import org.embulk.exec.PartialExecutionException;
|
|
23
|
+
import org.embulk.exec.ResumeState;
|
|
24
|
+
import org.embulk.spi.BufferAllocator;
|
|
25
|
+
import org.embulk.spi.ExecSession;
|
|
26
|
+
import org.embulk.guice.Bootstrap;
|
|
27
|
+
import org.embulk.guice.LifeCycleInjector;
|
|
28
|
+
import static com.google.common.base.Preconditions.checkState;
|
|
29
|
+
import static com.google.common.base.Preconditions.checkNotNull;
|
|
30
|
+
|
|
31
|
+
public class EmbulkEmbed
|
|
32
|
+
{
|
|
33
|
+
public static ConfigLoader newSystemConfigLoader()
|
|
34
|
+
{
|
|
35
|
+
return new ConfigLoader(new ModelManager(null, new ObjectMapper()));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public static class Bootstrap
|
|
39
|
+
{
|
|
40
|
+
private final ConfigLoader systemConfigLoader;
|
|
41
|
+
|
|
42
|
+
private ConfigSource systemConfig;
|
|
43
|
+
|
|
44
|
+
private final List<Function<? super List<Module>, ? extends Iterable<? extends Module>>> moduleOverrides;
|
|
45
|
+
|
|
46
|
+
public Bootstrap()
|
|
47
|
+
{
|
|
48
|
+
this.systemConfigLoader = newSystemConfigLoader();
|
|
49
|
+
this.systemConfig = systemConfigLoader.newConfigSource();
|
|
50
|
+
this.moduleOverrides = new ArrayList<>();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public ConfigLoader getSystemConfigLoader()
|
|
54
|
+
{
|
|
55
|
+
return systemConfigLoader;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public Bootstrap setSystemConfig(ConfigSource systemConfig)
|
|
59
|
+
{
|
|
60
|
+
this.systemConfig = systemConfig.deepCopy();
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public Bootstrap addModules(Module... additionalModules)
|
|
65
|
+
{
|
|
66
|
+
return addModules(Arrays.asList(additionalModules));
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public Bootstrap addModules(Iterable<? extends Module> additionalModules)
|
|
70
|
+
{
|
|
71
|
+
final List<Module> copy = ImmutableList.copyOf(additionalModules);
|
|
72
|
+
return overrideModules(
|
|
73
|
+
new Function<List<Module>, Iterable<Module>>()
|
|
74
|
+
{
|
|
75
|
+
public Iterable<Module> apply(List<Module> modules)
|
|
76
|
+
{
|
|
77
|
+
return Iterables.concat(modules, copy);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public Bootstrap overrideModules(Function<? super List<Module>, ? extends Iterable<? extends Module>> function)
|
|
83
|
+
{
|
|
84
|
+
moduleOverrides.add(function);
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public EmbulkEmbed initialize()
|
|
89
|
+
{
|
|
90
|
+
return build(true);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public EmbulkEmbed initializeCloseable()
|
|
94
|
+
{
|
|
95
|
+
return build(false);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private EmbulkEmbed build(boolean destroyOnShutdownHook)
|
|
99
|
+
{
|
|
100
|
+
org.embulk.guice.Bootstrap bootstrap = new org.embulk.guice.Bootstrap()
|
|
101
|
+
.requireExplicitBindings(false)
|
|
102
|
+
.addModules(EmbulkService.standardModuleList(systemConfig));
|
|
103
|
+
|
|
104
|
+
for (Function<? super List<Module>, ? extends Iterable<? extends Module>> override : moduleOverrides) {
|
|
105
|
+
bootstrap = bootstrap.overrideModules(override);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
LifeCycleInjector injector;
|
|
109
|
+
if (destroyOnShutdownHook) {
|
|
110
|
+
injector = bootstrap.initialize();
|
|
111
|
+
} else {
|
|
112
|
+
injector = bootstrap.initializeCloseable();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return new EmbulkEmbed(systemConfig, injector);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private final LifeCycleInjector injector;
|
|
120
|
+
private final BulkLoader bulkLoader;
|
|
121
|
+
private final GuessExecutor guessExecutor;
|
|
122
|
+
private final PreviewExecutor previewExecutor;
|
|
123
|
+
|
|
124
|
+
EmbulkEmbed(ConfigSource systemConfig, LifeCycleInjector injector)
|
|
125
|
+
{
|
|
126
|
+
this.injector = injector;
|
|
127
|
+
injector.getInstance(org.slf4j.ILoggerFactory.class);
|
|
128
|
+
this.bulkLoader = new BulkLoader(injector, systemConfig);
|
|
129
|
+
this.guessExecutor = injector.getInstance(GuessExecutor.class);
|
|
130
|
+
this.previewExecutor = injector.getInstance(PreviewExecutor.class);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
public Injector getInjector()
|
|
134
|
+
{
|
|
135
|
+
return injector;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
public ModelManager getModelManager()
|
|
139
|
+
{
|
|
140
|
+
return injector.getInstance(ModelManager.class);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
public BufferAllocator getBufferAllocator()
|
|
144
|
+
{
|
|
145
|
+
return injector.getInstance(BufferAllocator.class);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public ConfigLoader newConfigLoader()
|
|
149
|
+
{
|
|
150
|
+
return injector.getInstance(ConfigLoader.class);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
public ConfigDiff guess(ConfigSource config)
|
|
154
|
+
{
|
|
155
|
+
ExecSession exec = newExecSession(config);
|
|
156
|
+
try {
|
|
157
|
+
return guessExecutor.guess(exec, config);
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
exec.cleanup();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
public PreviewResult preview(ConfigSource config)
|
|
165
|
+
{
|
|
166
|
+
ExecSession exec = newExecSession(config);
|
|
167
|
+
try {
|
|
168
|
+
return previewExecutor.preview(exec, config);
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
exec.cleanup();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public ExecutionResult run(ConfigSource config)
|
|
176
|
+
{
|
|
177
|
+
ExecSession exec = newExecSession(config);
|
|
178
|
+
try {
|
|
179
|
+
return bulkLoader.run(exec, config);
|
|
180
|
+
}
|
|
181
|
+
catch (PartialExecutionException partial) {
|
|
182
|
+
try {
|
|
183
|
+
bulkLoader.cleanup(config, partial.getResumeState());
|
|
184
|
+
} catch (Throwable ex) {
|
|
185
|
+
partial.addSuppressed(ex);
|
|
186
|
+
}
|
|
187
|
+
throw partial;
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
try {
|
|
191
|
+
exec.cleanup();
|
|
192
|
+
}
|
|
193
|
+
catch (Exception ex) {
|
|
194
|
+
// TODO add this exception to ExecutionResult.getIgnoredExceptions
|
|
195
|
+
// or partial.addSuppressed
|
|
196
|
+
ex.printStackTrace(System.err);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
public ResumableResult runResumable(ConfigSource config)
|
|
202
|
+
{
|
|
203
|
+
ExecSession exec = newExecSession(config);
|
|
204
|
+
try {
|
|
205
|
+
ExecutionResult result;
|
|
206
|
+
try {
|
|
207
|
+
result = bulkLoader.run(exec, config);
|
|
208
|
+
} catch (PartialExecutionException partial) {
|
|
209
|
+
return new ResumableResult(partial);
|
|
210
|
+
}
|
|
211
|
+
return new ResumableResult(result);
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
try {
|
|
215
|
+
exec.cleanup();
|
|
216
|
+
}
|
|
217
|
+
catch (Exception ex) {
|
|
218
|
+
// TODO add this exception to ExecutionResult.getIgnoredExceptions
|
|
219
|
+
// or partial.addSuppressed
|
|
220
|
+
ex.printStackTrace(System.err);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
private ExecSession newExecSession(ConfigSource config)
|
|
226
|
+
{
|
|
227
|
+
ConfigSource execConfig = config.deepCopy().getNestedOrSetEmpty("exec");
|
|
228
|
+
return ExecSession.builder(injector).fromExecConfig(execConfig).build();
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
public ResumeStateAction resumeState(ConfigSource config, ConfigSource resumeStateConfig)
|
|
232
|
+
{
|
|
233
|
+
ResumeState resumeState = resumeStateConfig.loadConfig(ResumeState.class);
|
|
234
|
+
return new ResumeStateAction(config, resumeState);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
public static class ResumableResult
|
|
238
|
+
{
|
|
239
|
+
private final ExecutionResult successfulResult;
|
|
240
|
+
private final PartialExecutionException partialExecutionException;
|
|
241
|
+
|
|
242
|
+
public ResumableResult(PartialExecutionException partialExecutionException)
|
|
243
|
+
{
|
|
244
|
+
this.successfulResult = null;
|
|
245
|
+
this.partialExecutionException = checkNotNull(partialExecutionException);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
public ResumableResult(ExecutionResult successfulResult)
|
|
249
|
+
{
|
|
250
|
+
this.successfulResult = checkNotNull(successfulResult);
|
|
251
|
+
this.partialExecutionException = null;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
public boolean isSuccessful()
|
|
255
|
+
{
|
|
256
|
+
return successfulResult != null;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
public ExecutionResult getSuccessfulResult()
|
|
260
|
+
{
|
|
261
|
+
checkState(successfulResult != null);
|
|
262
|
+
return successfulResult;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
public Throwable getCause()
|
|
266
|
+
{
|
|
267
|
+
checkState(partialExecutionException != null);
|
|
268
|
+
return partialExecutionException.getCause();
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
public ResumeState getResumeState()
|
|
272
|
+
{
|
|
273
|
+
checkState(partialExecutionException != null);
|
|
274
|
+
return partialExecutionException.getResumeState();
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
public class ResumeStateAction
|
|
279
|
+
{
|
|
280
|
+
private final ConfigSource config;
|
|
281
|
+
private final ResumeState resumeState;
|
|
282
|
+
|
|
283
|
+
public ResumeStateAction(ConfigSource config, ResumeState resumeState)
|
|
284
|
+
{
|
|
285
|
+
this.config = config;
|
|
286
|
+
this.resumeState = resumeState;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
public ResumableResult resume()
|
|
290
|
+
{
|
|
291
|
+
ExecutionResult result;
|
|
292
|
+
try {
|
|
293
|
+
result = bulkLoader.resume(config, resumeState);
|
|
294
|
+
} catch (PartialExecutionException partial) {
|
|
295
|
+
return new ResumableResult(partial);
|
|
296
|
+
}
|
|
297
|
+
return new ResumableResult(result);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
public void cleanup()
|
|
301
|
+
{
|
|
302
|
+
bulkLoader.cleanup(config, resumeState);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
public void destroy()
|
|
307
|
+
{
|
|
308
|
+
try {
|
|
309
|
+
injector.destroy();
|
|
310
|
+
}
|
|
311
|
+
catch (Exception ex) {
|
|
312
|
+
throw Throwables.propagate(ex);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|