Add possibility to perform actions after the template has been rendered.
[Sone.git] / src / main / java / net / pterodactylus / sone / web / page / TemplatePage.java
index 761e89b..9cf9c17 100644 (file)
@@ -20,8 +20,11 @@ package net.pterodactylus.sone.web.page;
 import java.io.StringWriter;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import net.pterodactylus.sone.web.page.Page.Request.Method;
+import net.pterodactylus.util.logging.Logging;
 import net.pterodactylus.util.template.Template;
 import freenet.clients.http.LinkEnabledCallback;
 import freenet.clients.http.PageMaker;
@@ -36,6 +39,9 @@ import freenet.l10n.BaseL10n;
  */
 public class TemplatePage implements Page, LinkEnabledCallback {
 
+       /** The logger. */
+       private static final Logger logger = Logging.getLogger(TemplatePage.class);
+
        /** The path of the page. */
        private final String path;
 
@@ -111,11 +117,16 @@ public class TemplatePage implements Page, LinkEnabledCallback {
                }
 
                try {
+                       long start = System.nanoTime();
                        processTemplate(request, template);
+                       long finish = System.nanoTime();
+                       logger.log(Level.FINEST, "Template was rendered in " + ((finish - start) / 1000) / 1000.0 + "ms.");
                } catch (RedirectException re1) {
                        return new RedirectResponse(re1.getTarget());
                }
 
+               postProcess(request);
+
                StringWriter stringWriter = new StringWriter();
                template.render(stringWriter);
                pageNode.content.addChild("%", stringWriter.toString());
@@ -158,6 +169,21 @@ public class TemplatePage implements Page, LinkEnabledCallback {
        }
 
        /**
+        * This method will be called after
+        * {@link #processTemplate(net.pterodactylus.sone.web.page.Page.Request, Template)}
+        * has processed the template and the template was rendered. This method
+        * will not be called if
+        * {@link #processTemplate(net.pterodactylus.sone.web.page.Page.Request, Template)}
+        * throws a {@link RedirectException}!
+        *
+        * @param request
+        *            The request being processed
+        */
+       protected void postProcess(Request request) {
+               /* 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.
         *