3430 lines
87 KiB
HTML
3430 lines
87 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta content="text/html; charset=ISO-8859-2"
|
|
http-equiv="content-type">
|
|
<title>LiveSupport Local storage specification</title>
|
|
<meta content="Ákos Maróy" name="author">
|
|
</head>
|
|
<body>
|
|
<h1>Preface</h1>
|
|
This document is part of the <a href="http://livesupport.campware.org/">LiveSupport</a>
|
|
project, Copyright © 2004 <a href="http://www.mdlf.org/">Media
|
|
Development Loan Fund</a>, under the GNU <a
|
|
href="http://www.gnu.org/licenses/gpl.html">GPL</a>.<br>
|
|
<ul>
|
|
<li>Author: $Author: fgerlits $</li>
|
|
<li>Version: $Revision: 1.4 $</li>
|
|
<li>Location: $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/doc/model/LocalStorage/index.html,v $</li>
|
|
</ul>
|
|
<h1>Scope</h1>
|
|
This document contains the specification of the LiveSupport Local
|
|
storage component.<br>
|
|
<br>
|
|
This document contains embedded <a
|
|
href="http://www.w3.org/Graphics/SVG/">SVG</a> figures, thus an SVG
|
|
capable browser is needed to view it, or an SVG plugin like <a
|
|
href="http://www.adobe.com/svg/">Adobe's SVG Viewer</a>.<br>
|
|
<h1>Requirements</h1>
|
|
<h2>Overview<br>
|
|
</h2>
|
|
The purpose of the Local storage component is to store Audio Clips
|
|
locally.<br>
|
|
<h2>Goals</h2>
|
|
The goal of the local storage system is to store Audio Clips locally.
|
|
Audio Clips contain audio data bundled with metadata describing it.
|
|
Storing locally means that the binary audio data is available not just
|
|
as a stream, but also as random seekable file.<br>
|
|
The local storage contains Playlists also. These are metadata
|
|
files containing a list of Audio Clip IDs with extra (fade in / fade out)
|
|
information.</br>
|
|
<h2>System functions</h2>
|
|
The main system functions are described below. There are three
|
|
categories for these functions:<br>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top">function category<br>
|
|
</th>
|
|
<th valign="top">meaning<br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
<td valign="top">Should perform, and the user should be cognizant
|
|
that it is performed<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">hidden<br>
|
|
</td>
|
|
<td valign="top">Should perform, but not visible to the users.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">frill<br>
|
|
</td>
|
|
<td valign="top">Optional<br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<br>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top">ref#<br>
|
|
</th>
|
|
<th valign="top">function<br>
|
|
</th>
|
|
<th valign="top">category<br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F1.1<br>
|
|
</td>
|
|
<td valign="top">Store audio clips<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F1.2<br>
|
|
</td>
|
|
<td valign="top">Provide seekable access to audio data<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F1.3<br>
|
|
</td>
|
|
<td valign="top">Delete stored clips<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F1.4<br>
|
|
</td>
|
|
<td valign="top">Update stored clips<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F1.5<br>
|
|
</td>
|
|
<td valign="top">Search Audio clips by querying metadata<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F2.1<br>
|
|
</td>
|
|
<td valign="top">Create new playlists<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F2.2<br>
|
|
</td>
|
|
<td valign="top">Access playlists for editing<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F2.3<br>
|
|
</td>
|
|
<td valign="top">Delete playlists<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F2.4<br>
|
|
</td>
|
|
<td valign="top">Access playlists for execution<br>
|
|
</td>
|
|
<td valign="top">evident<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h2>System attributes</h2>
|
|
Generic attributes<br>
|
|
<br>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top">ref#<br>
|
|
</th>
|
|
<th valign="top">attribute<br>
|
|
</th>
|
|
<th valign="top">details and constraints<br>
|
|
</th>
|
|
<th valign="top">category<br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">A1.1<br>
|
|
</td>
|
|
<td valign="top">operating system platform<br>
|
|
</td>
|
|
<td valign="top">Linux<br>
|
|
</td>
|
|
<td valign="top">must<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">A1.2<br>
|
|
</td>
|
|
<td valign="top">local interface<br>
|
|
</td>
|
|
<td valign="top">locally callable API<br>
|
|
</td>
|
|
<td valign="top">must<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">A1.4<br>
|
|
</td>
|
|
<td valign="top">supported audio formats<br>
|
|
</td>
|
|
<td valign="top">Ogg Vorbis, MP3, wav<br>
|
|
</td>
|
|
<td valign="top">must<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">A1.5<br>
|
|
</td>
|
|
<td valign="top">file system level interface<br>
|
|
</td>
|
|
<td valign="top">adding, updated and delete from the local
|
|
storage can be done by moving files within the file system by legacy
|
|
tools<br>
|
|
</td>
|
|
<td valign="top">frill<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">A1.6<br>
|
|
</td>
|
|
<td valign="top">uniquely identifiable Audio clips<br>
|
|
</td>
|
|
<td valign="top">all audio clips should be uniquely identifiable,
|
|
even when moved among Local storage systems<br>
|
|
</td>
|
|
<td valign="top">must<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
Attributes related to system functions<br>
|
|
<br>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top">ref#<br>
|
|
</th>
|
|
<th valign="top">function<br>
|
|
</th>
|
|
<th valign="top">ref#<br>
|
|
</th>
|
|
<th valign="top">attribute<br>
|
|
</th>
|
|
<th valign="top">details and constraints<br>
|
|
</th>
|
|
<th valign="top">category<br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">F1.2<br>
|
|
</td>
|
|
<td valign="top">Provide seekable access to audio data<br>
|
|
</td>
|
|
<td valign="top">A1.3<br>
|
|
</td>
|
|
<td valign="top">provide file handle<br>
|
|
</td>
|
|
<td valign="top">provide randomly seekable file level access to
|
|
raw
|
|
audio data<br>
|
|
</td>
|
|
<td valign="top">must<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h2>Essential use cases</h2>
|
|
This section lists generic (essential) uses cases, that do not contain
|
|
architecture-specific considerations.<br>
|
|
<br>
|
|
<object type="image/svg+xml" name="essential use cases"
|
|
data="EssentialUseCases.svg" width="600" height="780"></object>
|
|
<h3>UC-1 Store or update Audio clip<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-1 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Store or update Audio clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Storage maintainer </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To store a new Audio clip in the local storage,
|
|
or update (replace) an already stored Audio clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Storage maintainer contacts the Local
|
|
storage with the aim
|
|
of uploading and storing a new Audio Clip. If the uploaded Audio clip
|
|
is already stored in Local storage (with respect of having the same
|
|
unique id), the stored one is replaced with the uploaded one.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F1.1, F1.4, A1.6<br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Storage maintainer connects to the Local storage
|
|
with the
|
|
intention of storing an Audio clip<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Storage maintainer provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Storage maintainer
|
|
and grants
|
|
access.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer presents the new Audio
|
|
clip data,
|
|
including raw audio data and metadata<br>
|
|
</td>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The system verifies the received data<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>6.1</b><br>
|
|
</td>
|
|
<td valign="top">If the presented Audio clip does not contain a
|
|
unique id, one is generated.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>6.2</b><br>
|
|
</td>
|
|
<td valign="top">If the presented Audio clip contains a unique
|
|
id, and there already is an Audio clip stored with the same id, the
|
|
stored one is replaced with the uploaded Audio clip.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>7.</b><br>
|
|
</td>
|
|
<td valign="top">The system stores the received Audio clip and
|
|
notifies the Storage maintainer of the actions taken and the unique id
|
|
of the stored clip.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>8.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer disconnects<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Storage maintainer can not be
|
|
authenticated, he is notified, and the use case ends.</li>
|
|
<li><b>action 6.2:</b> if the raw audio data of the Audio clip is
|
|
currently
|
|
being accessed (see UC-4), it can not be deleted. the user is notified
|
|
and the use case ends.</li>
|
|
</ul>
|
|
<br>
|
|
<h3>UC-2 Delete Audio clip<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-2 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Delete Audio clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Storage maintainer </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To delete an existing Audio clip in the local
|
|
storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Storage maintainer contacts the Local
|
|
storage with the aim
|
|
of deleting an existing Audio Clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F1.3 </td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Storage maintainer connects to the Local storage
|
|
with the
|
|
intention of deleting an Audio clip<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Storage maintainer provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Storage maintainer
|
|
and grants
|
|
access.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer presents the unique id of
|
|
an Audio clip stored in Local storage for deletion<br>
|
|
</td>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The system deletes the Audio clip corresponding
|
|
to the presented unique id.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>6.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer disconnects<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Storage maintainer can not be
|
|
authenticated, he is notified, and the use case ends.</li>
|
|
<li><b>action 5:</b> if no Audio clip is stored with the presented
|
|
id, the Storage maintainer is notified. the use case ends.</li>
|
|
<li><b>action 5:</b> if the raw audio data of the Audio clip is
|
|
currently being accessed (see UC-4), it can not be deleted. the user is
|
|
notified and the use case ends.<br>
|
|
</li>
|
|
</ul>
|
|
<br>
|
|
<h3>UC-3 Update Audio clip metadata<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-3 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Update Audio clip metadata<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Storage maintainer </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To update the metadata of an Audio clip, without
|
|
uploading raw audio data again.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Storage maintainer contacts the Local
|
|
storage with the aim
|
|
of updating the metadata for an already stored Audio clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F1.4 </td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Storage maintainer connects to the Local storage
|
|
with the
|
|
intention of updating the metadata for an Audio clip<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Storage maintainer provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Storage maintainer
|
|
and grants
|
|
access.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer presents the unique id of
|
|
an Audio clip stored in Local storage and the new metadata for that
|
|
Audio clip<br>
|
|
</td>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The system verifies the clip id and the metadata<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>6.</b><br>
|
|
</td>
|
|
<td valign="top">The system replaces the metadata of the Audio
|
|
clip with the presented one<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>7.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer disconnects<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Storage maintainer can not be
|
|
authenticated, he is notified, and the use case ends.</li>
|
|
<li><b>action 5:</b> if no Audio clip is stored with the presented
|
|
id, the Storage maintainer is notified. the use case ends.<br>
|
|
</li>
|
|
</ul>
|
|
<br>
|
|
<h3>UC-4 Access raw audio data<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-4 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Access raw audio data<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Audio player<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To access raw audio of Audio clips stored in the
|
|
Local storage.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Audio player accesses the raw audio data
|
|
with the ability of randomly seeking in it.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F1.2, A1.3<br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Audio player connects to the Local storage with
|
|
the
|
|
intention of accessing raw audio data<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Audio player provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Audio player and
|
|
grants
|
|
access.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The Audio player presents the unique id of an
|
|
Audio clip stored in Local storage that he wants to access<br>
|
|
</td>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The systems looks up the Audio clip, and
|
|
provides a seekable handle to the Audio player<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>6.</b><br>
|
|
</td>
|
|
<td valign="top">The Audio player accesses the raw audio data,
|
|
including seeking in it.<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>7.</b><br>
|
|
</td>
|
|
<td valign="top">The Audio player closes it's access and
|
|
disconnects<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Audio player can not be authenticated, he
|
|
is notified, and the use case ends.</li>
|
|
<li><b>action 5:</b> if no Audio clip is stored with the presented
|
|
id, the Audio player is notified. the use case ends.</li>
|
|
</ul>
|
|
<br>
|
|
<h3>UC-5 Search in metadata<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-5 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Search in metadata<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Storage maintainer<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To search in the metadata of audio clips<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Storage maintainer searches through the
|
|
stored Audio clips by specifying search criteria for the metadata of
|
|
the clips<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F1.5<br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Storage maintainer connects to the Local storage
|
|
with the
|
|
intention of searching.<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Storage maintainer provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Storage maintainer
|
|
and grants
|
|
access.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The system provides a way of specifying search
|
|
criteria with respect to the existing metadata structures<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer specifies a search
|
|
criteria<br>
|
|
</td>
|
|
<td valign="top"><b>6.</b><br>
|
|
</td>
|
|
<td valign="top">The system searches through the metadata of
|
|
contained Audio clips, and presents a list of matches<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>7.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer refines his search and
|
|
searches again<br>
|
|
</td>
|
|
<td valign="top"><b>8.</b><br>
|
|
</td>
|
|
<td valign="top">The system does a new search according to the
|
|
refined criteria, and presents the results to the Storage maintainer<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>9.</b><br>
|
|
</td>
|
|
<td valign="top">The storage maintainer reviews the results<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>10.</b><br>
|
|
</td>
|
|
<td valign="top">The storage maintainer disconnects<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Storage maintainer can not be
|
|
authenticated, he is notified, and the use case ends.</li>
|
|
</ul>
|
|
<br>
|
|
|
|
<h3>UC-6 Create playlist<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-6 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Create playlist<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Storage maintainer </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To store a new Playlist in the local storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Storage maintainer contacts the Local
|
|
storage with the aim of uploading a new Playlist. The Local
|
|
storage stores the new metafile under the new ID.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F2.1<br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Storage maintainer connects to the Local storage
|
|
with the intention of uploading a new Playlist<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Storage maintainer provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Storage maintainer
|
|
and grants access.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer presents the new Playlist
|
|
ID and the new Playlist metafile<br>
|
|
</td>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The system verifies that there is no Playlist yet
|
|
in the Local storage with the given ID<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>6.</b><br>
|
|
</td>
|
|
<td valign="top">The system stores the received Playlist metafile
|
|
and notifies the Storage maintainer of the action taken.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>7.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer disconnects<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Storage maintainer can not be
|
|
authenticated, she is notified, and the use case ends.</li>
|
|
<li><b>action 5:</b> if there is already a Playlist in the Local storage
|
|
with the given ID, the user is notified and the use case ends.</li>
|
|
</ul>
|
|
<br>
|
|
|
|
<h3>UC-7 Edit playlist<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-7 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Edit playlist<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Storage maintainer </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To modify an existing Playlist in the local
|
|
storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Storage maintainer contacts the Local
|
|
storage with the aim of editing an existing Playlist. The Local
|
|
storage retrieves the Playlist and marks it as being edited. The Storage
|
|
maintainer modifies the Playlist. The Storage maintainer saves the
|
|
modified Playlist, the Local storage stores it in place of the old
|
|
Playlist and marks it as no longer being edited.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F2.2<br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Storage maintainer connects to the Local storage
|
|
with the intention of editing a Playlist<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Storage maintainer provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Storage maintainer
|
|
and grants access<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer presents a Playlist ID<br>
|
|
</td>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The system verifies that there is a Playlist
|
|
in the Local storage with the given ID, and it is not currently
|
|
being edited<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>6.</b><br>
|
|
</td>
|
|
<td valign="top">The system marks the Playlist with the given ID
|
|
as being edited<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>7.</b><br>
|
|
</td>
|
|
<td valign="top">The system returns the Playlist metafile with
|
|
the given ID and notifies the Storage maintainer of the actions taken<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>8.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer modifies the Playlist<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>9.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer presents the new Playlist
|
|
metafile for saving<br>
|
|
</td>
|
|
<td valign="top"><b>10.</b><br>
|
|
</td>
|
|
<td valign="top">The system verifies that the user had opened this
|
|
Playlist earlier<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>11.</b><br>
|
|
</td>
|
|
<td valign="top">The system stores the new Playlist metafile in
|
|
place of the old one, marks it as no longer being edited,
|
|
and notifies the Storage maintainer of the actions taken<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>12.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer disconnects.<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Storage maintainer can not be
|
|
authenticated, she is notified, and the use case ends.</li>
|
|
<li><b>action 5:</b> if there is no Playlist in the Local storage
|
|
with the given ID, or if the Playlist is already being edited,
|
|
the user is notified and the use case ends.</li>
|
|
<li><b>action 10:</b> if the user cannot be identified as the same
|
|
that opened the Playlist for editing, the user is notified, and the
|
|
use case continues at point 8.</li></ul>
|
|
<br>
|
|
|
|
<h3>UC-8 Delete playlist<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-8 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Delete playlist<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Storage maintainer </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To delete a Playlist from the local storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Storage maintainer contacts the Local
|
|
storage with the aim of deleting a Playlist. The system deletes the
|
|
Playlist with the given ID from the Local storage.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F2.3<br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Storage maintainer connects to the Local storage
|
|
with the intention of deleting a Playlist<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Storage maintainer provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Storage maintainer
|
|
and grants access<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer presents the ID of the
|
|
Playlist to be deleted<br>
|
|
</td>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The system verifies that there is a Playlist
|
|
in the Local storage with the given ID, and it is not currently being
|
|
edited<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>6.</b><br>
|
|
</td>
|
|
<td valign="top">The system deletes the given Playlist from
|
|
the Local storage
|
|
and notifies the Storage maintainer of the action taken<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>7.</b><br>
|
|
</td>
|
|
<td valign="top">The Storage maintainer disconnects.<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Storage maintainer can not be
|
|
authenticated, she is notified, and the use case ends.</li>
|
|
<li><b>action 5:</b> if there is no Playlist in the Local storage
|
|
with the given ID, or if the Playlist is currently being edited,
|
|
the user is notified and the use case ends.</li>
|
|
</ul>
|
|
<br>
|
|
|
|
<h3>UC-9 Access playlist<br>
|
|
</h3>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>ref#</b> </td>
|
|
<td valign="top">UC-9 </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>use case</b> </td>
|
|
<td valign="top">Access playlist<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>type</b> </td>
|
|
<td valign="top">primary, essential </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>actors</b> </td>
|
|
<td valign="top">Audio player </td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>purpose</b> </td>
|
|
<td valign="top">To access a Playlist metafile in order to
|
|
execute (play) it<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>overview</b> </td>
|
|
<td valign="top">The Audio player contacts the Local
|
|
storage with the aim of accessing a Playlist. The Local storage
|
|
returns the requested Playlist metafile.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>references</b> </td>
|
|
<td valign="top">F2.4<br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4>Typical course of events</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th colspan="2" valign="top">actor action <br>
|
|
</th>
|
|
<th colspan="2" valign="top">system response <br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>1.</b> </td>
|
|
<td valign="top">Audio player connects to the Local storage
|
|
with the intention of accessing a Playlist<br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>2.</b> </td>
|
|
<td valign="top">The Audio player provides authentication
|
|
information </td>
|
|
<td valign="top"><b>3.</b> </td>
|
|
<td valign="top">The system authenticates the Audio player
|
|
and grants access<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>4.</b><br>
|
|
</td>
|
|
<td valign="top">The Audio player presents a Playlist ID<br>
|
|
</td>
|
|
<td valign="top"><b>5.</b><br>
|
|
</td>
|
|
<td valign="top">The system verifies that there is a Playlist
|
|
in the Local storage with the given ID<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><b>6.</b><br>
|
|
</td>
|
|
<td valign="top">The system returns the requested Playlist metafile
|
|
and notifies the Audio player of the action taken<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>7.</b><br>
|
|
</td>
|
|
<td valign="top">The Audio player reads the Playlist, and saves
|
|
a private copy<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>8.</b><br>
|
|
</td>
|
|
<td valign="top">The Audio player notifies the Local storage that
|
|
it no longer needs the Playlist, and disconnects.<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
<td valign="top"> <br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Alternate courses</h4>
|
|
<ul>
|
|
<li><b>action 3:</b> if the Audio player can not be
|
|
authenticated, she is notified, and the use case ends.</li>
|
|
<li><b>action 5:</b> if there is no Playlist in the Local storage
|
|
with the given ID, the user is notified and the use case ends.</li>
|
|
</ul>
|
|
<br>
|
|
|
|
<h2>Conceptual model</h2>
|
|
The following figure displays the semantic concepts identified for the
|
|
Scheduler daemon, and the main associations between the concepts.<br>
|
|
<br>
|
|
<object type="image/svg+xml" name="essential use cases"
|
|
data="Concepts.svg" width="650" height="600"></object>
|
|
<br>
|
|
<h3>Concepts</h3>
|
|
<br>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top">concept<br>
|
|
</th>
|
|
<th valign="top">description<br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Authentication</b><br>
|
|
</td>
|
|
<td valign="top">Component responsible for doing the
|
|
authentications <br>
|
|
</td>
|
|
</tr>
|
|
<td valign="top"><b>Session ID</b><br>
|
|
</td>
|
|
<td valign="top">An identifier issued by Authentication, to be
|
|
used by subsequent operations.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Unique ID<br>
|
|
</b> </td>
|
|
<td valign="top">A globally unique identifier used to to
|
|
differentiate between objects that might even be created on different
|
|
systems. Even though the whole space of Id is not known, the Ids must
|
|
be unique.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>MetaData</b><br>
|
|
</td>
|
|
<td valign="top">Data about the AudioClip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>SearchCriteria<br>
|
|
</b></td>
|
|
<td valign="top">Describes the search parameters when doing a
|
|
search on the MetaData<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>AudioClip</b><br>
|
|
</td>
|
|
<td valign="top">The basic unit of audio handled by Local storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>RawAudioData<br>
|
|
</b></td>
|
|
<td valign="top">The binary audio data contained in an Audio clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Storage maintainer</b><br>
|
|
</td>
|
|
<td valign="top">The actor that maintains the contents of the
|
|
Local storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Audio player</b><br>
|
|
</td>
|
|
<td valign="top">The actor that accesses the raw audio contained
|
|
in the Local storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Playlist</b><br>
|
|
</td>
|
|
<td valign="top">A metafile containing AudioClip IDs and some
|
|
extra (fade in / fade out) information<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>URL</b><br>
|
|
</td>
|
|
<td valign="top">The location of a metafile (in the local filesystem)<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Token</b><br>
|
|
</td>
|
|
<td valign="top">An identifier used to match the parts of two-part
|
|
operations, e.g., access--release or edit--save<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h3>Associations</h3>
|
|
<br>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<th valign="top">source<br>
|
|
</th>
|
|
<th valign="top">association<br>
|
|
</th>
|
|
<th valign="top">target<br>
|
|
</th>
|
|
<th valign="top">description<br>
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">AudioClip<br>
|
|
</td>
|
|
<td valign="top">Is identified by<br>
|
|
</td>
|
|
<td valign="top">UniqueId<br>
|
|
</td>
|
|
<td valign="top">This is a globally unique id for each Audio clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">AudioClip<br>
|
|
</td>
|
|
<td valign="top">Is described by<br>
|
|
</td>
|
|
<td valign="top">MetaData<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">AudioClip<br>
|
|
</td>
|
|
<td valign="top">Contains<br>
|
|
</td>
|
|
<td valign="top">RawAudioData<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">Storage maintainer<br>
|
|
</td>
|
|
<td valign="top">Is Authenticated by<br>
|
|
</td>
|
|
<td valign="top">Authentication<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">Storage maintainer<br>
|
|
</td>
|
|
<td valign="top">Searches in<br>
|
|
</td>
|
|
<td valign="top">MetaData<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">Storage maintainer<br>
|
|
</td>
|
|
<td valign="top">Searches by<br>
|
|
</td>
|
|
<td valign="top">SearchCriteria<br>
|
|
</td>
|
|
<td valign="top">The storage maintainer specifies such a
|
|
SearchCriteria when doing a search on MetaData<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">Storage maintainer<br>
|
|
</td>
|
|
<td valign="top">Manages<br>
|
|
</td>
|
|
<td valign="top">AudioClip<br>
|
|
</td>
|
|
<td valign="top">This includes uploading, updating and deleting
|
|
AudioClips<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">Audio player<br>
|
|
</td>
|
|
<td valign="top">Is Authenticated by<br>
|
|
</td>
|
|
<td valign="top">Authentication<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">Audio player<br>
|
|
</td>
|
|
<td valign="top">Accesses<br>
|
|
</td>
|
|
<td valign="top">RawAudioData<br>
|
|
</td>
|
|
<td valign="top">This is a seekable access to raw audio data.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">Playlist<br>
|
|
</td>
|
|
<td valign="top">Is identified by<br>
|
|
</td>
|
|
<td valign="top">UniqueId<br>
|
|
</td>
|
|
<td valign="top">This is a globally unique id for each Playlist<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">Storage maintainer<br>
|
|
</td>
|
|
<td valign="top">Manages<br>
|
|
</td>
|
|
<td valign="top">Playlist<br>
|
|
</td>
|
|
<td valign="top">This includes creating, editing, deleting and
|
|
accessing Playlists<br>
|
|
</td>
|
|
</tr>
|
|
<td valign="top">Playlist<br>
|
|
</td>
|
|
<td valign="top">Is associated with<br>
|
|
</td>
|
|
<td valign="top">URL<br>
|
|
</td>
|
|
<td valign="top">The path of (a copy of) the playlist metafile<br>
|
|
</td>
|
|
</tr>
|
|
<td valign="top">Playlist<br>
|
|
</td>
|
|
<td valign="top">Is associated with<br>
|
|
</td>
|
|
<td valign="top">Token<br>
|
|
</td>
|
|
<td valign="top">An identifier issued by access operations, to be
|
|
used for identification by release operations<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h2>System behavior</h2>
|
|
The behavior of the system as a whole as experienced from the outside
|
|
is discussed in this section.<br>
|
|
<h3>System sequence diagrams</h3>
|
|
System diagrams are presented for each use case below.<br>
|
|
<h4>UC-1 Store or update Audio clip</h4>
|
|
<object type="image/svg+xml" name="authenticate user sequence diagram"
|
|
data="Storeorupdateaudioclip_SequenceDiagram.svg" width="650"
|
|
height="200"></object>
|
|
<br>
|
|
<h4>UC-2 Delete Audio clip</h4>
|
|
<object type="image/svg+xml" name="authenticate user sequence diagram"
|
|
data="Deleteaudioclip_SequenceDiagram.svg" width="600" height="200"></object>
|
|
<br>
|
|
<h4>UC-3 Update Audio clip metadata</h4>
|
|
<object type="image/svg+xml" name="authenticate user sequence diagram"
|
|
data="UpdateAudioclipmetadata_SequenceDiagram.svg" width="650"
|
|
height="200"></object>
|
|
<br>
|
|
<h4>UC-4 Access raw audio data</h4>
|
|
<object type="image/svg+xml" name="authenticate user sequence diagram"
|
|
data="Accessrawaudiodata_SequenceDiagram.svg" width="600" height="200"></object>
|
|
<br>
|
|
<h4>UC-5 Search in metadata</h4>
|
|
<object type="image/svg+xml" name="authenticate user sequence diagram"
|
|
data="Searchinmetadata_SequenceDiagram.svg" width="650" height="200"></object>
|
|
<br>
|
|
<h4>UC-6 Create playlist</h4>
|
|
<object type="image/svg+xml" name="create playlist sequence diagram"
|
|
data="Createplaylist_SequenceDiagram.svg" width="650" height="200"></object>
|
|
<br>
|
|
<h4>UC-7 Edit playlist</h4>
|
|
<object type="image/svg+xml" name="create playlist sequence diagram"
|
|
data="Editplaylist_SequenceDiagram.svg" width="650" height="200"></object>
|
|
<br>
|
|
<h4>UC-8 Delete playlist</h4>
|
|
<object type="image/svg+xml" name="create playlist sequence diagram"
|
|
data="Deleteplaylist_SequenceDiagram.svg" width="650" height="200"></object>
|
|
<br>
|
|
<h4>UC-9 Access playlist</h4>
|
|
<object type="image/svg+xml" name="create playlist sequence diagram"
|
|
data="Accessplaylist_SequenceDiagram.svg" width="650" height="200"></object>
|
|
<br>
|
|
<h3>System objects</h3>
|
|
The following figure shows the system objects and their functions, as
|
|
derived from the system sequence diagrams.<br>
|
|
<object type="image/svg+xml" name="system behaviour"
|
|
data="Systembehaviour.svg" width="450" height="320"></object>
|
|
<h3>Contracts</h3>
|
|
For all operations exposed in the system sequence diagrams, the
|
|
following contracts are defined.<br>
|
|
<h4>Contract for Local storage : authenticate</h4>
|
|
see Authentication : Authenticate<br>
|
|
<h4>Contract for Local storage : existsAudioClip<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">existsAudioClip<br>
|
|
(sessionId : SessionId, <br>
|
|
audioClipId : UniqueId)<br>
|
|
: boolean<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Check if an Audio clip
|
|
with the specified id is stored in local storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">true if an Audio clip
|
|
with the specified id is stored in Local storage, false otherwise<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td valign="top">none<br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : storeAudioClip<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">storeAudioClip<br>
|
|
(sessionId : SessionId, <br>
|
|
audioClip : AudioClip)<br>
|
|
: UniqueId<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Store a new audio clip
|
|
or replace an existing one.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-1<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if this is an AudioClip
|
|
update, and the RawAudioData of the already existing AudioClip is is
|
|
being accessed (see UC-4), report as an error.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">the unique id of the
|
|
stored audio clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">if this is a new audio clip:</td>
|
|
<td valign="top">an AudioClip object is created</td>
|
|
<td valign="top">instance creation<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">a UniqueId is generated for the new clip<br>
|
|
</td>
|
|
<td valign="top">instance creation<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the UniqueId is associated with the AudioClip<br>
|
|
</td>
|
|
<td valign="top">association formed<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">a MetaData object is created and filled with the
|
|
presented contents<br>
|
|
</td>
|
|
<td valign="top">instance creation<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the MetaData is associated with the AudioClip<br>
|
|
</td>
|
|
<td valign="top">association formed<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">a RawAudioData object is created and filled with
|
|
the presented contents<br>
|
|
</td>
|
|
<td valign="top">instance creation<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the RawAudioData is associated with the AudioClip<br>
|
|
</td>
|
|
<td valign="top">association formed<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top">if the clip already existed:<br>
|
|
</td>
|
|
<td valign="top">the contents of MetaData for the AudioClip are
|
|
replaced by the presented contents<br>
|
|
</td>
|
|
<td valign="top">attribute modification<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the contents of RawAudioData for the AudioClip
|
|
are replaced by the presented contents<br>
|
|
</td>
|
|
<td valign="top">attribute modification<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : deleteAudioClip<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">deleteAudioClip<br>
|
|
(sessionId : SessionId, <br>
|
|
audioClipId : UniqueId)<br>
|
|
: void<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Delete an existing Audio
|
|
clip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-2<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if no Audio clip with
|
|
the specified id exists, report as an error.<br>
|
|
if the RawAudioData for AudioClip is being accessed (see UC-4), report
|
|
as an error.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the UniqueId for the AudioClip is deleted<br>
|
|
</td>
|
|
<td valign="top">instance deletion<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the MetaData for the AudioClip is deleted<br>
|
|
</td>
|
|
<td valign="top">instance deletion<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the RawAudioData for the AudioClip is deleted<br>
|
|
</td>
|
|
<td valign="top">instance deletion<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the AudioClip is deleted<br>
|
|
</td>
|
|
<td valign="top">instance deletion<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : updateAudioClipMetadata<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">updateAudioClipMetadata<br>
|
|
(sessionId : SessionId, <br>
|
|
audioClipId : UniqueId,<br>
|
|
newMetadata : MetaData)<br>
|
|
: void<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Update the metadata of
|
|
an Audio clip stored in Local storage<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-3<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if no Audio clip with
|
|
the specified id exists, report as an error.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the contents of MetaData for the AudioClip are
|
|
replaced with the presented contents<br>
|
|
</td>
|
|
<td valign="top">attribute modification<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : accessRawAudioData<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">accessRawAudioData<br>
|
|
(sessionId : SessionId, <br>
|
|
audioClipId : UniqueId)<br>
|
|
: RawAudioData<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Get access to raw audio
|
|
data of an AudioClip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-4<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if no Audio clip with
|
|
the specified id exists, report as an error.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">the RawAudioData for the
|
|
AudioClip identified with the supplied UniqueId<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the currentlyAccessing attribute for
|
|
RawAudioData for AudioClip is increased by one<br>
|
|
</td>
|
|
<td valign="top">attribute modification<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : releaseRawAudioData<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">releaseRawAudioData<br>
|
|
(sessionId : SessionId, <br>
|
|
rawAudioData : RawAudioData)<br>
|
|
: void<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Release access for raw
|
|
audio data<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-4<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if the specified
|
|
RrawAudioData is not stored in Local storage, indicate as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the currentlyAccessing attribute for
|
|
RawAudioData for AudioClip is decreased by one<br>
|
|
</td>
|
|
<td valign="top">attribute modification<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : searchMetadata<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">searchMetadata<br>
|
|
(sessionId : SessionId, <br>
|
|
criteria : SearchCriteria)<br>
|
|
: UniqueId<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Search through the
|
|
metadata of stored AudioClips, and return all matching clip ids<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-5<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">A range of Audio clip
|
|
ids, for which MetaData matches the supplied search criteria<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="left" valign="top">none<br>
|
|
</td>
|
|
<td align="center" valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : getAudioClip<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">getAudioClip<br>
|
|
(sessionId : SessionId, <br>
|
|
audioClipId : UniqueId)<br>
|
|
: AudioClip<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Return the contents of
|
|
an Audio clip.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">see Playlist editor<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if no Audio clip by the
|
|
specified id exists, report as an error.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">The Audio clip,
|
|
specified by the supplied id.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="left" valign="top">none<br>
|
|
</td>
|
|
<td align="center" valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : createPlaylist<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">createPlaylist<br>
|
|
(sessionId : SessionId, <br>
|
|
playlistId : UniqueId)<br>
|
|
: void<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Create a new Playlist
|
|
metafile.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-6<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if a Playlist with the
|
|
given playlistId already exists, report as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"></td>
|
|
<td valign="top">a Playlist object is created</td>
|
|
<td valign="top">instance creation<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the new Playlist is marked as currently
|
|
not being edited<br>
|
|
</td>
|
|
<td valign="top">attribute modification<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : editPlaylist<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">editPlaylist<br>
|
|
(sessionId : SessionId, <br>
|
|
playlistId : UniqueId)<br>
|
|
: { playlistURL : URL, playlistToken: Token }<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Open a Playlist metafile
|
|
for editing.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-7<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if no Playlist with the
|
|
given playlistId exists, or if the Playlist has already been marked as
|
|
being edited, report as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">a URL of a Playlist
|
|
metafile, and a token identifying it<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the Playlist is marked as currently
|
|
being edited<br>
|
|
</td>
|
|
<td valign="top">attribute modification<br>
|
|
</td>
|
|
</tr>
|
|
<td valign="top"><br></td>
|
|
<td valign="top">the Playlist metafile and the URL returned are
|
|
associated with the token returned<br>
|
|
</td>
|
|
<td valign="top">association formed<br>
|
|
</td>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : savePlaylist<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">savePlaylist<br>
|
|
(sessionId : SessionId, <br>
|
|
playlistToken : Token, <br>
|
|
newPlaylist : Playlist)<br>
|
|
: void<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Store a new Playlist
|
|
metafile in place of the old one.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-7<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">TODO: decide exactly what
|
|
the newPlaylist argument looks like<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if the playlistToken argument
|
|
does not match a token generated earlier in this session by editPlaylist(),
|
|
report as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">the Playlist has been marked
|
|
as being edited in the same session</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the Playlist is marked as currently
|
|
not being edited<br>
|
|
</td>
|
|
<td valign="top">attribute modification<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"></td>
|
|
<td valign="top">the playlistToken token and the URL returned earlier
|
|
by editPlaylist() together with it are no longer valid</td>
|
|
<td valign="top">association broken<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : deletePlaylist<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">deletePlaylist<br>
|
|
(sessionId : SessionId, <br>
|
|
playlistId : UniqueId)<br>
|
|
: void<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Delete a Playlist
|
|
metafile.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-8<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if no Playlist with the
|
|
given playlistId exists, or if the Playlist is marked as currently
|
|
being edited, report as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"></td>
|
|
<td valign="top">a Playlist object is deleted</td>
|
|
<td valign="top">instance deletion<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : accessPlaylist<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">accessPlaylist<br>
|
|
(sessionId : SessionId, <br>
|
|
playlistId : UniqueId)<br>
|
|
: { playlistURL : URL, playlistToken : Token }<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Access (read) a Playlist
|
|
metafile.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-9<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">for this method, it does
|
|
not matter whether the Playlist is being edited or not -- the latest
|
|
saved state of the Playlist should be returned<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if no Playlist with the
|
|
given playlistId exists, report as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">a URL of a Playlist
|
|
metafile, and a token identifying it<br>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
</tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the Playlist and the URL returned are
|
|
associated with the token returned<br>
|
|
</td>
|
|
<td valign="top">association formed<br>
|
|
</td>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : releasePlaylist<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">releasePlaylist<br>
|
|
(sessionId : SessionId, <br>
|
|
playlistToken : Token)<br>
|
|
: void<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Release the resources
|
|
obtained earlier by accessPlaylist().<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-9<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if the playlistToken argument
|
|
does not match a token generated earlier in this session by accessPlaylist(),
|
|
report as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"></td>
|
|
<td valign="top">the playlistToken token and the URL returned earlier
|
|
by accessPlaylist() together with it are no longer valid</td>
|
|
<td valign="top">association broken<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : existsPlaylist<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">existsPlaylist<br>
|
|
(sessionId : SessionId, <br>
|
|
playlistId : UniqueId)<br>
|
|
: bool<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Check whether a Playlist
|
|
metafile with the given playlist ID exists.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-6, UC-7, UC-8, UC-9<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">true or false<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : playlistIsAvailable<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">playlistIsAvailable<br>
|
|
(sessionId : SessionId, <br>
|
|
playlistId : UniqueId)<br>
|
|
: bool<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Check whether a Playlist
|
|
metafile with the given playlist ID is available for editing, i.e., exists
|
|
and has not been opened for editing yet.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-7<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">true if the playlist exists
|
|
and is available; false if either condition fails<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : accessAudioClip<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">accessAudioClip<br>
|
|
(sessionId : SessionId, <br>
|
|
audioClipId : UniqueId)<br>
|
|
: { audioClipURL : URL, audioClipToken : Token }<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Access (read) an Audio
|
|
Clip metafile.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-4<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if no AudioClip with the
|
|
given audioClipId exists, report as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">a URL of an AudioClip
|
|
metafile, and a token identifying it<br>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
</tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top">the AudioClip and the URL returned are
|
|
associated with the token returned<br>
|
|
</td>
|
|
<td valign="top">association formed<br>
|
|
</td>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<h4>Contract for Local storage : releaseAudioClip<br>
|
|
</h4>
|
|
<table width="100%" border="0" cellspacing="2" cellpadding="2">
|
|
<tbody>
|
|
<tr>
|
|
<td valign="top"><b>Name</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">releaseAudioClip<br>
|
|
(sessionId : SessionId, <br>
|
|
audioClipToken : Token)<br>
|
|
: void<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Responsibilities</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">Release the resources
|
|
obtained earlier by accessAudioClip().<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Type</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">system<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Cross-reference</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">UC-4<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Notes</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Exceptions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">if the audioClipToken argument
|
|
does not match a token generated earlier in this session by accessAudioClip(),
|
|
report as an error<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Output</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Pre-conditions</b><br>
|
|
</td>
|
|
<td colspan="2" rowspan="1" valign="top">none</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><b>Post-conditions</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>condition</b><br>
|
|
</td>
|
|
<td align="center" valign="top"><b>type</b><br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"></td>
|
|
<td valign="top">the audioClipToken token and the URL returned earlier
|
|
by accessAudioClip() together with it are no longer valid</td>
|
|
<td valign="top">association broken<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
<td valign="top"><br>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<br>
|
|
<br>
|
|
</body>
|
|
</html>
|