package com.deffence.mm.dropwizard.thymeleaf;
import io.dropwizard.views.View;
import io.dropwizard.views.ViewRenderer;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Locale;
import javax.ws.rs.WebApplicationException;
import org.thymeleaf.TemplateEngine;
public class ThymeleafViewRenderer implements ViewRenderer {
public static final String DEFAULT_TEMPLATE_MODE = "XHTML";
public static final String DEFAULT_SUFFIX = ".html";
public static final String DEFAULT_PREFIX = "/templates/";
public static final long DEFAULT_CACHETTLMS = 3600000L;
public static final boolean DEFAULT_CACHABLE = true;
private TemplateEngine engine;
private String suffix;
public ThymeleafViewRenderer() {
this(DEFAULT_TEMPLATE_MODE, DEFAULT_PREFIX, DEFAULT_SUFFIX,
DEFAULT_CACHETTLMS,DEFAULT_CACHABLE);
}
public ThymeleafViewRenderer(String templateMode, String prefix,
String suffix, long cacheTTLMs,boolean cacheable) {
super();
this.suffix = suffix;
ClassResourceTemplateResolver templateResolver = new ClassResourceTemplateResolver();
templateResolver.setTemplateMode(templateMode);
templateResolver.setCacheTTLMs(cacheTTLMs);
templateResolver.setPrefix(prefix);
templateResolver.setCacheable(cacheable);
engine = new TemplateEngine();
engine.setTemplateResolver(templateResolver);
}
@Override
public boolean isRenderable(View view) {
return view.getTemplateName().endsWith(suffix);
}
@Override
public void render(View view, Locale locale, OutputStream output)
throws IOException, WebApplicationException {
DropWizardContext context = new DropWizardContext(view);
OutputStreamWriter writer = new OutputStreamWriter(output);
engine.process(view.getTemplateName(), context, writer);
writer.flush();
}
}