X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FWebInterface.java;h=0b3b8e14c41dba38a579ae87d14baef228478558;hp=1c923fbba59d94beb0b579081e7a957e089af8e2;hb=9e4db46b86d084eba9029906e779ec1d96f78ac4;hpb=d3b65841aac0702c8cb8a6ac2907792743ea3d2b diff --git a/src/main/java/net/pterodactylus/sone/web/WebInterface.java b/src/main/java/net/pterodactylus/sone/web/WebInterface.java index 1c923fb..0b3b8e1 100644 --- a/src/main/java/net/pterodactylus/sone/web/WebInterface.java +++ b/src/main/java/net/pterodactylus/sone/web/WebInterface.java @@ -90,14 +90,18 @@ import net.pterodactylus.util.notify.Notification; import net.pterodactylus.util.notify.NotificationManager; import net.pterodactylus.util.notify.TemplateNotification; import net.pterodactylus.util.template.DateFilter; -import net.pterodactylus.util.template.DefaultTemplateFactory; +import net.pterodactylus.util.template.HtmlFilter; import net.pterodactylus.util.template.MatchFilter; import net.pterodactylus.util.template.PaginationPlugin; +import net.pterodactylus.util.template.Provider; import net.pterodactylus.util.template.ReflectionAccessor; +import net.pterodactylus.util.template.ReplaceFilter; +import net.pterodactylus.util.template.StoreFilter; import net.pterodactylus.util.template.Template; +import net.pterodactylus.util.template.TemplateContext; +import net.pterodactylus.util.template.TemplateContextFactory; import net.pterodactylus.util.template.TemplateException; -import net.pterodactylus.util.template.TemplateFactory; -import net.pterodactylus.util.template.TemplateProvider; +import net.pterodactylus.util.template.TemplateParser; import net.pterodactylus.util.template.XmlFilter; import net.pterodactylus.util.thread.Ticker; import net.pterodactylus.util.version.Version; @@ -130,8 +134,8 @@ public class WebInterface implements CoreListener { /** The form password. */ private final String formPassword; - /** The template factory. */ - private DefaultTemplateFactory templateFactory; + /** The template context factory. */ + private final TemplateContextFactory templateContextFactory; /** The “new Sone” notification. */ private final ListNotification newSoneNotification; @@ -163,54 +167,59 @@ public class WebInterface implements CoreListener { * @param sonePlugin * The Sone plugin */ + @SuppressWarnings("synthetic-access") public WebInterface(SonePlugin sonePlugin) { this.sonePlugin = sonePlugin; formPassword = sonePlugin.pluginRespirator().getToadletContainer().getFormPassword(); - templateFactory = new DefaultTemplateFactory(); - templateFactory.addAccessor(Object.class, new ReflectionAccessor()); - templateFactory.addAccessor(Collection.class, new CollectionAccessor()); - templateFactory.addAccessor(Sone.class, new SoneAccessor(getCore())); - templateFactory.addAccessor(Post.class, new PostAccessor(getCore())); - templateFactory.addAccessor(Reply.class, new ReplyAccessor(getCore())); - templateFactory.addAccessor(Identity.class, new IdentityAccessor(getCore())); - templateFactory.addAccessor(NotificationManager.class, new NotificationManagerAccessor()); - templateFactory.addAccessor(Trust.class, new TrustAccessor()); - templateFactory.addFilter("date", new DateFilter()); - templateFactory.addFilter("l10n", new L10nFilter(getL10n())); - templateFactory.addFilter("substring", new SubstringFilter()); - templateFactory.addFilter("xml", new XmlFilter()); - templateFactory.addFilter("change", new RequestChangeFilter()); - templateFactory.addFilter("match", new MatchFilter()); - templateFactory.addFilter("css", new CssClassNameFilter()); - templateFactory.addFilter("js", new JavascriptFilter()); - templateFactory.addFilter("parse", new ParserFilter(templateFactory)); - templateFactory.addFilter("unknown", new UnknownDateFilter(getL10n(), "View.Sone.Text.UnknownDate")); - templateFactory.addPlugin("getpage", new GetPagePlugin()); - templateFactory.addPlugin("paginate", new PaginationPlugin()); - templateFactory.setTemplateProvider(new ClassPathTemplateProvider(templateFactory)); - templateFactory.addTemplateObject("formPassword", formPassword); + templateContextFactory = new TemplateContextFactory(); + templateContextFactory.addAccessor(Object.class, new ReflectionAccessor()); + templateContextFactory.addAccessor(Collection.class, new CollectionAccessor()); + templateContextFactory.addAccessor(Sone.class, new SoneAccessor(getCore())); + templateContextFactory.addAccessor(Post.class, new PostAccessor(getCore())); + templateContextFactory.addAccessor(Reply.class, new ReplyAccessor(getCore())); + templateContextFactory.addAccessor(Identity.class, new IdentityAccessor(getCore())); + templateContextFactory.addAccessor(NotificationManager.class, new NotificationManagerAccessor()); + templateContextFactory.addAccessor(Trust.class, new TrustAccessor()); + templateContextFactory.addFilter("date", new DateFilter()); + templateContextFactory.addFilter("html", new HtmlFilter()); + templateContextFactory.addFilter("replace", new ReplaceFilter()); + templateContextFactory.addFilter("store", new StoreFilter()); + templateContextFactory.addFilter("l10n", new L10nFilter(getL10n())); + templateContextFactory.addFilter("substring", new SubstringFilter()); + templateContextFactory.addFilter("xml", new XmlFilter()); + templateContextFactory.addFilter("change", new RequestChangeFilter()); + templateContextFactory.addFilter("match", new MatchFilter()); + templateContextFactory.addFilter("css", new CssClassNameFilter()); + templateContextFactory.addFilter("js", new JavascriptFilter()); + templateContextFactory.addFilter("parse", new ParserFilter(templateContextFactory)); + templateContextFactory.addFilter("unknown", new UnknownDateFilter(getL10n(), "View.Sone.Text.UnknownDate")); + templateContextFactory.addPlugin("getpage", new GetPagePlugin()); + templateContextFactory.addPlugin("paginate", new PaginationPlugin()); + templateContextFactory.addProvider(Provider.TEMPLATE_CONTEXT_PROVIDER); + templateContextFactory.addProvider(new ClassPathTemplateProvider()); + templateContextFactory.addTemplateObject("formPassword", formPassword); /* create notifications. */ - Template newSoneNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/newSoneNotification.html")); + Template newSoneNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newSoneNotification.html")); newSoneNotification = new ListNotification("new-sone-notification", "sones", newSoneNotificationTemplate); - Template newPostNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/newPostNotification.html")); + Template newPostNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newPostNotification.html")); newPostNotification = new ListNotification("new-post-notification", "posts", newPostNotificationTemplate); - Template newReplyNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/newReplyNotification.html")); + Template newReplyNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/newReplyNotification.html")); newReplyNotification = new ListNotification("new-replies-notification", "replies", newReplyNotificationTemplate); - Template rescuingSonesTemplate = templateFactory.createTemplate(createReader("/templates/notify/rescuingSonesNotification.html")); + Template rescuingSonesTemplate = TemplateParser.parse(createReader("/templates/notify/rescuingSonesNotification.html")); rescuingSonesNotification = new ListNotification("sones-being-rescued-notification", "sones", rescuingSonesTemplate); - Template sonesRescuedTemplate = templateFactory.createTemplate(createReader("/templates/notify/sonesRescuedNotification.html")); + Template sonesRescuedTemplate = TemplateParser.parse(createReader("/templates/notify/sonesRescuedNotification.html")); sonesRescuedNotification = new ListNotification("sones-rescued-notification", "sones", sonesRescuedTemplate); - Template lockedSonesTemplate = templateFactory.createTemplate(createReader("/templates/notify/lockedSonesNotification.html")); + Template lockedSonesTemplate = TemplateParser.parse(createReader("/templates/notify/lockedSonesNotification.html")); lockedSonesNotification = new ListNotification("sones-locked-notification", "sones", lockedSonesTemplate); - Template newVersionTemplate = templateFactory.createTemplate(createReader("/templates/notify/newVersionNotification.html")); + Template newVersionTemplate = TemplateParser.parse(createReader("/templates/notify/newVersionNotification.html")); newVersionNotification = new TemplateNotification("new-version-notification", newVersionTemplate); } @@ -228,6 +237,15 @@ public class WebInterface implements CoreListener { } /** + * Returns the template context factory of the web interface. + * + * @return The template context factory + */ + public TemplateContextFactory getTemplateContextFactory() { + return templateContextFactory; + } + + /** * Returns the current session, creating a new session if there is no * current session. * @@ -389,7 +407,7 @@ public class WebInterface implements CoreListener { */ public void setFirstStart(boolean firstStart) { if (firstStart) { - Template firstStartNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/firstStartNotification.html")); + Template firstStartNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/firstStartNotification.html")); Notification firstStartNotification = new TemplateNotification("first-start-notification", firstStartNotificationTemplate); notificationManager.addNotification(firstStartNotification); } @@ -404,7 +422,7 @@ public class WebInterface implements CoreListener { */ public void setNewConfig(boolean newConfig) { if (newConfig && !hasFirstStartNotification()) { - Template configNotReadNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/configNotReadNotification.html")); + Template configNotReadNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/configNotReadNotification.html")); Notification configNotReadNotification = new TemplateNotification("config-not-read-notification", configNotReadNotificationTemplate); notificationManager.addNotification(configNotReadNotification); } @@ -435,7 +453,7 @@ public class WebInterface implements CoreListener { registerToadlets(); /* notification templates. */ - Template startupNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/startupNotification.html")); + Template startupNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/startupNotification.html")); final TemplateNotification startupNotification = new TemplateNotification("startup-notification", startupNotificationTemplate); notificationManager.addNotification(startupNotification); @@ -448,7 +466,7 @@ public class WebInterface implements CoreListener { } }, "Sone Startup Notification Remover"); - Template wotMissingNotificationTemplate = templateFactory.createTemplate(createReader("/templates/notify/wotMissingNotification.html")); + Template wotMissingNotificationTemplate = TemplateParser.parse(createReader("/templates/notify/wotMissingNotification.html")); final TemplateNotification wotMissingNotification = new TemplateNotification("wot-missing-notification", wotMissingNotificationTemplate); Ticker.getInstance().registerEvent(System.currentTimeMillis() + (15 * 1000), new Runnable() { @@ -482,27 +500,27 @@ public class WebInterface implements CoreListener { * Register all toadlets. */ private void registerToadlets() { - Template emptyTemplate = templateFactory.createTemplate(new StringReader("")); - Template loginTemplate = templateFactory.createTemplate(createReader("/templates/login.html")); - Template indexTemplate = templateFactory.createTemplate(createReader("/templates/index.html")); - Template knownSonesTemplate = templateFactory.createTemplate(createReader("/templates/knownSones.html")); - Template createSoneTemplate = templateFactory.createTemplate(createReader("/templates/createSone.html")); - Template createPostTemplate = templateFactory.createTemplate(createReader("/templates/createPost.html")); - Template createReplyTemplate = templateFactory.createTemplate(createReader("/templates/createReply.html")); - Template editProfileTemplate = templateFactory.createTemplate(createReader("/templates/editProfile.html")); - Template editProfileFieldTemplate = templateFactory.createTemplate(createReader("/templates/editProfileField.html")); - Template deleteProfileFieldTemplate = templateFactory.createTemplate(createReader("/templates/deleteProfileField.html")); - Template viewSoneTemplate = templateFactory.createTemplate(createReader("/templates/viewSone.html")); - Template viewPostTemplate = templateFactory.createTemplate(createReader("/templates/viewPost.html")); - Template deletePostTemplate = templateFactory.createTemplate(createReader("/templates/deletePost.html")); - Template deleteReplyTemplate = templateFactory.createTemplate(createReader("/templates/deleteReply.html")); - Template deleteSoneTemplate = templateFactory.createTemplate(createReader("/templates/deleteSone.html")); - Template noPermissionTemplate = templateFactory.createTemplate(createReader("/templates/noPermission.html")); - Template optionsTemplate = templateFactory.createTemplate(createReader("/templates/options.html")); - Template aboutTemplate = templateFactory.createTemplate(createReader("/templates/about.html")); - Template invalidTemplate = templateFactory.createTemplate(createReader("/templates/invalid.html")); - Template postTemplate = templateFactory.createTemplate(createReader("/templates/include/viewPost.html")); - Template replyTemplate = templateFactory.createTemplate(createReader("/templates/include/viewReply.html")); + Template emptyTemplate = TemplateParser.parse(new StringReader("")); + Template loginTemplate = TemplateParser.parse(createReader("/templates/login.html")); + Template indexTemplate = TemplateParser.parse(createReader("/templates/index.html")); + Template knownSonesTemplate = TemplateParser.parse(createReader("/templates/knownSones.html")); + Template createSoneTemplate = TemplateParser.parse(createReader("/templates/createSone.html")); + Template createPostTemplate = TemplateParser.parse(createReader("/templates/createPost.html")); + Template createReplyTemplate = TemplateParser.parse(createReader("/templates/createReply.html")); + Template editProfileTemplate = TemplateParser.parse(createReader("/templates/editProfile.html")); + Template editProfileFieldTemplate = TemplateParser.parse(createReader("/templates/editProfileField.html")); + Template deleteProfileFieldTemplate = TemplateParser.parse(createReader("/templates/deleteProfileField.html")); + Template viewSoneTemplate = TemplateParser.parse(createReader("/templates/viewSone.html")); + Template viewPostTemplate = TemplateParser.parse(createReader("/templates/viewPost.html")); + Template deletePostTemplate = TemplateParser.parse(createReader("/templates/deletePost.html")); + Template deleteReplyTemplate = TemplateParser.parse(createReader("/templates/deleteReply.html")); + Template deleteSoneTemplate = TemplateParser.parse(createReader("/templates/deleteSone.html")); + Template noPermissionTemplate = TemplateParser.parse(createReader("/templates/noPermission.html")); + Template optionsTemplate = TemplateParser.parse(createReader("/templates/options.html")); + Template aboutTemplate = TemplateParser.parse(createReader("/templates/about.html")); + Template invalidTemplate = TemplateParser.parse(createReader("/templates/invalid.html")); + Template postTemplate = TemplateParser.parse(createReader("/templates/include/viewPost.html")); + Template replyTemplate = TemplateParser.parse(createReader("/templates/include/viewReply.html")); PageToadletFactory pageToadletFactory = new PageToadletFactory(sonePlugin.pluginRespirator().getHLSimpleClient(), "/Sone/"); pageToadlets.add(pageToadletFactory.createPageToadlet(new IndexPage(indexTemplate, this), "Index")); @@ -598,6 +616,7 @@ public class WebInterface implements CoreListener { try { return new InputStreamReader(getClass().getResourceAsStream(resourceName), "UTF-8"); } catch (UnsupportedEncodingException uee1) { + System.out.println(" fail."); return null; } } @@ -737,8 +756,8 @@ public class WebInterface implements CoreListener { */ @Override public void updateFound(Version version, long releaseTime) { - newVersionNotification.set("version", version); - newVersionNotification.set("releaseTime", releaseTime); + newVersionNotification.getTemplateContext().set("version", version); + newVersionNotification.getTemplateContext().set("releaseTime", releaseTime); notificationManager.addNotification(newVersionNotification); } @@ -749,36 +768,21 @@ public class WebInterface implements CoreListener { * * @author David ‘Bombe’ Roden */ - private class ClassPathTemplateProvider implements TemplateProvider { - - /** The template factory. */ - @SuppressWarnings("hiding") - private final TemplateFactory templateFactory; - - /** - * Creates a new template provider that locates templates on the - * classpath. - * - * @param templateFactory - * The template factory to create the templates - */ - public ClassPathTemplateProvider(TemplateFactory templateFactory) { - this.templateFactory = templateFactory; - } + private class ClassPathTemplateProvider implements Provider { /** * {@inheritDoc} */ @Override @SuppressWarnings("synthetic-access") - public Template getTemplate(String templateName) { + public Template getTemplate(TemplateContext templateContext, String templateName) { Reader templateReader = createReader("/templates/" + templateName); if (templateReader == null) { return null; } - Template template = templateFactory.createTemplate(templateReader); + Template template = null; try { - template.parse(); + template = TemplateParser.parse(templateReader); } catch (TemplateException te1) { logger.log(Level.WARNING, "Could not parse template “" + templateName + "” for inclusion!", te1); }