001package myhw3.data;
002
003import java.util.Comparator;
004import java.util.Iterator;
005
006/**
007 * A collection of Records.
008 * Records can only be created and destroyed using the Inventory.
009 * @see Data
010 */
011public interface Inventory extends Iterable<Record> {
012        /**
013         *  Return the number of Records.
014         */
015        public int size();
016
017        /**
018         *  Return the record for a given Video; if not present, return <code>null</code>.
019         */
020        public Record get(Video v);
021
022        /**
023         *  Return an iterator over Records in the Inventory.
024         *  <p>The iterator returns objects that implement the Record interface.</p>
025         *  <p>Any attempt to remove objects using the iterator should
026         *  result in an <code>UnsupportedOperationException</code>.</p>
027         *  <p>The Record order is unspecified</p>
028         */
029        public Iterator<Record> iterator();
030
031        /**
032         *  Return an iterator over the Inventory, sorted accoring the
033         *  Comparator.
034         *  <p>The iterator returns objects that implement the
035         *  <code>Record</code> interface.</p>
036         *  <p>Any attempt to remove objects using the iterator should
037         *  result in an <code>UnsupportedOperationException</code>.</p>
038         *  <p>The iteration order is determined by the comparator (least first).</p>
039         *  <p>The comparator may assume that its arguments implement
040         *  <code>Record</code>.</p>
041         *  @param comparator determines the order of the records returned.
042         */
043        public Iterator<Record> iterator(Comparator<Record> comparator);
044
045        /**
046         * Returns the inventory as a string; one record per line.
047         */
048        public String toString();
049
050        /**
051         * Undo the last successful UndoableCommand.
052         */
053        public boolean undo();
054
055        /**
056         * Undo the last successful UndoableCommand.
057         */
058        public boolean redo();
059}