AnnotationUtil.java

package tools.jackson.dataformat.xml.util;

import tools.jackson.databind.AnnotationIntrospector;
import tools.jackson.databind.PropertyName;
import tools.jackson.databind.cfg.MapperConfig;
import tools.jackson.databind.introspect.AnnotatedMember;

/**
 * Helper class for accessing XML-specific annotation information via
 * {@link AnnotationIntrospector.XmlExtensions} introspectors.
 *<p>
 * NOTE: all methods accept {@code null} member and return {@code null} in that
 * case: property definitions without any accessors do occur (see
 * [dataformat-xml#884]) and cannot have annotations to find, anyway.
 */
public class AnnotationUtil
{
    public static String findNamespaceAnnotation(MapperConfig<?> config,
            AnnotationIntrospector ai,
            AnnotatedMember prop)
    {
        if (prop != null) {
            for (AnnotationIntrospector intr : ai.allIntrospectors()) {
                if (intr instanceof AnnotationIntrospector.XmlExtensions) {
                    String ns = ((AnnotationIntrospector.XmlExtensions) intr).findNamespace(config, prop);
                    if (ns != null) {
                        return ns;
                    }
                }
            }
        }
        return null;
    }

    public static Boolean findIsAttributeAnnotation(MapperConfig<?> config,
            AnnotationIntrospector ai,
            AnnotatedMember prop)
    {
        if (prop != null) {
            for (AnnotationIntrospector intr : ai.allIntrospectors()) {
                if (intr instanceof AnnotationIntrospector.XmlExtensions) {
                    Boolean b = ((AnnotationIntrospector.XmlExtensions) intr).isOutputAsAttribute(config, prop);
                    if (b != null) {
                        return b;
                    }
                }
            }
        }
        return null;
    }

    public static Boolean findIsTextAnnotation(MapperConfig<?> config,
            AnnotationIntrospector ai,
            AnnotatedMember prop)
    {
        if (prop != null) {
            for (AnnotationIntrospector intr : ai.allIntrospectors()) {
                if (intr instanceof AnnotationIntrospector.XmlExtensions) {
                    Boolean b = ((AnnotationIntrospector.XmlExtensions) intr).isOutputAsText(config, prop);
                    if (b != null) {
                        return b;
                    }
                }
            }
        }
        return null;
    }

    public static Boolean findIsCDataAnnotation(MapperConfig<?> config,
            AnnotationIntrospector ai,
            AnnotatedMember prop)
    {
        if (prop != null) {
            for (AnnotationIntrospector intr : ai.allIntrospectors()) {
                if (intr instanceof AnnotationIntrospector.XmlExtensions) {
                    Boolean b = ((AnnotationIntrospector.XmlExtensions) intr).isOutputAsCData(config, prop);
                    if (b != null) {
                        return b;
                    }
                }
            }
        }
        return null;
    }

    // For [dataformat-xml#27]
    /**
     * @since 3.2
     */
    public static PropertyName findXmlPropertyInnerName(MapperConfig<?> config,
            AnnotationIntrospector ai,
            AnnotatedMember prop)
    {
        if (prop != null) {
            for (AnnotationIntrospector intr : ai.allIntrospectors()) {
                if (intr instanceof AnnotationIntrospector.XmlExtensions) {
                    PropertyName name = ((AnnotationIntrospector.XmlExtensions) intr).findXmlPropertyInnerName(config, prop);
                    if (name != null) {
                        return name;
                    }
                }
            }
        }
        return null;
    }
}