package sh.calaba.org.codehaus.jackson.map.util; import java.util.*; import sh.calaba.org.codehaus.jackson.io.SerializedString; import sh.calaba.org.codehaus.jackson.map.*; /** * Helper class used for storing String serializations of * enumerations. */ public final class EnumValues { /** * Since 1.7, we are storing values as SerializedStrings, to further * speed up serialization. */ private final EnumMap _values; @SuppressWarnings({ "unchecked", "rawtypes" }) private EnumValues(Map,SerializedString> v) { _values = new EnumMap(v); } public static EnumValues construct(Class> enumClass, AnnotationIntrospector intr) { return constructFromName(enumClass, intr); } public static EnumValues constructFromName(Class> enumClass, AnnotationIntrospector intr) { /* [JACKSON-214]: Enum types with per-instance sub-classes * need special handling */ Class> cls = ClassUtil.findEnumType(enumClass); Enum[] values = cls.getEnumConstants(); if (values != null) { // Type juggling... unfortunate Map,SerializedString> map = new HashMap,SerializedString>(); for (Enum en : values) { String value = intr.findEnumValue(en); map.put(en, new SerializedString(value)); } return new EnumValues(map); } throw new IllegalArgumentException("Can not determine enum constants for Class "+enumClass.getName()); } public static EnumValues constructFromToString(Class> enumClass, AnnotationIntrospector intr) { Class> cls = ClassUtil.findEnumType(enumClass); Enum[] values = cls.getEnumConstants(); if (values != null) { // Type juggling... unfortunate Map,SerializedString> map = new HashMap,SerializedString>(); for (Enum en : values) { map.put(en, new SerializedString(en.toString())); } return new EnumValues(map); } throw new IllegalArgumentException("Can not determine enum constants for Class "+enumClass.getName()); } /** * @deprecated since 1.7, use {@link #serializedValueFor} instead */ @Deprecated public String valueFor(Enum key) { SerializedString sstr = _values.get(key); return (sstr == null) ? null : sstr.getValue(); } public SerializedString serializedValueFor(Enum key) { return _values.get(key); } public Collection values() { return _values.values(); } }