Release History (User Stories)

# From The Group Formerly Known as Jlayer

Member Name, E-mail

---------------------------------------------------------------------------

Zachary Carter, zcarter@umail.ucsb.edu

Alan Savage, alansavage@umail.ucsb.edu

Kyle Dorman, kyledorman@gmail.com

Diana Abbas, dabbas@umail.ucsb.edu

# Structured User Stories (From Oldest to Newest)

# Version 1 <"Monday, January 31, 2005">

USE CASE #1 | The user plays a music CD using a music player configured to access our CDDB server.
Preconditions | 1) A music player is installed and configured to look to our CDDB server. 2) The computer is connected to the Internet, or the CDDB server is running locally.
Success End Condition | Fictitious genre, artist, album, track title and length are displayed in the music player's graphical interface.
Fail End Condition | The music player continues to display default CD information, as if the CCDB server was never contacted.
Trigger | The user clicks the play button on their CD audio player, with a music CD in the disk drive.
Description | If an end user plays a commercially recorded audio CD using a CDDB-aware music player, configured to connect via TCP/IP to our server, the music player (client) will establish a connection with the server. After a handshake, the client will query the server with the CD's discid, which the server will confirm as matched (no matter what). The client will then request the CD information, and the server will provide it, inaccurately (fictitious data), line-by-line. The client will then end the connecion by issuing the quit command.

# Version 2 <"Monday, February 14, 2005">

USE CASE #1 | The server administrator starts the server.
Preconditions | The MySQL database and EJB client are running.
Success End Condition | The server is running and awaiting connections from a client.
Fail End Condition | The server is unable to run or listen for clients.
Trigger | The server administrator starts the server by typing "ant run" from the project directory.
Description | After being triggered, MultiServer's method main instantiates a MultiServer object. The MultiServer object then creates a ServerSocket and begins to listen on the default port. If a client connects, a MultiClientThread is started to deal with the client and the server returns to listening.

USE CASE #2 | The client connects to the database and gets valid information about a CD.
Preconditions | The server is running on the target machine of the client connection.
Success End Condition | The client successfully retrieves information about a CD and disconnects by issuing the quite command.
Fail End Condition | The client does not retrieve any information and is disconnected.
Trigger | The client attempts to access the server by establishing a socket connection.
Description | Upon establishment of a successful connection, the server begins communication by transmitting the banner (initiate the handshake). The client then sends a query in the form of a discid, and the server responds with a confirmation or a failure message, depending on whether or not a matching database file exists. If the file exists, the client may request the data; the server will fetch the file from the database and forward it to the client line-by-line. The client then sends the quit command, the server responds with it's goodbye code, the client disconnects, and the server continues to listen for new connections.

USE CASE #3 | The Client connects and sends malformed data to the server.
Preconditions | The server is running on the client's target machine.
Success End Condition | The client is sent a malformed command error and is disconnected from the server.
Fail End Condition | The client's connection to the database hangs.
Trigger | The client connects to the database and sends a malformed command.
Description | The client connects to the database and sends a bad command. MultiClientThread attempts to process the commands according to the ServerProtocol. ServerProtocol determines that it is a malformed command and returns an appropriate error message. MultiClientThread sends the error to the client and closes the connection.

USE CASE #4 | The client sends a valid request for a CD but there is no entry for that CD in the database.
Preconditions | TThe server is running on the client's target machine.
Success End Condition | The client is informed that there is no entry for that CD and is disconnected.
Fail End Condition | The client hangs waiting for information about a CD, or the client receives a false match from the server.
Trigger | The client connects to the server, handshakes, and sends a valid request for information on a CD.
Description | The client connects to the server and sends a request for information about a CD. The ServerProtocol class processes the command and determines that there is no entry in the database for the CD and return the appropriate error code. The code is then relayed to the client through MultiClientThread. The client then sends the quit command, the server says goodbye, and then disconnects.

# Version 3 <"Monday, February 4, 2005">

USE CASE #5 | The client wants to switch the search option between FileReader and using a MySQL database.
Preconditions | The client has the config.cfg
Success End Condition | The server switches to the chosen search option.
Fail End Condition | The server does not switch to the chosen search option
Trigger | The client changes the config.cfg to DATABASE=FileReader or DATABASE=MySQL
Description | If the client chooses FileReader, then database references are handled by the FileOpener class, using File Readers to read database entries off of a local disk. Setting it to MySQL causes database references to be handled by EJBs and the MySQL server, via the EJBClient class.