All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codehaus.jackson.map.util.EnumValues Maven / Gradle / Ivy

Go to download

Data Mapper package is a high-performance data binding package built on Jackson JSON processor

The newest version!
package org.codehaus.jackson.map.util;

import java.util.*;

import org.codehaus.jackson.io.SerializedString;
import 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();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy