Skip to content

Commit

Permalink
Add a CacheBuilderSpecSerializer so that a default value can be used …
Browse files Browse the repository at this point in the history
…in configurations (#1551)
  • Loading branch information
tburch authored and joschi committed May 21, 2016
1 parent d95b859 commit a8ac50c
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.dropwizard.configuration;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.cache.CacheBuilderSpec;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.io.Resources;
Expand All @@ -12,6 +13,7 @@
import org.junit.Before;
import org.junit.Test;

import javax.validation.Valid;
import javax.validation.Validator;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
Expand Down Expand Up @@ -111,6 +113,10 @@ static class ExampleWithDefaults {
@JsonProperty
List<ExampleServer> servers = ImmutableList.of(
ExampleServer.create(8080), ExampleServer.create(8081), ExampleServer.create(8082));

@JsonProperty
@Valid
CacheBuilderSpec cacheBuilderSpec = CacheBuilderSpec.disableCaching();
}

static class NonInsatiableExample {
Expand Down Expand Up @@ -153,6 +159,17 @@ public void setUp() throws Exception {
this.validFile = resourceFileName("factory-test-valid.yml");
}

@Test
public void usesDefaultedCacheBuilderSpec() throws Exception {
final ExampleWithDefaults example =
new YamlConfigurationFactory<>(ExampleWithDefaults.class, validator, Jackson.newObjectMapper(), "dw")
.build();
assertThat(example.cacheBuilderSpec)
.isNotNull();
assertThat(example.cacheBuilderSpec)
.isEqualTo(CacheBuilderSpec.disableCaching());
}

@Test
public void loadsValidConfigFiles() throws Exception {
final Example example = factory.build(validFile);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
package io.dropwizard.jackson;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.DeserializationConfig;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.deser.Deserializers;
import com.fasterxml.jackson.databind.ser.Serializers;
import com.google.common.cache.CacheBuilderSpec;

import java.io.IOException;
Expand All @@ -27,6 +33,13 @@ public CacheBuilderSpec deserialize(JsonParser jp,
}
}

private static class CacheBuilderSpecSerializer extends JsonSerializer<CacheBuilderSpec> {
@Override
public void serialize(CacheBuilderSpec value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
gen.writeString(value.toParsableString());
}
}

private static class GuavaExtrasDeserializers extends Deserializers.Base {
@Override
public JsonDeserializer<?> findBeanDeserializer(JavaType type,
Expand All @@ -40,6 +53,17 @@ public JsonDeserializer<?> findBeanDeserializer(JavaType type,
}
}

private static class GuavaExtrasSerializers extends Serializers.Base {
@Override
public JsonSerializer<?> findSerializer(SerializationConfig config, JavaType type, BeanDescription beanDesc) {
if (CacheBuilderSpec.class.isAssignableFrom(type.getRawClass())) {
return new CacheBuilderSpecSerializer();
}

return super.findSerializer(config, type, beanDesc);
}
}

@Override
public String getModuleName() {
return "guava-extras";
Expand All @@ -53,5 +77,6 @@ public Version version() {
@Override
public void setupModule(SetupContext context) {
context.addDeserializers(new GuavaExtrasDeserializers());
context.addSerializers(new GuavaExtrasSerializers());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ public void canDeserializeCacheBuilderSpecs() throws Exception {
.isEqualTo(CacheBuilderSpec.parse("maximumSize=30"));
}

@Test
public void canSerializeCacheBuilderSpecs() throws Exception {
assertThat(mapper.writeValueAsString(CacheBuilderSpec.disableCaching()))
.isEqualTo("\"maximumSize=0\"");
}

@Test
public void canDeserializeAbsentOptions() throws Exception {
assertThat(mapper.readValue("null", Optional.class))
Expand Down

0 comments on commit a8ac50c

Please sign in to comment.