When your shell application has lots of commands, we should organize them properly, so users can consume them easily.
What is the default behavior of help command?
By default ‘help’ command would see a daunting list of commands, organized by alphabetical order and commands group together according to the class they are implemented in, turning the camel case class name into separate words. For example, for the class name 'ArithmeticCommandCustomizeCommandName' group name will be 'Arithmetic Command Customize Command Name').
shell:>help AVAILABLE COMMANDS Arithmetic Command Customize Command Name sum: Add two integers together. Arithmetic Commands add: Add two integers together. div: Devide two integers together. mul: Multiply two integers together. sub: Subtract two integers together. Boolean Type Demo shutdown: Shutdown the system Built-In Commands clear: Clear the shell screen. exit, quit: Exit the shell. help: Display help about available commands. history: Display or save the history of previously run commands script: Read and execute commands from a file. stacktrace: Display the full stacktrace of the last error. Customize Multiple Named Keys For Single Parameter print-person: Commands to print Person Details Customize Named Param Keys print-employee: Commands to print Employee Details Customize Named Param Keys Prefix print-student: Commands to print Student Details Default Values greet-user: Commands to greet user Dynamic Command Validation Demo1 connect: Connect to Database * print-table-records: Print all records of table Dynamic Command Validation Demo2 connect-to-oracle: Connect to Oracle Database * print-table-records-from-oracle: Print all records of table from Oracle DB Dynamic Command Validation Demo3 connect-to-db2: Connect to Db2 Database * download-table-records-from-db2: Download all records of table from DB2 * print-table-records-from-db2: Print all records of table from DB2 Multi Valued Parameters Demo square: Commands to Calculate Square of given numbers Multiple Aliases say-hello, welcome, wish: Commands to welcome user Named Params get-user: Commands to print User Details Commands marked with (*) are currently unavailable. Type `help <command>` to learn more.
How can we customize this grouping behaviour?
‘Spring Shell’ provide following ways to group the related commands together.
a. specifying a group() in the @ShellMethod annotation
b. placing a @ShellCommandGroup on the class the command is defined in. This will apply the group for all commands defined in that class (unless overridden as above)
c. placing a @ShellCommandGroup on the package (via package-info.java) the command is defined in. This will apply to all commands defined in the package (unless overridden at the method or class level as explained above)
Example 1:
public class ArithmeticCommands {
@ShellMethod(value = "This command ends up in the 'Arithmetic Commands' group")
public void foo() {}
@ShellMethod(value = "This command ends up in the 'Other Commands' group",
group = "Other Commands")
public void bar() {}
}
Example 2:
@ShellCommandGroup("Other Commands")
public class SomeCommands {
@ShellMethod(value = "This one is in 'Other Commands'")
public void wizz() {}
@ShellMethod(value = "And this one is 'Yet Another Group'",
group = "Yet Another Group")
public void last() {}
}
After I group the commands according to their behaviour, help command output looks like below.
shell:>help AVAILABLE COMMANDS Arithmetic Commands add: Add two integers together. div: Devide two integers together. mul: Multiply two integers together. sub: Subtract two integers together. sum: Add two integers together. Built-In Commands clear: Clear the shell screen. exit, quit: Exit the shell. help: Display help about available commands. history: Display or save the history of previously run commands script: Read and execute commands from a file. stacktrace: Display the full stacktrace of the last error. Dynamic Command Validation connect: Connect to Database connect-to-db2: Connect to Db2 Database connect-to-oracle: Connect to Oracle Database * download-table-records-from-db2: Download all records of table from DB2 * print-table-records: Print all records of table * print-table-records-from-db2: Print all records of table from DB2 * print-table-records-from-oracle: Print all records of table from Oracle DB Miscellaneous greet-user: Commands to greet user say-hello, welcome, wish: Commands to welcome user shutdown: Shutdown the system square: Commands to Calculate Square of given numbers Named Parameters get-user: Commands to print User Details print-employee: Commands to print Employee Details print-person: Commands to print Person Details print-student: Commands to print Student Details Commands marked with (*) are currently unavailable. Type `help <command>` to learn more.
You can download complete application from this link.
https://github.com/harikrishna553/springboot/tree/master/shell/hello-world
No comments:
Post a Comment