Package com.facebook.presto.jdbc.internal.jackson.databind.ser.std

Source Code of com.facebook.presto.jdbc.internal.jackson.databind.ser.std.MapProperty

package com.facebook.presto.jdbc.internal.jackson.databind.ser.std;

import java.io.IOException;

import com.facebook.presto.jdbc.internal.jackson.core.JsonGenerator;
import com.facebook.presto.jdbc.internal.jackson.databind.JsonMappingException;
import com.facebook.presto.jdbc.internal.jackson.databind.JsonSerializer;
import com.facebook.presto.jdbc.internal.jackson.databind.PropertyName;
import com.facebook.presto.jdbc.internal.jackson.databind.SerializerProvider;
import com.facebook.presto.jdbc.internal.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor;
import com.facebook.presto.jdbc.internal.jackson.databind.jsontype.TypeSerializer;
import com.facebook.presto.jdbc.internal.jackson.databind.node.ObjectNode;
import com.facebook.presto.jdbc.internal.jackson.databind.ser.PropertyWriter;

/**
* Helper class needed to support flexible filtering of Map properties
* with generic JSON Filter functionality. Since {@link java.util.Map}s
* are not handled as a collection of properties by Jackson (unlike POJOs),
* bit more wrapping is required.
*/
public class MapProperty extends PropertyWriter
{
    protected TypeSerializer _typeSerializer;
   
    protected Object _key, _value;

    protected JsonSerializer<Object> _keySerializer, _valueSerializer;

    public MapProperty(TypeSerializer typeSer)
    {
        _typeSerializer = typeSer;
    }
   
    /**
     * Initialization method that needs to be called before passing
     * property to filter.
     */
    public void reset(Object key, Object value,
            JsonSerializer<Object> keySer, JsonSerializer<Object> valueSer)
    {
        _key = key;
        _value = value;
        _keySerializer = keySer;
        _valueSerializer = valueSer;
    }
   
    @Override
    public String getName() {
        if (_key instanceof String) {
            return (String) _key;
        }
        return String.valueOf(_key);
    }

    @Override
    public PropertyName getFullName() {
        return new PropertyName(getName());
    }

    @Override
    public void serializeAsField(Object pojo, JsonGenerator jgen,
            SerializerProvider provider) throws IOException
    {
        _keySerializer.serialize(_key, jgen, provider);
        if (_typeSerializer == null) {
            _valueSerializer.serialize(_value, jgen, provider);
        } else {
            _valueSerializer.serializeWithType(_value, jgen, provider, _typeSerializer);
        }
    }

    @Override
    public void serializeAsOmittedField(Object pojo, JsonGenerator jgen,
            SerializerProvider provider) throws Exception
    {
        if (!jgen.canOmitFields()) {
            jgen.writeOmittedField(getName());
        }
    }

    @Override
    public void serializeAsElement(Object pojo, JsonGenerator jgen,
            SerializerProvider provider) throws Exception
    {
        if (_typeSerializer == null) {
            _valueSerializer.serialize(_value, jgen, provider);
        } else {
            _valueSerializer.serializeWithType(_value, jgen, provider, _typeSerializer);
        }
    }
   
    @Override
    public void serializeAsPlaceholder(Object pojo, JsonGenerator jgen,
            SerializerProvider provider) throws Exception
    {
        jgen.writeNull();
    }

    @Override
    public void depositSchemaProperty(JsonObjectFormatVisitor objectVisitor)
        throws JsonMappingException
    {
        // !!! TODO
    }

    @Override
    @Deprecated
    public void depositSchemaProperty(ObjectNode propertiesNode,
            SerializerProvider provider) throws JsonMappingException {
        // !!! TODO
    }
}
TOP

Related Classes of com.facebook.presto.jdbc.internal.jackson.databind.ser.std.MapProperty

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.