summaryrefslogtreecommitdiff
path: root/src/main/java/com/beust/jcommander/converters/EnumConverter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/beust/jcommander/converters/EnumConverter.java')
-rw-r--r--src/main/java/com/beust/jcommander/converters/EnumConverter.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/main/java/com/beust/jcommander/converters/EnumConverter.java b/src/main/java/com/beust/jcommander/converters/EnumConverter.java
new file mode 100644
index 0000000..3e850bb
--- /dev/null
+++ b/src/main/java/com/beust/jcommander/converters/EnumConverter.java
@@ -0,0 +1,42 @@
+package com.beust.jcommander.converters;
+
+import com.beust.jcommander.IStringConverter;
+import com.beust.jcommander.ParameterException;
+
+import java.util.EnumSet;
+
+/**
+ * A converter to parse enums
+ * @param <T> the enum type
+ * @author simon04
+ */
+public class EnumConverter<T extends Enum<T>> implements IStringConverter<T> {
+
+ private final String optionName;
+ private final Class<T> clazz;
+
+ /**
+ * Constructs a new converter.
+ * @param optionName the option name for error reporting
+ * @param clazz the enum class
+ */
+ public EnumConverter(String optionName, Class<T> clazz) {
+ this.optionName = optionName;
+ this.clazz = clazz;
+ }
+
+ @Override
+ public T convert(String value) {
+ try {
+ try {
+ return Enum.valueOf(clazz, value);
+ } catch (IllegalArgumentException e) {
+ return Enum.valueOf(clazz, value.toUpperCase());
+ }
+ } catch (Exception e) {
+ throw new ParameterException("Invalid value for " + optionName + " parameter. Allowed values:" +
+ EnumSet.allOf(clazz));
+
+ }
+ }
+}