Skip to content

Commit

Permalink
[#889][#885] (DOC) Bugfix in example: help was not showing
Browse files Browse the repository at this point in the history
  • Loading branch information
remkop committed Dec 1, 2019
1 parent acda538 commit 25b711d
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 19 deletions.
32 changes: 23 additions & 9 deletions docs/picocli-programmatic-api.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,12 @@ public class ProgrammaticCommand {
public static void main(String[] args) {
CommandSpec spec = CommandSpec.create();
spec.mixinStandardHelpOptions(true); // usageHelp and versionHelp options
spec.addOption(OptionSpec.builder("-c", "--count").paramLabel("COUNT")
spec.addOption(OptionSpec.builder("-c", "--count")
.paramLabel("COUNT")
.type(int.class)
.description("number of times to execute").build());
spec.addPositional(PositionalParamSpec.builder().paramLabel("FILES")
spec.addPositional(PositionalParamSpec.builder()
.paramLabel("FILES")
.type(List.class).auxiliaryTypes(File.class) // List<File>
.description("The files to process").build());
CommandLine commandLine = new CommandLine(spec);
Expand All @@ -40,6 +42,11 @@ public class ProgrammaticCommand {
}
static int run(ParseResult pr) {
// handle requests for help or version information
Integer helpExitCode = CommandLine.executeHelpRequest(pr);
if (helpExitCode != null) { return helpExitCode; }
// implement the business logic
int count = pr.matchedOptionValue('c', 1);
List<File> files = pr.matchedPositionalValue(0, Collections.<File>emptyList());
for (File f : files) {
Expand Down Expand Up @@ -333,35 +340,42 @@ For example:

[source,java]
----
public class ProgrammaticCommand {
public class MyApp {
public static void main(String[] args) {
CommandSpec spec = CommandSpec.create();
spec.mixinStandardHelpOptions(true); // usageHelp and versionHelp options
spec.addOption(OptionSpec.builder("-c", "--count").paramLabel("COUNT")
spec.addOption(OptionSpec.builder("-c", "--count")
.paramLabel("COUNT")
.type(int.class)
.description("number of times to execute").build());
spec.addPositional(PositionalParamSpec.builder().paramLabel("FILES")
spec.addPositional(PositionalParamSpec.builder()
.paramLabel("FILES")
.type(List.class).auxiliaryTypes(File.class) // List<File>
.description("The files to process").build());
CommandLine commandLine = new CommandLine(spec);
// optionally configure streams and handlers to be used
commandLine.setCaseInsensitiveEnumValuesAllowed(true) // configure a non-default parser option
commandLine.setCaseInsensitiveEnumValuesAllowed(true) //configure a parser option
.setOut(myOutWriter()) // configure an alternative to System.out
.setErr(myErrWriter()) // configure an alternative to System.err
.setColorScheme(myColorScheme()) // configure a custom color scheme
.setExitCodeExceptionMapper(myMapper()) // map exception to exit code
.setParameterExceptionHandler(Tmp::invalidUserInput) // configure a custom handler
.setExecutionExceptionHandler(Tmp::runtimeException) // configure a custom handler
.setParameterExceptionHandler(MyApp::invalidUserInput) // configure a custom handler
.setExecutionExceptionHandler(MyApp::runtimeException) // configure a custom handler
;
// set an execution strategy so we can call CommandLine.execute(args)
commandLine.setExecutionStrategy(ProgrammaticCommand::run);
commandLine.setExecutionStrategy(MyApp::run);
int exitCode = commandLine.execute(args);
System.exit(exitCode);
}
static int run(ParseResult pr) {
// handle requests for help or version information
Integer helpExitCode = CommandLine.executeHelpRequest(pr);
if (helpExitCode != null) { return helpExitCode; }
// implement the business logic
int count = pr.matchedOptionValue('c', 1);
List<File> files = pr.matchedPositionalValue(0, Collections.<File>emptyList());
for (File f : files) {
Expand Down
34 changes: 24 additions & 10 deletions docs/picocli-programmatic-api.html
Original file line number Diff line number Diff line change
Expand Up @@ -600,10 +600,12 @@ <h2 id="_example">1. Example</h2>
<span class="directive">public</span> <span class="directive">static</span> <span class="type">void</span> main(<span class="predefined-type">String</span><span class="type">[]</span> args) {
CommandSpec spec = CommandSpec.create();
spec.mixinStandardHelpOptions(<span class="predefined-constant">true</span>); <span class="comment">// usageHelp and versionHelp options</span>
spec.addOption(OptionSpec.builder(<span class="string"><span class="delimiter">&quot;</span><span class="content">-c</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">--count</span><span class="delimiter">&quot;</span></span>).paramLabel(<span class="string"><span class="delimiter">&quot;</span><span class="content">COUNT</span><span class="delimiter">&quot;</span></span>)
spec.addOption(OptionSpec.builder(<span class="string"><span class="delimiter">&quot;</span><span class="content">-c</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">--count</span><span class="delimiter">&quot;</span></span>)
.paramLabel(<span class="string"><span class="delimiter">&quot;</span><span class="content">COUNT</span><span class="delimiter">&quot;</span></span>)
.type(<span class="type">int</span>.class)
.description(<span class="string"><span class="delimiter">&quot;</span><span class="content">number of times to execute</span><span class="delimiter">&quot;</span></span>).build());
spec.addPositional(PositionalParamSpec.builder().paramLabel(<span class="string"><span class="delimiter">&quot;</span><span class="content">FILES</span><span class="delimiter">&quot;</span></span>)
spec.addPositional(PositionalParamSpec.builder()
.paramLabel(<span class="string"><span class="delimiter">&quot;</span><span class="content">FILES</span><span class="delimiter">&quot;</span></span>)
.type(<span class="predefined-type">List</span>.class).auxiliaryTypes(<span class="predefined-type">File</span>.class) <span class="comment">// List&lt;File&gt;</span>
.description(<span class="string"><span class="delimiter">&quot;</span><span class="content">The files to process</span><span class="delimiter">&quot;</span></span>).build());
CommandLine commandLine = <span class="keyword">new</span> CommandLine(spec);
Expand All @@ -615,6 +617,11 @@ <h2 id="_example">1. Example</h2>
}

<span class="directive">static</span> <span class="type">int</span> run(ParseResult pr) {
<span class="comment">// handle requests for help or version information</span>
<span class="predefined-type">Integer</span> helpExitCode = CommandLine.executeHelpRequest(pr);
<span class="keyword">if</span> (helpExitCode != <span class="predefined-constant">null</span>) { <span class="keyword">return</span> helpExitCode; }

<span class="comment">// implement the business logic</span>
<span class="type">int</span> count = pr.matchedOptionValue(<span class="string"><span class="delimiter">'</span><span class="content">c</span><span class="delimiter">'</span></span>, <span class="integer">1</span>);
<span class="predefined-type">List</span>&lt;<span class="predefined-type">File</span>&gt; files = pr.matchedPositionalValue(<span class="integer">0</span>, <span class="predefined-type">Collections</span>.&lt;<span class="predefined-type">File</span>&gt;emptyList());
<span class="keyword">for</span> (<span class="predefined-type">File</span> f : files) {
Expand Down Expand Up @@ -985,35 +992,42 @@ <h3 id="_execute_convenience_method">4.2. <code>Execute</code> Convenience Metho
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">ProgrammaticCommand</span> {
<pre class="CodeRay highlight"><code data-lang="java"><span class="directive">public</span> <span class="type">class</span> <span class="class">MyApp</span> {

<span class="directive">public</span> <span class="directive">static</span> <span class="type">void</span> main(<span class="predefined-type">String</span><span class="type">[]</span> args) {
CommandSpec spec = CommandSpec.create();
spec.mixinStandardHelpOptions(<span class="predefined-constant">true</span>); <span class="comment">// usageHelp and versionHelp options</span>
spec.addOption(OptionSpec.builder(<span class="string"><span class="delimiter">&quot;</span><span class="content">-c</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">--count</span><span class="delimiter">&quot;</span></span>).paramLabel(<span class="string"><span class="delimiter">&quot;</span><span class="content">COUNT</span><span class="delimiter">&quot;</span></span>)
spec.addOption(OptionSpec.builder(<span class="string"><span class="delimiter">&quot;</span><span class="content">-c</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">--count</span><span class="delimiter">&quot;</span></span>)
.paramLabel(<span class="string"><span class="delimiter">&quot;</span><span class="content">COUNT</span><span class="delimiter">&quot;</span></span>)
.type(<span class="type">int</span>.class)
.description(<span class="string"><span class="delimiter">&quot;</span><span class="content">number of times to execute</span><span class="delimiter">&quot;</span></span>).build());
spec.addPositional(PositionalParamSpec.builder().paramLabel(<span class="string"><span class="delimiter">&quot;</span><span class="content">FILES</span><span class="delimiter">&quot;</span></span>)
spec.addPositional(PositionalParamSpec.builder()
.paramLabel(<span class="string"><span class="delimiter">&quot;</span><span class="content">FILES</span><span class="delimiter">&quot;</span></span>)
.type(<span class="predefined-type">List</span>.class).auxiliaryTypes(<span class="predefined-type">File</span>.class) <span class="comment">// List&lt;File&gt;</span>
.description(<span class="string"><span class="delimiter">&quot;</span><span class="content">The files to process</span><span class="delimiter">&quot;</span></span>).build());
CommandLine commandLine = <span class="keyword">new</span> CommandLine(spec);

<span class="comment">// optionally configure streams and handlers to be used</span>
commandLine.setCaseInsensitiveEnumValuesAllowed(<span class="predefined-constant">true</span>) <span class="comment">// configure a non-default parser option</span>
commandLine.setCaseInsensitiveEnumValuesAllowed(<span class="predefined-constant">true</span>) <span class="comment">//configure a parser option</span>
.setOut(myOutWriter()) <span class="comment">// configure an alternative to System.out</span>
.setErr(myErrWriter()) <span class="comment">// configure an alternative to System.err</span>
.setColorScheme(myColorScheme()) <span class="comment">// configure a custom color scheme</span>
.setExitCodeExceptionMapper(myMapper()) <span class="comment">// map exception to exit code</span>
.setParameterExceptionHandler(Tmp::invalidUserInput) <span class="comment">// configure a custom handler</span>
.setExecutionExceptionHandler(Tmp::runtimeException) <span class="comment">// configure a custom handler</span>
.setParameterExceptionHandler(MyApp::invalidUserInput) <span class="comment">// configure a custom handler</span>
.setExecutionExceptionHandler(MyApp::runtimeException) <span class="comment">// configure a custom handler</span>
;
<span class="comment">// set an execution strategy so we can call CommandLine.execute(args)</span>
commandLine.setExecutionStrategy(ProgrammaticCommand::run);
commandLine.setExecutionStrategy(MyApp::run);
<span class="type">int</span> exitCode = commandLine.execute(args);
<span class="predefined-type">System</span>.exit(exitCode);
}

<span class="directive">static</span> <span class="type">int</span> run(ParseResult pr) {
<span class="comment">// handle requests for help or version information</span>
<span class="predefined-type">Integer</span> helpExitCode = CommandLine.executeHelpRequest(pr);
<span class="keyword">if</span> (helpExitCode != <span class="predefined-constant">null</span>) { <span class="keyword">return</span> helpExitCode; }

<span class="comment">// implement the business logic</span>
<span class="type">int</span> count = pr.matchedOptionValue(<span class="string"><span class="delimiter">'</span><span class="content">c</span><span class="delimiter">'</span></span>, <span class="integer">1</span>);
<span class="predefined-type">List</span>&lt;<span class="predefined-type">File</span>&gt; files = pr.matchedPositionalValue(<span class="integer">0</span>, <span class="predefined-type">Collections</span>.&lt;<span class="predefined-type">File</span>&gt;emptyList());
<span class="keyword">for</span> (<span class="predefined-type">File</span> f : files) {
Expand Down Expand Up @@ -1051,7 +1065,7 @@ <h3 id="_execute_convenience_method">4.2. <code>Execute</code> Convenience Metho
<div id="footer">
<div id="footer-text">
Version 4.1.2-SNAPSHOT<br>
Last updated 2019-12-01 11:08:52 +0900
Last updated 2019-12-01 21:18:39 +0900
</div>
</div>
</body>
Expand Down

0 comments on commit 25b711d

Please sign in to comment.