package org.rendersnake.ext.spring.template;
import java.io.IOException;
import org.rendersnake.DocType;
import org.rendersnake.HtmlCanvas;
import org.rendersnake.Renderable;
import org.rendersnake.RenderableWrapper;
/**
* Implementation of the template using the TemplateDescriptor define
* by the devolopper
*
* @author Thibaut Mottet
*
*/
public class TemplateImplementation extends RenderableWrapper {
private final TemplateDescriptor templateDescriptor;
public TemplateImplementation(Renderable component, TemplateDescriptor templateDescriptor) {
super(component);
this.templateDescriptor = templateDescriptor;
}
@Override
public void renderOn(HtmlCanvas html) throws IOException {
html.render(DocType.HTML5)
.html()
.head()
.render(new Head())
.title().content(templateDescriptor.getDefaultTitle())
._head()
.body()
.render(new BodyStart())
.render(this.component)
.render(new BodyEnd())
._body()
._html();
}
private class Head implements Renderable {
public void renderOn(HtmlCanvas html) throws IOException {
templateDescriptor.renderHeaderOn(html);
}
}
private class BodyStart implements Renderable {
public void renderOn(HtmlCanvas html) throws IOException {
templateDescriptor.renderBodyStartOn(html);
}
}
private class BodyEnd implements Renderable {
public void renderOn(HtmlCanvas html) throws IOException {
templateDescriptor.renderBodyEndOn(html);
}
}
}