001 package com.khubla.pragmatach.plugin.thymeleaf;
002
003 import java.io.OutputStreamWriter;
004 import java.io.Writer;
005 import java.util.Map;
006
007 import javax.servlet.http.HttpServletResponse;
008
009 import org.thymeleaf.TemplateEngine;
010 import org.thymeleaf.context.Context;
011 import org.thymeleaf.templateresolver.ITemplateResolver;
012
013 import com.khubla.pragmatach.framework.api.PragmatachException;
014 import com.khubla.pragmatach.framework.controller.impl.AbstractResponse;
015
016 /**
017 * @author tome
018 */
019 public class ThymeleafResponse extends AbstractResponse {
020 /**
021 * template
022 */
023 private final String templateName;
024 /**
025 * context
026 */
027 private final Map<String, Object> context;
028 /**
029 * resolver
030 */
031 private final ITemplateResolver templateResolver;
032
033 public ThymeleafResponse(Map<String, String> cacheHeaders, String templateName, Map<String, Object> context, ITemplateResolver templateResolver) {
034 super(cacheHeaders);
035 this.templateName = templateName;
036 this.context = context;
037 this.templateResolver = templateResolver;
038 }
039
040 @Override
041 public String getContentType() throws PragmatachException {
042 return CONTENT_TYPE_HTML;
043 }
044
045 @Override
046 public Map<String, String> getHeaders() throws PragmatachException {
047 return super.getCacheHeaders();
048 }
049
050 @Override
051 public void render(HttpServletResponse httpServletResponse) throws PragmatachException {
052 try {
053 final Writer writer = new OutputStreamWriter(httpServletResponse.getOutputStream());
054 final TemplateEngine templateEngine = new TemplateEngine();
055 templateEngine.setTemplateResolver(templateResolver);
056 final Context ctx = new Context();
057 ctx.setVariables(context);
058 templateEngine.process(templateName, ctx, writer);
059 writer.flush();
060 } catch (final Exception e) {
061 throw new PragmatachException("Exception in render", e);
062 }
063 }
064 }