package org.springframework.roo.shell;
import java.util.List;
/**
* Converts between Strings (as displayed by and entered via the shell) and Java
* objects
*
* @author Ben Alex
* @param <T> the type being converted to/from
*/
public interface Converter<T> {
/**
* Converts from the given String value to type T
*
* @param value the value to convert
* @param targetType the type being converted to; can't be <code>null</code>
* @param optionContext a non-<code>null</code> string that customises the
* behaviour of this converter for a given {@link CliOption} of a
* given {@link CliCommand}; the contents will have special
* meaning to this converter (e.g. be a comma-separated list of
* keywords known to this converter)
* @return see above
* @throws RuntimeException if the given value could not be converted
*/
T convertFromText(String value, Class<?> targetType, String optionContext);
/**
* Populates the given list with the possible completions
*
* @param completions the list to populate; can't be <code>null</code>
* @param targetType the type of parameter for which a string is being
* entered
* @param existingData what the user has typed so far
* @param optionContext a non-<code>null</code> string that customises the
* behaviour of this converter for a given {@link CliOption} of a
* given {@link CliCommand}; the contents will have special
* meaning to this converter (e.g. be a comma-separated list of
* keywords known to this converter)
* @param target
* @return <code>true</code> if all the added completions are complete
* values, or <code>false</code> if the user can press TAB to add
* further information to some or all of them
*/
boolean getAllPossibleValues(List<Completion> completions, Class<?> targetType,
String existingData, String optionContext, MethodTarget target);
/**
* Indicates whether this converter supports the given type in the given
* option context
*
* @param type the type being checked
* @param optionContext a non-<code>null</code> string that customises the
* behaviour of this converter for a given {@link CliOption} of a
* given {@link CliCommand}; the contents will have special
* meaning to this converter (e.g. be a comma-separated list of
* keywords known to this converter)
* @return see above
*/
boolean supports(Class<?> type, String optionContext);
}