Package com.microsoft.azure.maven.prompt
Class DefaultPrompter
- java.lang.Object
-
- com.microsoft.azure.maven.prompt.DefaultPrompter
-
- All Implemented Interfaces:
IPrompter,Closeable,AutoCloseable
public class DefaultPrompter extends Object implements IPrompter
-
-
Field Summary
Fields Modifier and Type Field Description private static StringEMPTY_REPLACEMENTprivate BufferedReaderreaderprivate static PatternREGEX_COMMA_SEPARATED_INTEGER_RANGESprivate static PatternREGEX_NEXT_INTEGER_RANGE
-
Constructor Summary
Constructors Constructor Description DefaultPrompter()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()private static booleanisValidIntRangeInput(String text)private <T> TloopInput(T defaultValue, boolean hasDefaultValue, boolean isRequired, String emptyPromoteMessage, String promoteMessage, java.util.function.Function<String,InputValidateResult<T>> handleInput)private static Collection<Integer>parseIntRanges(String text, int maxValue)private static <T> voidprintOptionList(String message, List<T> entities, T defaultEntity, java.util.function.Function<T,String> getNameFunc)<T> List<T>promoteMultipleEntities(String header, String promotePrefix, String selectNoneMessage, List<T> entities, java.util.function.Function<T,String> getNameFunc, boolean allowEmpty, String enterPromote, List<T> defaultValue)Promote user to choose some entities from a known list.<T> TpromoteSingleEntity(String header, String message, List<T> entities, T defaultEntity, java.util.function.Function<T,String> getNameFunc, boolean isRequired)Promote user to choose a single entity from a known list.StringpromoteString(String message, String defaultValue, java.util.function.Function<String,InputValidateResult<String>> verify, boolean isRequired)Promote user to input a text value through a terminal.BooleanpromoteYesNo(String message, Boolean defaultValue, boolean isRequired)Promote user to choose YES or NO through a terminal.private InputValidateResult<Integer>validateUserInputAsInteger(String input, int maxValue, String message)
-
-
-
Field Detail
-
EMPTY_REPLACEMENT
private static final String EMPTY_REPLACEMENT
- See Also:
- Constant Field Values
-
REGEX_COMMA_SEPARATED_INTEGER_RANGES
private static final Pattern REGEX_COMMA_SEPARATED_INTEGER_RANGES
-
REGEX_NEXT_INTEGER_RANGE
private static final Pattern REGEX_NEXT_INTEGER_RANGE
-
reader
private BufferedReader reader
-
-
Method Detail
-
promoteString
public String promoteString(String message, String defaultValue, java.util.function.Function<String,InputValidateResult<String>> verify, boolean isRequired) throws IOException
Description copied from interface:IPrompterPromote user to input a text value through a terminal.- Specified by:
promoteStringin interfaceIPrompter- Parameters:
message- promote messagedefaultValue- the default value if user presses ENTER key.verify- the function against user's inputisRequired- whether a null/empty value is acceptable- Returns:
- the text value user has input
- Throws:
IOException- when there are any IO errors.
-
promoteYesNo
public Boolean promoteYesNo(String message, Boolean defaultValue, boolean isRequired) throws IOException
Description copied from interface:IPrompterPromote user to choose YES or NO through a terminal. If this property is optional and there is no default option, then this method returns null when user presses ENTER key.- Specified by:
promoteYesNoin interfaceIPrompter- Parameters:
message- promote message to give user a hint about the options.defaultValue- the default option if user presses ENTER key.isRequired- whether user must accept or decline explicitly.- Returns:
- the yes/no option
- Throws:
IOException- when there are any IO errors.
-
promoteMultipleEntities
public <T> List<T> promoteMultipleEntities(String header, String promotePrefix, String selectNoneMessage, List<T> entities, java.util.function.Function<T,String> getNameFunc, boolean allowEmpty, String enterPromote, List<T> defaultValue) throws IOException
Description copied from interface:IPrompterPromote user to choose some entities from a known list. ifallowEmptyis true, then user has the option to select none from the list, otherwise, at least one entry must be selected.- Specified by:
promoteMultipleEntitiesin interfaceIPrompter- Type Parameters:
T- the entity type- Parameters:
header- the message print before the option listpromotePrefix- promote message after the options list, will be appended with the text of range example and default entity.entities- the known list which are to be selected ingetNameFunc- the entity to string convert functionallowEmpty- whether to accept empty list.enterPromote- promote message to give user a hint about the behavior of pressing ENTER key directly, should be aligned with the actual meaning of defaultValuedefaultValue- the default entities when pressing ENTER key directly.- Returns:
- the list user selected
- Throws:
IOException- when there are any IO errors.
-
promoteSingleEntity
public <T> T promoteSingleEntity(String header, String message, List<T> entities, T defaultEntity, java.util.function.Function<T,String> getNameFunc, boolean isRequired) throws IOException
Description copied from interface:IPrompterPromote user to choose a single entity from a known list. ifisRequiredis true, then user must select one entity.- Specified by:
promoteSingleEntityin interfaceIPrompter- Type Parameters:
T- the entity type- Parameters:
header- the message print before the option listmessage- the message print before printing the optionsentities- the known list which are to be selected indefaultEntity- the default entity when pressing ENTER key directly.getNameFunc- the entity to string convert function- Returns:
- the entity user selected
- Throws:
IOException- when there are any IO errors.
-
loopInput
private <T> T loopInput(T defaultValue, boolean hasDefaultValue, boolean isRequired, String emptyPromoteMessage, String promoteMessage, java.util.function.Function<String,InputValidateResult<T>> handleInput) throws IOException- Throws:
IOException
-
validateUserInputAsInteger
private InputValidateResult<Integer> validateUserInputAsInteger(String input, int maxValue, String message)
-
close
public void close()
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable
-
isValidIntRangeInput
private static boolean isValidIntRangeInput(String text)
-
parseIntRanges
private static Collection<Integer> parseIntRanges(String text, int maxValue)
-
-