| package org.kohsuke.args4j.spi; |
| |
| import org.kohsuke.args4j.CmdLineException; |
| import org.kohsuke.args4j.CmdLineParser; |
| import org.kohsuke.args4j.OptionDef; |
| |
| /** |
| * {@link Enum} {@link OptionHandler}. |
| * |
| * @author Kohsuke Kawaguchi |
| */ |
| public class EnumOptionHandler<T extends Enum<T>> extends OptionHandler<T> { |
| |
| private final Class<T> enumType; |
| |
| public EnumOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super T> setter, Class<T> enumType) { |
| super(parser, option, setter); |
| this.enumType = enumType; |
| } |
| |
| @Override |
| public int parseArguments(Parameters params) throws CmdLineException { |
| String s = params.getParameter(0).replaceAll("-", "_"); |
| T value = null; |
| for( T o : enumType.getEnumConstants() ) |
| if(o.name().equalsIgnoreCase(s)) { |
| value = o; |
| break; |
| } |
| |
| if(value==null) { |
| if (option.isArgument()) { |
| throw new CmdLineException(owner, Messages.ILLEGAL_OPERAND.format(option.toString(),s)); |
| } else { |
| throw new CmdLineException(owner, Messages.ILLEGAL_OPERAND.format(params.getParameter(-1),s)); |
| } |
| } |
| setter.addValue(value); |
| return 1; |
| } |
| |
| /* |
| * Returns all values of an enum type split by pipe. |
| * <tt>[ one | two | three]</tt> |
| * @see org.kohsuke.args4j.spi.OptionHandler#getDefaultMetaVariable() |
| */ |
| @Override |
| public String getDefaultMetaVariable() { |
| StringBuffer rv = new StringBuffer(); |
| rv.append("["); |
| for (T t : enumType.getEnumConstants()) { |
| rv.append(t).append(" | "); |
| } |
| rv.delete(rv.length()-3, rv.length()); |
| rv.append("]"); |
| return rv.toString(); |
| } |
| } |