embulk 0.8.27-java → 0.8.28-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +11 -1
  3. data/appveyor.yml +4 -4
  4. data/bin/embulk +33 -9
  5. data/build.gradle +17 -4
  6. data/embulk-cli/build.gradle +1 -0
  7. data/embulk-cli/src/main/bat/{selfrun.bat → selfrun.bat.template} +1 -2
  8. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkArguments.java +54 -0
  9. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkBundle.java +44 -0
  10. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLine.java +256 -0
  11. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkCommandLineException.java +25 -0
  12. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkGlobalJRubyScriptingContainer.java +195 -0
  13. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkMigrate.java +9 -5
  14. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkRun.java +769 -0
  15. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkSelfUpdate.java +1 -14
  16. data/embulk-cli/src/main/java/org/embulk/cli/EmbulkSubcommand.java +47 -0
  17. data/embulk-cli/src/main/java/org/embulk/cli/Main.java +12 -21
  18. data/embulk-cli/src/main/java/org/embulk/cli/parse/AbstractHelpLineDefinition.java +15 -0
  19. data/embulk-cli/src/main/java/org/embulk/cli/parse/CliHelpFormatterWithHelpMessages.java +141 -0
  20. data/embulk-cli/src/main/java/org/embulk/cli/parse/CliOptionsWithHelpMessages.java +45 -0
  21. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineHelpRequired.java +10 -0
  22. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineParseException.java +25 -0
  23. data/embulk-cli/src/main/java/org/embulk/cli/parse/EmbulkCommandLineParser.java +183 -0
  24. data/embulk-cli/src/main/java/org/embulk/cli/parse/HelpMessageAsCliOption.java +36 -0
  25. data/embulk-cli/src/main/java/org/embulk/cli/parse/HelpMessageLineDefinition.java +20 -0
  26. data/embulk-cli/src/main/java/org/embulk/cli/parse/OptionBehavior.java +39 -0
  27. data/embulk-cli/src/main/java/org/embulk/cli/parse/OptionDefinition.java +120 -0
  28. data/embulk-cli/src/main/sh/{selfrun.sh → selfrun.sh.template} +1 -1
  29. data/embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java +7 -3
  30. data/embulk-core/src/main/java/org/embulk/EmbulkRunner.java +526 -0
  31. data/embulk-core/src/main/java/org/embulk/EmbulkSetup.java +70 -0
  32. data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java +3 -3
  33. data/embulk-docs/src/release.rst +1 -0
  34. data/embulk-docs/src/release/release-0.8.28.rst +14 -0
  35. data/lib/embulk.rb +21 -17
  36. data/lib/embulk/runner.rb +35 -166
  37. data/lib/embulk/version.rb +1 -1
  38. metadata +29 -11
  39. data/lib/embulk/command/embulk_bundle.rb +0 -47
  40. data/lib/embulk/command/embulk_main.rb +0 -2
  41. data/lib/embulk/command/embulk_run.rb +0 -418
@@ -26,12 +26,11 @@ public class EmbulkSelfUpdate
26
26
  // TODO(dmikurube): Stop catching Exceptions here when embulk_run.rb is replaced to Java.
27
27
  public void updateSelf(final String runningVersionString,
28
28
  final String specifiedVersionString,
29
- final String embulkRunRubyPathString,
30
29
  final boolean isForced)
31
30
  throws IOException, URISyntaxException
32
31
  {
33
32
  try {
34
- updateSelfWithExceptions(runningVersionString, specifiedVersionString, embulkRunRubyPathString, isForced);
33
+ updateSelfWithExceptions(runningVersionString, specifiedVersionString, isForced);
35
34
  }
36
35
  catch (Throwable ex) {
37
36
  ex.printStackTrace();
@@ -41,7 +40,6 @@ public class EmbulkSelfUpdate
41
40
 
42
41
  private void updateSelfWithExceptions(final String runningVersionString,
43
42
  final String specifiedVersionString,
44
- final String embulkRunRubyPathString,
45
43
  final boolean isForced)
46
44
  throws IOException, URISyntaxException
47
45
  {
@@ -52,17 +50,6 @@ public class EmbulkSelfUpdate
52
50
  throw exceptionNoSingleJar();
53
51
  }
54
52
 
55
- if (embulkRunRubyPathString != null) {
56
- final String[] splitRubyFile = embulkRunRubyPathString.split("!", 2);
57
- if (splitRubyFile.length < 2) {
58
- throw exceptionNoSingleJar();
59
- }
60
- final Path jarPathRuby = Paths.get(splitRubyFile[0]);
61
- if (!jarPathJava.equals(jarPathRuby)) {
62
- throw exceptionNoSingleJar();
63
- }
64
- }
65
-
66
53
  final String targetVersionString;
67
54
  if (specifiedVersionString != null) {
68
55
  System.out.printf("Checking version %s...\n", specifiedVersionString);
@@ -0,0 +1,47 @@
1
+ package org.embulk.cli;
2
+
3
+ public enum EmbulkSubcommand
4
+ {
5
+ BUNDLE("bundle"),
6
+ CLEANUP("cleanup"),
7
+ EXAMPLE("example"),
8
+ EXEC("exec"),
9
+ GEM("gem"),
10
+ GUESS("guess"),
11
+ IRB("irb"),
12
+ MIGRATE("migrate"),
13
+ MKBUNDLE("mkbundle"),
14
+ NEW("new"),
15
+ PREVIEW("preview"),
16
+ RUN("run"),
17
+ SELFUPDATE("selfupdate"),
18
+ VERSION_OUT("--version"),
19
+ VERSION_ERR("-version"),
20
+ ;
21
+
22
+ private EmbulkSubcommand(final String subcommand)
23
+ {
24
+ this.subcommand = subcommand;
25
+ }
26
+
27
+ public static EmbulkSubcommand of(final String subcommand)
28
+ throws EmbulkCommandLineException
29
+ {
30
+ if (!(subcommand.equals("--version")) && !(subcommand.equals("-version"))) {
31
+ for (final EmbulkSubcommand constant : values()) {
32
+ if (constant.toString().equals(subcommand)) {
33
+ return constant;
34
+ }
35
+ }
36
+ }
37
+ throw new EmbulkCommandLineException("Unknown subcommand " + subcommand + ".");
38
+ }
39
+
40
+ @Override
41
+ public final String toString()
42
+ {
43
+ return this.subcommand;
44
+ }
45
+
46
+ private final String subcommand;
47
+ }
@@ -1,37 +1,28 @@
1
1
  package org.embulk.cli;
2
2
 
3
- import java.net.URISyntaxException;
3
+ import java.util.ArrayList;
4
+ import java.util.Collections;
4
5
 
5
6
  public class Main
6
7
  {
7
- public static void main(String[] args)
8
+ public static void main(final String[] args)
8
9
  {
9
- // $ java -jar jruby-complete.jar embulk-core.jar!/embulk/command/embulk_bundle.rb "$@"
10
- String[] jrubyArgs = new String[args.length + 1];
10
+ final ArrayList<String> jrubyOptions = new ArrayList<String>();
11
+
11
12
  int i;
12
- for (i = 0; i < args.length; i++) {
13
+ for (i = 0; i < args.length; ++i) {
13
14
  if (args[i].startsWith("-R")) {
14
- jrubyArgs[i] = args[i].substring(2);
15
+ jrubyOptions.add(args[i].substring(2));
15
16
  } else {
16
17
  break;
17
18
  }
18
19
  }
19
- jrubyArgs[i] = getScriptPath();
20
- for (; i < args.length; i++) {
21
- jrubyArgs[i+1] = args[i];
22
- }
23
- org.jruby.Main.main(jrubyArgs);
24
- }
25
20
 
26
- private static String getScriptPath()
27
- {
28
- String resourcePath;
29
- try {
30
- resourcePath = Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().toString() + "!/";
31
- }
32
- catch (URISyntaxException ex) {
33
- resourcePath = "uri:classloader:/";
21
+ final String[] embulkArgs = new String[args.length - i];
22
+ for (int j = 0; i < args.length; ++i, ++j) {
23
+ embulkArgs[j] = args[i];
34
24
  }
35
- return resourcePath + "embulk/command/embulk_bundle.rb";
25
+
26
+ EmbulkBundle.checkBundle(embulkArgs, Collections.unmodifiableList(jrubyOptions));
36
27
  }
37
28
  }
@@ -0,0 +1,15 @@
1
+ package org.embulk.cli.parse;
2
+
3
+ import org.apache.commons.cli.Option;
4
+
5
+ /**
6
+ * AbstractHelpLineDefinition represents any one line in help messages in the command line parser.
7
+ *
8
+ * It is visible only in {@code org.embulk.cli.parse} because its interface communicates commons-cli objects.
9
+ * Dependencies on third-party libraries are to be encapsulated.
10
+ */
11
+ abstract class AbstractHelpLineDefinition
12
+ {
13
+ // Visible only in org.embulk.cli.parse to keep commons-cli segregated from other components.
14
+ abstract Option getCliOption();
15
+ }
@@ -0,0 +1,141 @@
1
+ package org.embulk.cli.parse;
2
+
3
+ import java.io.PrintWriter;
4
+ import java.util.HashMap;
5
+ import java.util.List;
6
+ import org.apache.commons.cli.HelpFormatter;
7
+ import org.apache.commons.cli.Option;
8
+ import org.apache.commons.cli.Options;
9
+
10
+ /**
11
+ * CliHelpFormatterWithHelpMessages is an extension of commons-cli's org.apache.commons.cli.HelpFormatter.
12
+ *
13
+ * It recognizes {@code HelpMessageAsCliOption} from {@code CliOptionsWithHelpMessages} in addition to that
14
+ * {@code org.apache.commons.cli.HelpFormatter} processes ordinary {@code org.apache.commons.cli.Option}.
15
+ *
16
+ * It combines both {@code HelpMessageAsCliOption} and ordinary {@code org.apache.commons.cli.Option}, and
17
+ * builds the entire help message.
18
+ *
19
+ * It is visible only in {@code org.embulk.cli.parse} because it is an extension of a commons-cli class.
20
+ * Dependencies on third-party libraries are to be encapsulated.
21
+ */
22
+ final class CliHelpFormatterWithHelpMessages
23
+ extends HelpFormatter
24
+ {
25
+ CliHelpFormatterWithHelpMessages(final String syntaxPrefix, final int prefixWidth)
26
+ {
27
+ super();
28
+ this.prefixWidth = prefixWidth;
29
+ this.setSyntaxPrefix(syntaxPrefix);
30
+ }
31
+
32
+ @Override
33
+ public final void printHelp(
34
+ final PrintWriter printWriter,
35
+ final int width,
36
+ final String commandLineSyntax,
37
+ final String header,
38
+ final Options options,
39
+ final int leftPaddingWidth,
40
+ final int descriptionPaddingWidth,
41
+ final String footer,
42
+ final boolean autoUsage)
43
+ {
44
+ super.printHelp(printWriter,
45
+ width,
46
+ commandLineSyntax,
47
+ header,
48
+ options,
49
+ leftPaddingWidth,
50
+ descriptionPaddingWidth,
51
+ footer,
52
+ autoUsage);
53
+ printWriter.flush();
54
+ }
55
+
56
+ @Override
57
+ protected final StringBuffer renderOptions(
58
+ final StringBuffer buffer,
59
+ final int width,
60
+ final Options options,
61
+ final int leftPaddingWidth,
62
+ final int descriptionPaddingWidth)
63
+ {
64
+ // If |options| is not the extended version, it is just delegated to the original HelpFormatter.
65
+ if (!(options instanceof CliOptionsWithHelpMessages)) {
66
+ return super.renderOptions(buffer, width, options, leftPaddingWidth, descriptionPaddingWidth);
67
+ }
68
+
69
+ final List<Option> allOptions = ((CliOptionsWithHelpMessages) options).getAllOptions();
70
+ final String leftPadding = super.createPadding(leftPaddingWidth);
71
+ final String descriptionPadding = super.createPadding(descriptionPaddingWidth);
72
+
73
+ int maxOptionLinePrefixLength = 0;
74
+ final HashMap<Option, String> optionLinePrefixes = new HashMap<Option, String>();
75
+
76
+ // The first pass: builds all "prefixes" of option lines, and measures their length.
77
+ for (final Option option : allOptions) {
78
+ final StringBuilder optionLinePrefixBuilder = new StringBuilder();
79
+
80
+ if (!(option instanceof HelpMessageAsCliOption)) {
81
+ optionLinePrefixBuilder.append(leftPadding);
82
+ if (option.getOpt() == null) {
83
+ optionLinePrefixBuilder.append(" ").append(getLongOptPrefix()).append(option.getLongOpt());
84
+ }
85
+ else {
86
+ optionLinePrefixBuilder.append(getOptPrefix()).append(option.getOpt());
87
+ if (option.hasLongOpt()) {
88
+ optionLinePrefixBuilder.append(", ").append(getLongOptPrefix()).append(option.getLongOpt());
89
+ }
90
+ }
91
+
92
+ if (option.hasArg()) {
93
+ final String argName = option.getArgName();
94
+ if (argName != null && argName.length() == 0) {
95
+ optionLinePrefixBuilder.append(' ');
96
+ }
97
+ else {
98
+ optionLinePrefixBuilder.append(option.hasLongOpt() ? getLongOptSeparator() : " ");
99
+ optionLinePrefixBuilder.append(argName != null ? option.getArgName() : getArgName());
100
+ }
101
+ }
102
+
103
+ optionLinePrefixes.put(option, optionLinePrefixBuilder.toString());
104
+ if (maxOptionLinePrefixLength < optionLinePrefixBuilder.length()) {
105
+ maxOptionLinePrefixLength = optionLinePrefixBuilder.length();
106
+ }
107
+ }
108
+ }
109
+
110
+ if (maxOptionLinePrefixLength < this.prefixWidth) {
111
+ maxOptionLinePrefixLength = this.prefixWidth;
112
+ }
113
+
114
+ // The second pass: builds all lines both from options and help messages.
115
+ for (final Option option : allOptions) {
116
+ if (option instanceof HelpMessageAsCliOption) {
117
+ buffer.append(option.toString());
118
+ }
119
+ else {
120
+ final StringBuilder lineBuilder = new StringBuilder();
121
+ lineBuilder.append(optionLinePrefixes.get(option));
122
+ if (lineBuilder.length() < maxOptionLinePrefixLength) {
123
+ lineBuilder.append(super.createPadding(maxOptionLinePrefixLength - lineBuilder.length()));
124
+ }
125
+ lineBuilder.append(descriptionPadding);
126
+
127
+ if (option.getDescription() != null) {
128
+ lineBuilder.append(option.getDescription());
129
+ }
130
+ super.renderWrappedText(buffer,
131
+ width,
132
+ maxOptionLinePrefixLength + descriptionPaddingWidth,
133
+ lineBuilder.toString());
134
+ }
135
+ buffer.append(super.getNewLine());
136
+ }
137
+ return buffer;
138
+ }
139
+
140
+ private final int prefixWidth;
141
+ }
@@ -0,0 +1,45 @@
1
+ package org.embulk.cli.parse;
2
+
3
+ import java.util.ArrayList;
4
+ import java.util.Collections;
5
+ import java.util.List;
6
+ import org.apache.commons.cli.Option;
7
+ import org.apache.commons.cli.Options;
8
+
9
+ /**
10
+ * CliOptionsWithHelpMessages is an extension of commons-cli's org.apache.commons.cli.Options.
11
+ *
12
+ * It just recognizes {@code HelpMessageAsCliOption} while others are same with {@code org.apache.commons.cli.Options}.
13
+ * {@code HelpMessageAsCliOption} is added just as a help message line, but ignored as a command line option.
14
+ *
15
+ * It is visible only in |org.embulk.cli.parse| because it is an extension of a commons-cli class.
16
+ * Dependencies on third-party libraries are to be encapsulated.
17
+ */
18
+ final class CliOptionsWithHelpMessages
19
+ extends Options
20
+ {
21
+ CliOptionsWithHelpMessages()
22
+ {
23
+ this.allOptions = new ArrayList<Option>();
24
+ }
25
+
26
+ /**
27
+ * Adds commons-cli's {@code org.apache.commons.cli.Option}.
28
+ */
29
+ @Override
30
+ public final Options addOption(final Option option)
31
+ {
32
+ this.allOptions.add(option);
33
+ if (option instanceof HelpMessageAsCliOption) {
34
+ return this;
35
+ }
36
+ return super.addOption(option);
37
+ }
38
+
39
+ final List<Option> getAllOptions()
40
+ {
41
+ return Collections.unmodifiableList(this.allOptions);
42
+ }
43
+
44
+ private final ArrayList<Option> allOptions;
45
+ }
@@ -0,0 +1,10 @@
1
+ package org.embulk.cli.parse;
2
+
3
+ public final class EmbulkCommandLineHelpRequired
4
+ extends Throwable
5
+ {
6
+ EmbulkCommandLineHelpRequired()
7
+ {
8
+ super();
9
+ }
10
+ }
@@ -0,0 +1,25 @@
1
+ package org.embulk.cli.parse;
2
+
3
+ public final class EmbulkCommandLineParseException
4
+ extends Exception
5
+ {
6
+ protected EmbulkCommandLineParseException()
7
+ {
8
+ super();
9
+ }
10
+
11
+ public EmbulkCommandLineParseException(final String message)
12
+ {
13
+ super(message);
14
+ }
15
+
16
+ public EmbulkCommandLineParseException(final Throwable cause)
17
+ {
18
+ super(cause);
19
+ }
20
+
21
+ public EmbulkCommandLineParseException(final String message, final Throwable cause)
22
+ {
23
+ super(message, cause);
24
+ }
25
+ }
@@ -0,0 +1,183 @@
1
+ package org.embulk.cli.parse;
2
+
3
+ import java.io.PrintStream;
4
+ import java.io.PrintWriter;
5
+ import java.util.ArrayList;
6
+ import java.util.Collections;
7
+ import java.util.HashMap;
8
+ import java.util.List;
9
+ import org.apache.commons.cli.CommandLine;
10
+ import org.apache.commons.cli.DefaultParser;
11
+ import org.apache.commons.cli.Option;
12
+ import org.apache.commons.cli.ParseException;
13
+ import org.embulk.cli.EmbulkCommandLine;
14
+
15
+ public class EmbulkCommandLineParser
16
+ {
17
+ private EmbulkCommandLineParser(
18
+ final String usage,
19
+ final List<AbstractHelpLineDefinition> helpLineDefinitions,
20
+ final int minArgs,
21
+ final int maxArgs,
22
+ final int width)
23
+ {
24
+ this.usage = usage;
25
+ this.helpLineDefinitions = Collections.unmodifiableList(helpLineDefinitions);
26
+ this.minArgs = minArgs;
27
+ this.maxArgs = maxArgs;
28
+ this.width = width;
29
+
30
+ this.cliOptions = new CliOptionsWithHelpMessages();
31
+
32
+ final HashMap<Option, OptionDefinition> optionDefinitionFromCliOption = new HashMap<Option, OptionDefinition>();
33
+ for (final AbstractHelpLineDefinition definition : this.helpLineDefinitions) {
34
+ cliOptions.addOption(definition.getCliOption());
35
+ if (definition instanceof OptionDefinition) {
36
+ optionDefinitionFromCliOption.put(definition.getCliOption(), ((OptionDefinition) definition));
37
+ }
38
+ }
39
+ this.optionDefinitionFromCliOption = optionDefinitionFromCliOption;
40
+ }
41
+
42
+ public static class Builder
43
+ {
44
+ private Builder()
45
+ {
46
+ this.mainUsage = null;
47
+ this.additionalUsage = new StringBuilder();
48
+ this.helpLineDefinitions = new ArrayList<AbstractHelpLineDefinition>();
49
+ this.minArgs = 0;
50
+ this.maxArgs = Integer.MAX_VALUE;
51
+ this.width = 74;
52
+ }
53
+
54
+ public EmbulkCommandLineParser build()
55
+ {
56
+ return new EmbulkCommandLineParser(
57
+ this.mainUsage + this.additionalUsage.toString(),
58
+ this.helpLineDefinitions,
59
+ this.minArgs,
60
+ this.maxArgs,
61
+ this.width);
62
+ }
63
+
64
+ public Builder setMainUsage(final String mainUsage)
65
+ {
66
+ this.mainUsage = mainUsage;
67
+ return this;
68
+ }
69
+
70
+ public Builder addUsage(final String line)
71
+ {
72
+ this.additionalUsage.append(System.getProperty("line.separator"));
73
+ this.additionalUsage.append(line);
74
+ return this;
75
+ }
76
+
77
+ public Builder addOptionDefinition(final OptionDefinition optionDefinition)
78
+ {
79
+ this.helpLineDefinitions.add(optionDefinition);
80
+ return this;
81
+ }
82
+
83
+ public Builder addHelpMessageLine(final String message)
84
+ {
85
+ this.helpLineDefinitions.add(new HelpMessageLineDefinition(message));
86
+ return this;
87
+ }
88
+
89
+ public Builder setArgumentsRange(final int minArgs, final int maxArgs)
90
+ {
91
+ this.minArgs = minArgs;
92
+ this.maxArgs = maxArgs;
93
+ return this;
94
+ }
95
+
96
+ public Builder setWidth(final int width)
97
+ {
98
+ this.width = width;
99
+ return this;
100
+ }
101
+
102
+ private String mainUsage;
103
+ private final StringBuilder additionalUsage;
104
+ private final ArrayList<AbstractHelpLineDefinition> helpLineDefinitions;
105
+ private int minArgs;
106
+ private int maxArgs;
107
+ private int width;
108
+ }
109
+
110
+ public static Builder builder()
111
+ {
112
+ return new Builder();
113
+ }
114
+
115
+ public EmbulkCommandLine parse(final List<String> argsEmbulk,
116
+ final PrintWriter helpPrintWriter,
117
+ final PrintWriter errorPrintWriter)
118
+ throws EmbulkCommandLineParseException, EmbulkCommandLineHelpRequired
119
+ {
120
+ final CommandLine cliCommandLine;
121
+ try {
122
+ cliCommandLine = new DefaultParser().parse(
123
+ this.cliOptions, argsEmbulk.toArray(new String[argsEmbulk.size()]));
124
+ }
125
+ catch (ParseException ex) {
126
+ throw new EmbulkCommandLineParseException(ex.getMessage(), ex);
127
+ }
128
+
129
+ for (final Option cliOptionSpecified : cliCommandLine.getOptions()) {
130
+ final OptionDefinition optionDefinitionSpecified =
131
+ this.optionDefinitionFromCliOption.get(cliOptionSpecified);
132
+
133
+ if (optionDefinitionSpecified.printsHelp()) {
134
+ throw new EmbulkCommandLineHelpRequired();
135
+ }
136
+ }
137
+
138
+ final List<String> arguments = cliCommandLine.getArgList();
139
+ if (arguments.size() < this.minArgs) {
140
+ throw new EmbulkCommandLineParseException("Too few arguments.");
141
+ }
142
+ if (arguments.size() > this.maxArgs) {
143
+ throw new EmbulkCommandLineParseException("Too many arguments;");
144
+ }
145
+
146
+ final EmbulkCommandLine.Builder commandLineBuilder = EmbulkCommandLine.builder();
147
+ commandLineBuilder.addArguments(arguments);
148
+ for (final Option cliOptionSpecified : cliCommandLine.getOptions()) {
149
+ final OptionDefinition optionDefinitionSpecified =
150
+ this.optionDefinitionFromCliOption.get(cliOptionSpecified);
151
+ optionDefinitionSpecified.behave(commandLineBuilder, cliOptionSpecified.getValue());
152
+ }
153
+
154
+ return commandLineBuilder.build();
155
+ }
156
+
157
+ public final void printHelp(final PrintStream printStream)
158
+ {
159
+ this.printHelp(new PrintWriter(printStream));
160
+ }
161
+
162
+ public void printHelp(final PrintWriter printWriter)
163
+ {
164
+ final CliHelpFormatterWithHelpMessages helpFormatter = new CliHelpFormatterWithHelpMessages("Usage: ", 32);
165
+ helpFormatter.printHelp(printWriter, // PrintWriter pw
166
+ this.width, // int width
167
+ this.usage, // String cmdLineSyntax
168
+ "", // String header
169
+ this.cliOptions, // Options options
170
+ 4, // int leftPad
171
+ 5, // int descPad
172
+ "" // String footer
173
+ );
174
+ }
175
+
176
+ private final String usage;
177
+ private final List<AbstractHelpLineDefinition> helpLineDefinitions;
178
+ private final int minArgs;
179
+ private final int maxArgs;
180
+ private final int width;
181
+ private final CliOptionsWithHelpMessages cliOptions;
182
+ private final HashMap<Option, OptionDefinition> optionDefinitionFromCliOption;
183
+ }