View Javadoc
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          // render the wiki page content
44          RenderContext renderContext = new BaseRenderContext();
45          renderContext.setRenderEngine(mRenderEngine);
46          String renderedContent = mRenderEngine.render(page.getContent(), renderContext);
47          page.setContent(renderedContent);
48          
49          // render the wiki page by applying a template
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  }