All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
io.prestosql.jdbc.$internal.jackson.datatype.guava.GuavaSerializers Maven / Gradle / Ivy
package io.prestosql.jdbc.$internal.jackson.datatype.guava;
import java.io.Serializable;
import java.util.Set;
import io.prestosql.jdbc.$internal.jackson.annotation.JsonIgnoreProperties;
import io.prestosql.jdbc.$internal.jackson.databind.*;
import io.prestosql.jdbc.$internal.jackson.databind.introspect.Annotated;
import io.prestosql.jdbc.$internal.jackson.databind.jsontype.TypeSerializer;
import io.prestosql.jdbc.$internal.jackson.databind.ser.Serializers;
import io.prestosql.jdbc.$internal.jackson.databind.ser.std.ToStringSerializer;
import io.prestosql.jdbc.$internal.jackson.databind.type.MapLikeType;
import io.prestosql.jdbc.$internal.jackson.databind.type.ReferenceType;
import io.prestosql.jdbc.$internal.jackson.databind.ser.std.StdDelegatingSerializer;
import io.prestosql.jdbc.$internal.jackson.databind.util.StdConverter;
import io.prestosql.jdbc.$internal.jackson.datatype.guava.ser.RangeSetSerializer;
import io.prestosql.jdbc.$internal.guava.base.Optional;
import io.prestosql.jdbc.$internal.guava.cache.CacheBuilder;
import io.prestosql.jdbc.$internal.guava.cache.CacheBuilderSpec;
import io.prestosql.jdbc.$internal.guava.collect.FluentIterable;
import io.prestosql.jdbc.$internal.guava.collect.Multimap;
import io.prestosql.jdbc.$internal.guava.collect.Range;
import io.prestosql.jdbc.$internal.guava.collect.RangeSet;
import io.prestosql.jdbc.$internal.guava.collect.Table;
import io.prestosql.jdbc.$internal.guava.hash.HashCode;
import io.prestosql.jdbc.$internal.guava.net.HostAndPort;
import io.prestosql.jdbc.$internal.guava.net.InternetDomainName;
import io.prestosql.jdbc.$internal.jackson.datatype.guava.ser.GuavaOptionalSerializer;
import io.prestosql.jdbc.$internal.jackson.datatype.guava.ser.MultimapSerializer;
import io.prestosql.jdbc.$internal.jackson.datatype.guava.ser.RangeSerializer;
import io.prestosql.jdbc.$internal.jackson.datatype.guava.ser.TableSerializer;
public class GuavaSerializers extends Serializers.Base
implements Serializable
{
static final long serialVersionUID = 1L;
static class FluentConverter extends StdConverter> {
static final FluentConverter instance = new FluentConverter();
@Override
public Iterable convert(Object value) {
return (Iterable) value;
}
}
@Override
public JsonSerializer findReferenceSerializer(SerializationConfig config,
ReferenceType refType, BeanDescription beanDesc,
TypeSerializer contentTypeSerializer, JsonSerializer contentValueSerializer)
{
final Class raw = refType.getRawClass();
if (Optional.class.isAssignableFrom(raw)) {
boolean staticTyping = (contentTypeSerializer == null)
&& config.isEnabled(MapperFeature.USE_STATIC_TYPING);
return new GuavaOptionalSerializer(refType, staticTyping,
contentTypeSerializer, contentValueSerializer);
}
return null;
}
@Override
public JsonSerializer findSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc)
{
Class raw = type.getRawClass();
if (RangeSet.class.isAssignableFrom(raw)) {
return new RangeSetSerializer();
}
if (Range.class.isAssignableFrom(raw)) {
return new RangeSerializer(_findDeclared(type, Range.class));
}
if (Table.class.isAssignableFrom(raw)) {
return new TableSerializer(_findDeclared(type, Table.class));
}
// since 2.4
if (HostAndPort.class.isAssignableFrom(raw)) {
return ToStringSerializer.instance;
}
if (InternetDomainName.class.isAssignableFrom(raw)) {
return ToStringSerializer.instance;
}
// not sure how useful, but why not?
if (CacheBuilderSpec.class.isAssignableFrom(raw) || CacheBuilder.class.isAssignableFrom(raw)) {
return ToStringSerializer.instance;
}
if (HashCode.class.isAssignableFrom(raw)) {
return ToStringSerializer.instance;
}
if (FluentIterable.class.isAssignableFrom(raw)) {
JavaType iterableType = _findDeclared(type, Iterable.class);
return new StdDelegatingSerializer(FluentConverter.instance, iterableType, null);
}
return super.findSerializer(config, type, beanDesc);
}
@Override
public JsonSerializer findMapLikeSerializer(SerializationConfig config,
MapLikeType type, BeanDescription beanDesc, JsonSerializer keySerializer,
TypeSerializer elementTypeSerializer, JsonSerializer elementValueSerializer)
{
if (Multimap.class.isAssignableFrom(type.getRawClass())) {
final AnnotationIntrospector intr = config.getAnnotationIntrospector();
Object filterId = intr.findFilterId((Annotated)beanDesc.getClassInfo());
JsonIgnoreProperties.Value ignorals = config.getDefaultPropertyIgnorals(Multimap.class,
beanDesc.getClassInfo());
Set ignored = (ignorals == null) ? null : ignorals.getIgnored();
return new MultimapSerializer(type, beanDesc,
keySerializer, elementTypeSerializer, elementValueSerializer, ignored, filterId);
}
return null;
}
private JavaType _findDeclared(JavaType subtype, Class target) {
JavaType decl = subtype.findSuperType(target);
if (decl == null) { // should never happen but
throw new IllegalArgumentException("Strange "+target.getName()+" sub-type, "+subtype+", can not find type parameters");
}
return decl;
}
}