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,55 @@
|
|
|
1
|
+
package org.embulk.standards;
|
|
2
|
+
|
|
3
|
+
import java.io.InputStream;
|
|
4
|
+
import java.io.IOException;
|
|
5
|
+
import java.util.zip.GZIPInputStream;
|
|
6
|
+
import org.embulk.config.Task;
|
|
7
|
+
import org.embulk.config.TaskSource;
|
|
8
|
+
import org.embulk.config.ConfigSource;
|
|
9
|
+
import org.embulk.config.ConfigInject;
|
|
10
|
+
import org.embulk.spi.DecoderPlugin;
|
|
11
|
+
import org.embulk.spi.BufferAllocator;
|
|
12
|
+
import org.embulk.spi.FileInput;
|
|
13
|
+
import org.embulk.spi.util.FileInputInputStream;
|
|
14
|
+
import org.embulk.spi.util.InputStreamFileInput;
|
|
15
|
+
|
|
16
|
+
public class GzipFileDecoderPlugin
|
|
17
|
+
implements DecoderPlugin
|
|
18
|
+
{
|
|
19
|
+
public interface PluginTask
|
|
20
|
+
extends Task
|
|
21
|
+
{
|
|
22
|
+
@ConfigInject
|
|
23
|
+
BufferAllocator getBufferAllocator();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@Override
|
|
27
|
+
public void transaction(ConfigSource config, DecoderPlugin.Control control)
|
|
28
|
+
{
|
|
29
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
|
30
|
+
control.run(task.dump());
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Override
|
|
34
|
+
public FileInput open(TaskSource taskSource, FileInput fileInput)
|
|
35
|
+
{
|
|
36
|
+
PluginTask task = taskSource.loadTask(PluginTask.class);
|
|
37
|
+
final FileInputInputStream files = new FileInputInputStream(fileInput);
|
|
38
|
+
return new InputStreamFileInput(
|
|
39
|
+
task.getBufferAllocator(),
|
|
40
|
+
new InputStreamFileInput.Provider() {
|
|
41
|
+
public InputStream openNext() throws IOException
|
|
42
|
+
{
|
|
43
|
+
if (!files.nextFile()) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return new GZIPInputStream(files);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
public void close() throws IOException
|
|
50
|
+
{
|
|
51
|
+
files.close();
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
package org.embulk.standards;
|
|
2
|
+
|
|
3
|
+
import java.io.OutputStream;
|
|
4
|
+
import java.io.IOException;
|
|
5
|
+
import java.util.zip.GZIPOutputStream;
|
|
6
|
+
import javax.validation.constraints.Min;
|
|
7
|
+
import javax.validation.constraints.Max;
|
|
8
|
+
import org.embulk.config.Task;
|
|
9
|
+
import org.embulk.config.Config;
|
|
10
|
+
import org.embulk.config.ConfigInject;
|
|
11
|
+
import org.embulk.config.ConfigDefault;
|
|
12
|
+
import org.embulk.config.TaskSource;
|
|
13
|
+
import org.embulk.config.ConfigSource;
|
|
14
|
+
import org.embulk.spi.EncoderPlugin;
|
|
15
|
+
import org.embulk.spi.FileOutput;
|
|
16
|
+
import org.embulk.spi.BufferAllocator;
|
|
17
|
+
import org.embulk.spi.util.FileOutputOutputStream;
|
|
18
|
+
import org.embulk.spi.util.OutputStreamFileOutput;
|
|
19
|
+
|
|
20
|
+
public class GzipFileEncoderPlugin
|
|
21
|
+
implements EncoderPlugin
|
|
22
|
+
{
|
|
23
|
+
public interface PluginTask
|
|
24
|
+
extends Task
|
|
25
|
+
{
|
|
26
|
+
@Config("level")
|
|
27
|
+
@ConfigDefault("6")
|
|
28
|
+
@Min(0)
|
|
29
|
+
@Max(9)
|
|
30
|
+
int getLevel();
|
|
31
|
+
|
|
32
|
+
@ConfigInject
|
|
33
|
+
BufferAllocator getBufferAllocator();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public void transaction(ConfigSource config, EncoderPlugin.Control control)
|
|
37
|
+
{
|
|
38
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
|
39
|
+
control.run(task.dump());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Override
|
|
43
|
+
public FileOutput open(TaskSource taskSource, final FileOutput fileOutput)
|
|
44
|
+
{
|
|
45
|
+
final PluginTask task = taskSource.loadTask(PluginTask.class);
|
|
46
|
+
|
|
47
|
+
final FileOutputOutputStream output = new FileOutputOutputStream(fileOutput, task.getBufferAllocator(), FileOutputOutputStream.CloseMode.FLUSH);
|
|
48
|
+
|
|
49
|
+
return new OutputStreamFileOutput(new OutputStreamFileOutput.Provider() {
|
|
50
|
+
public OutputStream openNext() throws IOException
|
|
51
|
+
{
|
|
52
|
+
output.nextFile();
|
|
53
|
+
return new GZIPOutputStream(output) {
|
|
54
|
+
{
|
|
55
|
+
this.def.setLevel(task.getLevel());
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public void finish() throws IOException
|
|
61
|
+
{
|
|
62
|
+
fileOutput.finish();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
public void close() throws IOException
|
|
66
|
+
{
|
|
67
|
+
fileOutput.close();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
package org.embulk.standards;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.ArrayList;
|
|
5
|
+
import java.util.Collections;
|
|
6
|
+
import java.io.File;
|
|
7
|
+
import java.io.FileInputStream;
|
|
8
|
+
import java.io.InputStream;
|
|
9
|
+
import java.io.IOException;
|
|
10
|
+
import java.nio.file.Path;
|
|
11
|
+
import java.nio.file.Paths;
|
|
12
|
+
import java.nio.file.Files;
|
|
13
|
+
import java.nio.file.SimpleFileVisitor;
|
|
14
|
+
import java.nio.file.FileVisitResult;
|
|
15
|
+
import java.nio.file.attribute.BasicFileAttributes;
|
|
16
|
+
import com.google.common.collect.ImmutableList;
|
|
17
|
+
import com.google.common.base.Optional;
|
|
18
|
+
import org.embulk.config.Config;
|
|
19
|
+
import org.embulk.config.ConfigInject;
|
|
20
|
+
import org.embulk.config.ConfigDefault;
|
|
21
|
+
import org.embulk.config.Task;
|
|
22
|
+
import org.embulk.config.TaskSource;
|
|
23
|
+
import org.embulk.config.ConfigSource;
|
|
24
|
+
import org.embulk.config.ConfigDiff;
|
|
25
|
+
import org.embulk.config.TaskReport;
|
|
26
|
+
import org.embulk.spi.BufferAllocator;
|
|
27
|
+
import org.embulk.spi.Exec;
|
|
28
|
+
import org.embulk.spi.FileInputPlugin;
|
|
29
|
+
import org.embulk.spi.TransactionalFileInput;
|
|
30
|
+
import org.embulk.spi.util.InputStreamTransactionalFileInput;
|
|
31
|
+
import org.slf4j.Logger;
|
|
32
|
+
|
|
33
|
+
public class LocalFileInputPlugin
|
|
34
|
+
implements FileInputPlugin
|
|
35
|
+
{
|
|
36
|
+
public interface PluginTask
|
|
37
|
+
extends Task
|
|
38
|
+
{
|
|
39
|
+
@Config("path_prefix")
|
|
40
|
+
String getPathPrefix();
|
|
41
|
+
|
|
42
|
+
@Config("last_path")
|
|
43
|
+
@ConfigDefault("null")
|
|
44
|
+
Optional<String> getLastPath();
|
|
45
|
+
|
|
46
|
+
List<String> getFiles();
|
|
47
|
+
void setFiles(List<String> files);
|
|
48
|
+
|
|
49
|
+
@ConfigInject
|
|
50
|
+
BufferAllocator getBufferAllocator();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
private final Logger log = Exec.getLogger(getClass());
|
|
54
|
+
|
|
55
|
+
private final static Path CURRENT_DIR = Paths.get(".").normalize();
|
|
56
|
+
|
|
57
|
+
@Override
|
|
58
|
+
public ConfigDiff transaction(ConfigSource config, FileInputPlugin.Control control)
|
|
59
|
+
{
|
|
60
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
|
61
|
+
|
|
62
|
+
// list files recursively
|
|
63
|
+
List<String> files = listFiles(task);
|
|
64
|
+
log.info("Loading files {}", files);
|
|
65
|
+
task.setFiles(files);
|
|
66
|
+
|
|
67
|
+
// number of processors is same with number of files
|
|
68
|
+
int taskCount = task.getFiles().size();
|
|
69
|
+
return resume(task.dump(), taskCount, control);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@Override
|
|
73
|
+
public ConfigDiff resume(TaskSource taskSource,
|
|
74
|
+
int taskCount,
|
|
75
|
+
FileInputPlugin.Control control)
|
|
76
|
+
{
|
|
77
|
+
PluginTask task = taskSource.loadTask(PluginTask.class);
|
|
78
|
+
|
|
79
|
+
control.run(taskSource, taskCount);
|
|
80
|
+
|
|
81
|
+
// build next config
|
|
82
|
+
ConfigDiff configDiff = Exec.newConfigDiff();
|
|
83
|
+
|
|
84
|
+
// last_path
|
|
85
|
+
if (task.getFiles().isEmpty()) {
|
|
86
|
+
// keep the last value
|
|
87
|
+
if (task.getLastPath().isPresent()) {
|
|
88
|
+
configDiff.set("last_path", task.getLastPath().get());
|
|
89
|
+
}
|
|
90
|
+
} else {
|
|
91
|
+
List<String> files = new ArrayList<String>(task.getFiles());
|
|
92
|
+
Collections.sort(files);
|
|
93
|
+
configDiff.set("last_path", files.get(files.size() - 1));
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return configDiff;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@Override
|
|
100
|
+
public void cleanup(TaskSource taskSource,
|
|
101
|
+
int taskCount,
|
|
102
|
+
List<TaskReport> successTaskReports)
|
|
103
|
+
{ }
|
|
104
|
+
|
|
105
|
+
public List<String> listFiles(PluginTask task)
|
|
106
|
+
{
|
|
107
|
+
Path pathPrefix = Paths.get(task.getPathPrefix()).normalize();
|
|
108
|
+
final Path directory;
|
|
109
|
+
final String fileNamePrefix;
|
|
110
|
+
if (Files.isDirectory(pathPrefix)) {
|
|
111
|
+
directory = pathPrefix;
|
|
112
|
+
fileNamePrefix = "";
|
|
113
|
+
} else {
|
|
114
|
+
fileNamePrefix = pathPrefix.getFileName().toString();
|
|
115
|
+
Path d = pathPrefix.getParent();
|
|
116
|
+
directory = (d == null ? CURRENT_DIR : d);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
final ImmutableList.Builder<String> builder = ImmutableList.builder();
|
|
120
|
+
final String lastPath = task.getLastPath().orNull();
|
|
121
|
+
try {
|
|
122
|
+
log.info("Listing local files at directory '{}' filtering filename by prefix '{}'", directory.equals(CURRENT_DIR) ? "." : directory.toString(), fileNamePrefix);
|
|
123
|
+
Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
|
|
124
|
+
@Override
|
|
125
|
+
public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs)
|
|
126
|
+
{
|
|
127
|
+
if (path.equals(directory)) {
|
|
128
|
+
return FileVisitResult.CONTINUE;
|
|
129
|
+
} else if (lastPath != null && path.toString().compareTo(lastPath) <= 0) {
|
|
130
|
+
return FileVisitResult.SKIP_SUBTREE;
|
|
131
|
+
} else {
|
|
132
|
+
Path parent = path.getParent();
|
|
133
|
+
if (parent == null) {
|
|
134
|
+
parent = CURRENT_DIR;
|
|
135
|
+
}
|
|
136
|
+
if (parent.equals(directory)) {
|
|
137
|
+
if (path.getFileName().toString().startsWith(fileNamePrefix)) {
|
|
138
|
+
return FileVisitResult.CONTINUE;
|
|
139
|
+
} else {
|
|
140
|
+
return FileVisitResult.SKIP_SUBTREE;
|
|
141
|
+
}
|
|
142
|
+
} else {
|
|
143
|
+
return FileVisitResult.CONTINUE;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@Override
|
|
149
|
+
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs)
|
|
150
|
+
{
|
|
151
|
+
if (lastPath != null && path.toString().compareTo(lastPath) <= 0) {
|
|
152
|
+
return FileVisitResult.CONTINUE;
|
|
153
|
+
} else {
|
|
154
|
+
Path parent = path.getParent();
|
|
155
|
+
if (parent == null) {
|
|
156
|
+
parent = CURRENT_DIR;
|
|
157
|
+
}
|
|
158
|
+
if (parent.equals(directory)) {
|
|
159
|
+
if (path.getFileName().toString().startsWith(fileNamePrefix)) {
|
|
160
|
+
builder.add(path.toString());
|
|
161
|
+
return FileVisitResult.CONTINUE;
|
|
162
|
+
}
|
|
163
|
+
} else {
|
|
164
|
+
builder.add(path.toString());
|
|
165
|
+
}
|
|
166
|
+
return FileVisitResult.CONTINUE;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
} catch (IOException ex) {
|
|
171
|
+
throw new RuntimeException(String.format("Failed get a list of local files at '%s'", directory), ex);
|
|
172
|
+
}
|
|
173
|
+
return builder.build();
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
@Override
|
|
177
|
+
public TransactionalFileInput open(TaskSource taskSource, int taskIndex)
|
|
178
|
+
{
|
|
179
|
+
final PluginTask task = taskSource.loadTask(PluginTask.class);
|
|
180
|
+
|
|
181
|
+
final File file = new File(task.getFiles().get(taskIndex));
|
|
182
|
+
|
|
183
|
+
return new InputStreamTransactionalFileInput(
|
|
184
|
+
task.getBufferAllocator(),
|
|
185
|
+
new InputStreamTransactionalFileInput.Opener() {
|
|
186
|
+
public InputStream open() throws IOException
|
|
187
|
+
{
|
|
188
|
+
return new FileInputStream(file);
|
|
189
|
+
}
|
|
190
|
+
})
|
|
191
|
+
{
|
|
192
|
+
@Override
|
|
193
|
+
public void abort()
|
|
194
|
+
{ }
|
|
195
|
+
|
|
196
|
+
@Override
|
|
197
|
+
public TaskReport commit()
|
|
198
|
+
{
|
|
199
|
+
return Exec.newTaskReport();
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
package org.embulk.standards;
|
|
2
|
+
|
|
3
|
+
import java.io.File;
|
|
4
|
+
import java.io.FileNotFoundException;
|
|
5
|
+
import java.io.FileOutputStream;
|
|
6
|
+
import java.io.IOException;
|
|
7
|
+
import java.util.ArrayList;
|
|
8
|
+
import java.util.List;
|
|
9
|
+
import java.util.Locale;
|
|
10
|
+
import java.util.IllegalFormatException;
|
|
11
|
+
import org.embulk.config.Config;
|
|
12
|
+
import org.embulk.config.ConfigException;
|
|
13
|
+
import org.embulk.config.ConfigDefault;
|
|
14
|
+
import org.embulk.config.ConfigSource;
|
|
15
|
+
import org.embulk.config.ConfigDiff;
|
|
16
|
+
import org.embulk.config.TaskReport;
|
|
17
|
+
import org.embulk.config.Task;
|
|
18
|
+
import org.embulk.config.TaskSource;
|
|
19
|
+
import org.embulk.spi.Buffer;
|
|
20
|
+
import org.embulk.spi.FileOutputPlugin;
|
|
21
|
+
import org.embulk.spi.TransactionalFileOutput;
|
|
22
|
+
import org.embulk.spi.Exec;
|
|
23
|
+
import org.slf4j.Logger;
|
|
24
|
+
|
|
25
|
+
public class LocalFileOutputPlugin
|
|
26
|
+
implements FileOutputPlugin
|
|
27
|
+
{
|
|
28
|
+
public interface PluginTask
|
|
29
|
+
extends Task
|
|
30
|
+
{
|
|
31
|
+
@Config("path_prefix")
|
|
32
|
+
String getPathPrefix();
|
|
33
|
+
|
|
34
|
+
@Config("file_ext")
|
|
35
|
+
String getFileNameExtension();
|
|
36
|
+
|
|
37
|
+
@Config("sequence_format")
|
|
38
|
+
@ConfigDefault("\"%03d.%02d.\"")
|
|
39
|
+
String getSequenceFormat();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private final Logger log = Exec.getLogger(getClass());
|
|
43
|
+
|
|
44
|
+
@Override
|
|
45
|
+
public ConfigDiff transaction(ConfigSource config, int taskCount,
|
|
46
|
+
FileOutputPlugin.Control control)
|
|
47
|
+
{
|
|
48
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
|
49
|
+
|
|
50
|
+
// validate sequence_format
|
|
51
|
+
try {
|
|
52
|
+
String dontCare = String.format(Locale.ENGLISH, task.getSequenceFormat(), 0, 0);
|
|
53
|
+
} catch (IllegalFormatException ex) {
|
|
54
|
+
throw new ConfigException("Invalid sequence_format: parameter for file output plugin", ex);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return resume(task.dump(), taskCount, control);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@Override
|
|
61
|
+
public ConfigDiff resume(TaskSource taskSource,
|
|
62
|
+
int taskCount,
|
|
63
|
+
FileOutputPlugin.Control control)
|
|
64
|
+
{
|
|
65
|
+
control.run(taskSource);
|
|
66
|
+
return Exec.newConfigDiff();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@Override
|
|
70
|
+
public void cleanup(TaskSource taskSource,
|
|
71
|
+
int taskCount,
|
|
72
|
+
List<TaskReport> successTaskReports)
|
|
73
|
+
{ }
|
|
74
|
+
|
|
75
|
+
@Override
|
|
76
|
+
public TransactionalFileOutput open(TaskSource taskSource, final int taskIndex)
|
|
77
|
+
{
|
|
78
|
+
PluginTask task = taskSource.loadTask(PluginTask.class);
|
|
79
|
+
|
|
80
|
+
final String pathPrefix = task.getPathPrefix();
|
|
81
|
+
final String pathSuffix = task.getFileNameExtension();
|
|
82
|
+
final String sequenceFormat = task.getSequenceFormat();
|
|
83
|
+
|
|
84
|
+
return new TransactionalFileOutput() {
|
|
85
|
+
private final List<String> fileNames = new ArrayList<>();
|
|
86
|
+
private int fileIndex = 0;
|
|
87
|
+
private FileOutputStream output = null;
|
|
88
|
+
|
|
89
|
+
public void nextFile()
|
|
90
|
+
{
|
|
91
|
+
closeFile();
|
|
92
|
+
String path = pathPrefix + String.format(sequenceFormat, taskIndex, fileIndex) + pathSuffix;
|
|
93
|
+
log.info("Writing local file '{}'", path);
|
|
94
|
+
fileNames.add(path);
|
|
95
|
+
try {
|
|
96
|
+
output = new FileOutputStream(new File(path));
|
|
97
|
+
} catch (FileNotFoundException ex) {
|
|
98
|
+
throw new RuntimeException(ex); // TODO exception class
|
|
99
|
+
}
|
|
100
|
+
fileIndex++;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private void closeFile()
|
|
104
|
+
{
|
|
105
|
+
if (output != null) {
|
|
106
|
+
try {
|
|
107
|
+
output.close();
|
|
108
|
+
} catch (IOException ex) {
|
|
109
|
+
throw new RuntimeException(ex);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
public void add(Buffer buffer)
|
|
115
|
+
{
|
|
116
|
+
try {
|
|
117
|
+
output.write(buffer.array(), buffer.offset(), buffer.limit());
|
|
118
|
+
} catch (IOException ex) {
|
|
119
|
+
throw new RuntimeException(ex);
|
|
120
|
+
} finally {
|
|
121
|
+
buffer.release();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
public void finish()
|
|
126
|
+
{
|
|
127
|
+
closeFile();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
public void close()
|
|
131
|
+
{
|
|
132
|
+
closeFile();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public void abort()
|
|
136
|
+
{ }
|
|
137
|
+
|
|
138
|
+
public TaskReport commit()
|
|
139
|
+
{
|
|
140
|
+
TaskReport report = Exec.newTaskReport();
|
|
141
|
+
// TODO better setting for Report
|
|
142
|
+
// report.set("file_names", fileNames);
|
|
143
|
+
// report.set("file_sizes", fileSizes);
|
|
144
|
+
return report;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|