sintonia/livesupport/doc/model/MediaArchive/index.html

1679 lines
42 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 Media archive 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 &#169; 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: maroy $</li>
<li>Version: $Revision: 1.1 $</li>
<li>Location: $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/doc/model/MediaArchive/index.html,v $</li>
</ul>
<h1>Scope</h1>
This document contains the specification of the LiveSupport Media
archive 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 Media archive is to store Audio clips with metadata
information, and offer remote access to these clips.<br>
<h2>Goals</h2>
The goal of the Media storage system is to store Audio Clips and share
them over the network. Another aim is to provide extensive search
possibilities based on the metadata bundled with the audio clips.<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 remote 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"><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">remote interface<br>
</td>
<td valign="top">the Media archive is remotely accessible<br>
</td>
<td valign="top">must<br>
</td>
</tr>
<tr>
<td valign="top">A1.3<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.4<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 Media archive systems<br>
</td>
<td valign="top">must<br>
</td>
</tr>
<tr>
<td valign="top">A1.6<br>
</td>
<td valign="top">consistent downloads during updates<br>
</td>
<td valign="top">when an audio clip is being updated while also
being downloaded, make sure that the downloads can continue with the
original content<br>
</td>
<td valign="top">frill<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 remote access to audio data </td>
<td valign="top">A1.5<br>
</td>
<td valign="top">partial downloads<br>
</td>
<td valign="top">provide the possibility of interrupted (partial)
downloads of 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="550"></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">Archive maintainer </td>
</tr>
<tr>
<td valign="top"><b>purpose</b> </td>
<td valign="top">To store a new Audio clip in the media archive,
or update (replace) an already stored Audio clip<br>
</td>
</tr>
<tr>
<td valign="top"><b>overview</b> </td>
<td valign="top">The Archive maintainer contacts the Media
archive with the aim
of uploading and storing a new Audio Clip. If the uploaded Audio clip
is already stored in Media archive (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.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">Archive maintainer connects to the Media archive
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 Archive maintainer provides authentication
information </td>
<td valign="top"><b>3.</b> </td>
<td valign="top">The system authenticates the Archive maintainer
and grants
access.<br>
</td>
</tr>
<tr>
<td valign="top"><b>4.</b><br>
</td>
<td valign="top">The Archive 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 Archive 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 Archive 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 Archive maintainer can not be
authenticated, he is notified, and the use case ends.</li>
<li><b>action 6.2:</b> TODO: handle the case of the raw audio data of
the Audio clip is
currently
being downloaded (see UC-4, A1.6)<br>
</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">Archive maintainer </td>
</tr>
<tr>
<td valign="top"><b>purpose</b> </td>
<td valign="top">To delete an existing Audio clip in the media
archive<br>
</td>
</tr>
<tr>
<td valign="top"><b>overview</b> </td>
<td valign="top">The Archive maintainer contacts the Media
archive 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">Archive maintainer connects to the Media archive
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 Archive maintainer provides authentication
information </td>
<td valign="top"><b>3.</b> </td>
<td valign="top">The system authenticates the Archive maintainer
and grants
access.<br>
</td>
</tr>
<tr>
<td valign="top"><b>4.</b><br>
</td>
<td valign="top">The Archive maintainer presents the unique id of
an Audio clip stored in Media archive 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 Archive 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 Archive 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 Archive maintainer is notified. the use case ends.</li>
<li><b>action 5:</b> TODO: handle the case of the raw audio data of
the Audio clip is
currently
being downloaded (see UC-4, A1.6)<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">Archive 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 Archive maintainer contacts the Media
archive 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">Archive maintainer connects to the Media archive
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 Archive maintainer provides authentication
information </td>
<td valign="top"><b>3.</b> </td>
<td valign="top">The system authenticates the Archive maintainer
and grants
access.<br>
</td>
</tr>
<tr>
<td valign="top"><b>4.</b><br>
</td>
<td valign="top">The Archive maintainer presents the unique id of
an Audio clip stored in Media archive 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 Archive 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 Archive 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 Archive maintainer is notified. the use case ends.<br>
</li>
</ul>
<br>
<h3>UC-4 Download 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">Download 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">Archive client<br>
</td>
</tr>
<tr>
<td valign="top"><b>purpose</b> </td>
<td valign="top">To download raw audio data stored in the Media
archive<br>
</td>
</tr>
<tr>
<td valign="top"><b>overview</b> </td>
<td valign="top">The Archive client downloads the raw audio data.<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">Archive client connects to the Media archive
with
the
intention of downloading 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 Archive client provides authentication
information </td>
<td valign="top"><b>3.</b> </td>
<td valign="top">The system authenticates the Archive client and
grants
access.<br>
</td>
</tr>
<tr>
<td valign="top"><b>4.</b><br>
</td>
<td valign="top">The Archive client presents the unique id of an
Audio clip stored in Media archive that he wants to download<br>
</td>
<td valign="top"><b>5.</b><br>
</td>
<td valign="top">The systems looks up the Audio clip, and starts
to send the raw audio content as a stream<br>
</td>
</tr>
<tr>
<td valign="top"><b>6.</b><br>
</td>
<td valign="top">The Archive client receives the stream of raw
audio data and saves 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 Archive client 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 Archive client can not be authenticated,
he
is notified, and the use case ends.</li>
<li><b>action 4:</b> the Archive client specifies an offset from
which he wants to start a partial download. the system starts to send
raw audio data from this offset in action 5.<br>
</li>
<li><b>action 5:</b> if no Audio clip is stored with the presented
id, the Archive client 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">Archive client<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 Archive client 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">Archive client connects to the Media archive
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 Archive cleint provides authentication
information </td>
<td valign="top"><b>3.</b> </td>
<td valign="top">The system authenticates the Archive client
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 Archive client 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 Archive client 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 Archive client<br>
</td>
</tr>
<tr>
<td valign="top"><b>9.</b><br>
</td>
<td valign="top">The Archive client 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 Archive client 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 Archive client can not be
authenticated, he is notified, and the use case ends.</li>
</ul>
<h2>
</h2>
<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>
<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 Media archive<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>Archive maintainer</b><br>
</td>
<td valign="top">The actor that maintains the contents of the
Media archive<br>
</td>
</tr>
<tr>
<td valign="top"><b>Archive client</b><br>
</td>
<td valign="top">The actor that accesses the data stored in the
Media archive<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">Archive 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">Archive client<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">Archive client<br>
</td>
<td valign="top">Searches by<br>
</td>
<td valign="top">SearchCriteria<br>
</td>
<td valign="top">The Archive client specifies such a
SearchCriteria when doing a search on MetaData<br>
</td>
</tr>
<tr>
<td valign="top">Archive 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">Archive client<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">Archice client<br>
</td>
<td valign="top">Downloads<br>
</td>
<td valign="top">RawAudioData<br>
</td>
<td valign="top">Download RawAudioData as a binary stream.<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="650" 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="750"
height="200"></object>
<br>
<h4>UC-4 Download raw audio data</h4>
<object type="image/svg+xml" name="authenticate user sequence diagram"
data="Downloadrawaudiodata_SequenceDiagram.svg" width="650"
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="700" height="200"></object>
<h3>System objects</h3>
The following figures 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="250"></object>
<h3>Contracts</h3>
For all operations exposed in the system sequence diagrams, the
following contracts are defined.<br>
<h4>Contract for Media archive : authenticate</h4>
see Authentication : Authenticate<br>
<h4>Contract for Media archive : 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>
(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 TODO: handle the
case of the raw audio data of the Audio clip is
currently
being downloaded (see UC-4, A1.6) </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 Media archive : 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>
(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>
TODO: handle the case of the raw audio data of the Audio clip is
currently
being downloaded (see UC-4, A1.6)<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 Media archive : 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>
(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 Media archive<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 Media archive : 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">downloadRawAudioData<br>
(audioClipId : UniqueId,<br>
offset : int)<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 as a data stream.<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 as a
stream for the
AudioClip identified with the supplied UniqueId, started at the
specified offset.<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 Media archive : 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>
(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>
<br>
</body>
</html>