embulk 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +16 -0
  3. data/Gemfile +0 -1
  4. data/README.md +37 -19
  5. data/Rakefile +5 -37
  6. data/bin/embulk +1 -1
  7. data/build.gradle +178 -95
  8. data/embulk-core/build.gradle +1 -1
  9. data/embulk-core/src/main/java/org/embulk/command/Runner.java +11 -10
  10. data/embulk-core/src/main/java/org/embulk/config/ConfigDiff.java +26 -0
  11. data/embulk-core/src/main/java/org/embulk/config/ConfigInject.java +14 -0
  12. data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +2 -2
  13. data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +4 -3
  14. data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +5 -3
  15. data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +1 -0
  16. data/embulk-core/src/main/java/org/embulk/exec/ExecutionResult.java +6 -6
  17. data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +19 -19
  18. data/embulk-core/src/main/java/org/embulk/exec/LocalExecutor.java +61 -36
  19. data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +4 -0
  20. data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +16 -1
  21. data/embulk-core/src/main/java/org/embulk/spi/Column.java +1 -1
  22. data/embulk-core/src/main/java/org/embulk/spi/{SchemaVisitor.java → ColumnVisitor.java} +1 -1
  23. data/embulk-core/src/main/java/org/embulk/spi/Exec.java +3 -3
  24. data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +2 -2
  25. data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +3 -3
  26. data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +3 -3
  27. data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +3 -3
  28. data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +3 -3
  29. data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +1 -1
  30. data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +2 -2
  31. data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +3 -3
  32. data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +3 -3
  33. data/embulk-core/src/main/java/org/embulk/spi/PluginClassLoader.java +80 -0
  34. data/embulk-core/src/main/java/org/embulk/spi/Schema.java +1 -1
  35. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +2 -2
  36. data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +2 -2
  37. data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +1 -1
  38. data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +2 -2
  39. data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +6 -6
  40. data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +6 -6
  41. data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +1 -1
  42. data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +1 -0
  43. data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +2 -2
  44. data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +1 -1
  45. data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +3 -3
  46. data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +4 -4
  47. data/embulk-docs/Makefile +178 -0
  48. data/embulk-docs/build.gradle +20 -0
  49. data/embulk-docs/make.bat +243 -0
  50. data/embulk-docs/push-gh-pages.sh +29 -0
  51. data/embulk-docs/src/conf.py +260 -0
  52. data/embulk-docs/src/index.rst +19 -0
  53. data/embulk-docs/src/release.rst +14 -0
  54. data/embulk-docs/src/release/release-0.1.0.rst +8 -0
  55. data/embulk-docs/src/release/release-0.2.0.rst +16 -0
  56. data/embulk-docs/src/release/release-0.2.1.rst +19 -0
  57. data/embulk-docs/src/release/release-0.3.0.rst +34 -0
  58. data/embulk-docs/src/release/release-0.3.1.rst +11 -0
  59. data/embulk-docs/src/release/release-0.3.2.rst +15 -0
  60. data/embulk-docs/src/release/release-0.4.0.rst +74 -0
  61. data/embulk-standards/build.gradle +0 -1
  62. data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +2 -2
  63. data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +12 -3
  64. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +2 -2
  65. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +49 -26
  66. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +16 -17
  67. data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +4 -4
  68. data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +0 -1
  69. data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +5 -5
  70. data/gradle/wrapper/gradle-wrapper.jar +0 -0
  71. data/gradle/wrapper/gradle-wrapper.properties +2 -2
  72. data/lib/embulk/buffer.rb +2 -2
  73. data/lib/embulk/column.rb +6 -6
  74. data/lib/embulk/command/embulk_example.rb +1 -1
  75. data/lib/embulk/command/embulk_new_plugin.rb +87 -0
  76. data/lib/embulk/command/embulk_run.rb +84 -26
  77. data/lib/embulk/data/bundle/Gemfile +12 -20
  78. data/lib/embulk/data/bundle/embulk/{filter_example.rb → filter/example.rb} +3 -3
  79. data/lib/embulk/data/bundle/embulk/{input_example.rb → input/example.rb} +3 -3
  80. data/lib/embulk/data/bundle/embulk/{output_example.rb → output/example.rb} +3 -3
  81. data/lib/embulk/data/new/LICENSE.txt +21 -0
  82. data/lib/embulk/data/new/README.md.erb +75 -0
  83. data/lib/embulk/data/new/gitignore.erb +12 -0
  84. data/lib/embulk/data/new/java/build.gradle.erb +57 -0
  85. data/lib/embulk/data/new/java/decoder.java.erb +40 -0
  86. data/lib/embulk/data/new/java/encoder.java.erb +40 -0
  87. data/lib/embulk/data/new/java/file_input.java.erb +64 -0
  88. data/lib/embulk/data/new/java/file_output.java.erb +66 -0
  89. data/lib/embulk/data/new/java/filter.java.erb +47 -0
  90. data/lib/embulk/data/new/java/formatter.java.erb +45 -0
  91. data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
  92. data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +6 -0
  93. data/lib/embulk/data/new/java/gradlew +164 -0
  94. data/lib/embulk/data/new/java/gradlew.bat +90 -0
  95. data/lib/embulk/data/new/java/input.java.erb +69 -0
  96. data/lib/embulk/data/new/java/output.java.erb +65 -0
  97. data/lib/embulk/data/new/java/parser.java.erb +51 -0
  98. data/lib/embulk/data/new/java/plugin_loader.rb.erb +3 -0
  99. data/lib/embulk/data/new/java/test.java.erb +5 -0
  100. data/lib/embulk/data/new/ruby/Gemfile +2 -0
  101. data/lib/embulk/data/new/ruby/Rakefile +1 -0
  102. data/lib/embulk/data/new/ruby/filter.rb.erb +39 -0
  103. data/lib/embulk/data/new/ruby/gemspec.erb +19 -0
  104. data/lib/embulk/data/new/ruby/input.rb.erb +47 -0
  105. data/lib/embulk/data/new/ruby/output.rb.erb +59 -0
  106. data/lib/embulk/data/package_data.rb +64 -0
  107. data/lib/embulk/data_source.rb +2 -2
  108. data/lib/embulk/decoder_plugin.rb +27 -0
  109. data/lib/embulk/encoder_plugin.rb +27 -0
  110. data/lib/embulk/error.rb +3 -0
  111. data/lib/embulk/file_input_plugin.rb +27 -0
  112. data/lib/embulk/file_output_plugin.rb +27 -0
  113. data/lib/embulk/filter_plugin.rb +28 -9
  114. data/lib/embulk/formatter_plugin.rb +105 -0
  115. data/lib/embulk/guess_csv.rb +10 -1
  116. data/lib/embulk/guess_plugin.rb +22 -27
  117. data/lib/embulk/input_plugin.rb +34 -20
  118. data/lib/embulk/java/bootstrap.rb +5 -0
  119. data/lib/embulk/java/imports.rb +7 -0
  120. data/lib/embulk/java_plugin.rb +84 -0
  121. data/lib/embulk/output_plugin.rb +35 -19
  122. data/lib/embulk/page.rb +1 -1
  123. data/lib/embulk/page_builder.rb +1 -1
  124. data/lib/embulk/parser_plugin.rb +76 -0
  125. data/lib/embulk/plugin.rb +130 -65
  126. data/lib/embulk/plugin_registry.rb +19 -8
  127. data/lib/embulk/schema.rb +4 -4
  128. data/lib/embulk/version.rb +1 -1
  129. data/settings.gradle +1 -0
  130. metadata +123 -90
  131. data/ChangeLog +0 -46
  132. data/embulk-cli/pom.xml +0 -94
  133. data/embulk-core/pom.xml +0 -148
  134. data/embulk-core/src/main/java/org/embulk/config/NextConfig.java +0 -26
  135. data/embulk-standards/pom.xml +0 -68
  136. data/embulk-standards/src/main/java/org/embulk/standards/S3FileInputPlugin.java +0 -250
  137. data/embulk-standards/src/test/java/org/embulk/standards/TestS3FileInputPlugin.java +0 -43
  138. data/pom.xml +0 -541
@@ -46,6 +46,7 @@ public class InjectedPluginSource
46
46
  {
47
47
  String name = type.getName();
48
48
  try {
49
+ @SuppressWarnings("unchecked")
49
50
  PluginFactory<T> factory = (PluginFactory<T>) injector.getInstance(
50
51
  Key.get(PluginFactory.class, pluginFactoryName(iface, name)));
51
52
  return factory.newPlugin(injector);
@@ -60,6 +61,7 @@ public class InjectedPluginSource
60
61
  if (FileInputPlugin.class.isAssignableFrom(impl)) {
61
62
  Preconditions.checkArgument(InputPlugin.class.equals(iface));
62
63
  factory = new PluginFactory<T>() {
64
+ @SuppressWarnings("unchecked")
63
65
  public T newPlugin(Injector injector)
64
66
  {
65
67
  return (T) new FileInputRunner((FileInputPlugin) injector.getInstance(impl));
@@ -68,6 +70,7 @@ public class InjectedPluginSource
68
70
  } else if (FileOutputPlugin.class.isAssignableFrom(impl)) {
69
71
  Preconditions.checkArgument(OutputPlugin.class.equals(iface));
70
72
  factory = new PluginFactory<T>() {
73
+ @SuppressWarnings("unchecked")
71
74
  public T newPlugin(Injector injector)
72
75
  {
73
76
  return (T) new FileOutputRunner((FileOutputPlugin) injector.getInstance(impl));
@@ -76,6 +79,7 @@ public class InjectedPluginSource
76
79
  } else {
77
80
  Preconditions.checkArgument(iface.isAssignableFrom(impl));
78
81
  factory = new PluginFactory<T>() {
82
+ @SuppressWarnings("unchecked")
79
83
  public T newPlugin(Injector injector)
80
84
  {
81
85
  return (T) injector.getInstance(impl);
@@ -2,6 +2,7 @@ package org.embulk.plugin;
2
2
 
3
3
  import java.util.Set;
4
4
  import java.util.List;
5
+ import java.util.ArrayList;
5
6
  import com.google.common.collect.ImmutableList;
6
7
  import com.google.inject.Inject;
7
8
  import com.google.inject.Injector;
@@ -23,12 +24,26 @@ public class PluginManager
23
24
 
24
25
  public <T> T newPlugin(Class<T> iface, PluginType type)
25
26
  {
27
+ if (sources.isEmpty()) {
28
+ throw new ConfigException("No PluginSource is installed");
29
+ }
30
+
31
+ List<Throwable> causes = new ArrayList<Throwable>();
26
32
  for (PluginSource source : sources) {
27
33
  try {
28
34
  return source.newPlugin(iface, type);
29
35
  } catch (PluginSourceNotMatchException e) {
36
+ if (e.getCause() != null) {
37
+ causes.add(e.getCause());
38
+ }
30
39
  }
31
40
  }
32
- throw new ConfigException("Plugin not found"); // TODO exception message should include type in original format
41
+
42
+ ConfigException e = new ConfigException(String.format("%s '%s' is not found",
43
+ iface.getSimpleName(), type.getName()), causes.remove(causes.size()-1));
44
+ for (Throwable cause : causes) {
45
+ e.addSuppressed(cause);
46
+ }
47
+ throw e;
33
48
  }
34
49
  }
@@ -45,7 +45,7 @@ public class Column
45
45
  return type;
46
46
  }
47
47
 
48
- public void visit(SchemaVisitor visitor)
48
+ public void visit(ColumnVisitor visitor)
49
49
  {
50
50
  if (type instanceof BooleanType) {
51
51
  visitor.booleanColumn(this);
@@ -1,6 +1,6 @@
1
1
  package org.embulk.spi;
2
2
 
3
- public interface SchemaVisitor
3
+ public interface ColumnVisitor
4
4
  {
5
5
  public void booleanColumn(Column column);
6
6
 
@@ -3,7 +3,7 @@ package org.embulk.spi;
3
3
  import org.slf4j.Logger;
4
4
  import org.embulk.config.Task;
5
5
  import org.embulk.config.CommitReport;
6
- import org.embulk.config.NextConfig;
6
+ import org.embulk.config.ConfigDiff;
7
7
  import org.embulk.config.ConfigSource;
8
8
  import org.embulk.config.TaskSource;
9
9
  import org.embulk.plugin.PluginType;
@@ -59,9 +59,9 @@ public class Exec
59
59
  return session().newCommitReport();
60
60
  }
61
61
 
62
- public static NextConfig newNextConfig()
62
+ public static ConfigDiff newConfigDiff()
63
63
  {
64
- return session().newNextConfig();
64
+ return session().newConfigDiff();
65
65
  }
66
66
 
67
67
  public static ConfigSource newConfigSource()
@@ -10,7 +10,7 @@ import org.embulk.config.Config;
10
10
  import org.embulk.config.ConfigDefault;
11
11
  import org.embulk.config.ModelManager;
12
12
  import org.embulk.config.CommitReport;
13
- import org.embulk.config.NextConfig;
13
+ import org.embulk.config.ConfigDiff;
14
14
  import org.embulk.config.ConfigSource;
15
15
  import org.embulk.config.TaskSource;
16
16
  import org.embulk.config.DataSourceImpl;
@@ -111,7 +111,7 @@ public class ExecSession
111
111
  return new DataSourceImpl(modelManager);
112
112
  }
113
113
 
114
- public NextConfig newNextConfig()
114
+ public ConfigDiff newConfigDiff()
115
115
  {
116
116
  return new DataSourceImpl(modelManager);
117
117
  }
@@ -3,7 +3,7 @@ package org.embulk.spi;
3
3
  import java.util.List;
4
4
  import org.embulk.config.TaskSource;
5
5
  import org.embulk.config.ConfigSource;
6
- import org.embulk.config.NextConfig;
6
+ import org.embulk.config.ConfigDiff;
7
7
  import org.embulk.config.CommitReport;
8
8
 
9
9
  public interface FileInputPlugin
@@ -14,10 +14,10 @@ public interface FileInputPlugin
14
14
  int processorCount);
15
15
  }
16
16
 
17
- public NextConfig transaction(ConfigSource config,
17
+ public ConfigDiff transaction(ConfigSource config,
18
18
  FileInputPlugin.Control control);
19
19
 
20
- public NextConfig resume(TaskSource taskSource,
20
+ public ConfigDiff resume(TaskSource taskSource,
21
21
  int processorCount,
22
22
  FileInputPlugin.Control control);
23
23
 
@@ -5,7 +5,7 @@ import java.util.List;
5
5
  import org.embulk.config.Task;
6
6
  import org.embulk.config.TaskSource;
7
7
  import org.embulk.config.ConfigSource;
8
- import org.embulk.config.NextConfig;
8
+ import org.embulk.config.ConfigDiff;
9
9
  import org.embulk.config.CommitReport;
10
10
  import org.embulk.config.Config;
11
11
  import org.embulk.config.ConfigDefault;
@@ -54,13 +54,13 @@ public class FileInputRunner
54
54
  }
55
55
 
56
56
  @Override
57
- public NextConfig transaction(ConfigSource config, final InputPlugin.Control control)
57
+ public ConfigDiff transaction(ConfigSource config, final InputPlugin.Control control)
58
58
  {
59
59
  final RunnerTask task = config.loadConfig(RunnerTask.class);
60
60
  return fileInputPlugin.transaction(config, new RunnerControl(task, control));
61
61
  }
62
62
 
63
- public NextConfig resume(TaskSource taskSource,
63
+ public ConfigDiff resume(TaskSource taskSource,
64
64
  Schema schema, int processorCount,
65
65
  InputPlugin.Control control)
66
66
  {
@@ -3,7 +3,7 @@ package org.embulk.spi;
3
3
  import java.util.List;
4
4
  import org.embulk.config.TaskSource;
5
5
  import org.embulk.config.ConfigSource;
6
- import org.embulk.config.NextConfig;
6
+ import org.embulk.config.ConfigDiff;
7
7
  import org.embulk.config.CommitReport;
8
8
 
9
9
  public interface FileOutputPlugin
@@ -13,10 +13,10 @@ public interface FileOutputPlugin
13
13
  public List<CommitReport> run(TaskSource taskSource);
14
14
  }
15
15
 
16
- public NextConfig transaction(ConfigSource config, int processorCount,
16
+ public ConfigDiff transaction(ConfigSource config, int processorCount,
17
17
  FileOutputPlugin.Control control);
18
18
 
19
- public NextConfig resume(TaskSource taskSource,
19
+ public ConfigDiff resume(TaskSource taskSource,
20
20
  int processorCount,
21
21
  FileOutputPlugin.Control control);
22
22
 
@@ -5,7 +5,7 @@ import java.util.ArrayList;
5
5
  import org.embulk.config.Task;
6
6
  import org.embulk.config.TaskSource;
7
7
  import org.embulk.config.ConfigSource;
8
- import org.embulk.config.NextConfig;
8
+ import org.embulk.config.ConfigDiff;
9
9
  import org.embulk.config.CommitReport;
10
10
  import org.embulk.config.Config;
11
11
  import org.embulk.config.ConfigDefault;
@@ -55,7 +55,7 @@ public class FileOutputRunner
55
55
  }
56
56
 
57
57
  @Override
58
- public NextConfig transaction(ConfigSource config,
58
+ public ConfigDiff transaction(ConfigSource config,
59
59
  final Schema schema, final int processorCount,
60
60
  final OutputPlugin.Control control)
61
61
  {
@@ -63,7 +63,7 @@ public class FileOutputRunner
63
63
  return fileOutputPlugin.transaction(config, processorCount, new RunnerControl(schema, task, control));
64
64
  }
65
65
 
66
- public NextConfig resume(TaskSource taskSource,
66
+ public ConfigDiff resume(TaskSource taskSource,
67
67
  Schema schema, int processorCount,
68
68
  final OutputPlugin.Control control)
69
69
  {
@@ -3,7 +3,7 @@ package org.embulk.spi;
3
3
  import java.util.List;
4
4
  import org.embulk.config.TaskSource;
5
5
  import org.embulk.config.ConfigSource;
6
- import org.embulk.config.NextConfig;
6
+ import org.embulk.config.ConfigDiff;
7
7
  import org.embulk.config.CommitReport;
8
8
 
9
9
  public interface FilterPlugin
@@ -1,9 +1,9 @@
1
1
  package org.embulk.spi;
2
2
 
3
- import org.embulk.config.NextConfig;
3
+ import org.embulk.config.ConfigDiff;
4
4
  import org.embulk.config.ConfigSource;
5
5
 
6
6
  public interface GuessPlugin
7
7
  {
8
- public NextConfig guess(ConfigSource config, Buffer sample);
8
+ public ConfigDiff guess(ConfigSource config, Buffer sample);
9
9
  }
@@ -3,7 +3,7 @@ package org.embulk.spi;
3
3
  import java.util.List;
4
4
  import org.embulk.config.TaskSource;
5
5
  import org.embulk.config.ConfigSource;
6
- import org.embulk.config.NextConfig;
6
+ import org.embulk.config.ConfigDiff;
7
7
  import org.embulk.config.CommitReport;
8
8
 
9
9
  public interface InputPlugin
@@ -14,10 +14,10 @@ public interface InputPlugin
14
14
  Schema schema, int processorCount);
15
15
  }
16
16
 
17
- public NextConfig transaction(ConfigSource config,
17
+ public ConfigDiff transaction(ConfigSource config,
18
18
  InputPlugin.Control control);
19
19
 
20
- public NextConfig resume(TaskSource taskSource,
20
+ public ConfigDiff resume(TaskSource taskSource,
21
21
  Schema schema, int processorCount,
22
22
  InputPlugin.Control control);
23
23
 
@@ -3,7 +3,7 @@ package org.embulk.spi;
3
3
  import java.util.List;
4
4
  import org.embulk.config.TaskSource;
5
5
  import org.embulk.config.ConfigSource;
6
- import org.embulk.config.NextConfig;
6
+ import org.embulk.config.ConfigDiff;
7
7
  import org.embulk.config.CommitReport;
8
8
 
9
9
  public interface OutputPlugin
@@ -13,11 +13,11 @@ public interface OutputPlugin
13
13
  public List<CommitReport> run(TaskSource taskSource);
14
14
  }
15
15
 
16
- public NextConfig transaction(ConfigSource config,
16
+ public ConfigDiff transaction(ConfigSource config,
17
17
  Schema schema, int processorCount,
18
18
  OutputPlugin.Control control);
19
19
 
20
- public NextConfig resume(TaskSource taskSource,
20
+ public ConfigDiff resume(TaskSource taskSource,
21
21
  Schema schema, int processorCount,
22
22
  OutputPlugin.Control control);
23
23
 
@@ -0,0 +1,80 @@
1
+ package org.embulk.spi;
2
+
3
+ import java.net.URL;
4
+ import java.net.URLClassLoader;
5
+ import java.util.List;
6
+ import com.google.common.collect.ImmutableList;
7
+ import org.jruby.Ruby;
8
+
9
+ public class PluginClassLoader
10
+ extends URLClassLoader
11
+ {
12
+ private static final String[] PARENT_FIRST_PACKAGES = new String[] {
13
+ "org.embulk.",
14
+ "io.airlift.slice.",
15
+ "com.fasterxml.jackson.",
16
+ "com.google.inject.",
17
+ "org.jruby.",
18
+ "javax.inject.",
19
+ "java.",
20
+ };
21
+
22
+ public PluginClassLoader(Ruby pluginJRubyRuntime, List<URL> urls)
23
+ {
24
+ this(urls, pluginJRubyRuntime.getJRubyClassLoader());
25
+ }
26
+
27
+ public PluginClassLoader(List<URL> urls, ClassLoader parent)
28
+ {
29
+ super(urls.toArray(new URL[urls.size()]), parent);
30
+ }
31
+
32
+ @Override
33
+ protected Class<?> loadClass(String name, boolean resolve)
34
+ throws ClassNotFoundException
35
+ {
36
+ synchronized (getClassLoadingLock(name)) {
37
+ Class<?> loadedClass = findLoadedClass(name);
38
+ if (loadedClass != null) {
39
+ return resolveClass(loadedClass, resolve);
40
+ }
41
+
42
+ boolean parentFirst = isInParentFirstPackage(name);
43
+ if (!parentFirst) {
44
+ try {
45
+ return resolveClass(findClass(name), resolve);
46
+ } catch (ClassNotFoundException ignored) {
47
+ }
48
+ }
49
+
50
+ try {
51
+ return resolveClass(getParent().loadClass(name), resolve);
52
+ } catch (ClassNotFoundException ignored) {
53
+ }
54
+
55
+ if (parentFirst) {
56
+ return resolveClass(findClass(name), resolve);
57
+ }
58
+
59
+ throw new ClassNotFoundException(name);
60
+ }
61
+ }
62
+
63
+ private Class<?> resolveClass(Class<?> clazz, boolean resolve)
64
+ {
65
+ if (resolve) {
66
+ resolveClass(clazz);
67
+ }
68
+ return clazz;
69
+ }
70
+
71
+ private boolean isInParentFirstPackage(String name)
72
+ {
73
+ for (String pkg : PARENT_FIRST_PACKAGES) {
74
+ if (name.startsWith(pkg)) {
75
+ return true;
76
+ }
77
+ }
78
+ return false;
79
+ }
80
+ }
@@ -42,7 +42,7 @@ public class Schema
42
42
  return getColumn(index).getType();
43
43
  }
44
44
 
45
- public void visitColumns(SchemaVisitor visitor)
45
+ public void visitColumns(ColumnVisitor visitor)
46
46
  {
47
47
  for (Column column : columns) {
48
48
  column.visit(visitor);
@@ -5,9 +5,9 @@ import org.joda.time.DateTime;
5
5
  import org.joda.time.DateTimeZone;
6
6
  import org.jruby.embed.ScriptingContainer;
7
7
  import org.jruby.util.RubyDateFormat;
8
- import com.fasterxml.jackson.annotation.JacksonInject;
9
8
  import org.embulk.config.Task;
10
9
  import org.embulk.config.Config;
10
+ import org.embulk.config.ConfigInject;
11
11
  import org.embulk.config.ConfigDefault;
12
12
  import org.embulk.config.ConfigException;
13
13
  import org.embulk.spi.util.LineEncoder;
@@ -21,7 +21,7 @@ public class TimestampFormatter
21
21
  @ConfigDefault("\"UTC\"")
22
22
  public DateTimeZone getTimeZone();
23
23
 
24
- @JacksonInject
24
+ @ConfigInject
25
25
  public ScriptingContainer getJRuby();
26
26
  }
27
27
 
@@ -2,9 +2,9 @@ package org.embulk.spi.time;
2
2
 
3
3
  import org.joda.time.DateTimeZone;
4
4
  import org.jruby.embed.ScriptingContainer;
5
- import com.fasterxml.jackson.annotation.JacksonInject;
6
5
  import org.embulk.config.Task;
7
6
  import org.embulk.config.Config;
7
+ import org.embulk.config.ConfigInject;
8
8
  import org.embulk.config.ConfigDefault;
9
9
  import org.embulk.config.ConfigException;
10
10
  import static org.embulk.spi.time.TimestampFormat.parseDateTimeZone;
@@ -18,7 +18,7 @@ public class TimestampParser
18
18
  @ConfigDefault("\"UTC\"")
19
19
  public DateTimeZone getDefaultTimeZone();
20
20
 
21
- @JacksonInject
21
+ @ConfigInject
22
22
  public ScriptingContainer getJRuby();
23
23
  }
24
24
 
@@ -5,7 +5,7 @@ import com.google.common.collect.ImmutableList;
5
5
  import org.embulk.config.TaskSource;
6
6
  import org.embulk.config.ConfigSource;
7
7
  import org.embulk.config.CommitReport;
8
- import org.embulk.config.NextConfig;
8
+ import org.embulk.config.ConfigDiff;
9
9
  import org.embulk.plugin.PluginType;
10
10
  import org.embulk.spi.ExecSession;
11
11
  import org.embulk.spi.Schema;
@@ -6,9 +6,9 @@ import java.io.IOException;
6
6
  import java.nio.charset.Charset;
7
7
  import java.nio.charset.CharsetEncoder;
8
8
  import java.nio.charset.CodingErrorAction;
9
- import com.fasterxml.jackson.annotation.JacksonInject;
10
9
  import org.embulk.config.Task;
11
10
  import org.embulk.config.Config;
11
+ import org.embulk.config.ConfigInject;
12
12
  import org.embulk.config.ConfigDefault;
13
13
  import org.embulk.spi.FileOutput;
14
14
  import org.embulk.spi.BufferAllocator;
@@ -29,7 +29,7 @@ public class LineEncoder
29
29
  @ConfigDefault("\"CRLF\"")
30
30
  public Newline getNewline();
31
31
 
32
- @JacksonInject
32
+ @ConfigInject
33
33
  public BufferAllocator getBufferAllocator();
34
34
  }
35
35