X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fpage%2FTemplatePage.java;h=06fc9fcdc07d2af94f68035101ecdf3d3c0a4dfa;hb=1c777f49db5a70349c52e851e9dd0204bd2dd64e;hp=7e478e7250ca7fea451e971a0fbef6a18008a195;hpb=b2bc9337f91c303e2700f001c785e8b14a9990ec;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/web/page/TemplatePage.java b/src/main/java/net/pterodactylus/sone/web/page/TemplatePage.java index 7e478e7..06fc9fc 100644 --- a/src/main/java/net/pterodactylus/sone/web/page/TemplatePage.java +++ b/src/main/java/net/pterodactylus/sone/web/page/TemplatePage.java @@ -1,5 +1,5 @@ /* - * shortener - TemplatePage.java - Copyright © 2010 David Roden + * Sone - StaticTemplatePage.java - Copyright © 2011 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,52 +17,59 @@ package net.pterodactylus.sone.web.page; -import java.io.StringWriter; -import java.util.Collection; -import java.util.Collections; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.pterodactylus.util.io.Closer; +import net.pterodactylus.util.logging.Logging; import net.pterodactylus.util.template.Template; -import freenet.clients.http.PageMaker; -import freenet.clients.http.PageNode; -import freenet.clients.http.ToadletContext; -import freenet.l10n.BaseL10n; +import net.pterodactylus.util.template.TemplateContext; +import net.pterodactylus.util.template.TemplateContextFactory; /** - * Base class for all {@link Page}s that are rendered with {@link Template}s. - * + * A template page is a single page that is created from a {@link Template} but + * does not necessarily return HTML. + * * @author David ‘Bombe’ Roden */ public class TemplatePage implements Page { - /** The path of the page. */ + /** The logger. */ + private static final Logger logger = Logging.getLogger(TemplatePage.class); + + /** The path of this page. */ private final String path; - /** The template to render. */ - private final Template template; + /** The content type of this page. */ + private final String contentType; - /** The L10n handler. */ - private final BaseL10n l10n; + /** The template context factory. */ + private final TemplateContextFactory templateContextFactory; - /** The l10n key for the page title. */ - private final String pageTitleKey; + /** The template to render. */ + private final Template template; /** * Creates a new template page. - * + * * @param path * The path of the page + * @param contentType + * The content type of the page + * @param templateContextFactory + * The template context factory * @param template * The template to render - * @param l10n - * The L10n handler - * @param pageTitleKey - * The l10n key of the title page */ - public TemplatePage(String path, Template template, BaseL10n l10n, String pageTitleKey) { + public TemplatePage(String path, String contentType, TemplateContextFactory templateContextFactory, Template template) { this.path = path; + this.contentType = contentType; + this.templateContextFactory = templateContextFactory; this.template = template; - this.l10n = l10n; - this.pageTitleKey = pageTitleKey; } /** @@ -78,59 +85,22 @@ public class TemplatePage implements Page { */ @Override public Response handleRequest(Request request) { - String redirectTarget = getRedirectTarget(request); - if (redirectTarget != null) { - return new RedirectResponse(redirectTarget); + ByteArrayOutputStream responseOutputStream = new ByteArrayOutputStream(); + OutputStreamWriter responseWriter = null; + try { + responseWriter = new OutputStreamWriter(responseOutputStream, "UTF-8"); + TemplateContext templateContext = templateContextFactory.createTemplateContext(); + templateContext.set("request", request); + template.render(templateContext, responseWriter); + } catch (IOException ioe1) { + logger.log(Level.WARNING, "Could not render template for path “" + path + "”!", ioe1); + } finally { + Closer.close(responseWriter); + Closer.close(responseOutputStream); } - - ToadletContext toadletContext = request.getToadletContext(); - PageMaker pageMaker = toadletContext.getPageMaker(); - PageNode pageNode = pageMaker.getPageNode(l10n.getString(pageTitleKey), toadletContext); - for (String styleSheet : getStyleSheets()) { - pageNode.addCustomStyleSheet(styleSheet); - } - - processTemplate(request, template); - StringWriter stringWriter = new StringWriter(); - template.render(stringWriter); - pageNode.content.addChild("%", stringWriter.toString()); - - return new Response(200, "OK", "text/html", pageNode.outer.generate()); - } - - /** - * Can be overridden to return a custom set of style sheets that are to be - * included in the page’s header. - * - * @return Additional style sheets to load - */ - protected Collection getStyleSheets() { - return Collections.emptySet(); - } - - /** - * Can be overridden when extending classes need to set variables in the - * template before it is rendered. - * - * @param request - * The request that is rendered - * @param template - * The template to set variables in - */ - protected void processTemplate(Request request, Template template) { - /* do nothing. */ - } - - /** - * Can be overridden to redirect the user to a different page, in case a log - * in is required, or something else is wrong. - * - * @param request - * The request that is processed - * @return The URL to redirect to, or {@code null} to not redirect - */ - protected String getRedirectTarget(Page.Request request) { - return null; + ByteArrayInputStream responseInputStream = new ByteArrayInputStream(responseOutputStream.toByteArray()); + /* no need to close a ByteArrayInputStream. */ + return new Response(200, "OK", contentType, null, responseInputStream); } }