diff --git a/livesupport/modules/core/etc/Makefile.in b/livesupport/modules/core/etc/Makefile.in
index def88f8fd..3068612d8 100644
--- a/livesupport/modules/core/etc/Makefile.in
+++ b/livesupport/modules/core/etc/Makefile.in
@@ -21,7 +21,7 @@
#
#
# 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 $
#
# @configure_input@
@@ -71,7 +71,7 @@ LIBXMLPP_LIBS=@LIBXMLPP_LIBS@
# TODO: move ICU flag determination to configure script
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
# the text result XSLT has to be relative to the test result file, e.g. TMP_DIR
diff --git a/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h b/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h
index 445b23a08..6ff194172 100644
--- a/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h
+++ b/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -77,6 +77,7 @@ using namespace boost::posix_time;
*
*
* <audioClip id="1"
+ * title="Name of the Song"
* playlength="00:18:30.000000"
* uri="file:var/test1.mp3" >
* <metadata
@@ -108,13 +109,14 @@ using namespace boost::posix_time;
*
*
* <!ELEMENT audioClip (metadata?) >
- * <!ATTLIST audioClip id NMTOKEN #REQUIRED >
- * <!ATTLIST audioClip playlength NMTOKEN #REQUIRED >
+ * <!ATTLIST audioClip id NMTOKEN #IMPLIED >
+ * <!ATTLIST audioClip title CDATA #IMPLIED >
+ * <!ATTLIST audioClip playlength NMTOKEN #IMPLIED >
* <!ATTLIST audioClip uri CDATA #IMPLIED >
*
*
* @author $Author: fgerlits $
- * @version $Revision: 1.11 $
+ * @version $Revision: 1.12 $
*/
class AudioClip : public Configurable,
public Playable
@@ -130,6 +132,11 @@ class AudioClip : public Configurable,
*/
Ptr::Ref id;
+ /**
+ * The title of the audio clip.
+ */
+ Ptr::Ref title;
+
/**
* The playling length of the audio clip.
*/
@@ -145,6 +152,17 @@ class AudioClip : public Configurable,
*/
Ptr::Ref token;
+ /**
+ * The type for storing the metadata.
+ */
+ typedef std::map::Ref>
+ metadataType;
+
+ /**
+ * The metadata for this audio clip.
+ */
+ metadataType metadata;
+
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.
*
* @param id the id of the audio clip.
@@ -181,6 +200,28 @@ class AudioClip : public Configurable,
throw ()
{
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::Ref id,
+ Ptr::Ref title,
+ Ptr::Ref playlength,
+ Ptr::Ref uri = Ptr::Ref())
+ throw ()
+ {
+ this->id = id;
+ this->title = title;
this->playlength = playlength;
this->uri = uri;
}
@@ -288,6 +329,52 @@ class AudioClip : public Configurable,
this->token = token;
}
+
+ /**
+ * Return the title of this audio clip.
+ *
+ * @return the title.
+ */
+ virtual Ptr::Ref
+ getTitle(void) const throw ()
+ {
+ return title;
+ }
+
+ /**
+ * Set the title of this audio clip.
+ *
+ * @param title a new title.
+ */
+ virtual void
+ setTitle(Ptr::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::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::Ref value)
+ throw ();
+
+
/**
* Return an XML representation of this audio clip. This contains
* 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.
*/
Ptr::Ref
- getMetadata() throw ();
+ toXml() throw ();
};
diff --git a/livesupport/modules/core/include/LiveSupport/Core/Playable.h b/livesupport/modules/core/include/LiveSupport/Core/Playable.h
index 5096128e7..a9bd6866f 100644
--- a/livesupport/modules/core/include/LiveSupport/Core/Playable.h
+++ b/livesupport/modules/core/include/LiveSupport/Core/Playable.h
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -44,6 +44,7 @@
#include
#include
#include
+#include
#include "LiveSupport/Core/Ptr.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.
*
* @author $Author: fgerlits $
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
class Playable
{
@@ -91,6 +92,7 @@ class Playable
virtual Ptr::Ref
getPlaylength(void) const throw () = 0;
+
/**
* Return the URI of the sound file of this audio clip or
* playlist, which can be played by the helix client. This
@@ -111,6 +113,7 @@ class Playable
virtual void
setUri(Ptr::Ref uri) throw () = 0;
+
/**
* Return the token which is used to identify this audio clip
* or playlist to the storage server.
@@ -128,6 +131,45 @@ class Playable
*/
virtual void
setToken(Ptr::Ref token) throw () = 0;
+
+
+ /**
+ * Return the title of this audio clip or playlist.
+ *
+ * @return the title.
+ */
+ virtual Ptr::Ref
+ getTitle(void) const throw () = 0;
+
+ /**
+ * Set the title of this audio clip or playlist.
+ *
+ * @param title a new title.
+ */
+ virtual void
+ setTitle(Ptr::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::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::Ref value)
+ throw () = 0;
};
diff --git a/livesupport/modules/core/include/LiveSupport/Core/Playlist.h b/livesupport/modules/core/include/LiveSupport/Core/Playlist.h
index e160acdf9..eaa91881b 100644
--- a/livesupport/modules/core/include/LiveSupport/Core/Playlist.h
+++ b/livesupport/modules/core/include/LiveSupport/Core/Playlist.h
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -93,7 +93,7 @@ using namespace boost::posix_time;
*
*
* @author $Author: fgerlits $
- * @version $Revision: 1.19 $
+ * @version $Revision: 1.20 $
*/
class Playlist : public Configurable,
public Playable
@@ -109,6 +109,11 @@ class Playlist : public Configurable,
*/
Ptr::Ref id;
+ /**
+ * The title of the playlist.
+ */
+ Ptr::Ref title;
+
/**
* The playling length of the playlist.
*/
@@ -163,6 +168,18 @@ class Playlist : public Configurable,
Ptr::Ref savedCopy;
+ /**
+ * The type for storing the metadata.
+ */
+ typedef std::map::Ref>
+ metadataType;
+
+ /**
+ * The metadata for this playlist.
+ */
+ metadataType metadata;
+
+
public:
/**
* Default constructor.
@@ -174,6 +191,29 @@ class Playlist : public Configurable,
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::Ref id,
+ Ptr::Ref playlength,
+ Ptr::Ref uri = Ptr::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.
* This is used for testing purposes.
@@ -183,12 +223,14 @@ class Playlist : public Configurable,
* @param uri the location of the SMIL file representing this
* playlist (optional)
*/
- Playlist(Ptr::Ref id,
- Ptr::Ref playlength,
- Ptr::Ref uri = Ptr::Ref())
+ Playlist(Ptr::Ref id,
+ Ptr::Ref title,
+ Ptr::Ref playlength,
+ Ptr::Ref uri = Ptr::Ref())
throw ()
{
this->id = id;
+ this->title = title;
this->playlength = playlength;
this->uri = uri;
elementList.reset(new PlaylistElementListType);
@@ -491,7 +533,56 @@ class Playlist : public Configurable,
* saved copy, do nothing and throw an exception.
*/
void
- revertToSavedCopy(void) throw (std::logic_error);
+ revertToSavedCopy(void) throw (std::invalid_argument);
+
+
+ /**
+ * Return the title of this playlist.
+ *
+ * @return the title.
+ */
+ virtual Ptr::Ref
+ getTitle(void) const throw ()
+ {
+ return title;
+ }
+
+ /**
+ * Set the title of this playlist.
+ *
+ * @param title a new title.
+ */
+ virtual void
+ setTitle(Ptr::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::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::Ref value)
+ throw ();
};
diff --git a/livesupport/modules/core/src/AudioClip.cxx b/livesupport/modules/core/src/AudioClip.cxx
index adfc82f4d..7df75ff44 100644
--- a/livesupport/modules/core/src/AudioClip.cxx
+++ b/livesupport/modules/core/src/AudioClip.cxx
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -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::Ref
+AudioClip :: getMetadata(const string &key) const
+ throw ()
+{
+ metadataType::const_iterator it = metadata.find(key);
+
+ if (it != metadata.end()) {
+ return it->second;
+ }
+ else {
+ Ptr::Ref nullPointer;
+ return nullPointer;
+ }
+}
+
+
+/*------------------------------------------------------------------------------
+ * Set the value of a metadata field.
+ *----------------------------------------------------------------------------*/
+void
+AudioClip :: setMetadata(const string &key, Ptr::Ref value)
+ throw ()
+{
+ metadata[key] = value;
+}
+
+
+/*------------------------------------------------------------------------------
+ * Create an XML document from this audio clip.
*----------------------------------------------------------------------------*/
Ptr::Ref
-AudioClip :: getMetadata()
+AudioClip :: toXml()
throw ()
{
Ptr::Ref metadata(new xmlpp::Document);
diff --git a/livesupport/modules/core/src/Playlist.cxx b/livesupport/modules/core/src/Playlist.cxx
index 43788de5d..4baa67c7c 100644
--- a/livesupport/modules/core/src/Playlist.cxx
+++ b/livesupport/modules/core/src/Playlist.cxx
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -350,10 +350,10 @@ Playlist::createSavedCopy(void) throw ()
* Revert to a saved copy of the playlist.
*----------------------------------------------------------------------------*/
void
-Playlist::revertToSavedCopy(void) throw (std::logic_error)
+Playlist::revertToSavedCopy(void) throw (std::invalid_argument)
{
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;
@@ -364,3 +364,34 @@ Playlist::revertToSavedCopy(void) throw (std::logic_error)
savedCopy.reset();
}
+
+
+/*------------------------------------------------------------------------------
+ * Return the value of a metadata field.
+ *----------------------------------------------------------------------------*/
+Ptr::Ref
+Playlist :: getMetadata(const string &key) const
+ throw ()
+{
+ metadataType::const_iterator it = metadata.find(key);
+
+ if (it != metadata.end()) {
+ return it->second;
+ }
+ else {
+ Ptr::Ref nullPointer;
+ return nullPointer;
+ }
+}
+
+
+/*------------------------------------------------------------------------------
+ * Set the value of a metadata field.
+ *----------------------------------------------------------------------------*/
+void
+Playlist :: setMetadata(const string &key, Ptr::Ref value)
+ throw ()
+{
+ metadata[key] = value;
+}
+
diff --git a/livesupport/modules/core/src/PlaylistTest.cxx b/livesupport/modules/core/src/PlaylistTest.cxx
index 0d20df98a..c9d520f74 100644
--- a/livesupport/modules/core/src/PlaylistTest.cxx
+++ b/livesupport/modules/core/src/PlaylistTest.cxx
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -260,7 +260,7 @@ PlaylistTest :: savedCopyTest(void)
playlist->revertToSavedCopy();
CPPUNIT_FAIL("allowed to revert to non-existent state");
}
- catch (std::logic_error &e) {
+ catch (std::invalid_argument &e) {
}
playlist->createSavedCopy();
diff --git a/livesupport/modules/storage/etc/Makefile.in b/livesupport/modules/storage/etc/Makefile.in
index d89415e78..fcb0c3ef7 100644
--- a/livesupport/modules/storage/etc/Makefile.in
+++ b/livesupport/modules/storage/etc/Makefile.in
@@ -21,7 +21,7 @@
#
#
# 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 $
#
# @configure_input@
@@ -73,6 +73,10 @@ VPATH = ${SRC_DIR}
LIBXMLPP_CFLAGS=@LIBXMLPP_CFLAGS@
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`
TEST_RESULTS = ${DOC_DIR}/testResults.xml
@@ -93,12 +97,14 @@ CPPFLAGS = @CPPFLAGS@
CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \
-pedantic -Wall -Wno-long-long \
-I${USR_INCLUDE_DIR} \
+ ${ICU_CFLAGS} \
${LIBXMLPP_CFLAGS} \
-I${BOOST_INCLUDE_DIR} \
-I${CORE_INCLUDE_DIR} \
-I${AUTHENTICATION_INCLUDE_DIR} \
-I${INCLUDE_DIR} -I${TMP_DIR}
LDFLAGS = @LDFLAGS@ -pthread \
+ ${ICU_LIBS} \
${LIBXMLPP_LIBS} \
${CURL_LIBS} \
-L${USR_LIB_DIR} \
@@ -120,7 +126,7 @@ TEST_RUNNER_OBJS = ${TMP_DIR}/TestRunner.o \
${TMP_DIR}/WebStorageClientTest.o
TEST_RUNNER_LIBS = -l${STORAGE_LIB} -l${CORE_LIB} -l${AUTHENTICATION_LIB} \
- -lcppunit -ldl -lxmlrpc++ -lssl
+ ${ICU_LIBS} -lcppunit -ldl -lxmlrpc++ -lssl
#-------------------------------------------------------------------------------
diff --git a/livesupport/modules/storage/include/LiveSupport/Storage/StorageException.h b/livesupport/modules/storage/include/LiveSupport/Storage/StorageException.h
index 86b31b55a..e7d321059 100644
--- a/livesupport/modules/storage/include/LiveSupport/Storage/StorageException.h
+++ b/livesupport/modules/storage/include/LiveSupport/Storage/StorageException.h
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -58,7 +58,7 @@ namespace Storage {
* Common parent of exception classes for this module.
*
* @author $Author: fgerlits $
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
*/
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 */
diff --git a/livesupport/modules/storage/src/WebStorageClient.cxx b/livesupport/modules/storage/src/WebStorageClient.cxx
index 4fefb4329..72b91a09a 100644
--- a/livesupport/modules/storage/src/WebStorageClient.cxx
+++ b/livesupport/modules/storage/src/WebStorageClient.cxx
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -497,21 +497,29 @@ WebStorageClient :: existsAudioClip(Ptr::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '";
eMsg += existsAudioClipMethodName;
eMsg += "'";
- throw StorageException(eMsg);
+ throw XmlRpcCommunicationException(eMsg);
}
- if (xmlRpcClient.isFault()
- || ! result.hasMember(existsAudioClipResultParamName)
- || result[existsAudioClipResultParamName].getType()
- != XmlRpcValue::TypeBoolean) {
+ if (xmlRpcClient.isFault()) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< existsAudioClipMethodName
<< "' returned error message:\n"
<< 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]);
}
@@ -542,24 +550,32 @@ WebStorageClient :: getAudioClip(Ptr::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '";
eMsg += getAudioClipOpenMethodName;
eMsg += "'";
- throw StorageException(eMsg);
+ throw XmlRpcCommunicationException(eMsg);
}
- if (xmlRpcClient.isFault()
- || ! result.hasMember(getAudioClipUrlParamName)
- || result[getAudioClipUrlParamName].getType()
- != XmlRpcValue::TypeString
- || ! result.hasMember(getAudioClipTokenParamName)
- || result[getAudioClipTokenParamName].getType()
- != XmlRpcValue::TypeString) {
+ if (xmlRpcClient.isFault()) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< getAudioClipOpenMethodName
<< "' returned error message:\n"
<< 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 token = result[getAudioClipTokenParamName];
@@ -573,9 +589,11 @@ WebStorageClient :: getAudioClip(Ptr::Ref sessionId,
audioClip->configure(*root);
} 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) {
- throw StorageException("error parsing audio clip metafile");
+ throw XmlRpcMethodResponseException(
+ "error parsing audio clip metafile");
}
parameters.clear();
@@ -590,21 +608,29 @@ WebStorageClient :: getAudioClip(Ptr::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '";
eMsg += getAudioClipCloseMethodName;
eMsg += "'";
- throw StorageException(eMsg);
+ throw XmlRpcCommunicationException(eMsg);
}
- if (xmlRpcClient.isFault()
- || ! result.hasMember(getAudioClipAudioClipIdParamName)
- || result[getAudioClipAudioClipIdParamName].getType()
- != XmlRpcValue::TypeString
- || std::string(result[getAudioClipAudioClipIdParamName])
- != std::string(*id)) {
+ if (xmlRpcClient.isFault()) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< getAudioClipCloseMethodName
<< "' returned error message:\n"
<< 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;
@@ -620,10 +646,10 @@ WebStorageClient :: storeAudioClip(Ptr::Ref sessionId,
throw (StorageException)
{
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");
// temporary hack; we will expect an absolute file name from getUri()
@@ -632,7 +658,7 @@ WebStorageClient :: storeAudioClip(Ptr::Ref sessionId,
std::ifstream ifs(binaryFileName.c_str());
if (!ifs) {
ifs.close();
- throw StorageException("could not read audio clip");
+ throw IOException("could not read audio clip");
}
std::string md5string = Md5(ifs);
ifs.close();
@@ -659,35 +685,47 @@ WebStorageClient :: storeAudioClip(Ptr::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '";
eMsg += storeAudioClipOpenMethodName;
eMsg += "'";
- throw StorageException(eMsg);
+ throw XmlRpcCommunicationException(eMsg);
}
- if (xmlRpcClient.isFault()
- || ! result.hasMember(storeAudioClipUrlParamName)
- || result[storeAudioClipUrlParamName].getType()
- != XmlRpcValue::TypeString
- || ! result.hasMember(storeAudioClipTokenParamName)
- || result[storeAudioClipTokenParamName].getType()
- != XmlRpcValue::TypeString) {
+ if (xmlRpcClient.isFault()) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< storeAudioClipOpenMethodName
<< "' returned error message:\n"
<< 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 token = std::string(result[storeAudioClipTokenParamName]);
FILE* binaryFile = fopen(binaryFileName.c_str(), "rb");
+ if (!binaryFile) {
+ throw IOException("Binary audio clip file not found.");
+ }
fseek(binaryFile, 0, SEEK_END);
long binaryFileSize = ftell(binaryFile);
rewind(binaryFile);
CURL* handle = curl_easy_init();
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);
@@ -699,13 +737,13 @@ WebStorageClient :: storeAudioClip(Ptr::Ref sessionId,
// status |= curl_easy_setopt(handle, CURLOPT_ENCODING, "deflate");
if (status) {
- throw StorageException("Could not set curl options.");
+ throw XmlRpcCommunicationException("Could not set curl options.");
}
status = curl_easy_perform(handle);
if (status) {
- throw StorageException("Error uploading file.");
+ throw XmlRpcCommunicationException("Error uploading file.");
}
curl_easy_cleanup(handle);
@@ -723,23 +761,31 @@ WebStorageClient :: storeAudioClip(Ptr::Ref sessionId,
std::string eMsg = "cannot execute XML-RPC method '";
eMsg += storeAudioClipCloseMethodName;
eMsg += "'";
- throw StorageException(eMsg);
+ throw XmlRpcCommunicationException(eMsg);
}
- if (xmlRpcClient.isFault()
- || ! result.hasMember(storeAudioClipAudioClipIdParamName)
- || result[storeAudioClipAudioClipIdParamName].getType()
- != XmlRpcValue::TypeString
- || std::string(result[storeAudioClipAudioClipIdParamName])
- != std::string(*audioClip->getId())) {
+ if (xmlRpcClient.isFault()) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< storeAudioClipCloseMethodName
<< "' returned error message:\n"
<< 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;
}
@@ -818,21 +864,29 @@ WebStorageClient :: reset(void)
std::string eMsg = "cannot execute XML-RPC method '";
eMsg += resetStorageMethodName;
eMsg += "'";
- throw StorageException(eMsg);
+ throw XmlRpcCommunicationException(eMsg);
}
- if (xmlRpcClient.isFault()
- || ! result.hasMember(resetStorageResultParamName)
- || result[resetStorageResultParamName].getType()
- != XmlRpcValue::TypeArray) {
+ if (xmlRpcClient.isFault()) {
std::stringstream eMsg;
eMsg << "XML-RPC method '"
<< resetStorageMethodName
<< "' returned error message:\n"
<< 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];
Ptr::Ref> >::Ref returnValue(
new std::vector::Ref>);
@@ -844,7 +898,7 @@ WebStorageClient :: reset(void)
<< resetStorageMethodName
<< "':\n"
<< result;
- throw StorageException(eMsg.str());
+ throw XmlRpcMethodResponseException(eMsg.str());
}
Ptr::Ref uniqueId(new UniqueId(std::string(uniqueIdArray[i])));
returnValue->push_back(uniqueId);
diff --git a/livesupport/modules/storage/src/WebStorageClientTest.cxx b/livesupport/modules/storage/src/WebStorageClientTest.cxx
index 28faec24a..eb4cea768 100644
--- a/livesupport/modules/storage/src/WebStorageClientTest.cxx
+++ b/livesupport/modules/storage/src/WebStorageClientTest.cxx
@@ -22,7 +22,7 @@
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 $
------------------------------------------------------------------------------*/
@@ -228,9 +228,11 @@ WebStorageClientTest :: audioClipTest(void)
}
CPPUNIT_ASSERT(!exists);
+// Ptr::Ref id02 = UniqueId::generateId();
+ Ptr::Ref id02(new UniqueId("11111111111111112222222222222222"));
Ptr::Ref playlength(new time_duration(0,0,11,0));
Ptr::Ref uri(new std::string("file:var/test10001.mp3"));
- audioClip.reset(new AudioClip(id01, playlength, uri));
+ audioClip.reset(new AudioClip(id02, playlength, uri));
try {
wsc->storeAudioClip(sessionId, audioClip);
@@ -240,7 +242,7 @@ WebStorageClientTest :: audioClipTest(void)
}
try {
- CPPUNIT_ASSERT( wsc->existsAudioClip(sessionId, id01));
+ CPPUNIT_ASSERT( wsc->existsAudioClip(sessionId, id02));
}
catch (StorageException &e) {
CPPUNIT_FAIL(e.what());
diff --git a/livesupport/products/scheduler/etc/Makefile.in b/livesupport/products/scheduler/etc/Makefile.in
index bc27a58dc..356be60b5 100644
--- a/livesupport/products/scheduler/etc/Makefile.in
+++ b/livesupport/products/scheduler/etc/Makefile.in
@@ -21,7 +21,7 @@
#
#
# 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 $
#
# @configure_input@
@@ -65,6 +65,10 @@ VPATH = ${SRC_DIR}
LIBXMLPP_CFLAGS=@LIBXMLPP_CFLAGS@
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`
MODULES_DIR = ${BASE_DIR}/../../modules
@@ -126,6 +130,7 @@ export LD_LIBRARY_PATH=${USR_LIB_DIR}
CPPFLAGS = @CPPFLAGS@
CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \
-pedantic -Wall -Wno-long-long \
+ ${ICU_CFLAGS} \
${LIBXMLPP_CFLAGS} \
-I${USR_INCLUDE_DIR} \
-I${BOOST_INCLUDE_DIR} \
@@ -138,6 +143,7 @@ CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ -pthread \
-I${TMP_DIR}
LDFLAGS = @LDFLAGS@ -pthread \
${LIBXMLPP_LIBS} \
+ ${ICU_LIBS} \
${CURL_LIBS} \
-L${USR_LIB_DIR} \
-L${HELIX_LIB_DIR} \
@@ -229,7 +235,7 @@ TEST_RUNNER_OBJS = ${SCHEDULER_OBJS} \
${TMP_DIR}/UpdateFadeInFadeOutMethodTest.o \
${TMP_DIR}/PlaylistEventContainerTest.o \
${TMP_DIR}/PlaylistEventTest.o
-TEST_RUNNER_LIBS = ${SCHEDULER_EXE_LIBS} -lcppunit -ldl
+TEST_RUNNER_LIBS = ${SCHEDULER_EXE_LIBS} ${ICU_LIBS} -lcppunit -ldl
#-------------------------------------------------------------------------------