1 package br.com.ibnetwork.guara.view;
2
3 import java.io.ByteArrayOutputStream;
4 import java.io.IOException;
5 import java.io.OutputStreamWriter;
6 import java.io.Writer;
7
8 import javax.servlet.http.HttpServletResponse;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12
13 import br.com.ibnetwork.guara.pipeline.PipelineException;
14 import br.com.ibnetwork.guara.rundata.RunData;
15
16 public class TemplateUtils
17 {
18 private static final String DEFAULT_CONTENT_TYPE = "text/html; charset=ISO-8859-1";
19
20 private static Log logger = LogFactory.getLog(TemplateUtils.class);
21
22 public static String renderTemplate(TemplateEngine engine, String encoding, Context ctx, String templateName)
23 {
24 ByteArrayOutputStream bytes = null;
25 String result;
26 try
27 {
28 bytes = new ByteArrayOutputStream();
29 OutputStreamWriter writer = new OutputStreamWriter(bytes, encoding);
30 engine.merge(templateName, ctx, writer);
31 writer.flush();
32 result = bytes.toString(encoding);
33 return result;
34 }
35 catch (Throwable t)
36 {
37 throw new PipelineException("Error rendering template ["+templateName+"]",t);
38 }
39 finally
40 {
41 try
42 {
43 if (bytes != null)
44 {
45 bytes.close();
46 }
47 }
48 catch (IOException e)
49 {
50 logger.warn("Error closing output stream",e);
51 }
52 }
53 }
54
55 public static void renderOutput(TemplateEngine engine, RunData runData, String templateName)
56 {
57 renderOutput(engine,runData,templateName,DEFAULT_CONTENT_TYPE);
58 }
59
60 public static void renderOutput(TemplateEngine engine, RunData runData, String templateName, String contentType)
61 {
62 HttpServletResponse response = runData.getResponse();
63 response.setContentType(contentType);
64 Context ctx = runData.getContext();
65 Writer writer = null;
66 try
67 {
68 writer = response.getWriter();
69 engine.merge(templateName,ctx,writer);
70 writer.flush();
71 }
72 catch(Exception e)
73 {
74 logger.error("Error rendering layout ["+templateName+"]",e);
75 }
76 finally
77 {
78 if(writer != null)
79 {
80 try
81 {
82 writer.close();
83 }
84 catch (IOException e)
85 {
86 logger.warn("Error closing output stream",e);
87 }
88 }
89 }
90 }
91
92 }