Don’t always create a Sone for a given ID.
[Sone.git] / src / main / java / net / pterodactylus / sone / web / ajax / GetNotificationsAjaxPage.java
index de2f8f8..2264b2e 100644 (file)
@@ -20,6 +20,7 @@ package net.pterodactylus.sone.web.ajax;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 
 import net.pterodactylus.sone.web.WebInterface;
 import net.pterodactylus.util.json.JsonArray;
@@ -34,9 +35,10 @@ import net.pterodactylus.util.notify.Notification;
 public class GetNotificationsAjaxPage extends JsonPage {
 
        /**
-        * TODO
+        * Creates a new “get notifications” AJAX handler.
         *
         * @param webInterface
+        *            The Sone web interface
         */
        public GetNotificationsAjaxPage(WebInterface webInterface) {
                super("ajax/getNotifications.ajax", webInterface);
@@ -52,19 +54,18 @@ public class GetNotificationsAjaxPage extends JsonPage {
        @Override
        protected JsonObject createJsonObject(Request request) {
                List<Notification> notifications = new ArrayList<Notification>(webInterface.getNotifications().getChangedNotifications());
+               Set<Notification> removedNotifications = webInterface.getNotifications().getRemovedNotifications();
                Collections.sort(notifications, Notification.LAST_UPDATED_TIME_SORTER);
                JsonObject result = createSuccessJsonObject();
                JsonArray jsonNotifications = new JsonArray();
                for (Notification notification : notifications) {
-                       JsonObject jsonNotification = new JsonObject();
-                       jsonNotification.put("id", notification.getId());
-                       jsonNotification.put("text", notification.toString());
-                       jsonNotification.put("createdTime", notification.getCreatedTime());
-                       jsonNotification.put("lastUpdatedTime", notification.getLastUpdatedTime());
-                       jsonNotification.put("dismissable", notification.isDismissable());
-                       jsonNotifications.add(jsonNotification);
+                       jsonNotifications.add(createJsonNotification(notification));
                }
-               return result.put("notifications", jsonNotifications);
+               JsonArray jsonRemovedNotifications = new JsonArray();
+               for (Notification notification : removedNotifications) {
+                       jsonRemovedNotifications.add(createJsonNotification(notification));
+               }
+               return result.put("notifications", jsonNotifications).put("removedNotifications", jsonRemovedNotifications);
        }
 
        /**
@@ -75,4 +76,25 @@ public class GetNotificationsAjaxPage extends JsonPage {
                return false;
        }
 
+       //
+       // PRIVATE METHODS
+       //
+
+       /**
+        * Creates a JSON object from the given notification.
+        *
+        * @param notification
+        *            The notification to create a JSON object
+        * @return The JSON object
+        */
+       private static JsonObject createJsonNotification(Notification notification) {
+               JsonObject jsonNotification = new JsonObject();
+               jsonNotification.put("id", notification.getId());
+               jsonNotification.put("text", notification.toString());
+               jsonNotification.put("createdTime", notification.getCreatedTime());
+               jsonNotification.put("lastUpdatedTime", notification.getLastUpdatedTime());
+               jsonNotification.put("dismissable", notification.isDismissable());
+               return jsonNotification;
+       }
+
 }