X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fdemoscenemusic%2Fcore%2FTemplateServlet.java;h=739f16c2868d72a515367573b61c4e0f9aad78d3;hb=0628c1f427c2abf3d840e9fd0b8f6ce48bce9706;hp=a2ec8256958110ece21697f958bf0b68ca5b5632;hpb=6cbe089ff6c0ea477e8c8a2f4fe1d20c51f72e69;p=demoscenemusic.git diff --git a/src/main/java/net/pterodactylus/demoscenemusic/core/TemplateServlet.java b/src/main/java/net/pterodactylus/demoscenemusic/core/TemplateServlet.java index a2ec825..739f16c 100644 --- a/src/main/java/net/pterodactylus/demoscenemusic/core/TemplateServlet.java +++ b/src/main/java/net/pterodactylus/demoscenemusic/core/TemplateServlet.java @@ -17,6 +17,8 @@ package net.pterodactylus.demoscenemusic.core; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -24,6 +26,7 @@ import java.io.Reader; import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.net.URISyntaxException; +import java.util.Comparator; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -34,8 +37,15 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import net.pterodactylus.demoscenemusic.data.Artist; +import net.pterodactylus.demoscenemusic.data.Track; import net.pterodactylus.demoscenemusic.page.ServletRequest; import net.pterodactylus.util.io.Closer; +import net.pterodactylus.util.io.StreamCopier; +import net.pterodactylus.util.template.ClassPathTemplateProvider; +import net.pterodactylus.util.template.CollectionSortFilter; +import net.pterodactylus.util.template.HtmlFilter; +import net.pterodactylus.util.template.ReflectionAccessor; import net.pterodactylus.util.template.Template; import net.pterodactylus.util.template.TemplateContextFactory; import net.pterodactylus.util.template.TemplateParser; @@ -67,9 +77,33 @@ public class TemplateServlet extends HttpServlet { super.init(config); core = (Core) config.getServletContext().getAttribute("core"); + templateContextFactory.addAccessor(Object.class, new ReflectionAccessor()); + + templateContextFactory.addFilter("html", new HtmlFilter()); + CollectionSortFilter sortFilter = new CollectionSortFilter(); + sortFilter.addComparator(Artist.class, new Comparator() { + + @Override + public int compare(Artist leftArtist, Artist rightArtist) { + return leftArtist.name().compareToIgnoreCase(rightArtist.name()); + } + + }); + sortFilter.addComparator(Track.class, new Comparator() { + + @Override + public int compare(Track leftTrack, Track rightTrack) { + return leftTrack.name().compareToIgnoreCase(rightTrack.name()); + } + + }); + templateContextFactory.addFilter("sort", sortFilter); + templateContextFactory.addTemplateObject("core", core); templateContextFactory.addTemplateObject("dataManager", core.getDataManager()); + templateContextFactory.addProvider(new ClassPathTemplateProvider(getClass(), "/templates/")); + for (@SuppressWarnings("rawtypes") Enumeration parameterNames = config.getInitParameterNames(); parameterNames.hasMoreElements();) { String pageName = (String) parameterNames.nextElement(); @@ -115,7 +149,8 @@ public class TemplateServlet extends HttpServlet { } catch (URISyntaxException use1) { throw new IOException("Could not create URI from " + request.getRequestURI(), use1); } - Response response = new Response(httpServletResponse.getOutputStream()); + ByteArrayOutputStream responseOutputBuffer = new ByteArrayOutputStream(); + Response response = new Response(responseOutputBuffer); response = page.handleRequest(servletRequest, response); for (Header header : response.getHeaders()) { for (String value : header) { @@ -124,6 +159,7 @@ public class TemplateServlet extends HttpServlet { } httpServletResponse.setContentType(response.getContentType()); httpServletResponse.setStatus(response.getStatusCode()); + StreamCopier.copy(new ByteArrayInputStream(responseOutputBuffer.toByteArray()), httpServletResponse.getOutputStream()); return; } }