Package com.dottydingo.hyperion.module.swagger.jackson

Source Code of com.dottydingo.hyperion.module.swagger.jackson.SchemaBeanSerializer

package com.dottydingo.hyperion.module.swagger.jackson;

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializer;
import com.fasterxml.jackson.databind.ser.BeanSerializerBuilder;
import com.fasterxml.jackson.databind.ser.PropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.ObjectIdWriter;
import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase;

import java.util.HashSet;
import java.util.Set;

/**
*/
public class SchemaBeanSerializer extends BeanSerializer
{
    private static final ThreadLocal<Set<JavaType>>  visitedThreadLocal = new ThreadLocal<Set<JavaType>>(){
        @Override
        protected Set<JavaType> initialValue()
        {
            return new HashSet<JavaType>();
        }
    };

    protected SchemaBeanSerializer(BeanSerializerBase src)
    {
        super(src);
    }

    public SchemaBeanSerializer(JavaType type, BeanSerializerBuilder builder, BeanPropertyWriter[] properties, BeanPropertyWriter[] filteredProperties)
    {
        super(type, builder, properties, filteredProperties);
    }

    protected SchemaBeanSerializer(BeanSerializerBase src, ObjectIdWriter objectIdWriter)
    {
        super(src, objectIdWriter);
    }

    protected SchemaBeanSerializer(BeanSerializerBase src, ObjectIdWriter objectIdWriter, Object filterId)
    {
        super(src, objectIdWriter, filterId);
    }

    protected SchemaBeanSerializer(BeanSerializerBase src, String[] toIgnore)
    {
        super(src, toIgnore);
    }

    @Override
    public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException
    {
        //deposit your output format
        if (visitor == null) {
            return;
        }


        JsonObjectFormatVisitor objectVisitor = visitor.expectObjectFormat(typeHint);
        if (objectVisitor == null) {
            return;
        }

        Set<JavaType> visited = visitedThreadLocal.get();

        if(!visited.add(typeHint))
            return;

        if (_propertyFilterId != null)
        {
            PropertyFilter filter = findPropertyFilter(visitor.getProvider(),
                    _propertyFilterId, null);
            for (int i = 0; i < _props.length; i++)
            {
                filter.depositSchemaProperty(_props[i], objectVisitor, visitor.getProvider());
            }
        }
        else
        {
            for (int i = 0; i < _props.length; i++)
            {
                _props[i].depositSchemaProperty(objectVisitor);
            }
        }

        visited.clear();
    }
}
TOP

Related Classes of com.dottydingo.hyperion.module.swagger.jackson.SchemaBeanSerializer

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.