1 package net.sf.maia.core.view;
2
3 import java.io.StringWriter;
4
5 import net.sf.maia.Page;
6
7 import org.apache.velocity.Template;
8 import org.apache.velocity.VelocityContext;
9 import org.apache.velocity.app.VelocityEngine;
10 import org.radeox.api.engine.RenderEngine;
11 import org.radeox.api.engine.context.RenderContext;
12 import org.radeox.engine.context.BaseRenderContext;
13
14 /***
15 *
16 *
17 * @author Magnus Grimsell
18 */
19 public class ViewManager
20 {
21 private RenderEngine mRenderEngine;
22 private VelocityEngine mVelocityEngine;
23
24 public void setRenderEngine(RenderEngine renderEngine)
25 {
26 mRenderEngine = renderEngine;
27 }
28
29 public void setVelocityEngine(VelocityEngine velocityEngine)
30 {
31 mVelocityEngine = velocityEngine;
32 }
33
34 /***
35 * Applies a template on a wiki page and renders it to text.
36 * The template applied will be determined by the pages type.
37 *
38 * @param page page to apply template to
39 * @return the rendered page
40 */
41 public String renderContent(Page page)
42 {
43
44 RenderContext renderContext = new BaseRenderContext();
45 renderContext.setRenderEngine(mRenderEngine);
46 String renderedContent = mRenderEngine.render(page.getContent(), renderContext);
47 page.setContent(renderedContent);
48
49
50 StringWriter writer = new StringWriter();
51 try
52 {
53 VelocityContext velocityContext = new VelocityContext();
54 velocityContext.put("page", page);
55 Template template = mVelocityEngine.getTemplate(page.getType());
56
57 template.merge(velocityContext, writer);
58 }
59 catch(Exception e)
60 {
61 throw new TemplateException("Failed to render page " + page.getName() +
62 " of type " + page.getType(), e);
63 }
64
65 return writer.toString();
66 }
67 }