added get/set methods for title and for general metadata in AudioClip

and in Playlist
This commit is contained in:
fgerlits 2004-12-27 19:52:02 +00:00
parent 54df237819
commit 3b01df226c
12 changed files with 460 additions and 89 deletions

View File

@ -21,7 +21,7 @@
# #
# #
# Author : $Author: fgerlits $ # Author : $Author: fgerlits $
# Version : $Revision: 1.18 $ # Version : $Revision: 1.19 $
# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/etc/Makefile.in,v $ # Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/etc/Makefile.in,v $
# #
# @configure_input@ # @configure_input@
@ -71,7 +71,7 @@ LIBXMLPP_LIBS=@LIBXMLPP_LIBS@
# TODO: move ICU flag determination to configure script # TODO: move ICU flag determination to configure script
ICU_CFLAGS= ICU_CFLAGS=
ICU_LIBS=`${USR_DIR}/bin/icu-config --ldflags-toolutil --ldflags-icuio` ICU_LIBS=`${USR_DIR}/bin/icu-config --ldflags --ldflags-toolutil --ldflags-icuio`
TEST_RESULTS = ${DOC_DIR}/testResults.xml TEST_RESULTS = ${DOC_DIR}/testResults.xml
# the text result XSLT has to be relative to the test result file, e.g. TMP_DIR # the text result XSLT has to be relative to the test result file, e.g. TMP_DIR

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.11 $ Version : $Revision: 1.12 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -77,6 +77,7 @@ using namespace boost::posix_time;
* *
* <pre><code> * <pre><code>
* &lt;audioClip id="1" * &lt;audioClip id="1"
* title="Name of the Song"
* playlength="00:18:30.000000" * playlength="00:18:30.000000"
* uri="file:var/test1.mp3" &gt; * uri="file:var/test1.mp3" &gt;
* &lt;metadata * &lt;metadata
@ -108,13 +109,14 @@ using namespace boost::posix_time;
* *
* <pre><code> * <pre><code>
* &lt;!ELEMENT audioClip (metadata?) &gt; * &lt;!ELEMENT audioClip (metadata?) &gt;
* &lt;!ATTLIST audioClip id NMTOKEN #REQUIRED &gt; * &lt;!ATTLIST audioClip id NMTOKEN #IMPLIED &gt;
* &lt;!ATTLIST audioClip playlength NMTOKEN #REQUIRED &gt; * &lt;!ATTLIST audioClip title CDATA #IMPLIED &gt;
* &lt;!ATTLIST audioClip playlength NMTOKEN #IMPLIED &gt;
* &lt;!ATTLIST audioClip uri CDATA #IMPLIED &gt; * &lt;!ATTLIST audioClip uri CDATA #IMPLIED &gt;
* </code></pre> * </code></pre>
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.11 $ * @version $Revision: 1.12 $
*/ */
class AudioClip : public Configurable, class AudioClip : public Configurable,
public Playable public Playable
@ -130,6 +132,11 @@ class AudioClip : public Configurable,
*/ */
Ptr<UniqueId>::Ref id; Ptr<UniqueId>::Ref id;
/**
* The title of the audio clip.
*/
Ptr<UnicodeString>::Ref title;
/** /**
* The playling length of the audio clip. * The playling length of the audio clip.
*/ */
@ -145,6 +152,17 @@ class AudioClip : public Configurable,
*/ */
Ptr<const string>::Ref token; Ptr<const string>::Ref token;
/**
* The type for storing the metadata.
*/
typedef std::map<const std::string, Ptr<UnicodeString>::Ref>
metadataType;
/**
* The metadata for this audio clip.
*/
metadataType metadata;
public: public:
/** /**
@ -167,7 +185,8 @@ class AudioClip : public Configurable,
} }
/** /**
* Create an audio clip by specifying all details. * Create an audio clip by specifying all details, except
* for the title.
* This is used for testing purposes. * This is used for testing purposes.
* *
* @param id the id of the audio clip. * @param id the id of the audio clip.
@ -181,6 +200,28 @@ class AudioClip : public Configurable,
throw () throw ()
{ {
this->id = id; this->id = id;
this->title.reset(new UnicodeString(""));
this->playlength = playlength;
this->uri = uri;
}
/**
* Create an audio clip by specifying all details.
* This is used for testing purposes.
*
* @param id the id of the audio clip.
* @param playlength the playing length of the audio clip.
* @param uri the location of the sound file corresponding to
* this audio clip object (optional)
*/
AudioClip(Ptr<UniqueId>::Ref id,
Ptr<UnicodeString>::Ref title,
Ptr<time_duration>::Ref playlength,
Ptr<string>::Ref uri = Ptr<string>::Ref())
throw ()
{
this->id = id;
this->title = title;
this->playlength = playlength; this->playlength = playlength;
this->uri = uri; this->uri = uri;
} }
@ -288,6 +329,52 @@ class AudioClip : public Configurable,
this->token = token; this->token = token;
} }
/**
* Return the title of this audio clip.
*
* @return the title.
*/
virtual Ptr<UnicodeString>::Ref
getTitle(void) const throw ()
{
return title;
}
/**
* Set the title of this audio clip.
*
* @param title a new title.
*/
virtual void
setTitle(Ptr<UnicodeString>::Ref title)
throw ()
{
this->title = title;
}
/**
* Return the value of a metadata field in this audio clip.
*
* @return the value of the metadata field; 0 if there is
* no such field;
*/
virtual Ptr<UnicodeString>::Ref
getMetadata(const string &key) const
throw ();
/**
* Set the value of a metadata field in this audio clip.
*
* @param key the name of the metadata field.
* @param value the new value of the metadata field.
*/
virtual void
setMetadata(const string &key, Ptr<UnicodeString>::Ref value)
throw ();
/** /**
* Return an XML representation of this audio clip. This contains * Return an XML representation of this audio clip. This contains
* the metadata fields of the audio clip, and it's roughly the * the metadata fields of the audio clip, and it's roughly the
@ -296,7 +383,7 @@ class AudioClip : public Configurable,
* @return an xmlpp::Document containing the metadata. * @return an xmlpp::Document containing the metadata.
*/ */
Ptr<xmlpp::Document>::Ref Ptr<xmlpp::Document>::Ref
getMetadata() throw (); toXml() throw ();
}; };

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.1 $ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Playable.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Playable.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -44,6 +44,7 @@
#include <string> #include <string>
#include <libxml++/libxml++.h> #include <libxml++/libxml++.h>
#include <boost/date_time/posix_time/posix_time.hpp> #include <boost/date_time/posix_time/posix_time.hpp>
#include <unicode/unistr.h>
#include "LiveSupport/Core/Ptr.h" #include "LiveSupport/Core/Ptr.h"
#include "LiveSupport/Core/UniqueId.h" #include "LiveSupport/Core/UniqueId.h"
@ -69,7 +70,7 @@ using namespace boost::posix_time;
* It contains the methods which are common to these classes. * It contains the methods which are common to these classes.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.1 $ * @version $Revision: 1.2 $
*/ */
class Playable class Playable
{ {
@ -91,6 +92,7 @@ class Playable
virtual Ptr<time_duration>::Ref virtual Ptr<time_duration>::Ref
getPlaylength(void) const throw () = 0; getPlaylength(void) const throw () = 0;
/** /**
* Return the URI of the sound file of this audio clip or * Return the URI of the sound file of this audio clip or
* playlist, which can be played by the helix client. This * playlist, which can be played by the helix client. This
@ -111,6 +113,7 @@ class Playable
virtual void virtual void
setUri(Ptr<const string>::Ref uri) throw () = 0; setUri(Ptr<const string>::Ref uri) throw () = 0;
/** /**
* Return the token which is used to identify this audio clip * Return the token which is used to identify this audio clip
* or playlist to the storage server. * or playlist to the storage server.
@ -128,6 +131,45 @@ class Playable
*/ */
virtual void virtual void
setToken(Ptr<const string>::Ref token) throw () = 0; setToken(Ptr<const string>::Ref token) throw () = 0;
/**
* Return the title of this audio clip or playlist.
*
* @return the title.
*/
virtual Ptr<UnicodeString>::Ref
getTitle(void) const throw () = 0;
/**
* Set the title of this audio clip or playlist.
*
* @param title a new title.
*/
virtual void
setTitle(Ptr<UnicodeString>::Ref title)
throw () = 0;
/**
* Return the value of a metadata field in this audio clip or playlist.
*
* @return the value of the metadata field; 0 if there is
* no such field;
*/
virtual Ptr<UnicodeString>::Ref
getMetadata(const string &key) const
throw () = 0;
/**
* Set the value of a metadata field in this audio clip or playlist.
*
* @param key the name of the metadata field.
* @param value the new value of the metadata field.
*/
virtual void
setMetadata(const string &key, Ptr<UnicodeString>::Ref value)
throw () = 0;
}; };

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.19 $ Version : $Revision: 1.20 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Playlist.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Playlist.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -93,7 +93,7 @@ using namespace boost::posix_time;
* </code></pre> * </code></pre>
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.19 $ * @version $Revision: 1.20 $
*/ */
class Playlist : public Configurable, class Playlist : public Configurable,
public Playable public Playable
@ -109,6 +109,11 @@ class Playlist : public Configurable,
*/ */
Ptr<UniqueId>::Ref id; Ptr<UniqueId>::Ref id;
/**
* The title of the playlist.
*/
Ptr<UnicodeString>::Ref title;
/** /**
* The playling length of the playlist. * The playling length of the playlist.
*/ */
@ -163,6 +168,18 @@ class Playlist : public Configurable,
Ptr<Playlist>::Ref savedCopy; Ptr<Playlist>::Ref savedCopy;
/**
* The type for storing the metadata.
*/
typedef std::map<const std::string, Ptr<UnicodeString>::Ref>
metadataType;
/**
* The metadata for this playlist.
*/
metadataType metadata;
public: public:
/** /**
* Default constructor. * Default constructor.
@ -174,6 +191,29 @@ class Playlist : public Configurable,
this->isLockedForEditing = false; this->isLockedForEditing = false;
} }
/**
* Create a playlist by specifying all details, except the title.
* This is used for testing purposes.
*
* @param id the id of the playlist.
* @param playlength the playing length of the playlist.
* @param uri the location of the SMIL file representing this
* playlist (optional)
*/
Playlist(Ptr<UniqueId>::Ref id,
Ptr<time_duration>::Ref playlength,
Ptr<std::string>::Ref uri = Ptr<std::string>::Ref())
throw ()
{
this->id = id;
this->title.reset(new UnicodeString(""));
this->playlength = playlength;
this->uri = uri;
elementList.reset(new PlaylistElementListType);
this->isLockedForPlaying = false;
this->isLockedForEditing = false;
}
/** /**
* Create a playlist by specifying all details. * Create a playlist by specifying all details.
* This is used for testing purposes. * This is used for testing purposes.
@ -183,12 +223,14 @@ class Playlist : public Configurable,
* @param uri the location of the SMIL file representing this * @param uri the location of the SMIL file representing this
* playlist (optional) * playlist (optional)
*/ */
Playlist(Ptr<UniqueId>::Ref id, Playlist(Ptr<UniqueId>::Ref id,
Ptr<time_duration>::Ref playlength, Ptr<UnicodeString>::Ref title,
Ptr<std::string>::Ref uri = Ptr<std::string>::Ref()) Ptr<time_duration>::Ref playlength,
Ptr<std::string>::Ref uri = Ptr<std::string>::Ref())
throw () throw ()
{ {
this->id = id; this->id = id;
this->title = title;
this->playlength = playlength; this->playlength = playlength;
this->uri = uri; this->uri = uri;
elementList.reset(new PlaylistElementListType); elementList.reset(new PlaylistElementListType);
@ -491,7 +533,56 @@ class Playlist : public Configurable,
* saved copy, do nothing and throw an exception. * saved copy, do nothing and throw an exception.
*/ */
void void
revertToSavedCopy(void) throw (std::logic_error); revertToSavedCopy(void) throw (std::invalid_argument);
/**
* Return the title of this playlist.
*
* @return the title.
*/
virtual Ptr<UnicodeString>::Ref
getTitle(void) const throw ()
{
return title;
}
/**
* Set the title of this playlist.
*
* @param title a new title.
*/
virtual void
setTitle(Ptr<UnicodeString>::Ref title)
throw ()
{
this->title = title;
}
/**
* Return the value of a metadata field in this playlist.
*
* Currently, this always returns a null pointer.
*
* @return the value of the metadata field; 0 if there is
* no such field;
*/
virtual Ptr<UnicodeString>::Ref
getMetadata(const string &key) const
throw ();
/**
* Set the value of a metadata field in this playlist.
*
* Currently, this does not do anything.
*
* @param key the name of the metadata field.
* @param value the new value of the metadata field.
*/
virtual void
setMetadata(const string &key, Ptr<UnicodeString>::Ref value)
throw ();
}; };

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.9 $ Version : $Revision: 1.10 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/AudioClip.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/AudioClip.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -174,10 +174,40 @@ AudioClip :: configure(const xmlpp::Element & element)
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
* Create an XML element from this audio clip. * Return the value of a metadata field.
*----------------------------------------------------------------------------*/
Ptr<UnicodeString>::Ref
AudioClip :: getMetadata(const string &key) const
throw ()
{
metadataType::const_iterator it = metadata.find(key);
if (it != metadata.end()) {
return it->second;
}
else {
Ptr<UnicodeString>::Ref nullPointer;
return nullPointer;
}
}
/*------------------------------------------------------------------------------
* Set the value of a metadata field.
*----------------------------------------------------------------------------*/
void
AudioClip :: setMetadata(const string &key, Ptr<UnicodeString>::Ref value)
throw ()
{
metadata[key] = value;
}
/*------------------------------------------------------------------------------
* Create an XML document from this audio clip.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
Ptr<xmlpp::Document>::Ref Ptr<xmlpp::Document>::Ref
AudioClip :: getMetadata() AudioClip :: toXml()
throw () throw ()
{ {
Ptr<xmlpp::Document>::Ref metadata(new xmlpp::Document); Ptr<xmlpp::Document>::Ref metadata(new xmlpp::Document);

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.15 $ Version : $Revision: 1.16 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/Playlist.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/Playlist.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -350,10 +350,10 @@ Playlist::createSavedCopy(void) throw ()
* Revert to a saved copy of the playlist. * Revert to a saved copy of the playlist.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
void void
Playlist::revertToSavedCopy(void) throw (std::logic_error) Playlist::revertToSavedCopy(void) throw (std::invalid_argument)
{ {
if (savedCopy == 0) { if (savedCopy == 0) {
throw (std::logic_error("playlist has no saved copy")); throw (std::invalid_argument("playlist has no saved copy"));
} }
this->id = savedCopy->id; this->id = savedCopy->id;
@ -364,3 +364,34 @@ Playlist::revertToSavedCopy(void) throw (std::logic_error)
savedCopy.reset(); savedCopy.reset();
} }
/*------------------------------------------------------------------------------
* Return the value of a metadata field.
*----------------------------------------------------------------------------*/
Ptr<UnicodeString>::Ref
Playlist :: getMetadata(const string &key) const
throw ()
{
metadataType::const_iterator it = metadata.find(key);
if (it != metadata.end()) {
return it->second;
}
else {
Ptr<UnicodeString>::Ref nullPointer;
return nullPointer;
}
}
/*------------------------------------------------------------------------------
* Set the value of a metadata field.
*----------------------------------------------------------------------------*/
void
Playlist :: setMetadata(const string &key, Ptr<UnicodeString>::Ref value)
throw ()
{
metadata[key] = value;
}

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.13 $ Version : $Revision: 1.14 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/PlaylistTest.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/PlaylistTest.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -260,7 +260,7 @@ PlaylistTest :: savedCopyTest(void)
playlist->revertToSavedCopy(); playlist->revertToSavedCopy();
CPPUNIT_FAIL("allowed to revert to non-existent state"); CPPUNIT_FAIL("allowed to revert to non-existent state");
} }
catch (std::logic_error &e) { catch (std::invalid_argument &e) {
} }
playlist->createSavedCopy(); playlist->createSavedCopy();

View File

@ -21,7 +21,7 @@
# #
# #
# Author : $Author: fgerlits $ # Author : $Author: fgerlits $
# Version : $Revision: 1.12 $ # Version : $Revision: 1.13 $
# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/etc/Makefile.in,v $ # Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/etc/Makefile.in,v $
# #
# @configure_input@ # @configure_input@
@ -73,6 +73,10 @@ VPATH = ${SRC_DIR}
LIBXMLPP_CFLAGS=@LIBXMLPP_CFLAGS@ LIBXMLPP_CFLAGS=@LIBXMLPP_CFLAGS@
LIBXMLPP_LIBS=@LIBXMLPP_LIBS@ LIBXMLPP_LIBS=@LIBXMLPP_LIBS@
# TODO: move ICU flag determination to configure script
ICU_CFLAGS=
ICU_LIBS=`${USR_DIR}/bin/icu-config --ldflags --ldflags-toolutil --ldflags-icuio`
CURL_LIBS=`${USR_DIR}/bin/curl-config --libs` CURL_LIBS=`${USR_DIR}/bin/curl-config --libs`
TEST_RESULTS = ${DOC_DIR}/testResults.xml TEST_RESULTS = ${DOC_DIR}/testResults.xml
@ -93,12 +97,14 @@ CPPFLAGS = @CPPFLAGS@
CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \ CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \
-pedantic -Wall -Wno-long-long \ -pedantic -Wall -Wno-long-long \
-I${USR_INCLUDE_DIR} \ -I${USR_INCLUDE_DIR} \
${ICU_CFLAGS} \
${LIBXMLPP_CFLAGS} \ ${LIBXMLPP_CFLAGS} \
-I${BOOST_INCLUDE_DIR} \ -I${BOOST_INCLUDE_DIR} \
-I${CORE_INCLUDE_DIR} \ -I${CORE_INCLUDE_DIR} \
-I${AUTHENTICATION_INCLUDE_DIR} \ -I${AUTHENTICATION_INCLUDE_DIR} \
-I${INCLUDE_DIR} -I${TMP_DIR} -I${INCLUDE_DIR} -I${TMP_DIR}
LDFLAGS = @LDFLAGS@ -pthread \ LDFLAGS = @LDFLAGS@ -pthread \
${ICU_LIBS} \
${LIBXMLPP_LIBS} \ ${LIBXMLPP_LIBS} \
${CURL_LIBS} \ ${CURL_LIBS} \
-L${USR_LIB_DIR} \ -L${USR_LIB_DIR} \
@ -120,7 +126,7 @@ TEST_RUNNER_OBJS = ${TMP_DIR}/TestRunner.o \
${TMP_DIR}/WebStorageClientTest.o ${TMP_DIR}/WebStorageClientTest.o
TEST_RUNNER_LIBS = -l${STORAGE_LIB} -l${CORE_LIB} -l${AUTHENTICATION_LIB} \ TEST_RUNNER_LIBS = -l${STORAGE_LIB} -l${CORE_LIB} -l${AUTHENTICATION_LIB} \
-lcppunit -ldl -lxmlrpc++ -lssl ${ICU_LIBS} -lcppunit -ldl -lxmlrpc++ -lssl
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.1 $ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/include/LiveSupport/Storage/Attic/StorageException.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/include/LiveSupport/Storage/Attic/StorageException.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -58,7 +58,7 @@ namespace Storage {
* Common parent of exception classes for this module. * Common parent of exception classes for this module.
* *
* @author $Author: fgerlits $ * @author $Author: fgerlits $
* @version $Revision: 1.1 $ * @version $Revision: 1.2 $
*/ */
class StorageException : public std::runtime_error class StorageException : public std::runtime_error
{ {
@ -101,6 +101,28 @@ class XmlRpcMethodResponseException : public StorageException
} }
}; };
/**
* Bad parameter passed to storage client.
*/
class InvalidArgumentException : public StorageException
{
public:
InvalidArgumentException(const std::string &msg)
: StorageException(msg) {
}
};
/**
* Problem with reading or writing local files.
*/
class IOException : public StorageException
{
public:
IOException(const std::string &msg)
: StorageException(msg) {
}
};
/* ================================================= external data structures */ /* ================================================= external data structures */

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.12 $ Version : $Revision: 1.13 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClient.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClient.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -497,21 +497,29 @@ WebStorageClient :: existsAudioClip(Ptr<SessionId>::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '"; std::string eMsg = "cannot execute XML-RPC method '";
eMsg += existsAudioClipMethodName; eMsg += existsAudioClipMethodName;
eMsg += "'"; eMsg += "'";
throw StorageException(eMsg); throw XmlRpcCommunicationException(eMsg);
} }
if (xmlRpcClient.isFault() if (xmlRpcClient.isFault()) {
|| ! result.hasMember(existsAudioClipResultParamName)
|| result[existsAudioClipResultParamName].getType()
!= XmlRpcValue::TypeBoolean) {
std::stringstream eMsg; std::stringstream eMsg;
eMsg << "XML-RPC method '" eMsg << "XML-RPC method '"
<< existsAudioClipMethodName << existsAudioClipMethodName
<< "' returned error message:\n" << "' returned error message:\n"
<< result; << result;
throw StorageException(eMsg.str()); throw XmlRpcMethodFaultException(eMsg.str());
} }
if (! result.hasMember(existsAudioClipResultParamName)
|| result[existsAudioClipResultParamName].getType()
!= XmlRpcValue::TypeBoolean) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< existsAudioClipMethodName
<< "' returned unexpected value:\n"
<< result;
throw XmlRpcMethodResponseException(eMsg.str());
}
return bool(result[existsAudioClipResultParamName]); return bool(result[existsAudioClipResultParamName]);
} }
@ -542,24 +550,32 @@ WebStorageClient :: getAudioClip(Ptr<SessionId>::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '"; std::string eMsg = "cannot execute XML-RPC method '";
eMsg += getAudioClipOpenMethodName; eMsg += getAudioClipOpenMethodName;
eMsg += "'"; eMsg += "'";
throw StorageException(eMsg); throw XmlRpcCommunicationException(eMsg);
} }
if (xmlRpcClient.isFault() if (xmlRpcClient.isFault()) {
|| ! result.hasMember(getAudioClipUrlParamName)
|| result[getAudioClipUrlParamName].getType()
!= XmlRpcValue::TypeString
|| ! result.hasMember(getAudioClipTokenParamName)
|| result[getAudioClipTokenParamName].getType()
!= XmlRpcValue::TypeString) {
std::stringstream eMsg; std::stringstream eMsg;
eMsg << "XML-RPC method '" eMsg << "XML-RPC method '"
<< getAudioClipOpenMethodName << getAudioClipOpenMethodName
<< "' returned error message:\n" << "' returned error message:\n"
<< result; << result;
throw StorageException(eMsg.str()); throw XmlRpcMethodFaultException(eMsg.str());
} }
if (! result.hasMember(getAudioClipUrlParamName)
|| result[getAudioClipUrlParamName].getType()
!= XmlRpcValue::TypeString
|| ! result.hasMember(getAudioClipTokenParamName)
|| result[getAudioClipTokenParamName].getType()
!= XmlRpcValue::TypeString) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< getAudioClipOpenMethodName
<< "' returned unexpected value:\n"
<< result;
throw XmlRpcMethodResponseException(eMsg.str());
}
std::string url = result[getAudioClipUrlParamName]; std::string url = result[getAudioClipUrlParamName];
std::string token = result[getAudioClipTokenParamName]; std::string token = result[getAudioClipTokenParamName];
@ -573,9 +589,11 @@ WebStorageClient :: getAudioClip(Ptr<SessionId>::Ref sessionId,
audioClip->configure(*root); audioClip->configure(*root);
} catch (std::invalid_argument &e) { } catch (std::invalid_argument &e) {
throw StorageException("semantic error in audio clip metafile"); throw XmlRpcMethodResponseException(
"semantic error in audio clip metafile");
} catch (xmlpp::exception &e) { } catch (xmlpp::exception &e) {
throw StorageException("error parsing audio clip metafile"); throw XmlRpcMethodResponseException(
"error parsing audio clip metafile");
} }
parameters.clear(); parameters.clear();
@ -590,21 +608,29 @@ WebStorageClient :: getAudioClip(Ptr<SessionId>::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '"; std::string eMsg = "cannot execute XML-RPC method '";
eMsg += getAudioClipCloseMethodName; eMsg += getAudioClipCloseMethodName;
eMsg += "'"; eMsg += "'";
throw StorageException(eMsg); throw XmlRpcCommunicationException(eMsg);
} }
if (xmlRpcClient.isFault() if (xmlRpcClient.isFault()) {
|| ! result.hasMember(getAudioClipAudioClipIdParamName)
|| result[getAudioClipAudioClipIdParamName].getType()
!= XmlRpcValue::TypeString
|| std::string(result[getAudioClipAudioClipIdParamName])
!= std::string(*id)) {
std::stringstream eMsg; std::stringstream eMsg;
eMsg << "XML-RPC method '" eMsg << "XML-RPC method '"
<< getAudioClipCloseMethodName << getAudioClipCloseMethodName
<< "' returned error message:\n" << "' returned error message:\n"
<< result; << result;
throw StorageException(eMsg.str()); throw XmlRpcMethodFaultException(eMsg.str());
}
if (! result.hasMember(getAudioClipAudioClipIdParamName)
|| result[getAudioClipAudioClipIdParamName].getType()
!= XmlRpcValue::TypeString
|| std::string(result[getAudioClipAudioClipIdParamName])
!= std::string(*id)) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< getAudioClipCloseMethodName
<< "' returned unexpected value:\n"
<< result;
throw XmlRpcMethodResponseException(eMsg.str());
} }
return audioClip; return audioClip;
@ -620,10 +646,10 @@ WebStorageClient :: storeAudioClip(Ptr<SessionId>::Ref sessionId,
throw (StorageException) throw (StorageException)
{ {
if (!audioClip || !audioClip->getUri()) { if (!audioClip || !audioClip->getUri()) {
throw StorageException("binary audio clip file not found"); throw InvalidArgumentException("binary audio clip file not found");
} }
std::string metadata = audioClip->getMetadata() std::string metadata = audioClip->toXml()
->write_to_string("UTF-8"); ->write_to_string("UTF-8");
// temporary hack; we will expect an absolute file name from getUri() // temporary hack; we will expect an absolute file name from getUri()
@ -632,7 +658,7 @@ WebStorageClient :: storeAudioClip(Ptr<SessionId>::Ref sessionId,
std::ifstream ifs(binaryFileName.c_str()); std::ifstream ifs(binaryFileName.c_str());
if (!ifs) { if (!ifs) {
ifs.close(); ifs.close();
throw StorageException("could not read audio clip"); throw IOException("could not read audio clip");
} }
std::string md5string = Md5(ifs); std::string md5string = Md5(ifs);
ifs.close(); ifs.close();
@ -659,35 +685,47 @@ WebStorageClient :: storeAudioClip(Ptr<SessionId>::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '"; std::string eMsg = "cannot execute XML-RPC method '";
eMsg += storeAudioClipOpenMethodName; eMsg += storeAudioClipOpenMethodName;
eMsg += "'"; eMsg += "'";
throw StorageException(eMsg); throw XmlRpcCommunicationException(eMsg);
} }
if (xmlRpcClient.isFault() if (xmlRpcClient.isFault()) {
|| ! result.hasMember(storeAudioClipUrlParamName)
|| result[storeAudioClipUrlParamName].getType()
!= XmlRpcValue::TypeString
|| ! result.hasMember(storeAudioClipTokenParamName)
|| result[storeAudioClipTokenParamName].getType()
!= XmlRpcValue::TypeString) {
std::stringstream eMsg; std::stringstream eMsg;
eMsg << "XML-RPC method '" eMsg << "XML-RPC method '"
<< storeAudioClipOpenMethodName << storeAudioClipOpenMethodName
<< "' returned error message:\n" << "' returned error message:\n"
<< result; << result;
throw StorageException(eMsg.str()); throw XmlRpcMethodFaultException(eMsg.str());
} }
if (! result.hasMember(storeAudioClipUrlParamName)
|| result[storeAudioClipUrlParamName].getType()
!= XmlRpcValue::TypeString
|| ! result.hasMember(storeAudioClipTokenParamName)
|| result[storeAudioClipTokenParamName].getType()
!= XmlRpcValue::TypeString) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< storeAudioClipOpenMethodName
<< "' returned unexpected value:\n"
<< result;
throw XmlRpcMethodResponseException(eMsg.str());
}
std::string url = std::string(result[storeAudioClipUrlParamName]); std::string url = std::string(result[storeAudioClipUrlParamName]);
std::string token = std::string(result[storeAudioClipTokenParamName]); std::string token = std::string(result[storeAudioClipTokenParamName]);
FILE* binaryFile = fopen(binaryFileName.c_str(), "rb"); FILE* binaryFile = fopen(binaryFileName.c_str(), "rb");
if (!binaryFile) {
throw IOException("Binary audio clip file not found.");
}
fseek(binaryFile, 0, SEEK_END); fseek(binaryFile, 0, SEEK_END);
long binaryFileSize = ftell(binaryFile); long binaryFileSize = ftell(binaryFile);
rewind(binaryFile); rewind(binaryFile);
CURL* handle = curl_easy_init(); CURL* handle = curl_easy_init();
if (!handle) { if (!handle) {
throw StorageException("Could not obtain curl handle."); throw XmlRpcCommunicationException("Could not obtain curl handle.");
} }
int status = curl_easy_setopt(handle, CURLOPT_READDATA, binaryFile); int status = curl_easy_setopt(handle, CURLOPT_READDATA, binaryFile);
@ -699,13 +737,13 @@ WebStorageClient :: storeAudioClip(Ptr<SessionId>::Ref sessionId,
// status |= curl_easy_setopt(handle, CURLOPT_ENCODING, "deflate"); // status |= curl_easy_setopt(handle, CURLOPT_ENCODING, "deflate");
if (status) { if (status) {
throw StorageException("Could not set curl options."); throw XmlRpcCommunicationException("Could not set curl options.");
} }
status = curl_easy_perform(handle); status = curl_easy_perform(handle);
if (status) { if (status) {
throw StorageException("Error uploading file."); throw XmlRpcCommunicationException("Error uploading file.");
} }
curl_easy_cleanup(handle); curl_easy_cleanup(handle);
@ -723,23 +761,31 @@ WebStorageClient :: storeAudioClip(Ptr<SessionId>::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '"; std::string eMsg = "cannot execute XML-RPC method '";
eMsg += storeAudioClipCloseMethodName; eMsg += storeAudioClipCloseMethodName;
eMsg += "'"; eMsg += "'";
throw StorageException(eMsg); throw XmlRpcCommunicationException(eMsg);
} }
if (xmlRpcClient.isFault() if (xmlRpcClient.isFault()) {
|| ! result.hasMember(storeAudioClipAudioClipIdParamName)
|| result[storeAudioClipAudioClipIdParamName].getType()
!= XmlRpcValue::TypeString
|| std::string(result[storeAudioClipAudioClipIdParamName])
!= std::string(*audioClip->getId())) {
std::stringstream eMsg; std::stringstream eMsg;
eMsg << "XML-RPC method '" eMsg << "XML-RPC method '"
<< storeAudioClipCloseMethodName << storeAudioClipCloseMethodName
<< "' returned error message:\n" << "' returned error message:\n"
<< result; << result;
throw StorageException(eMsg.str()); throw XmlRpcMethodFaultException(eMsg.str());
} }
if (! result.hasMember(storeAudioClipAudioClipIdParamName)
|| result[storeAudioClipAudioClipIdParamName].getType()
!= XmlRpcValue::TypeString
|| std::string(result[storeAudioClipAudioClipIdParamName])
!= std::string(*audioClip->getId())) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< storeAudioClipCloseMethodName
<< "' returned unexpected value:\n"
<< result;
throw XmlRpcMethodResponseException(eMsg.str());
}
return true; return true;
} }
@ -818,21 +864,29 @@ WebStorageClient :: reset(void)
std::string eMsg = "cannot execute XML-RPC method '"; std::string eMsg = "cannot execute XML-RPC method '";
eMsg += resetStorageMethodName; eMsg += resetStorageMethodName;
eMsg += "'"; eMsg += "'";
throw StorageException(eMsg); throw XmlRpcCommunicationException(eMsg);
} }
if (xmlRpcClient.isFault() if (xmlRpcClient.isFault()) {
|| ! result.hasMember(resetStorageResultParamName)
|| result[resetStorageResultParamName].getType()
!= XmlRpcValue::TypeArray) {
std::stringstream eMsg; std::stringstream eMsg;
eMsg << "XML-RPC method '" eMsg << "XML-RPC method '"
<< resetStorageMethodName << resetStorageMethodName
<< "' returned error message:\n" << "' returned error message:\n"
<< result; << result;
throw StorageException(eMsg.str()); throw XmlRpcMethodFaultException(eMsg.str());
} }
if (! result.hasMember(resetStorageResultParamName)
|| result[resetStorageResultParamName].getType()
!= XmlRpcValue::TypeArray) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< resetStorageMethodName
<< "' returned unexpected value:\n"
<< result;
throw XmlRpcMethodResponseException(eMsg.str());
}
XmlRpcValue uniqueIdArray = result[resetStorageResultParamName]; XmlRpcValue uniqueIdArray = result[resetStorageResultParamName];
Ptr<std::vector<Ptr<UniqueId>::Ref> >::Ref returnValue( Ptr<std::vector<Ptr<UniqueId>::Ref> >::Ref returnValue(
new std::vector<Ptr<UniqueId>::Ref>); new std::vector<Ptr<UniqueId>::Ref>);
@ -844,7 +898,7 @@ WebStorageClient :: reset(void)
<< resetStorageMethodName << resetStorageMethodName
<< "':\n" << "':\n"
<< result; << result;
throw StorageException(eMsg.str()); throw XmlRpcMethodResponseException(eMsg.str());
} }
Ptr<UniqueId>::Ref uniqueId(new UniqueId(std::string(uniqueIdArray[i]))); Ptr<UniqueId>::Ref uniqueId(new UniqueId(std::string(uniqueIdArray[i])));
returnValue->push_back(uniqueId); returnValue->push_back(uniqueId);

View File

@ -22,7 +22,7 @@
Author : $Author: fgerlits $ Author : $Author: fgerlits $
Version : $Revision: 1.13 $ Version : $Revision: 1.14 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClientTest.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/storage/src/WebStorageClientTest.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -228,9 +228,11 @@ WebStorageClientTest :: audioClipTest(void)
} }
CPPUNIT_ASSERT(!exists); CPPUNIT_ASSERT(!exists);
// Ptr<UniqueId>::Ref id02 = UniqueId::generateId();
Ptr<UniqueId>::Ref id02(new UniqueId("11111111111111112222222222222222"));
Ptr<time_duration>::Ref playlength(new time_duration(0,0,11,0)); Ptr<time_duration>::Ref playlength(new time_duration(0,0,11,0));
Ptr<std::string>::Ref uri(new std::string("file:var/test10001.mp3")); Ptr<std::string>::Ref uri(new std::string("file:var/test10001.mp3"));
audioClip.reset(new AudioClip(id01, playlength, uri)); audioClip.reset(new AudioClip(id02, playlength, uri));
try { try {
wsc->storeAudioClip(sessionId, audioClip); wsc->storeAudioClip(sessionId, audioClip);
@ -240,7 +242,7 @@ WebStorageClientTest :: audioClipTest(void)
} }
try { try {
CPPUNIT_ASSERT( wsc->existsAudioClip(sessionId, id01)); CPPUNIT_ASSERT( wsc->existsAudioClip(sessionId, id02));
} }
catch (StorageException &e) { catch (StorageException &e) {
CPPUNIT_FAIL(e.what()); CPPUNIT_FAIL(e.what());

View File

@ -21,7 +21,7 @@
# #
# #
# Author : $Author: fgerlits $ # Author : $Author: fgerlits $
# Version : $Revision: 1.35 $ # Version : $Revision: 1.36 $
# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/etc/Makefile.in,v $ # Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/etc/Makefile.in,v $
# #
# @configure_input@ # @configure_input@
@ -65,6 +65,10 @@ VPATH = ${SRC_DIR}
LIBXMLPP_CFLAGS=@LIBXMLPP_CFLAGS@ LIBXMLPP_CFLAGS=@LIBXMLPP_CFLAGS@
LIBXMLPP_LIBS=@LIBXMLPP_LIBS@ LIBXMLPP_LIBS=@LIBXMLPP_LIBS@
# TODO: move ICU flag determination to configure script
ICU_CFLAGS=
ICU_LIBS=`${USR_DIR}/bin/icu-config --ldflags --ldflags-toolutil --ldflags-icuio`
CURL_LIBS=`${USR_DIR}/bin/curl-config --libs` CURL_LIBS=`${USR_DIR}/bin/curl-config --libs`
MODULES_DIR = ${BASE_DIR}/../../modules MODULES_DIR = ${BASE_DIR}/../../modules
@ -126,6 +130,7 @@ export LD_LIBRARY_PATH=${USR_LIB_DIR}
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \ CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \
-pedantic -Wall -Wno-long-long \ -pedantic -Wall -Wno-long-long \
${ICU_CFLAGS} \
${LIBXMLPP_CFLAGS} \ ${LIBXMLPP_CFLAGS} \
-I${USR_INCLUDE_DIR} \ -I${USR_INCLUDE_DIR} \
-I${BOOST_INCLUDE_DIR} \ -I${BOOST_INCLUDE_DIR} \
@ -138,6 +143,7 @@ CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \
-I${TMP_DIR} -I${TMP_DIR}
LDFLAGS = @LDFLAGS@ -pthread \ LDFLAGS = @LDFLAGS@ -pthread \
${LIBXMLPP_LIBS} \ ${LIBXMLPP_LIBS} \
${ICU_LIBS} \
${CURL_LIBS} \ ${CURL_LIBS} \
-L${USR_LIB_DIR} \ -L${USR_LIB_DIR} \
-L${HELIX_LIB_DIR} \ -L${HELIX_LIB_DIR} \
@ -229,7 +235,7 @@ TEST_RUNNER_OBJS = ${SCHEDULER_OBJS} \
${TMP_DIR}/UpdateFadeInFadeOutMethodTest.o \ ${TMP_DIR}/UpdateFadeInFadeOutMethodTest.o \
${TMP_DIR}/PlaylistEventContainerTest.o \ ${TMP_DIR}/PlaylistEventContainerTest.o \
${TMP_DIR}/PlaylistEventTest.o ${TMP_DIR}/PlaylistEventTest.o
TEST_RUNNER_LIBS = ${SCHEDULER_EXE_LIBS} -lcppunit -ldl TEST_RUNNER_LIBS = ${SCHEDULER_EXE_LIBS} ${ICU_LIBS} -lcppunit -ldl
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------