Skip to content

Commit

Permalink
Replace ImmutableMap with Map interface in ViewRenderer interface
Browse files Browse the repository at this point in the history
  • Loading branch information
joschi committed Mar 8, 2015
1 parent 9cf4328 commit 7c87052
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 40 deletions.
7 changes: 6 additions & 1 deletion docs/source/manual/views.rst
Expand Up @@ -16,7 +16,12 @@ To enable views for your :ref:`Application <man-core-application>`, add the ``Vi
.. code-block:: java
public void initialize(Bootstrap<MyConfiguration> bootstrap) {
bootstrap.addBundle(new ViewBundle());
bootstrap.addBundle(new ViewBundle<MyConfiguration>() {
@Override
public Map<String, Map<String, String>> getViewConfiguration(MyConfiguration config) {
return config.getViewRendererConfiguration();
}
});
}
Then, in your :ref:`resource method <man-core-resources>`, add a ``View`` class:
Expand Down
Expand Up @@ -28,6 +28,8 @@
import io.dropwizard.setup.Environment;
import io.dropwizard.views.ViewBundle;

import java.util.Map;

public class HelloWorldApplication extends Application<HelloWorldConfiguration> {
public static void main(String[] args) throws Exception {
new HelloWorldApplication().run(args);
Expand Down Expand Up @@ -67,7 +69,7 @@ public DataSourceFactory getDataSourceFactory(HelloWorldConfiguration configurat
bootstrap.addBundle(hibernateBundle);
bootstrap.addBundle(new ViewBundle<HelloWorldConfiguration>() {
@Override
public ImmutableMap<String, ImmutableMap<String, String>> getViewConfiguration(HelloWorldConfiguration configuration) {
public Map<String, Map<String, String>> getViewConfiguration(HelloWorldConfiguration configuration) {
return configuration.getViewRendererConfiguration();
}
});
Expand Down
Expand Up @@ -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 {
Expand All @@ -22,7 +24,7 @@ public class HelloWorldConfiguration extends Configuration {
private DataSourceFactory database = new DataSourceFactory();

@NotNull
private ImmutableMap<String, ImmutableMap<String, String>> viewRendererConfiguration = ImmutableMap.of();
private Map<String, Map<String, String>> viewRendererConfiguration = Collections.emptyMap();

@JsonProperty
public String getTemplate() {
Expand Down Expand Up @@ -59,13 +61,13 @@ public void setDataSourceFactory(DataSourceFactory dataSourceFactory) {
}

@JsonProperty("viewRendererConfiguration")
public ImmutableMap<String, ImmutableMap<String, String>> getViewRendererConfiguration() {
public Map<String, Map<String, String>> getViewRendererConfiguration() {
return viewRendererConfiguration;
}

@JsonProperty("viewRendererConfiguration")
public void setViewRendererConfiguration(Map<String, Map<String, String>> viewRendererConfiguration) {
ImmutableMap.Builder<String, ImmutableMap<String, String>> builder = ImmutableMap.builder();
ImmutableMap.Builder<String, Map<String, String>> builder = ImmutableMap.builder();
for (Map.Entry<String, Map<String, String>> entry : viewRendererConfiguration.entrySet()) {
builder.put(entry.getKey(), ImmutableMap.copyOf(entry.getValue()));
}
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -76,7 +77,7 @@ public void render(View view,
}
}

public void configure(ImmutableMap<String, String> baseConfig) {
public void configure(Map<String, String> baseConfig) {
this.loader.setBaseConfig(baseConfig);
}

Expand Down
Expand Up @@ -7,17 +7,18 @@
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;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ExecutionException;

/**
Expand Down Expand Up @@ -56,7 +57,7 @@ public void render(View view, Locale locale, OutputStream output) throws IOExcep
}

@Override
public void configure(ImmutableMap<String, String> options) {}
public void configure(Map<String, String> options) {}

@Override
public String getSuffix() {
Expand Down
18 changes: 10 additions & 8 deletions 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.
*
Expand Down Expand Up @@ -66,7 +70,7 @@
* <p>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.</p>
* allowing for better type-safety in your templates.</p>
*
* @see <a href="http://freemarker.sourceforge.net/docs/index.html">FreeMarker Manual</a>
*
Expand Down Expand Up @@ -97,12 +101,10 @@ public ViewBundle(Iterable<ViewRenderer> viewRenderers) {

@Override
public void run(T configuration, Environment environment) throws Exception {
ImmutableMap<String, String> empty = ImmutableMap.of();

ImmutableMap<String, ImmutableMap<String, String>> options = getViewConfiguration(configuration);
Map<String, Map<String, String>> options = getViewConfiguration(configuration);
for(ViewRenderer viewRenderer : viewRenderers) {
ImmutableMap<String, String> viewOptions = options.get(viewRenderer.getSuffix());
viewRenderer.configure(viewOptions == null ? empty : viewOptions);
Map<String, String> viewOptions = options.get(viewRenderer.getSuffix());
viewRenderer.configure(firstNonNull(viewOptions, Collections.<String, String>emptyMap()));
}
environment.jersey().register(new ViewMessageBodyWriter(environment.metrics(), viewRenderers));
}
Expand Down
@@ -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<T extends Configuration> {
ImmutableMap<String, ImmutableMap<String, String>> getViewConfiguration(T configuration);
Map<String, Map<String, String>> getViewConfiguration(T configuration);
}
@@ -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;
Expand Down Expand Up @@ -38,7 +36,7 @@ void render(View view,
* options for configuring the view renderer
* @param options
*/
void configure(ImmutableMap<String, String> options);
void configure(Map<String, String> options);

/**
* @return the suffix of the template type, e.g '.ftl', '.mustache'
Expand Down
@@ -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;
Expand All @@ -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<String, ImmutableMap<String, String>> viewRendererConfiguration = ImmutableMap.of();
private Map<String, Map<String, String>> viewRendererConfiguration = Collections.emptyMap();

@JsonProperty("viewRendererConfiguration")
public ImmutableMap<String, ImmutableMap<String, String>> getViewRendererConfiguration() {
public Map<String, Map<String, String>> getViewRendererConfiguration() {
return viewRendererConfiguration;
}

@JsonProperty("viewRendererConfiguration")
public void setViewRendererConfiguration(Map<String, Map<String, String>> viewRendererConfiguration) {
ImmutableMap.Builder<String, ImmutableMap<String, String>> builder = ImmutableMap.builder();
ImmutableMap.Builder<String, Map<String, String>> builder = ImmutableMap.builder();
for (Map.Entry<String, Map<String, String>> entry : viewRendererConfiguration.entrySet()) {
builder.put(entry.getKey(), ImmutableMap.copyOf(entry.getValue()));
}
Expand All @@ -57,10 +59,10 @@ public void setUp() throws Exception {

@Test
public void addsTheViewMessageBodyWriterToTheEnvironment() throws Exception {
new ViewBundle() {
new ViewBundle<Configuration>() {
@Override
public ImmutableMap<String, Map<String, String>> getViewConfiguration(Configuration configuration) {
return ImmutableMap.of();
public Map<String, Map<String, String>> getViewConfiguration(Configuration configuration) {
return Collections.emptyMap();
}
}.run(null, environment);

Expand Down Expand Up @@ -91,7 +93,7 @@ public void render(View view, Locale locale, OutputStream output) throws IOExcep
}

@Override
public void configure(ImmutableMap<String, String> options) {
public void configure(Map<String, String> options) {
assertThat("should contain the testKey", Boolean.TRUE, is(options.containsKey(testKey)));
}

Expand All @@ -103,7 +105,7 @@ public String getSuffix() {

new ViewBundle<MyConfiguration>(ImmutableList.of(renderer)) {
@Override
public ImmutableMap<String, ImmutableMap<String, String>> getViewConfiguration(MyConfiguration configuration) {
public Map<String, Map<String, String>> getViewConfiguration(MyConfiguration configuration) {
return configuration.getViewRendererConfiguration();
}
}.run(myConfiguration, environment);
Expand Down

0 comments on commit 7c87052

Please sign in to comment.