fitnesse.html.template.PageFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fitnesse Show documentation
Show all versions of fitnesse Show documentation
The fully integrated standalone wiki, and acceptance testing framework.
// 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 fitnesse.FitNesseContext;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import util.FileUtil;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Properties;
public class PageFactory {
public static final String THEME_PROPERTY = "Theme";
public static final String DEFAULT_THEME = "bootstrap";
private final String theme;
private final String contextRoot;
private VelocityEngine velocityEngine = null;
public PageFactory(FitNesseContext context) {
super();
String theme = context.getProperty(THEME_PROPERTY);
this.theme = theme != null ? theme : DEFAULT_THEME;
this.velocityEngine = newVelocityEngine(context, this.theme);
this.contextRoot = context.contextRoot;
}
public HtmlPage newPage() {
return new HtmlPage(getVelocityEngine(), "skeleton.vm", theme, contextRoot);
}
public String render(VelocityContext context, String templateName) {
Writer writer = new StringWriter();
Template template = getVelocityEngine().getTemplate(templateName, FileUtil.CHARENCODING);
template.merge(context, writer);
return writer.toString();
}
public String getTheme() {
return theme;
}
public VelocityEngine getVelocityEngine() {
return velocityEngine;
}
@Override
public String toString() {
return getClass().getName();
}
private VelocityEngine newVelocityEngine(FitNesseContext context, String theme) {
Properties properties = new Properties();
properties.setProperty(VelocityEngine.INPUT_ENCODING, FileUtil.CHARENCODING);
properties.setProperty(VelocityEngine.OUTPUT_ENCODING, FileUtil.CHARENCODING);
properties.setProperty(VelocityEngine.RESOURCE_LOADER, "file,themepath,classpath");
properties.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH,
String.format("%s/files/fitnesse/templates", context.getRootPagePath()));
properties.setProperty("themepath." + VelocityEngine.RESOURCE_LOADER + ".class",
ClasspathResourceLoader.class.getName());
properties.setProperty("themepath." + VelocityEngine.RESOURCE_LOADER + ".base",
String.format("/fitnesse/resources/%s/templates", theme));
properties.setProperty("classpath." + VelocityEngine.RESOURCE_LOADER + ".class",
ClasspathResourceLoader.class.getName());
properties.setProperty("classpath." + VelocityEngine.RESOURCE_LOADER + ".base",
"/fitnesse/resources/templates");
properties.setProperty(VelocityEngine.RUNTIME_LOG_LOGSYSTEM_CLASS,
VelocityLogger.class.getName());
VelocityEngine engine = new VelocityEngine();
engine.init(properties);
engine.loadDirective(TraverseDirective.class.getName());
engine.loadDirective(EscapeDirective.class.getName());
return engine;
}
}