package org.skyscreamer.yoga.view;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import org.skyscreamer.yoga.mapper.YogaRequestContext;
import org.skyscreamer.yoga.selector.parser.SelectorParser;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
/**
* This is the view for the .yoga selector builder
*
* @author Carter Page <carter@skyscreamer.org>
*/
public class SelectorBuilderView extends AbstractYogaView {
private String _selectorBuilderHTML = null;
public synchronized String getSelectorBuilderHTML() {
if (_selectorBuilderHTML == null) {
// Initialize velocity engine
VelocityEngine engine = new VelocityEngine();
engine.setProperty(Velocity.RESOURCE_LOADER, "classpath");
engine.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
engine.init();
// Set properties
Context velocityContext = new VelocityContext();
SelectorParser selectorParser = getSelectorResolver().getSelectorParser();
velocityContext.put("selectorJavascriptURL", selectorParser.getSelectorJavascriptURL());
velocityContext.put("selectorType", selectorParser.getSelectorType());
Template velocityTemplate = engine.getTemplate("/selectorBuilder.vm.html");
// Draw output
StringWriter stringWriter = new StringWriter();
velocityTemplate.merge(velocityContext, stringWriter);
_selectorBuilderHTML = stringWriter.toString();
}
return _selectorBuilderHTML;
}
@Override
protected void render(Object value, YogaRequestContext context, OutputStream out)
throws Exception
{
OutputStreamWriter pageWriter = new OutputStreamWriter(out);
pageWriter.write(getSelectorBuilderHTML());
pageWriter.flush();
}
@Override
public String getContentType() {
return "text/html";
}
@Override
public String getHrefSuffix() {
return "yoga";
}
}