@@ -0,0 +1,1577 @@
+package seedu.ezdo.model.todo;%0A%0Aimport java.util.Iterator;%0A%0Aimport javafx.collections.FXCollections;%0Aimport javafx.collections.ObservableList;%0Aimport seedu.ezdo.commons.util.CollectionUtil;%0A%0A/**%0A * A list of done tasks whose tasks are guaranteed to be unique and does not allow nulls.%0A *%0A * Supports a minimal set of list operations.%0A *%0A * @see Task#equals(Object)%0A * @see CollectionUtil#elementsAreUnique(Collection)%0A */%0Apublic class UniqueDoneList implements Iterable%3CTask%3E %7B%0A%0A    private final ObservableList%3CTask%3E internalList = FXCollections.observableArrayList();%0A%0A    /**%0A     * Returns true if the list contains an equivalent task as the given argument.%0A     */%0A    public boolean contains(ReadOnlyTask toCheck) %7B%0A        assert toCheck != null;%0A        return internalList.contains(toCheck);%0A    %7D%0A%0A    /**%0A     * Adds a task to the done list.%0A     *%0A     * @throws DuplicateTaskException if the task to add is a duplicate of an existing task in the list.%0A     */%0A    public void add(Task toAdd) %7B%0A        assert toAdd != null;%0A        internalList.add(toAdd);%0A    %7D%0A    %0A    @Override%0A    public Iterator%3CTask%3E iterator() %7B%0A        return internalList.iterator();%0A    %7D%0A%0A    @Override%0A    public boolean equals(Object other) %7B%0A        return other == this // short circuit if same object%0A                %7C%7C (other instanceof UniqueTaskList // instanceof handles nulls%0A                && this.internalList.equals(%0A                ((UniqueDoneList) other).internalList));%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        return internalList.hashCode();%0A    %7D%0A%7D%0A

Add UniqueDoneList class