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,19 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import org.embulk.config.ConfigSource;
|
|
4
|
+
|
|
5
|
+
public interface ExecutorPlugin
|
|
6
|
+
{
|
|
7
|
+
interface Executor
|
|
8
|
+
{
|
|
9
|
+
void execute(ProcessTask task, ProcessState state);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface Control
|
|
13
|
+
{
|
|
14
|
+
void transaction(Schema executorSchema, int outputTaskCount, Executor executor);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
void transaction(ConfigSource config, Schema outputSchema, int inputTaskCount,
|
|
18
|
+
ExecutorPlugin.Control control);
|
|
19
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import com.google.inject.Module;
|
|
5
|
+
import org.embulk.config.ConfigSource;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Extension is a module to extend the execution framework using Guice.
|
|
9
|
+
* Unlike plugins, extensions can overwrite or add core components such as
|
|
10
|
+
* BufferManager, PluginSource, etc.
|
|
11
|
+
* Extension is not designed for users but for framework developers to make
|
|
12
|
+
* core components loosely coupled.
|
|
13
|
+
*
|
|
14
|
+
* An example extension to add a custom PluginSource will be as following:
|
|
15
|
+
*
|
|
16
|
+
* <code>
|
|
17
|
+
* class MyPluginSourceExtension
|
|
18
|
+
* implements Extension, Module
|
|
19
|
+
* {
|
|
20
|
+
* public static class MyPluginSource
|
|
21
|
+
* implements PluginSource
|
|
22
|
+
* {
|
|
23
|
+
* // ...
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* {@literal @}Override
|
|
27
|
+
* public void configure(Binder binder)
|
|
28
|
+
* {
|
|
29
|
+
* Multibinder<PluginSource> multibinder = Multibinder.newSetBinder(binder, PluginSource.class);
|
|
30
|
+
* multibinder.addBinding().to(MyPluginSource.class);
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* {@literal @}Override
|
|
34
|
+
* public List<Module> getModules()
|
|
35
|
+
* {
|
|
36
|
+
* return ImmutableList.<Module>of(this);
|
|
37
|
+
* }
|
|
38
|
+
* }
|
|
39
|
+
* </code>
|
|
40
|
+
*/
|
|
41
|
+
public interface Extension
|
|
42
|
+
{
|
|
43
|
+
List<Module> getModules(ConfigSource systemConfig);
|
|
44
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import org.embulk.config.TaskSource;
|
|
5
|
+
import org.embulk.config.ConfigSource;
|
|
6
|
+
import org.embulk.config.ConfigDiff;
|
|
7
|
+
import org.embulk.config.TaskReport;
|
|
8
|
+
|
|
9
|
+
public interface FileInputPlugin
|
|
10
|
+
{
|
|
11
|
+
interface Control
|
|
12
|
+
{
|
|
13
|
+
List<TaskReport> run(TaskSource taskSource,
|
|
14
|
+
int taskCount);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
ConfigDiff transaction(ConfigSource config,
|
|
18
|
+
FileInputPlugin.Control control);
|
|
19
|
+
|
|
20
|
+
ConfigDiff resume(TaskSource taskSource,
|
|
21
|
+
int taskCount,
|
|
22
|
+
FileInputPlugin.Control control);
|
|
23
|
+
|
|
24
|
+
void cleanup(TaskSource taskSource,
|
|
25
|
+
int taskCount,
|
|
26
|
+
List<TaskReport> successTaskReports);
|
|
27
|
+
|
|
28
|
+
TransactionalFileInput open(TaskSource taskSource,
|
|
29
|
+
int taskIndex);
|
|
30
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import java.util.ArrayList;
|
|
4
|
+
import java.util.List;
|
|
5
|
+
import org.embulk.config.Task;
|
|
6
|
+
import org.embulk.config.TaskSource;
|
|
7
|
+
import org.embulk.config.ConfigSource;
|
|
8
|
+
import org.embulk.config.ConfigDiff;
|
|
9
|
+
import org.embulk.config.TaskReport;
|
|
10
|
+
import org.embulk.config.Config;
|
|
11
|
+
import org.embulk.config.ConfigDefault;
|
|
12
|
+
import org.embulk.plugin.PluginType;
|
|
13
|
+
import org.embulk.plugin.compat.PluginWrappers;
|
|
14
|
+
import org.embulk.spi.util.Decoders;
|
|
15
|
+
import org.embulk.exec.GuessExecutor;
|
|
16
|
+
import org.embulk.exec.SamplingParserPlugin;
|
|
17
|
+
import org.embulk.exec.NoSampleException;
|
|
18
|
+
|
|
19
|
+
public class FileInputRunner
|
|
20
|
+
implements InputPlugin
|
|
21
|
+
{
|
|
22
|
+
private final FileInputPlugin fileInputPlugin;
|
|
23
|
+
|
|
24
|
+
public FileInputRunner(FileInputPlugin fileInputPlugin)
|
|
25
|
+
{
|
|
26
|
+
this.fileInputPlugin = fileInputPlugin;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private interface RunnerTask extends Task
|
|
30
|
+
{
|
|
31
|
+
// TODO "type" needed?
|
|
32
|
+
|
|
33
|
+
@Config("decoders")
|
|
34
|
+
@ConfigDefault("[]")
|
|
35
|
+
public List<ConfigSource> getDecoderConfigs();
|
|
36
|
+
|
|
37
|
+
@Config("parser")
|
|
38
|
+
public ConfigSource getParserConfig();
|
|
39
|
+
|
|
40
|
+
public void setFileInputTaskSource(TaskSource v);
|
|
41
|
+
public TaskSource getFileInputTaskSource();
|
|
42
|
+
|
|
43
|
+
public void setDecoderTaskSources(List<TaskSource> v);
|
|
44
|
+
public List<TaskSource> getDecoderTaskSources();
|
|
45
|
+
|
|
46
|
+
public void setParserTaskSource(TaskSource v);
|
|
47
|
+
public TaskSource getParserTaskSource();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
protected List<DecoderPlugin> newDecoderPlugins(RunnerTask task)
|
|
51
|
+
{
|
|
52
|
+
return Decoders.newDecoderPlugins(Exec.session(), task.getDecoderConfigs());
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
protected ParserPlugin newParserPlugin(RunnerTask task)
|
|
56
|
+
{
|
|
57
|
+
return Exec.newPlugin(ParserPlugin.class, task.getParserConfig().get(PluginType.class, "type"));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@Override
|
|
61
|
+
public ConfigDiff transaction(ConfigSource config, final InputPlugin.Control control)
|
|
62
|
+
{
|
|
63
|
+
final RunnerTask task = config.loadConfig(RunnerTask.class);
|
|
64
|
+
return fileInputPlugin.transaction(config, new RunnerControl(task, control));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
@Override
|
|
68
|
+
public ConfigDiff resume(TaskSource taskSource,
|
|
69
|
+
Schema schema, int taskCount,
|
|
70
|
+
InputPlugin.Control control)
|
|
71
|
+
{
|
|
72
|
+
final RunnerTask task = taskSource.loadTask(RunnerTask.class);
|
|
73
|
+
return fileInputPlugin.resume(task.getFileInputTaskSource(), taskCount, new RunnerControl(task, control));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@Override
|
|
77
|
+
public ConfigDiff guess(ConfigSource config)
|
|
78
|
+
{
|
|
79
|
+
Buffer sample = SamplingParserPlugin.runFileInputSampling(this, config);
|
|
80
|
+
if (sample.limit() == 0) {
|
|
81
|
+
throw new NoSampleException("Can't get sample data because the first input file is empty");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
GuessExecutor guessExecutor = Exec.getInjector().getInstance(GuessExecutor.class);
|
|
85
|
+
return guessExecutor.guessParserConfig(sample, config, Exec.session().getSessionExecConfig());
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private class RunnerControl
|
|
89
|
+
implements FileInputPlugin.Control
|
|
90
|
+
{
|
|
91
|
+
private final RunnerTask task;
|
|
92
|
+
private final List<DecoderPlugin> decoderPlugins;
|
|
93
|
+
private final ParserPlugin parserPlugin;
|
|
94
|
+
private final InputPlugin.Control nextControl;
|
|
95
|
+
|
|
96
|
+
public RunnerControl(RunnerTask task, InputPlugin.Control nextControl)
|
|
97
|
+
{
|
|
98
|
+
this.task = task;
|
|
99
|
+
// create plugins earlier than run() to throw exceptions early
|
|
100
|
+
this.decoderPlugins = newDecoderPlugins(task);
|
|
101
|
+
this.parserPlugin = newParserPlugin(task);
|
|
102
|
+
this.nextControl = nextControl;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@Override
|
|
106
|
+
public List<TaskReport> run(final TaskSource fileInputTaskSource, final int taskCount)
|
|
107
|
+
{
|
|
108
|
+
final List<TaskReport> taskReports = new ArrayList<TaskReport>();
|
|
109
|
+
Decoders.transaction(decoderPlugins, task.getDecoderConfigs(), new Decoders.Control() {
|
|
110
|
+
public void run(final List<TaskSource> decoderTaskSources)
|
|
111
|
+
{
|
|
112
|
+
parserPlugin.transaction(task.getParserConfig(), new ParserPlugin.Control() {
|
|
113
|
+
public void run(final TaskSource parserTaskSource, final Schema schema)
|
|
114
|
+
{
|
|
115
|
+
task.setFileInputTaskSource(fileInputTaskSource);
|
|
116
|
+
task.setDecoderTaskSources(decoderTaskSources);
|
|
117
|
+
task.setParserTaskSource(parserTaskSource);
|
|
118
|
+
taskReports.addAll(nextControl.run(task.dump(), schema, taskCount));
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return taskReports;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
public void cleanup(TaskSource taskSource,
|
|
128
|
+
Schema schema, int taskCount,
|
|
129
|
+
List<TaskReport> successTaskReports)
|
|
130
|
+
{
|
|
131
|
+
fileInputPlugin.cleanup(taskSource, taskCount, successTaskReports);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
@Override
|
|
135
|
+
public TaskReport run(TaskSource taskSource, Schema schema, int taskIndex,
|
|
136
|
+
PageOutput output)
|
|
137
|
+
{
|
|
138
|
+
final RunnerTask task = taskSource.loadTask(RunnerTask.class);
|
|
139
|
+
List<DecoderPlugin> decoderPlugins = newDecoderPlugins(task);
|
|
140
|
+
ParserPlugin parserPlugin = newParserPlugin(task);
|
|
141
|
+
|
|
142
|
+
TransactionalFileInput tran = PluginWrappers.transactionalFileInput(
|
|
143
|
+
fileInputPlugin.open(task.getFileInputTaskSource(), taskIndex));
|
|
144
|
+
FileInput fileInput = tran;
|
|
145
|
+
try {
|
|
146
|
+
fileInput = Decoders.open(decoderPlugins, task.getDecoderTaskSources(), fileInput);
|
|
147
|
+
parserPlugin.run(task.getParserTaskSource(), schema, fileInput, output);
|
|
148
|
+
|
|
149
|
+
TaskReport report = tran.commit(); // TODO check output.finish() is called. wrap
|
|
150
|
+
tran = null;
|
|
151
|
+
return report;
|
|
152
|
+
} finally {
|
|
153
|
+
try {
|
|
154
|
+
if (tran != null) {
|
|
155
|
+
tran.abort();
|
|
156
|
+
}
|
|
157
|
+
} finally {
|
|
158
|
+
fileInput.close();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import org.embulk.config.TaskSource;
|
|
5
|
+
import org.embulk.config.ConfigSource;
|
|
6
|
+
import org.embulk.config.ConfigDiff;
|
|
7
|
+
import org.embulk.config.TaskReport;
|
|
8
|
+
|
|
9
|
+
public interface FileOutputPlugin
|
|
10
|
+
{
|
|
11
|
+
interface Control
|
|
12
|
+
{
|
|
13
|
+
List<TaskReport> run(TaskSource taskSource);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
ConfigDiff transaction(ConfigSource config, int taskCount,
|
|
17
|
+
FileOutputPlugin.Control control);
|
|
18
|
+
|
|
19
|
+
ConfigDiff resume(TaskSource taskSource,
|
|
20
|
+
int taskCount,
|
|
21
|
+
FileOutputPlugin.Control control);
|
|
22
|
+
|
|
23
|
+
void cleanup(TaskSource taskSource,
|
|
24
|
+
int taskCount,
|
|
25
|
+
List<TaskReport> successTaskReports);
|
|
26
|
+
|
|
27
|
+
TransactionalFileOutput open(TaskSource taskSource, int taskIndex);
|
|
28
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.ArrayList;
|
|
5
|
+
import org.embulk.config.Task;
|
|
6
|
+
import org.embulk.config.TaskSource;
|
|
7
|
+
import org.embulk.config.ConfigSource;
|
|
8
|
+
import org.embulk.config.ConfigDiff;
|
|
9
|
+
import org.embulk.config.TaskReport;
|
|
10
|
+
import org.embulk.config.Config;
|
|
11
|
+
import org.embulk.config.ConfigDefault;
|
|
12
|
+
import org.embulk.plugin.PluginType;
|
|
13
|
+
import org.embulk.plugin.compat.PluginWrappers;
|
|
14
|
+
import org.embulk.spi.util.Encoders;
|
|
15
|
+
|
|
16
|
+
public class FileOutputRunner
|
|
17
|
+
implements OutputPlugin
|
|
18
|
+
{
|
|
19
|
+
private final FileOutputPlugin fileOutputPlugin;
|
|
20
|
+
|
|
21
|
+
public FileOutputRunner(FileOutputPlugin fileOutputPlugin)
|
|
22
|
+
{
|
|
23
|
+
this.fileOutputPlugin = fileOutputPlugin;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private interface RunnerTask extends Task
|
|
27
|
+
{
|
|
28
|
+
@Config("type")
|
|
29
|
+
public PluginType getType();
|
|
30
|
+
|
|
31
|
+
@Config("encoders")
|
|
32
|
+
@ConfigDefault("[]")
|
|
33
|
+
public List<ConfigSource> getEncoderConfigs();
|
|
34
|
+
|
|
35
|
+
@Config("formatter")
|
|
36
|
+
public ConfigSource getFormatterConfig();
|
|
37
|
+
|
|
38
|
+
public void setFileOutputTaskSource(TaskSource v);
|
|
39
|
+
public TaskSource getFileOutputTaskSource();
|
|
40
|
+
|
|
41
|
+
public void setEncoderTaskSources(List<TaskSource> v);
|
|
42
|
+
public List<TaskSource> getEncoderTaskSources();
|
|
43
|
+
|
|
44
|
+
public void setFormatterTaskSource(TaskSource v);
|
|
45
|
+
public TaskSource getFormatterTaskSource();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
protected List<EncoderPlugin> newEncoderPlugins(RunnerTask task)
|
|
49
|
+
{
|
|
50
|
+
return Encoders.newEncoderPlugins(Exec.session(), task.getEncoderConfigs());
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
protected FormatterPlugin newFormatterPlugin(RunnerTask task)
|
|
54
|
+
{
|
|
55
|
+
return Exec.newPlugin(FormatterPlugin.class, task.getFormatterConfig().get(PluginType.class, "type"));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@Override
|
|
59
|
+
public ConfigDiff transaction(ConfigSource config,
|
|
60
|
+
final Schema schema, final int taskCount,
|
|
61
|
+
final OutputPlugin.Control control)
|
|
62
|
+
{
|
|
63
|
+
final RunnerTask task = config.loadConfig(RunnerTask.class);
|
|
64
|
+
return fileOutputPlugin.transaction(config, taskCount, new RunnerControl(schema, task, control));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public ConfigDiff resume(TaskSource taskSource,
|
|
68
|
+
Schema schema, int taskCount,
|
|
69
|
+
final OutputPlugin.Control control)
|
|
70
|
+
{
|
|
71
|
+
final RunnerTask task = taskSource.loadTask(RunnerTask.class);
|
|
72
|
+
return fileOutputPlugin.resume(task.getFileOutputTaskSource(), taskCount, new RunnerControl(schema, task, control));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private class RunnerControl
|
|
76
|
+
implements FileOutputPlugin.Control
|
|
77
|
+
{
|
|
78
|
+
private final Schema schema;
|
|
79
|
+
private final RunnerTask task;
|
|
80
|
+
private final List<EncoderPlugin> encoderPlugins;
|
|
81
|
+
private final FormatterPlugin formatterPlugin;
|
|
82
|
+
private final OutputPlugin.Control nextControl;
|
|
83
|
+
|
|
84
|
+
public RunnerControl(Schema schema, RunnerTask task, OutputPlugin.Control nextControl)
|
|
85
|
+
{
|
|
86
|
+
this.schema = schema;
|
|
87
|
+
this.task = task;
|
|
88
|
+
// create plugins earlier than run() to throw exceptions early
|
|
89
|
+
this.encoderPlugins = newEncoderPlugins(task);
|
|
90
|
+
this.formatterPlugin = newFormatterPlugin(task);
|
|
91
|
+
this.nextControl = nextControl;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@Override
|
|
95
|
+
public List<TaskReport> run(final TaskSource fileOutputTaskSource)
|
|
96
|
+
{
|
|
97
|
+
final List<TaskReport> taskReports = new ArrayList<TaskReport>();
|
|
98
|
+
Encoders.transaction(encoderPlugins, task.getEncoderConfigs(), new Encoders.Control() {
|
|
99
|
+
public void run(final List<TaskSource> encoderTaskSources)
|
|
100
|
+
{
|
|
101
|
+
formatterPlugin.transaction(task.getFormatterConfig(), schema, new FormatterPlugin.Control() {
|
|
102
|
+
public void run(final TaskSource formatterTaskSource)
|
|
103
|
+
{
|
|
104
|
+
task.setFileOutputTaskSource(fileOutputTaskSource);
|
|
105
|
+
task.setEncoderTaskSources(encoderTaskSources);
|
|
106
|
+
task.setFormatterTaskSource(formatterTaskSource);
|
|
107
|
+
taskReports.addAll(nextControl.run(task.dump()));
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return taskReports;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
public void cleanup(TaskSource taskSource,
|
|
117
|
+
Schema schema, int taskCount,
|
|
118
|
+
List<TaskReport> successtaskReports)
|
|
119
|
+
{
|
|
120
|
+
fileOutputPlugin.cleanup(taskSource, taskCount, successtaskReports);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@Override
|
|
124
|
+
public TransactionalPageOutput open(TaskSource taskSource, Schema schema, int taskIndex)
|
|
125
|
+
{
|
|
126
|
+
final RunnerTask task = taskSource.loadTask(RunnerTask.class);
|
|
127
|
+
List<EncoderPlugin> encoderPlugins = newEncoderPlugins(task);
|
|
128
|
+
FormatterPlugin formatterPlugin = newFormatterPlugin(task);
|
|
129
|
+
|
|
130
|
+
TransactionalFileOutput tran = null;
|
|
131
|
+
FileOutput fileOutput = null;
|
|
132
|
+
PageOutput output = null;
|
|
133
|
+
try {
|
|
134
|
+
fileOutput = tran = PluginWrappers.transactionalFileOutput(
|
|
135
|
+
fileOutputPlugin.open(task.getFileOutputTaskSource(), taskIndex));
|
|
136
|
+
|
|
137
|
+
fileOutput = Encoders.open(encoderPlugins, task.getEncoderTaskSources(), fileOutput);
|
|
138
|
+
output = formatterPlugin.open(task.getFormatterTaskSource(), schema, fileOutput);
|
|
139
|
+
fileOutput = null;
|
|
140
|
+
|
|
141
|
+
TransactionalPageOutput ret = new DelegateTransactionalPageOutput(tran, output);
|
|
142
|
+
tran = null;
|
|
143
|
+
output = null;
|
|
144
|
+
return ret;
|
|
145
|
+
|
|
146
|
+
} finally {
|
|
147
|
+
if (output != null) {
|
|
148
|
+
output.close();
|
|
149
|
+
}
|
|
150
|
+
if (fileOutput != null) {
|
|
151
|
+
fileOutput.close();
|
|
152
|
+
}
|
|
153
|
+
if (tran != null) {
|
|
154
|
+
tran.abort();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
private static class DelegateTransactionalPageOutput
|
|
160
|
+
implements TransactionalPageOutput
|
|
161
|
+
{
|
|
162
|
+
private final Transactional tran;
|
|
163
|
+
private final PageOutput output;
|
|
164
|
+
|
|
165
|
+
public DelegateTransactionalPageOutput(Transactional tran, PageOutput output)
|
|
166
|
+
{
|
|
167
|
+
this.tran = tran;
|
|
168
|
+
this.output = output;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@Override
|
|
172
|
+
public void add(Page page)
|
|
173
|
+
{
|
|
174
|
+
output.add(page);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@Override
|
|
178
|
+
public void finish()
|
|
179
|
+
{
|
|
180
|
+
output.finish();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@Override
|
|
184
|
+
public void close()
|
|
185
|
+
{
|
|
186
|
+
output.close();
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
@Override
|
|
190
|
+
public void abort()
|
|
191
|
+
{
|
|
192
|
+
tran.abort();
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@Override
|
|
196
|
+
public TaskReport commit()
|
|
197
|
+
{
|
|
198
|
+
// TODO check finished
|
|
199
|
+
return tran.commit();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|