// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.html.template;
import java.io.StringWriter;
import java.io.Writer;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
public class HtmlPage {
private static final String HEADER_TEMPLATE = "header.vm";
private static final String TITLE = "FitNesse";
private VelocityEngine velocityEngine;
private VelocityContext velocityContext;
private String templateFileName;
public HtmlPage(VelocityEngine velocityEngine, String templateFileName, String theme, String contextRoot) {
super();
this.velocityEngine = velocityEngine;
this.templateFileName = templateFileName;
velocityContext = new VelocityContext();
setHeaderTemplate(HEADER_TEMPLATE);
setTitle("FitNesse");
velocityContext.put("theme", theme);
velocityContext.put("contextRoot", contextRoot);
}
public void setHeaderTemplate(String headerTemplate) {
velocityContext.put("headerTemplate", ensureSuffix(headerTemplate));
}
public void setNavTemplate(String navTemplate) {
velocityContext.put("navTemplate", ensureSuffix(navTemplate));
}
/**
* Define main (article) template for the file. This file is also set as the default class
* on the body tag (bodyClass).
*
* @param mainTemplate main (article) template
*/
public void setMainTemplate(String mainTemplate) {
setBodyClass(mainTemplate);
velocityContext.put("mainTemplate", ensureSuffix(mainTemplate));
}
public void setFooterTemplate(String footerTemplate) {
velocityContext.put("footerTemplate", ensureSuffix(footerTemplate));
}
public void setErrorNavTemplate(String errorNavTemplate) {
velocityContext.put("errorNavTemplate", ensureSuffix(errorNavTemplate));
}
public String ensureSuffix(String templateName) {
if (templateName.endsWith(".vm")) {
return templateName;
}
return templateName + ".vm";
}
public void put(String key, Object value) {
velocityContext.put(key, value);
}
public String html() {
StringWriter writer = new StringWriter();
render(writer);
return writer.toString();
}
public void render(Writer writer) {
Template template = velocityEngine.getTemplate(templateFileName);
template.merge(velocityContext, writer);
}
public void setTitle(String title) {
velocityContext.put("title", title);
}
/**
* Set title and pageTitle properties.
*
* @param title Value for title property
*/
public void addTitles(String title) {
setTitle(title);
setPageTitle(new PageTitle(title));
}
public void setPageTitle(PageTitle pageTitle) {
velocityContext.put("pageTitle", pageTitle);
}
public void setBodyClass(String bodyClass) {
velocityContext.put("bodyClass", bodyClass);
}
}