@CliCommand(value = MODULE_INFO, help = "Get information about a module")
	public String moduleInfo(
			@CliOption(mandatory = true, key = {"name", ""}, help = "name of the module to query, in the form 'type:name'") QualifiedModuleName module,
			@CliOption(key = "hidden", help = "whether to show 'hidden' options", specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") boolean showHidden
	) {
		DetailedModuleDefinitionResource info = moduleOperations().info(module.name, module.type);
		List<Option> options = info.getOptions();
		StringBuilder result = new StringBuilder();
		result.append("Information about ").append(module.type.name()).append(" module '").append(module.name).append(
				"':\n\n");

		if (info.getShortDescription() != null) {
			result.append(info.getShortDescription()).append("\n\n");
		}
		if (options == null) {
			result.append("Module options metadata is not available");
		}
		else {
			Table table = new Table().addHeader(1, new TableHeader("Option Name")).addHeader(2,
					new TableHeader("Description")).addHeader(
					3, new TableHeader("Default")).addHeader(4, new TableHeader("Type"));
			for (DetailedModuleDefinitionResource.Option o : options) {
				if (!showHidden && o.isHidden()) {
					continue;
				}
				final TableRow row = new TableRow();
				row.addValue(1, o.getName())
						.addValue(2, o.getDescription())
						.addValue(3, prettyPrintDefaultValue(o))
						.addValue(4, o.getType() == null ? "<unknown>" : o.getType());
				table.getRows().add(row);
			}
			result.append(table.toString());
		}
		return result.toString();
	}
Commands for working with modules. Allows retrieval of information about available modules, as well as creating new
composed modules.

@author Glenn Renfro
@author Eric Bottard
@author Florent Biville
@author David Turanski
spring-xd-shell/src/main/java/org/springframework/xd/shell/command/ModuleCommands.java