/**
 * MixTapeModel is the underlying data model for the MixTapeCalculator.
 * The model consists of a song "pool" of candidate songs and a playlist
 * of selected songs.  The model also knows the "capacity" available on the 
 * recording media, the current total time on the playlist, and the
 * remaining time on the playlist. 
 * No user interaction happens here.<br>
 * <b>Implementation Requirement:</b>
 * All the methods contain only a single statement except:<br> 
 * the constructor - 2 statements.<br>
 * addToMix() - 4 statements.
 * 
 * @author 
 * @version 
 */
public class MixTapeModel
    /** Constructor for objects of type MixTapeModel */
    public MixTapeModel()
    /** Return the list of songs in the pool.
     * @return List list of songs
     */ 
    public Vector<Song> getSongPool()
    /** Return the list of songs in the playlist.
     * @return List list of songs
     */ 
    public Vector<Song> getPlayList()
    /**
     * Load the song pool from an M3U file.
     * @param m3uFile a file containing an m3u format playlist.
     */
    public void loadM3U(File m3uFile)
    /**
     * Load the song pool from a plain text file.
     * @param songFile a file containing a playlist in a simple text format.
     */
    public void importFile(File songFile)
    /**
     * Write the playlist to a text file.
     * @param saveFile the name of the file to contain the output playlist
     */
    public void save(File saveFile)
    /** Add a new song to the song pool.
     * @param newSong Song to be added to the list of songs in the pool
     */
    public void addSong(Song newSong)
    /** Set the maximum length of time for the playlist.  
     * if desiredMinutes >= getTotalTime() sets tapelength to desiredMinutes
     *       else no effect
     * @param desiredMinutes how many minutes are available on the recording media
     * @return true if desiredMinutes >= getTotalTime(), false otherwise
     */
    public boolean setTapeLength(int desiredMinutes)
    /** Accessor to current tape length.
     * @return current tape length
     */
    public TimeDuration getTapeLength()
    
    /** Clear the songs in the song pool. */
    public void clearPool()
    
    /** Move a song from the pool to the playlist.
     * @param position the zero-based index of the song to be moved.
     * @return true if the song was added to the playlist, false if adding
     * the song would have exceeded the current tapelength time. 
     */
    public boolean addToMix(int position)
    
    /** Move a song from the playlist to the pool
     * @param position the zero-based index of the song to be moved.
     */ 
    public void removeFromMix(int position)
    
    /** Determine the total time of the songs in the playlist.
     * @return TimeDuration total of songs currently in the playlist.
     */
    public TimeDuration getTotalTime()
    
    /** Determine the time available, i.e., total playlist time subtracted
     * from current tape length.
     *
     * @return TimeDuration remaining time
     */
    public TimeDuration getRemainingTime()