package org.codehaus.jackson.map.util; import java.util.*; import org.codehaus.jackson.map.*; public final class EnumValues { private final EnumMap<?,String> _values; @SuppressWarnings("unchecked") private EnumValues(Map<Enum<?>,String> v) { _values = new EnumMap(v); } public static EnumValues construct(Class<Enum<?>> enumClass, AnnotationIntrospector intr) { /* [JACKSON-214]: Enum types with per-instance sub-classes * need special handling */ Class<? extends Enum<?>> cls = ClassUtil.findEnumType(enumClass); Enum<?>[] values = cls.getEnumConstants(); if (values != null) { // Type juggling... unfortunate Map<Enum<?>,String> map = new HashMap<Enum<?>,String>(); for (Enum<?> en : values) { map.put(en, intr.findEnumValue(en)); } return new EnumValues(map); } throw new IllegalArgumentException("Can not determine enum constants for Class "+enumClass.getName()); } public String valueFor(Enum<?> key) { return _values.get(key); } public Collection<String> values() { return _values.values(); } }