com.taobao.middleware.cli.CLI Maven / Gradle / Ivy
/*
* Copyright (c) 2011-2015 The original author or authors
* ------------------------------------------------------
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package com.taobao.middleware.cli;
import java.util.List;
/**
* Interface defining a command-line interface (in other words a command such as 'run', 'ls'...).
* This interface is polyglot to ease reuse such as in Vert.x Shell.
*
* A command line interface has a name, and defines a set of options and arguments. Options are key-value pair such
* as {@code -foo=bar} or {@code -flag}. The supported formats depend on the used parser. Arguments are unlike
* options raw values. Options are defined using
* {@link Option}, while argument are defined using {@link Argument}.
*
* Command line interfaces also define a summary and a description. These attributes are used in the usage generation
* . To disable the help generation, set the {@code hidden} attribute to {@code true}.
*
* Command Line Interface object does not contains "value", it's a model. It must be evaluated by a
* parser that returns a {@link CommandLine} object containing the argument and option values.
*
* @author Clement Escoffier
* @see Argument
* @see Option
*/
public interface CLI {
/**
* Parses the user command line interface and create a new {@link CommandLine} containing extracting values.
*
* @param arguments the arguments
* @return the creates command line
*/
CommandLine parse(List arguments);
/**
* Parses the user command line interface and create a new {@link CommandLine} containing extracting values.
*
* @param arguments the arguments
* @param validate enable / disable parsing validation
* @return the creates command line
*/
CommandLine parse(List arguments, boolean validate);
/**
* @return the CLI name.
*/
String getName();
/**
* Sets the name of the CLI.
*
* @param name the name
* @return the current {@link CLI} instance
*/
CLI setName(String name);
/**
* @return the CLI description.
*/
String getDescription();
CLI setDescription(String desc);
/**
* @return the CLI summary.
*/
String getSummary();
/**
* Sets the summary of the CLI.
*
* @param summary the summary
* @return the current {@link CLI} instance
*/
CLI setSummary(String summary);
/**
* Checks whether or not the current {@link CLI} instance is hidden.
*
* @return {@code true} if the current {@link CLI} is hidden, {@link false} otherwise
*/
boolean isHidden();
/**
* Sets whether or not the current instance of {@link CLI} must be hidden. Hidden CLI are not listed when
* displaying usages / help messages. In other words, hidden commands are for power user.
*
* @param hidden enables or disables the hidden aspect of the CI
* @return the current {@link CLI} instance
*/
CLI setHidden(boolean hidden);
/**
* Gets the list of options.
*
* @return the list of options, empty if none.
*/
List