Template logoutTemplate = templateFactory.createTemplate(createReader("/templates/logout.html"));
Template optionsTemplate = templateFactory.createTemplate(createReader("/templates/options.html"));
Template aboutTemplate = templateFactory.createTemplate(createReader("/templates/about.html"));
+ Template postTemplate = templateFactory.createTemplate(createReader("/templates/include/viewPost.html"));
Template replyTemplate = templateFactory.createTemplate(createReader("/templates/include/viewReply.html"));
PageToadletFactory pageToadletFactory = new PageToadletFactory(sonePlugin.pluginRespirator().getHLSimpleClient(), "/Sone/");
pageToadlets.add(pageToadletFactory.createPageToadlet(new StaticPage("javascript/", "/static/javascript/", "text/javascript")));
pageToadlets.add(pageToadletFactory.createPageToadlet(new StaticPage("images/", "/static/images/", "image/png")));
pageToadlets.add(pageToadletFactory.createPageToadlet(new GetTranslationPage(this)));
- pageToadlets.add(pageToadletFactory.createPageToadlet(new GetStatusAjaxPage(this)));
+ pageToadlets.add(pageToadletFactory.createPageToadlet(new GetStatusAjaxPage(this, postTemplate, replyTemplate)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new DismissNotificationAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new CreateReplyAjaxPage(this)));
pageToadlets.add(pageToadletFactory.createPageToadlet(new GetReplyAjaxPage(this, replyTemplate)));
package net.pterodactylus.sone.web.ajax;
+import java.io.StringWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.data.Reply;
import net.pterodactylus.sone.data.Sone;
import net.pterodactylus.sone.template.SoneAccessor;
import net.pterodactylus.sone.web.WebInterface;
+import net.pterodactylus.util.io.Closer;
import net.pterodactylus.util.json.JsonArray;
import net.pterodactylus.util.json.JsonObject;
import net.pterodactylus.util.notify.Notification;
+import net.pterodactylus.util.template.Template;
+import net.pterodactylus.util.template.TemplateException;
/**
* The “get status” AJAX handler returns all information that is necessary to
/** Date formatter. */
private static final DateFormat dateFormat = new SimpleDateFormat("MMM d, yyyy, HH:mm:ss");
+ /** The template to render posts. */
+ private final Template postTemplate;
+
+ /** The template to render replies. */
+ private final Template replyTemplate;
+
/**
* Creates a new “get status” AJAX handler.
*
* @param webInterface
* The Sone web interface
+ * @param postTemplate
+ * The template to render for posts
+ * @param replyTemplate
+ * The template to render for replies
*/
- public GetStatusAjaxPage(WebInterface webInterface) {
+ public GetStatusAjaxPage(WebInterface webInterface, Template postTemplate, Template replyTemplate) {
super("ajax/getStatus.ajax", webInterface);
+ this.postTemplate = postTemplate;
+ this.replyTemplate = replyTemplate;
}
/**
for (Notification notification : removedNotifications) {
jsonRemovedNotifications.add(createJsonNotification(notification));
}
- return createSuccessJsonObject().put("sones", jsonSones).put("notifications", jsonNotifications).put("removedNotifications", jsonRemovedNotifications);
+ /* load new posts. */
+ postTemplate.set("currentSone", getCurrentSone(request.getToadletContext()));
+ Set<Post> newPosts = webInterface.getNewPosts();
+ JsonArray jsonPosts = new JsonArray();
+ for (Post post : newPosts) {
+ jsonPosts.add(createJsonPost(post));
+ }
+ /* load new replies. */
+ replyTemplate.set("currentSone", getCurrentSone(request.getToadletContext()));
+ Set<Reply> newReplies = webInterface.getNewReplies();
+ JsonArray jsonReplies = new JsonArray();
+ for (Reply reply : newReplies) {
+ jsonReplies.add(createJsonReply(reply));
+ }
+ return createSuccessJsonObject().put("sones", jsonSones).put("notifications", jsonNotifications).put("removedNotifications", jsonRemovedNotifications).put("newPosts", jsonPosts).put("newReplies", jsonReplies);
}
/**
}
/**
+ * Creates a JSON object from the given post. The JSON object will only
+ * contain the ID of the post, its time, and its rendered HTML code.
+ *
+ * @param post
+ * The post to create a JSON object from
+ * @return The JSON representation of the post
+ */
+ private JsonObject createJsonPost(Post post) {
+ JsonObject jsonPost = new JsonObject();
+ jsonPost.put("id", post.getId());
+ jsonPost.put("time", post.getTime());
+ StringWriter stringWriter = new StringWriter();
+ postTemplate.set("post", post);
+ try {
+ postTemplate.render(stringWriter);
+ } catch (TemplateException te1) {
+ /* TODO - shouldn’t happen. */
+ } finally {
+ Closer.close(stringWriter);
+ }
+ return jsonPost.put("html", stringWriter.toString());
+ }
+
+ /**
+ * Creates a JSON object from the given reply. The JSON object will only
+ * contain the ID of the reply, the ID of its post, its time, and its
+ * rendered HTML code.
+ *
+ * @param reply
+ * The reply to create a JSON object from
+ * @return The JSON representation of the reply
+ */
+ private JsonObject createJsonReply(Reply reply) {
+ JsonObject jsonPost = new JsonObject();
+ jsonPost.put("postId", reply.getPost().getId());
+ jsonPost.put("id", reply.getId());
+ jsonPost.put("time", reply.getTime());
+ StringWriter stringWriter = new StringWriter();
+ replyTemplate.set("reply", reply);
+ try {
+ replyTemplate.render(stringWriter);
+ } catch (TemplateException te1) {
+ /* TODO - shouldn’t happen. */
+ } finally {
+ Closer.close(stringWriter);
+ }
+ return jsonPost.put("html", stringWriter.toString());
+ }
+
+ /**
* Creates a JSON object from the given notification.
*
* @param notification