The Muze Music Library System (MMLS)
You and your team have been hired to create The Muze Music Library
System (MMLS). The MMLS provides an application for music aficionados
to track the songs in their music collection. Users can search an on-line or an
off-line database for songs, titles, and artists. They can add songs to their
collection and optionally rate them from 1 to 5 stars. Users can search
their collection by title, artist, or album, or simply browse their
music library.
The on-line database will use the MusicBrainz Web
Service. The MusicBrainz
Web Service and its use are described in the
Web Services exercise at http://www.se.rit.edu/~swen-262/activities/WebServices.html
The Muze Music Library System (MMLS) Functional Requirements
The R2 functional requirements extend the R1
functional requirements. That is, all features required in R1are to be
included in R2.
The R2 functional requirements are:
- The MMLS shall provide a command line interface, through which
the user may enter requests.
- Requests are entered as a single line of text beginning with
a request keyword and followed by any arguments.
- The system shall provide a textual response to each request.
- The system shall provide a help request, the response for
which will be a list of available requests and how to use them.
- The MMLS shall maintain a searchable database of all
available music. The user may search this database for songs or
releases to add to their library.
- The MMLS shall respond to queries for artist information.
- The system shall store data for all
available artists.
Artist data will include a globally unique identifier (GUID), a name
comprising one or more words separated by spaces, and a type (e.g.
person, group, orchestra, etc.).
- The user may search for artists by specifying one or more
words in the artist's name. The system shall respond with a list of
artists that match the query.
- The MMLS shall respond to queries for song information.
- The system shall store data for all
available songs. Song
data includes a globally unique identifier (GUID), a title, an artist,
and a duration (in ms).
- The user may search for songs by specifying one or more
words in the title, the name of the artist, or duration (songs shorter
than or longer than a given duration). The system shall respond with a
list of songs that match the query.
- The MMLS shall respond to queries for release information.
- The system shall store data for all
available releases.
Release data includes a globally unique identifier (GUID), the title,
artist, issue date, medium (e.g. vinyl, CD, digital), and a track list
(each track corresponds to a song).
- The user may search for releases by specifying one or
more words in the title, the name or GUID of the artist, the name or
GUID of one of the tracks, or a release date range (i.e. all releases
between two specific dates). The system shall respond with a list of
releases that match the query.
- The MMLS shall support
multiple users and separately track and persist each user's personal music
library.
- The system shall allow the user to add an individual song or
a release to their music personal music library collection.
- The user shall be able to optionally
select the off-line database (as in R1) or the on-line web service to
browse and select song titles, albums, and artists to add to their
personal music library.
- The user may optionally specify a date on which the song or
release was acquired. If no date is specified, the current date is used
by default.
- The user may optionally rate individual songs from 1 to 5
stars.
- A default rating of 0 indicates that the user has not
provided a rating.
- The system shall allow the user to search their personal
library.
- The user may search for artists.
- By specifying one or more words in the artist's name.
- By specifying a type (e.g. person, group, etc.).
- By specifying a minimum rating (e.g. the minimum
average rating of the artists songs and releases).
- Search results are ordered alphabetically.
- The user may search for songs.
- By specifying one or more words in the song's title.
- By specifying the artist name or GUID
- By specifying the release title or GUID
- By specifying a minimum/maximum duration
- By specifying a minimum rating (e.g. all songs rated
at least 3 stars).
- Search results may be ordered alphabetically, by
rating, or by acquisition date.
- The user may search for releases.
- By specifying one or more words in the title.
- By specifying the name or GUID of the artist.
- By specifying the name or GUID of one of the tracks
on the release.
- By specifying a minimum/maximum total duration of
tracks on the release.
- By specifying a minimum rating (i.e. the average
rating of the tracks on the release must be at least 3 stars).
- Search results may be ordered chronologically by
release date, acquisition date, alphabetically, or by rating.
- The user may browse their collection beginning beginning by
listing the artists in the collection. Each artist will display the
name, disambiguation, and the total duration of all of the songs in the
library performed by the artist.
- The user may choose one artist to explore.
- Individual songs (not part of a full release) will be
displayed including title, duration, and rating.
- Releases will be displayed including title, date,
media, average rating, total duration of all tracks. The user may
choose to explore a release.
- Individual songs (part of the release) will be
displayed including title, duration, and rating.
- The user may choose to back out to the artist.
- The user may choose to back out to the list of
artists.
- The user may remove individual songs or releases from their
collection.
- If, after removing, the artist no longer has any songs or
releases in the library, the artist should be removed from the library.
- The MMLS shall persist each
user's personal library across system restarts.
- The MMLS shall support undo and redo of the following operations:
- Add song/release to library.
- Remove song/release from library.
- Rate song.
MMLS Specific Non-Functional Requirements
- The MMLS shall provide the same
command line interface as R1.
- In
addition, the MMLS shall provide a different user experience for
the
R1 features through a graphical user interface (GUI) where the
supported requests are available using menu items, buttons, or other
appropriate mechanisms for user interactions.
- The user shall be able to switch
between the command line user experience and the GUI-based user
experience.
- All testing will be done from standard input and output. Your
design should consider that a future MMLS release may add a graphical
user interface as a requirement. Isolating all view-related components
in a view subsystem should be a primary design consideration.
- For
the off-line database, the list of
available artists has been provided in comma-separated-value (CSV)
format with 3 fields per line as guid,name,disambiguation
(disambiguation provides additional details, but may be blank). The
type and name may include spaces, commas, or other special characters.
- For
the off-line database, the list of
available songs has been provided in comma-separated-value (CSV)
format with 4 fields per line as guid,artist-guid,duration,title.
The title may contain spaces, commas, or other special characters.
- For
the off-line database, the list of
available releases has been provided in comma-separated-value (CSV)
format with a variable number of fields per line as guid,artist-guid,title,issue-date,medium,tracks
where tracks is a comma-separated list of zero or more song GUIDs.
- The on-line database will use the
MusicBrainz Web Service. The MusicBrainz
Web Service and its use are described in the
Web Services exercise at http://www.se.rit.edu/~swen-262/activities/WebServices.html
- The MMLS shall follow the MusicBrainz Rate Limiting
(throttling, etc.) policy at https://musicbrainz.org/doc/XML_Web_Service/Rate_Limiting
- No more than one request per second
- Provide a unique, meaningful user agent string
- etc.
MMLS R2
Specific Information and Instructions
Along with following the general
guidelines and instructions for your documentation, presentation,
and submission provided on Design Project Guidelines page, you should
also follow these instructions that are specific to the Muze Music
Library System:
- Your design must include at least three significant Design
Patterns from the GoF textbook in addition to the three design
patterns used in R1. While you are encouraged to focus on
the patterns that have been covered up to this point in class, you may
choose one of the bonus patterns or one of the patterns not covered at
all.
- While you are encouraged to identify patterns from the JDK that
you use, these will not count towards your minimum patterns. For
example, you will almost certainly use Java's iterators, but this will
not count as one of your three patterns.
- Refer to the MMLS
R2 Implementation
Evaluation Rubric.