All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yammer.dropwizard.json.GuavaExtrasModule Maven / Gradle / Ivy

package com.yammer.dropwizard.json;

import com.google.common.cache.CacheBuilderSpec;
import com.google.common.net.HostAndPort;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.Version;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.map.annotate.JsonCachable;
import org.codehaus.jackson.type.JavaType;

import java.io.IOException;

public class GuavaExtrasModule extends Module {
    @JsonCachable
    private static class HostAndPortDeserializer extends JsonDeserializer {
        @Override
        public HostAndPort deserialize(JsonParser jp,
                                       DeserializationContext ctxt) throws IOException {
            return HostAndPort.fromString(jp.getText());
        }
    }

    @JsonCachable
    private static class CacheBuilderSpecDeserializer extends JsonDeserializer {
        @Override
        public CacheBuilderSpec deserialize(JsonParser jp,
                                            DeserializationContext ctxt) throws IOException {
            final String text = jp.getText();
            if ("off".equalsIgnoreCase(text) || "disabled".equalsIgnoreCase(text)) {
                return CacheBuilderSpec.disableCaching();
            }
            return CacheBuilderSpec.parse(text);
        }
    }

    private static class GuavaExtrasDeserializers extends Deserializers.Base {
        @Override
        public JsonDeserializer findBeanDeserializer(JavaType type,
                                                        DeserializationConfig config,
                                                        DeserializerProvider provider,
                                                        BeanDescription beanDesc,
                                                        BeanProperty property) throws JsonMappingException {
            if (CacheBuilderSpec.class.isAssignableFrom(type.getRawClass())) {
                return new CacheBuilderSpecDeserializer();
            }

            if (HostAndPort.class.isAssignableFrom(type.getRawClass())) {
                return new HostAndPortDeserializer();
            }

            return super.findBeanDeserializer(type, config, provider, beanDesc, property);
        }
    }

    @Override
    public String getModuleName() {
        return "guava-extras";
    }

    @Override
    public Version version() {
        return Version.unknownVersion();
    }

    @Override
    public void setupModule(SetupContext context) {
        context.addDeserializers(new GuavaExtrasDeserializers());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy