/*
- * Sone - ListNotification.java - Copyright © 2010 David Roden
+ * 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
*
* @param <T>
* The type of the items
- * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public class ListNotification<T> extends TemplateNotification {
private final String key;
/** The list of new elements. */
- private final List<T> elements = new CopyOnWriteArrayList<T>();
+ private final List<T> elements = new CopyOnWriteArrayList<>();
/**
* Creates a new list notification.
* @return The current list of elements
*/
public List<T> getElements() {
- return new ArrayList<T>(elements);
+ return new ArrayList<>(elements);
}
/**
public void setElements(Collection<? extends T> elements) {
this.elements.clear();
this.elements.addAll(elements);
+ touch();
}
/**
* The element to remove
*/
public void remove(T element) {
- elements.remove(element);
+ while (elements.remove(element)) {
+ /* do nothing, just remove all instances of the element. */
+ }
if (elements.isEmpty()) {
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);
+ }
+
}