4. Simple sample application using the Spring Shell
Prev | Part IV. Spring Shell Sample application |

## 4. Simple sample application using the Spring Shell

## 4.1 Introduction

The sample application named 'helloworld' contains three '`hw`' commands, they are '`hw simple`', '`hw complex`' and '`hw enum`' and demonstrate simple to intermediate level usage of the `@Cli` annotation classes for creating commands.

The example code is located in the distribution directory `<spring-shell-install-dir>/samples/helloworld`.

To build the example cd to the helloworld directory and execute `gradlew installApp` (you first need to add the `gradlew` gradle wrapper to your path). To run the application cd to `build\install\helloworld\bin` and execute the helloworld script.

## 4.2 HelloWorldCommands

The `HelloWorldCommands` class is show below

    package org.springframework.shell.samples.helloworld.commands;

    import org.springframework.shell.core.CommandMarker;
    import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
    import org.springframework.shell.core.annotation.CliCommand;
    import org.springframework.shell.core.annotation.CliOption;
    import org.springframework.stereotype.Component;

    @Component
    public class HelloWorldCommands implements CommandMarker {

    	private boolean simpleCommandExecuted = false;

    	@CliAvailabilityIndicator({"hw simple"})
    	public boolean isSimpleAvailable() {
    		//always available
    		return true;
    	}

    	@CliAvailabilityIndicator({"hw complex", "hw enum"})
    	public boolean isComplexAvailable() {
    		if (simpleCommandExecuted) {
    			return true;
    		} else {
    			return false;
    		}
    	}

    	@CliCommand(value = "hw simple", help = "Print a simple hello world message")
    	public String simple(
    		@CliOption(key = { "message" }, mandatory = true, help = "The hello world message") final String message,
    		@CliOption(key = { "location" }, mandatory = false, help = "Where you are saying hello", specifiedDefaultValue="At work") final String location) {
    		simpleCommandExecuted = true;
    		return "Message = [" + message + "] Location = [" + location + "]";
    	}

    	@CliCommand(value = "hw complex", help = "Print a complex hello world message")
    	public String hello(
    		@CliOption(key = { "message" }, mandatory = true, help = "The hello world message") final String message,
    		@CliOption(key = { "name1"}, mandatory = true, help = "Say hello to the first name") final String name1,
    		@CliOption(key = { "name2" }, mandatory = true, help = "Say hello to a second name") final String name2,
    		@CliOption(key = { "time" }, mandatory = false, specifiedDefaultValue="now", help = "When you are saying hello") final String time,
    		@CliOption(key = { "location" }, mandatory = false, help = "Where you are saying hello") final String location) {
    		return "Hello " + name1 + " and " + name2 + ". Your special message is "  + message + ". time=[" + time + "] location=[" + location + "]";
    	}

    	@CliCommand(value = "hw enum", help = "Print a simple hello world message from an enumerated value")
    	public String eenum(
    		@CliOption(key = { "message" }, mandatory = true, help = "The hello world message") final MessageType message){
    		return "Hello.  Your special enumerated message is " + message;
    	}

    	enum MessageType {
    		Type1("type1"),
    		Type2("type2"),
    		Type3("type3");

    		private String type;

    		private MessageType(String type){
    			this.type = type;
    		}

    		public String getType(){
    			return type;
    		}
    	}
    }

The use of the `@CliAvailabilityIndicator` annotation on two methods, `isSimpleAvailable` and `isComplexAvailable` shows how you can enable the presence of the '`hw complex`' and '`hw enum`' commands only if the '`hw simple`' command was executed.

Here is an example session showing the behavior.

The '`hw enum`' command shows how the shell supports the use of an enumeration as command method arguments.

Prev | Up |
Part IV. Spring Shell Sample application | Home |