1 package org.kohsuke.args4j.spi;
2
3 import org.kohsuke.args4j.CmdLineParser;
4 import org.kohsuke.args4j.Option;
5 import org.kohsuke.args4j.CmdLineException;
6
7 /***
8 * {@link Enum} {@link OptionHandler}.
9 *
10 * @author Kohsuke Kawaguchi
11 */
12 public class EnumOptionHandler extends OptionHandler {
13
14 private final Class<? extends Enum<?>> enumType;
15
16 public EnumOptionHandler(CmdLineParser parser, Option option, Setter setter, Class<? extends Enum<?>> enumType) {
17 super(parser, option, setter);
18 this.enumType = enumType;
19 }
20
21 public int parseArguments(Parameters params) throws CmdLineException {
22 String s = params.getParameter(0);
23 Enum value = null;
24 for( Enum o : enumType.getEnumConstants() )
25 if(o.name().equalsIgnoreCase(s)) {
26 value = o;
27 break;
28 }
29
30 if(value==null)
31 throw new CmdLineException(Messages.ILLEGAL_OPERAND.format(params.getOptionName(),s));
32 setter.addValue(value);
33 return 1;
34 }
35
36 public String getDefaultMetaVariable() {
37 String n = enumType.getName();
38 int idx = n.lastIndexOf('.');
39 if(idx>=0) n = n.substring(idx+1);
40 return n.toUpperCase();
41 }
42 }