From 7c8705294e1e335848f0a1a23b62f54aa30b2ee7 Mon Sep 17 00:00:00 2001 From: Jochen Schalanda Date: Sun, 8 Mar 2015 11:58:26 +0100 Subject: [PATCH] Replace ImmutableMap with Map interface in ViewRenderer interface --- docs/source/manual/views.rst | 7 +++- .../helloworld/HelloWorldApplication.java | 4 +- .../helloworld/HelloWorldConfiguration.java | 8 ++-- .../freemarker/FreemarkerViewRenderer.java | 3 +- .../views/mustache/MustacheViewRenderer.java | 5 ++- .../java/io/dropwizard/views/ViewBundle.java | 18 +++++---- .../io/dropwizard/views/ViewConfigurable.java | 5 ++- .../io/dropwizard/views/ViewRenderer.java | 4 +- .../io/dropwizard/views/ViewBundleTest.java | 40 ++++++++++--------- 9 files changed, 54 insertions(+), 40 deletions(-) diff --git a/docs/source/manual/views.rst b/docs/source/manual/views.rst index 4ef1a87180f..be771845dd5 100644 --- a/docs/source/manual/views.rst +++ b/docs/source/manual/views.rst @@ -16,7 +16,12 @@ To enable views for your :ref:`Application `, add the ``Vi .. code-block:: java public void initialize(Bootstrap bootstrap) { - bootstrap.addBundle(new ViewBundle()); + bootstrap.addBundle(new ViewBundle() { + @Override + public Map> getViewConfiguration(MyConfiguration config) { + return config.getViewRendererConfiguration(); + } + }); } Then, in your :ref:`resource method `, add a ``View`` class: diff --git a/dropwizard-example/src/main/java/com/example/helloworld/HelloWorldApplication.java b/dropwizard-example/src/main/java/com/example/helloworld/HelloWorldApplication.java index e7eb1c2726e..8854377105f 100644 --- a/dropwizard-example/src/main/java/com/example/helloworld/HelloWorldApplication.java +++ b/dropwizard-example/src/main/java/com/example/helloworld/HelloWorldApplication.java @@ -28,6 +28,8 @@ import io.dropwizard.setup.Environment; import io.dropwizard.views.ViewBundle; +import java.util.Map; + public class HelloWorldApplication extends Application { public static void main(String[] args) throws Exception { new HelloWorldApplication().run(args); @@ -67,7 +69,7 @@ public DataSourceFactory getDataSourceFactory(HelloWorldConfiguration configurat bootstrap.addBundle(hibernateBundle); bootstrap.addBundle(new ViewBundle() { @Override - public ImmutableMap> getViewConfiguration(HelloWorldConfiguration configuration) { + public Map> getViewConfiguration(HelloWorldConfiguration configuration) { return configuration.getViewRendererConfiguration(); } }); diff --git a/dropwizard-example/src/main/java/com/example/helloworld/HelloWorldConfiguration.java b/dropwizard-example/src/main/java/com/example/helloworld/HelloWorldConfiguration.java index 1af0f566148..4e21ba5e418 100644 --- a/dropwizard-example/src/main/java/com/example/helloworld/HelloWorldConfiguration.java +++ b/dropwizard-example/src/main/java/com/example/helloworld/HelloWorldConfiguration.java @@ -6,8 +6,10 @@ import io.dropwizard.Configuration; import io.dropwizard.db.DataSourceFactory; import org.hibernate.validator.constraints.NotEmpty; + import javax.validation.Valid; import javax.validation.constraints.NotNull; +import java.util.Collections; import java.util.Map; public class HelloWorldConfiguration extends Configuration { @@ -22,7 +24,7 @@ public class HelloWorldConfiguration extends Configuration { private DataSourceFactory database = new DataSourceFactory(); @NotNull - private ImmutableMap> viewRendererConfiguration = ImmutableMap.of(); + private Map> viewRendererConfiguration = Collections.emptyMap(); @JsonProperty public String getTemplate() { @@ -59,13 +61,13 @@ public void setDataSourceFactory(DataSourceFactory dataSourceFactory) { } @JsonProperty("viewRendererConfiguration") - public ImmutableMap> getViewRendererConfiguration() { + public Map> getViewRendererConfiguration() { return viewRendererConfiguration; } @JsonProperty("viewRendererConfiguration") public void setViewRendererConfiguration(Map> viewRendererConfiguration) { - ImmutableMap.Builder> builder = ImmutableMap.builder(); + ImmutableMap.Builder> builder = ImmutableMap.builder(); for (Map.Entry> entry : viewRendererConfiguration.entrySet()) { builder.put(entry.getKey(), ImmutableMap.copyOf(entry.getValue())); } diff --git a/dropwizard-views-freemarker/src/main/java/io/dropwizard/views/freemarker/FreemarkerViewRenderer.java b/dropwizard-views-freemarker/src/main/java/io/dropwizard/views/freemarker/FreemarkerViewRenderer.java index 9506a50ab8b..b5b965925c2 100644 --- a/dropwizard-views-freemarker/src/main/java/io/dropwizard/views/freemarker/FreemarkerViewRenderer.java +++ b/dropwizard-views-freemarker/src/main/java/io/dropwizard/views/freemarker/FreemarkerViewRenderer.java @@ -12,6 +12,7 @@ import freemarker.template.Version; import io.dropwizard.views.View; import io.dropwizard.views.ViewRenderer; + import javax.ws.rs.WebApplicationException; import java.io.IOException; import java.io.OutputStream; @@ -76,7 +77,7 @@ public void render(View view, } } - public void configure(ImmutableMap baseConfig) { + public void configure(Map baseConfig) { this.loader.setBaseConfig(baseConfig); } diff --git a/dropwizard-views-mustache/src/main/java/io/dropwizard/views/mustache/MustacheViewRenderer.java b/dropwizard-views-mustache/src/main/java/io/dropwizard/views/mustache/MustacheViewRenderer.java index b77fe718fd5..26e9d05521f 100644 --- a/dropwizard-views-mustache/src/main/java/io/dropwizard/views/mustache/MustacheViewRenderer.java +++ b/dropwizard-views-mustache/src/main/java/io/dropwizard/views/mustache/MustacheViewRenderer.java @@ -7,10 +7,10 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableMap; import com.google.common.util.concurrent.UncheckedExecutionException; import io.dropwizard.views.View; import io.dropwizard.views.ViewRenderer; + import javax.ws.rs.WebApplicationException; import java.io.FileNotFoundException; import java.io.IOException; @@ -18,6 +18,7 @@ import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.util.Locale; +import java.util.Map; import java.util.concurrent.ExecutionException; /** @@ -56,7 +57,7 @@ public void render(View view, Locale locale, OutputStream output) throws IOExcep } @Override - public void configure(ImmutableMap options) {} + public void configure(Map options) {} @Override public String getSuffix() { diff --git a/dropwizard-views/src/main/java/io/dropwizard/views/ViewBundle.java b/dropwizard-views/src/main/java/io/dropwizard/views/ViewBundle.java index dd81900f1b8..808273337de 100644 --- a/dropwizard-views/src/main/java/io/dropwizard/views/ViewBundle.java +++ b/dropwizard-views/src/main/java/io/dropwizard/views/ViewBundle.java @@ -1,14 +1,18 @@ package io.dropwizard.views; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import java.util.ServiceLoader; import io.dropwizard.Bundle; import io.dropwizard.Configuration; import io.dropwizard.ConfiguredBundle; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; +import java.util.Collections; +import java.util.Map; +import java.util.ServiceLoader; + +import static com.google.common.base.MoreObjects.firstNonNull; + /** * A {@link Bundle}, which by default, enables the rendering of FreeMarker & Mustache views by your application. * @@ -66,7 +70,7 @@ *

In this template, {@code ${person.name}} calls {@code getPerson().getName()}, and the * {@code ?html} escapes all HTML control characters in the result. The {@code ftlvariable} comment * at the top indicate to Freemarker (and your IDE) that the root object is a {@code Person}, - * allowing for better typesafety in your templates.

+ * allowing for better type-safety in your templates.

* * @see FreeMarker Manual * @@ -97,12 +101,10 @@ public ViewBundle(Iterable viewRenderers) { @Override public void run(T configuration, Environment environment) throws Exception { - ImmutableMap empty = ImmutableMap.of(); - - ImmutableMap> options = getViewConfiguration(configuration); + Map> options = getViewConfiguration(configuration); for(ViewRenderer viewRenderer : viewRenderers) { - ImmutableMap viewOptions = options.get(viewRenderer.getSuffix()); - viewRenderer.configure(viewOptions == null ? empty : viewOptions); + Map viewOptions = options.get(viewRenderer.getSuffix()); + viewRenderer.configure(firstNonNull(viewOptions, Collections.emptyMap())); } environment.jersey().register(new ViewMessageBodyWriter(environment.metrics(), viewRenderers)); } diff --git a/dropwizard-views/src/main/java/io/dropwizard/views/ViewConfigurable.java b/dropwizard-views/src/main/java/io/dropwizard/views/ViewConfigurable.java index 145ab98baa3..4b24325634c 100644 --- a/dropwizard-views/src/main/java/io/dropwizard/views/ViewConfigurable.java +++ b/dropwizard-views/src/main/java/io/dropwizard/views/ViewConfigurable.java @@ -1,8 +1,9 @@ package io.dropwizard.views; -import com.google.common.collect.ImmutableMap; import io.dropwizard.Configuration; +import java.util.Map; + public interface ViewConfigurable { - ImmutableMap> getViewConfiguration(T configuration); + Map> getViewConfiguration(T configuration); } diff --git a/dropwizard-views/src/main/java/io/dropwizard/views/ViewRenderer.java b/dropwizard-views/src/main/java/io/dropwizard/views/ViewRenderer.java index 2e7907aa6bb..6161621b28e 100644 --- a/dropwizard-views/src/main/java/io/dropwizard/views/ViewRenderer.java +++ b/dropwizard-views/src/main/java/io/dropwizard/views/ViewRenderer.java @@ -1,7 +1,5 @@ package io.dropwizard.views; -import com.google.common.collect.ImmutableMap; - import javax.ws.rs.WebApplicationException; import java.io.IOException; import java.io.OutputStream; @@ -38,7 +36,7 @@ void render(View view, * options for configuring the view renderer * @param options */ - void configure(ImmutableMap options); + void configure(Map options); /** * @return the suffix of the template type, e.g '.ftl', '.mustache' diff --git a/dropwizard-views/src/test/java/io/dropwizard/views/ViewBundleTest.java b/dropwizard-views/src/test/java/io/dropwizard/views/ViewBundleTest.java index da23a0492e8..f772835004b 100644 --- a/dropwizard-views/src/test/java/io/dropwizard/views/ViewBundleTest.java +++ b/dropwizard-views/src/test/java/io/dropwizard/views/ViewBundleTest.java @@ -1,15 +1,5 @@ package io.dropwizard.views; -import java.io.IOException; -import java.io.OutputStream; -import java.lang.reflect.Field; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import javax.validation.constraints.NotNull; -import javax.ws.rs.WebApplicationException; - import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -21,28 +11,40 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; +import javax.validation.constraints.NotNull; +import javax.ws.rs.WebApplicationException; +import java.io.IOException; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.Map; + import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class ViewBundleTest { private final JerseyEnvironment jerseyEnvironment = mock(JerseyEnvironment.class); private final Environment environment = mock(Environment.class); private static class MyConfiguration extends Configuration { @NotNull - private ImmutableMap> viewRendererConfiguration = ImmutableMap.of(); + private Map> viewRendererConfiguration = Collections.emptyMap(); @JsonProperty("viewRendererConfiguration") - public ImmutableMap> getViewRendererConfiguration() { + public Map> getViewRendererConfiguration() { return viewRendererConfiguration; } @JsonProperty("viewRendererConfiguration") public void setViewRendererConfiguration(Map> viewRendererConfiguration) { - ImmutableMap.Builder> builder = ImmutableMap.builder(); + ImmutableMap.Builder> builder = ImmutableMap.builder(); for (Map.Entry> entry : viewRendererConfiguration.entrySet()) { builder.put(entry.getKey(), ImmutableMap.copyOf(entry.getValue())); } @@ -57,10 +59,10 @@ public void setUp() throws Exception { @Test public void addsTheViewMessageBodyWriterToTheEnvironment() throws Exception { - new ViewBundle() { + new ViewBundle() { @Override - public ImmutableMap> getViewConfiguration(Configuration configuration) { - return ImmutableMap.of(); + public Map> getViewConfiguration(Configuration configuration) { + return Collections.emptyMap(); } }.run(null, environment); @@ -91,7 +93,7 @@ public void render(View view, Locale locale, OutputStream output) throws IOExcep } @Override - public void configure(ImmutableMap options) { + public void configure(Map options) { assertThat("should contain the testKey", Boolean.TRUE, is(options.containsKey(testKey))); } @@ -103,7 +105,7 @@ public String getSuffix() { new ViewBundle(ImmutableList.of(renderer)) { @Override - public ImmutableMap> getViewConfiguration(MyConfiguration configuration) { + public Map> getViewConfiguration(MyConfiguration configuration) { return configuration.getViewRendererConfiguration(); } }.run(myConfiguration, environment);