JsonObjectFormatVisitor.java

package tools.jackson.databind.jsonFormatVisitors;

import tools.jackson.databind.BeanProperty;
import tools.jackson.databind.JavaType;
import tools.jackson.databind.SerializationContext;

/**
 * Visitor called when properties of a type that maps to JSON Object
 * are being visited: this usually means POJOs, but sometimes other
 * types use it too (like {@link java.util.EnumMap}).
 */
public interface JsonObjectFormatVisitor extends JsonFormatVisitorWithSerializationContext
{
    /**
     * Callback method called when a POJO property is being traversed.
     */
    public void property(BeanProperty writer);

    /**
     * Callback method called when a non-POJO property (typically something
     * like an Enum entry of {@link java.util.EnumMap} type) is being
     * traversed. With POJOs, {@link #property(BeanProperty)} is called instead.
     */
    public void property(String name, JsonFormatVisitable handler, JavaType propertyTypeHint);

    public void optionalProperty(BeanProperty writer);
    public void optionalProperty(String name, JsonFormatVisitable handler,
            JavaType propertyTypeHint);

    /**
     * Default "empty" implementation, useful as the base to start on;
     * especially as it is guaranteed to implement all the method
     * of the interface, even if new methods are getting added.
     */
    public static class Base
        implements JsonObjectFormatVisitor
    {
        protected SerializationContext _provider;

        public Base() { }
        public Base(SerializationContext p) { _provider = p; }

        @Override
        public SerializationContext getContext() { return _provider; }

        @Override
        public void setContext(SerializationContext p) { _provider = p; }

        @Override
        public void property(BeanProperty prop) { }

        @Override
        public void property(String name, JsonFormatVisitable handler,
                JavaType propertyTypeHint) { }

        @Override
        public void optionalProperty(BeanProperty prop) { }

        @Override
        public void optionalProperty(String name, JsonFormatVisitable handler,
                JavaType propertyTypeHint) { }
    }
}