Add duration filter to all templates.
[demoscenemusic.git] / src / main / java / net / pterodactylus / demoscenemusic / core / TemplateServlet.java
index 1b1ce58..b6107a6 100644 (file)
@@ -38,12 +38,22 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import net.pterodactylus.demoscenemusic.data.Artist;
+import net.pterodactylus.demoscenemusic.data.Properties;
+import net.pterodactylus.demoscenemusic.data.Style;
+import net.pterodactylus.demoscenemusic.data.Track;
+import net.pterodactylus.demoscenemusic.data.TrackDerivative;
+import net.pterodactylus.demoscenemusic.data.User;
 import net.pterodactylus.demoscenemusic.page.ServletRequest;
+import net.pterodactylus.demoscenemusic.template.DurationFilter;
+import net.pterodactylus.demoscenemusic.template.PropertiesAccessor;
+import net.pterodactylus.demoscenemusic.template.TrackDerivativeAccessor;
+import net.pterodactylus.demoscenemusic.template.UserAccessor;
 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.MatchFilter;
 import net.pterodactylus.util.template.ReflectionAccessor;
 import net.pterodactylus.util.template.Template;
 import net.pterodactylus.util.template.TemplateContextFactory;
@@ -60,6 +70,7 @@ import net.pterodactylus.util.web.Response;
 public class TemplateServlet extends HttpServlet {
 
        private Core core;
+
        private final TemplateContextFactory templateContextFactory = new TemplateContextFactory();
 
        private final Map<String, Page<ServletRequest>> pages = new HashMap<String, Page<ServletRequest>>();
@@ -77,6 +88,9 @@ public class TemplateServlet extends HttpServlet {
                core = (Core) config.getServletContext().getAttribute("core");
 
                templateContextFactory.addAccessor(Object.class, new ReflectionAccessor());
+               templateContextFactory.addAccessor(User.class, new UserAccessor());
+               templateContextFactory.addAccessor(Properties.class, new PropertiesAccessor());
+               templateContextFactory.addAccessor(TrackDerivative.class, new TrackDerivativeAccessor());
 
                templateContextFactory.addFilter("html", new HtmlFilter());
                CollectionSortFilter sortFilter = new CollectionSortFilter();
@@ -84,11 +98,29 @@ public class TemplateServlet extends HttpServlet {
 
                        @Override
                        public int compare(Artist leftArtist, Artist rightArtist) {
-                               return leftArtist.name().compareToIgnoreCase(rightArtist.name());
+                               return leftArtist.getName().compareToIgnoreCase(rightArtist.getName());
+                       }
+
+               });
+               sortFilter.addComparator(Track.class, new Comparator<Track>() {
+
+                       @Override
+                       public int compare(Track leftTrack, Track rightTrack) {
+                               return leftTrack.getName().compareToIgnoreCase(rightTrack.getName());
+                       }
+
+               });
+               sortFilter.addComparator(Style.class, new Comparator<Style>() {
+
+                       @Override
+                       public int compare(Style leftStyle, Style rightStyle) {
+                               return leftStyle.getName().compareToIgnoreCase(rightStyle.getName());
                        }
 
                });
                templateContextFactory.addFilter("sort", sortFilter);
+               templateContextFactory.addFilter("matches", new MatchFilter());
+               templateContextFactory.addFilter("time", new DurationFilter());
 
                templateContextFactory.addTemplateObject("core", core);
                templateContextFactory.addTemplateObject("dataManager", core.getDataManager());
@@ -128,15 +160,19 @@ public class TemplateServlet extends HttpServlet {
         */
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException, IOException {
+               request.setCharacterEncoding("UTF-8");
                String path = request.getPathInfo();
                if (path.startsWith("/")) {
                        path = path.substring(1);
                }
+               if ((path.length() == 0) || (path.endsWith("/"))) {
+                       path += "index";
+               }
                Page<ServletRequest> page = pages.get(path);
                if (page != null) {
                        ServletRequest servletRequest;
                        try {
-                               servletRequest = new ServletRequest(request);
+                               servletRequest = new ServletRequest(request, this);
                        } catch (URISyntaxException use1) {
                                throw new IOException("Could not create URI from " + request.getRequestURI(), use1);
                        }
@@ -155,6 +191,14 @@ public class TemplateServlet extends HttpServlet {
                }
        }
 
+       /**
+        * {@inheritDoc}
+        */
+       @Override
+       protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
+               doGet(httpServletRequest, httpServletResponse);
+       }
+
        //
        // PRIVATE METHODS
        //