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);