package bvira.web; import bvira.framework.Presenter; import bvira.framework.TemplateFactory; import bvira.framework.TemplateWriter; import bvira.framework.UnrecoverableErrorException; import org.antlr.stringtemplate.StringTemplate; import org.antlr.stringtemplate.StringTemplateGroup; import java.io.IOException; import java.io.Writer; public class StringTemplateFactory implements TemplateFactory { StringTemplateGroup group; public StringTemplateFactory() { group = new StringTemplateGroup("components"); } public TemplateWriter templateFor(Class<? extends Presenter> aClass) { String templateName = nameForClass(aClass); final StringTemplate stringTemplate = group.getInstanceOf(templateName); return new TemplateWriter() { public void setProperty(String propertyName, Object propertyValue) { stringTemplate.setAttribute(propertyName, propertyValue); } public void write(Writer writer) { try { writer.write(stringTemplate.toString()); } catch (IOException e) { throw new UnrecoverableErrorException(e); } } }; } private String nameForClass(Class<? extends Presenter> aClass) { String className = aClass.getSimpleName(); return className.replaceAll("Presenter", ""); } }