JsoupTemplateWebsite.java
package eu.javaexperience.web;
import java.io.OutputStream;
import java.util.Map;
import org.jsoup.nodes.Element;
import eu.javaexperience.dispatch.Dispatcher;
import eu.javaexperience.file.AbstractFile;
import eu.javaexperience.interfaces.simple.SimpleGet;
import eu.javaexperience.interfaces.simple.publish.SimplePublish1;
import eu.javaexperience.io.IOStream;
import eu.javaexperience.io.IOStreamServer;
import eu.javaexperience.jsoup.JsoupTools;
import eu.javaexperience.web.TemplateWebsiteTools.TemplateWebsiteTemplateDetails;
import eu.javaexperience.web.template.TemplateManager;
import eu.javaexperience.web.template.TemplateManagerTools;
import eu.javaexperience.web.template.jsoup.JsoupTemplateManager;
public class JsoupTemplateWebsite
{
public static TemplateWebsiteServer createTemplateServer
(
Dispatcher<Context> dispatcher,
final SimpleGet<IOStreamServer<IOStream>> serverSocketCreator,
final TemplateWebsiteDefaultAsset assets,
final AbstractFile TEMPLATE_ROOT
)
{
return TemplateWebsiteTools.createTemplateServer(dispatcher, serverSocketCreator, assets, TEMPLATE_ROOT, new TemplateWebsiteTemplateDetails()
{
@Override
public void initRequest(Context ctx)
{
JsoupTools.addTemplateWebsiteDefaultDomGetter("public_root", new SimplePublish1<Element>()
{
@Override
public void publish(Element a)
{
Map<String, Object> env = ctx.getEnv();
JsoupTools.addClientFramework
(
assets.cdnFrameworks
);
JsoupTools.linkPreJs
(
assets.preJsUrls
);
JsoupTools.linkCss
(
assets.cssUrls
);
JsoupTools.linkPostJs
(
assets.postJsUrls
);
}
});
}
@Override
public TemplateManager createDefaultTemplateManager()
{
return new JsoupTemplateManager(TEMPLATE_ROOT, TemplateManagerTools.loadRecursiveWithDevelopementReload(TEMPLATE_ROOT, JsoupTemplateManager.PARSER, "html"));
}
@Override
public void applyView(Context ctx) throws Exception
{
Element dom = JsoupTools.getDom();//((Element) ((Map<String, Object>)ctx.getEnv().get("VIEW")).get("DOM"));
OutputStream os = ctx.getResponse().getOutputStream();
os.write(dom.html().getBytes());
os.flush();
}
});
}
}