package org.expeditee.gui; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.function.Predicate; import org.expeditee.items.Item; /** * Extends a ArrayList of Items through composition in order to keep it sorted. */ public class ItemsList implements Iterable { private List items = new ArrayList(); private boolean sorted = true; public ItemsList() { } public ItemsList(ItemsList initialList) { items.addAll(initialList.items); } public ItemsList(Collection unsorted) { items.addAll(unsorted); sort(); } public void add(Item item) { items.add(item); sorted = false; } public void addAll(Collection toAdd) { items.addAll(toAdd); } public void sort() { if (!sorted) { items.removeIf(item -> item == null); } Collections.sort(items); sorted = true; } @Override public Iterator iterator() { //sort(); return items.iterator(); } public boolean contains(Item item) { return items.contains(item); } public int size() { return items.size(); } public void invalidateSorted() { sorted = false; } public boolean remove(Item item) { return items.remove(item); } public void removeAll(ItemsList newBody) { items.removeAll(newBody.items); } public void retainHistory(ItemsList historyItems) { items.retainAll(historyItems.items); } public int indexOf(Item item) { return items.indexOf(item); } public void set(int index, Item item) { items.set(index, item); } public boolean removeIf(Predicate condition) { return items.removeIf(condition); } public Collection underlying() { return items; } public boolean isEmpty() { return items.isEmpty(); } public void clear() { items.clear(); } }