X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fnotify%2FListNotification.java;fp=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fnotify%2FListNotification.java;h=0000000000000000000000000000000000000000;hp=6a7b086f32a8b070b124254c616e7f2c42782f86;hb=d50730f6a330439e0e7ef97ca9329dffe72d5640;hpb=97fe04482ebb8a08e43294acde041c2975cbd8ee diff --git a/src/main/java/net/pterodactylus/sone/notify/ListNotification.java b/src/main/java/net/pterodactylus/sone/notify/ListNotification.java deleted file mode 100644 index 6a7b086..0000000 --- a/src/main/java/net/pterodactylus/sone/notify/ListNotification.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Sone - ListNotification.java - Copyright © 2010–2019 David Roden - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.pterodactylus.sone.notify; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - -import net.pterodactylus.util.notify.TemplateNotification; -import net.pterodactylus.util.template.Template; - -/** - * Notification that maintains a list of new elements. - * - * @param - * The type of the items - */ -public class ListNotification extends TemplateNotification { - - /** The key under which to store the elements in the template. */ - private final String key; - - /** The list of new elements. */ - private final List elements = new CopyOnWriteArrayList<>(); - - /** - * Creates a new list notification. - * - * @param id - * The ID of the notification - * @param key - * The key under which to store the elements in the template - * @param template - * The template to render - */ - public ListNotification(String id, String key, Template template) { - this(id, key, template, true); - } - - /** - * Creates a new list notification. - * - * @param id - * The ID of the notification - * @param key - * The key under which to store the elements in the template - * @param template - * The template to render - * @param dismissable - * {@code true} if this notification should be dismissable by the - * user, {@code false} otherwise - */ - public ListNotification(String id, String key, Template template, boolean dismissable) { - super(id, System.currentTimeMillis(), System.currentTimeMillis(), dismissable, template); - this.key = key; - template.getInitialContext().set(key, elements); - } - - /** - * Creates a new list notification that copies its ID and the template from - * the given list notification. - * - * @param listNotification - * The list notification to copy - */ - public ListNotification(ListNotification listNotification) { - super(listNotification.getId(), listNotification.getCreatedTime(), listNotification.getLastUpdatedTime(), listNotification.isDismissable(), new Template()); - this.key = listNotification.key; - getTemplate().add(listNotification.getTemplate()); - getTemplate().getInitialContext().set(key, elements); - } - - // - // ACTIONS - // - - /** - * Returns the current list of elements. - * - * @return The current list of elements - */ - public List getElements() { - return new ArrayList<>(elements); - } - - /** - * Sets the elements to show in this notification. This method will not call - * {@link #touch()}. - * - * @param elements - * The elements to show - */ - public void setElements(Collection elements) { - this.elements.clear(); - this.elements.addAll(elements); - touch(); - } - - /** - * Returns whether there are any new elements. - * - * @return {@code true} if there are no new elements, {@code false} if there - * are new elements - */ - public boolean isEmpty() { - return elements.isEmpty(); - } - - /** - * Adds a discovered element. - * - * @param element - * The new element - */ - public void add(T element) { - elements.add(element); - touch(); - } - - /** - * Removes the given element from the list of new elements. - * - * @param element - * The element to remove - */ - public void remove(T element) { - while (elements.remove(element)) { - /* do nothing, just remove all instances of the element. */ - } - if (elements.isEmpty()) { - dismiss(); - } - touch(); - } - - // - // ABSTRACTNOTIFICATION METHODS - // - - /** - * {@inheritDoc} - */ - @Override - public void dismiss() { - super.dismiss(); - elements.clear(); - } - - // - // OBJECT METHODS - // - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - int hashCode = super.hashCode(); - for (T element : elements) { - hashCode ^= element.hashCode(); - } - return hashCode; - } - - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object object) { - if (!(object instanceof ListNotification)) { - return false; - } - ListNotification listNotification = (ListNotification) object; - if (!super.equals(listNotification)) { - return false; - } - if (!key.equals(listNotification.key)) { - return false; - } - return elements.equals(listNotification.elements); - } - -}