Skip to content

Commit 4a4d518

Browse files
committed
Update sample.
1 parent 3acb5bd commit 4a4d518

File tree

3 files changed

+84
-33
lines changed

3 files changed

+84
-33
lines changed

README.md

+55-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# java-cli-menu
2-
An clean, interactive command line parser/menu for Java CLI.
2+
An concise, interactive and versatile command line parser/menu for Java CLI.
33

4-
Idealy, a Java CLI based app can be trigger by ```java -cp <class> <params>```. But sometimes, a menu based configuration is useful and convinient. The interaction looks like:
4+
Idealy, a Java CLI based app can be trigger by ```java -cp <class> <params>```. But sometimes, a menu based configuration is more useful and convinient. The interaction looks like:
55

6-
```shell 1) --grammar,-g Grammar [Csv] specify grammar name It should be same with file name of your .g4 2) --startRule,-r [token] start rule name. &quot;token&quot; is a special value. -- R): refresh menu; X): exit Your input [# value]: 1 some wrong values &gt;! Bad
6+
```sh
77
Wrong arguments:
88
-g: [Invalid_value]
99
Only 'Csv' is acceptable!
1010
1) -g,--grammar []: Grammar name
11-
2) -,--startRule [token]: Start rule of this parser
11+
2) -,--startRule [token]: Start rule
1212

1313
--
1414
R): refresh menu; X): exit
@@ -20,7 +20,7 @@ Your input [# value]: 1 Http
2020
Your input [# value]: 1 Csv
2121
Your input [# value]: R
2222
1) -g,--grammar [Csv]: Grammar name
23-
2) -,--startRule [token]: Start rule of this parser
23+
2) -,--startRule [token]: Start rule
2424

2525
--
2626
R): refresh menu; X): exit
@@ -32,13 +32,60 @@ Back to main, let's continue.
3232
3333
Just try to run
3434
35-
- [BeanBuilderSample.java](https://github.com/zhhe-me/java-cli-menu/blob/master/src/test/java/me/zhhe/cli/menu/sample/BeanBuilderSample.java) (extract argument defintion via naming convention or Java Bean)
36-
- [BasicBuilderSample.java](https://github.com/zhhe-me/java-cli-menu/blob/master/src/test/java/me/zhhe/cli/menu/sample/BasicBuilderSample.java) (set up argument definition via code)
35+
- [BeanBuilderWithAnnotationSample.java](https://github.com/zhhe-me/java-cli-menu/blob/master/src/test/java/me/zhhe/cli/menu/sample/BeanBuilderWithAnnotationSample.java) (extract argument defintion via annotation + naming convention or Java Bean) **Recommanded**
36+
- [BeanBuilderSample.java](https://github.com/zhhe-me/java-cli-menu/blob/master/src/test/java/me/zhhe/cli/menu/sample/BeanBuilderSample.java) (extract argument defintion via naming convention or Java Bean) **No configuration**
37+
- [BasicBuilderSample.java](https://github.com/zhhe-me/java-cli-menu/blob/master/src/test/java/me/zhhe/cli/menu/sample/BasicBuilderSample.java) (set up argument definition via code) **Everything in your control**
3738
- [ChainedBuilderSample.java](https://github.com/zhhe-me/java-cli-menu/blob/master/src/test/java/me/zhhe/cli/menu/sample/ChainedBuilderSample.java) (set up argument via chained/multiple builders)
3839
3940
with input above.
4041
41-
This project is on the way and changes will happen any time without notification until it gets GA.
42+
Here is code from BeanBuilderWithAnnotationSample.java:
43+
44+
```java
45+
public class BeanBuilderWithAnnotationSample {
46+
47+
// Annotation can help supply extra info, like arg name, description
48+
@Option(name = "g", description = "Grammar name")
49+
private String grammar;
50+
51+
// use field name when neither name nor longArgName is specified.
52+
@Option(description = "Start rule")
53+
private String startRule;
54+
55+
// matched by naming convention
56+
public void setGrammar(final String value) {
57+
if (!"Csv".equals(value))
58+
throw new IllegalArgumentException("Only 'Csv' is acceptable!");
59+
grammar = value;
60+
}
61+
62+
// ignored due to setStartRule2
63+
public void setStartRule(final String value) {
64+
startRule = value;
65+
}
66+
67+
// Annotation is preferred to reflection/naming convention
68+
@Setter("startRule")
69+
public void setStartRule2(final String value) {
70+
startRule = "2-" + value;
71+
}
72+
73+
public static void main(final String... args) {
74+
final BeanBuilderWithAnnotationSample sample = new BeanBuilderWithAnnotationSample();
75+
// mock arguments
76+
final String[] mockedArgs = {"-g", "Invalid_value", "--startRule", "token"};
77+
78+
new BeanMenuBuilder().bean(sample).build(mockedArgs).render();
79+
80+
// continue your business after all setting is done.
81+
System.out.println("\nBack to main, let's continue.");
82+
}
83+
}
84+
```
85+
86+
87+
88+
_This project is on the way and changes will happen any time without notification until it gets GA._
4289
4390
**Here is flow Java CLI Menu likes to support:**
4491

src/test/java/me/zhhe/cli/menu/sample/BeanBuilderSample.java

+14-12
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,30 @@
2222
*/
2323
public class BeanBuilderSample {
2424

25+
// use field name as long arg name
2526
private String grammar;
2627
private String startRule;
2728

28-
public static void main(final String... args) {
29-
final BeanBuilderSample sample = new BeanBuilderSample();
30-
// mock arguments
31-
final String[] mockedArgs = {"--grammar", "Invalid_value", "--startRule", "token"};
32-
33-
new BeanMenuBuilder().bean(sample).build(mockedArgs).render();
34-
35-
System.out.println("\nBack to main, let's continue.");
36-
}
37-
38-
29+
// matched by naming convention
3930
public void setGrammar(final String value) {
4031
if (!"Csv".equals(value))
4132
throw new IllegalArgumentException("Only 'Csv' is acceptable!");
42-
4333
grammar = value;
4434
}
4535

36+
// matched by naming convention
4637
public void setStartRule(final String value) {
4738
startRule = value;
4839
}
40+
41+
public static void main(final String... args) {
42+
final BeanBuilderSample sample = new BeanBuilderSample();
43+
// mock arguments
44+
final String[] mockedArgs = {"--grammar", "Invalid_value", "--startRule", "token"};
45+
46+
new BeanMenuBuilder().bean(sample).build(mockedArgs).render();
47+
48+
// continue your business after all setting is done.
49+
System.out.println("\nBack to main, let's continue.");
50+
}
4951
}

src/test/java/me/zhhe/cli/menu/sample/BeanBuilderWithAnnotationSample.java

+15-13
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,22 @@
2424
*/
2525
public class BeanBuilderWithAnnotationSample {
2626

27+
// Annotation can help supply extra info, like arg name, description
2728
@Option(name = "g", description = "Grammar name")
2829
private String grammar;
2930

3031
// use field name when neither name nor longArgName is specified.
3132
@Option(description = "Start rule")
3233
private String startRule;
3334

34-
public static void main(final String... args) {
35-
final BeanBuilderWithAnnotationSample sample = new BeanBuilderWithAnnotationSample();
36-
// mock arguments
37-
final String[] mockedArgs = {"-g", "Invalid_value", "--startRule", "token"};
38-
39-
new BeanMenuBuilder().bean(sample).build(mockedArgs).render();
40-
41-
System.out.println("\nBack to main, let's continue.");
42-
}
43-
44-
35+
// matched by naming convention
4536
public void setGrammar(final String value) {
4637
if (!"Csv".equals(value))
4738
throw new IllegalArgumentException("Only 'Csv' is acceptable!");
48-
4939
grammar = value;
5040
}
5141

52-
42+
// ignored due to setStartRule2
5343
public void setStartRule(final String value) {
5444
startRule = value;
5545
}
@@ -59,4 +49,16 @@ public void setStartRule(final String value) {
5949
public void setStartRule2(final String value) {
6050
startRule = "2-" + value;
6151
}
52+
53+
public static void main(final String... args) {
54+
final BeanBuilderWithAnnotationSample sample = new BeanBuilderWithAnnotationSample();
55+
// mock arguments
56+
final String[] mockedArgs = {"-g", "Invalid_value", "--startRule", "token"};
57+
58+
new BeanMenuBuilder().bean(sample).build(mockedArgs).render();
59+
60+
// continue your business after all setting is done.
61+
System.out.println("\nBack to main, let's continue.");
62+
63+
}
6264
}

0 commit comments

Comments
 (0)