diff --git a/livesupport/modules/core/etc/Makefile.in b/livesupport/modules/core/etc/Makefile.in index 0883b2861..3b8c187b6 100644 --- a/livesupport/modules/core/etc/Makefile.in +++ b/livesupport/modules/core/etc/Makefile.in @@ -20,8 +20,8 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # -# Author : $Author: maroy $ -# Version : $Revision: 1.4 $ +# Author : $Author: fgerlits $ +# Version : $Revision: 1.5 $ # Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/etc/Makefile.in,v $ # # @configure_input@ @@ -85,8 +85,13 @@ LDFLAGS = @LDFLAGS@ -L${USR_LIB_DIR} -L${LIB_DIR} # Dependencies #------------------------------------------------------------------------------- CORE_LIB_OBJS = ${TMP_DIR}/UniqueId.o \ - ${TMP_DIR}/Playlist.o -TEST_RUNNER_OBJS = ${TMP_DIR}/PlaylistTest.o ${TMP_DIR}/TestRunner.o + ${TMP_DIR}/Playlist.o \ + ${TMP_DIR}/AudioClip.o + +TEST_RUNNER_OBJS = ${TMP_DIR}/PlaylistTest.o \ + ${TMP_DIR}/AudioClipTest.o \ + ${TMP_DIR}/TestRunner.o + TEST_RUNNER_LIBS = -l${CORE_LIB} -lxml++-1.0 -lcppunit -ldl diff --git a/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h b/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h new file mode 100644 index 000000000..0809cc7e3 --- /dev/null +++ b/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h @@ -0,0 +1,207 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + LiveSupport is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: fgerlits $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/AudioClip.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef LiveSupport_Core_AudioClip_h +#define LiveSupport_Core_AudioClip_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include +#include +#include +#include + +#include "LiveSupport/Core/Ptr.h" +#include "LiveSupport/Core/UniqueId.h" +#include "LiveSupport/Core/Configurable.h" + + +namespace LiveSupport { +namespace Core { + +using namespace std; +using namespace boost::posix_time; + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * A class representing an audio clip. + * AudioClips contain the basic information about the audio clip. + * They are contained in PlaylistElements, which provide the relative offset + * and fade in/fade out info. PlaylistElements, in turn, are contained + * in a Playlist. + * + * @author $Author: fgerlits $ + * @version $Revision: 1.1 $ + */ +class AudioClip : public Configurable +{ + private: + /** + * The name of the configuration XML elmenent used by AudioClip. + */ + static const std::string configElementNameStr; + + /** + * The unique id of the audio clip. + */ + Ptr::Ref id; + + /** + * The playling length of the audio clip. + */ + Ptr::Ref playlength; + + /** + * The title of the audio clip. + */ +// Ptr::Ref title; + + + public: + /** + * Default constructor. + */ + AudioClip(void) throw () + { + } + + /** + * 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. + */ + AudioClip(Ptr::Ref id, + Ptr::Ref playlength) throw() +// Ptr::Ref title) throw () + { + this->id = id; + this->playlength = playlength; +// this->title = title; + } + + /** + * A virtual destructor, as this class has virtual functions. + */ + virtual + ~AudioClip(void) throw () + { + } + + /** + * Return the name of the XML element this object expects + * to be sent to a call to configure(). + * + * @return the name of the expected XML configuration element. + */ + static const std::string + getConfigElementName(void) throw () + { + return configElementNameStr; + } + + /** + * Configure the object based on the XML element supplied. + * The supplied element is expected to be of the name + * returned by configElementName(). + * + * @param element the XML element to configure the object from. + * @exception std::invalid_argument if the supplied XML element + * contains bad configuraiton information + * @exception std::logic_error if the object has already + * been configured, and can not be reconfigured. + */ + virtual void + configure(const xmlpp::Element & element) + throw (std::invalid_argument, + std::logic_error); + + /** + * Return the id of the audio clip. + * + * @return the unique id of the audio clip. + */ + Ptr::Ref + getId(void) const throw () + { + return id; + } + + /** + * Return the total playing length for this audio clip. + * + * @return the playing length of this audio clip, in milliseconds. + */ + Ptr::Ref + getPlaylength(void) const throw () + { + return playlength; + } + + /** + * Return the title of this audio clip. + * + * @return the title of this audio clip. + */ +// Ptr::Ref +// getTitle(void) const throw () +// { +// return title; +// } + +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + +} // namespace Core +} // namespace LiveSupport + +#endif // LiveSupport_Core_AudioClip_h + diff --git a/livesupport/modules/core/src/AudioClip.cxx b/livesupport/modules/core/src/AudioClip.cxx new file mode 100644 index 000000000..fefbe62f4 --- /dev/null +++ b/livesupport/modules/core/src/AudioClip.cxx @@ -0,0 +1,117 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + LiveSupport is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: fgerlits $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/AudioClip.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include + +#include "LiveSupport/Core/AudioClip.h" + +using namespace boost::posix_time; + +using namespace LiveSupport::Core; + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + +/*------------------------------------------------------------------------------ + * The name of the config element for this class + *----------------------------------------------------------------------------*/ +const std::string AudioClip::configElementNameStr = "audioClip"; + +/** + * The name of the attribute to get the id of the audio clip. + */ +static const std::string idAttrName = "id"; + +/** + * The name of the attribute to get the title of the audio clip. + */ +//static const std::string titleAttrName = "title"; + +/** + * The name of the attribute to get the playlength of the audio clip. + */ +static const std::string playlengthAttrName = "playlength"; + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Create an audio clip object based on an XML element. + *----------------------------------------------------------------------------*/ +void +AudioClip :: configure(const xmlpp::Element & element) + throw (std::logic_error, + std::invalid_argument) +{ + if (element.get_name() != configElementNameStr) { + std::string eMsg = "Bad configuration element "; + eMsg += element.get_name(); + throw std::invalid_argument(eMsg); + } + + const xmlpp::Attribute * attribute; + std::stringstream strStr; + unsigned long int idValue; + + if (!(attribute = element.get_attribute(idAttrName))) { + std::string eMsg = "Missing attribute "; + eMsg += idAttrName; + throw std::invalid_argument(eMsg); + } + strStr.str(attribute->get_value()); + strStr >> idValue; + id.reset(new UniqueId(idValue)); +/* + if (!(attribute = element.get_attribute(titleAttrName))) { + std::string eMsg = "Missing attribute "; + eMsg += idAttrName; + throw std::invalid_argument(eMsg); + } + std::string titleValue = attribute->get_value(); + title.reset(new std::string(titleValue)); +*/ + if (!(attribute = element.get_attribute(playlengthAttrName))) { + std::string eMsg = "Missing attribute "; + eMsg += idAttrName; + throw std::invalid_argument(eMsg); + } + playlength.reset(new time_duration( + duration_from_string(attribute->get_value()))); +} + diff --git a/livesupport/modules/core/src/AudioClipTest.cxx b/livesupport/modules/core/src/AudioClipTest.cxx new file mode 100644 index 000000000..577d9f376 --- /dev/null +++ b/livesupport/modules/core/src/AudioClipTest.cxx @@ -0,0 +1,122 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + LiveSupport is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: fgerlits $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/AudioClipTest.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#if HAVE_UNISTD_H +#include +#else +#error "Need unistd.h" +#endif + + +#include +#include + +#include "LiveSupport/Core/AudioClip.h" +#include "AudioClipTest.h" + + +using namespace std; +using namespace LiveSupport::Core; + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + +CPPUNIT_TEST_SUITE_REGISTRATION(AudioClipTest); + +/** + * The name of the configuration file for the audio clip. + */ +static const std::string configFileName = "etc/audioClip.xml"; + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Set up the test environment + *----------------------------------------------------------------------------*/ +void +AudioClipTest :: setUp(void) throw () +{ +} + + +/*------------------------------------------------------------------------------ + * Clean up the test environment + *----------------------------------------------------------------------------*/ +void +AudioClipTest :: tearDown(void) throw () +{ +} + + +/*------------------------------------------------------------------------------ + * Test to see if the singleton Hello object is accessible + *----------------------------------------------------------------------------*/ +void +AudioClipTest :: firstTest(void) + throw (CPPUNIT_NS::Exception) +{ + try { + Ptr::Ref parser( + new xmlpp::DomParser(configFileName, true)); + const xmlpp::Document * document = parser->get_document(); + const xmlpp::Element * root = document->get_root_node(); + Ptr::Ref audioClip(new AudioClip()); + + audioClip->configure(*root); + + CPPUNIT_ASSERT(audioClip->getId()->getId() == 1); + + Ptr::Ref duration + = audioClip->getPlaylength(); + CPPUNIT_ASSERT(duration->hours() == 0); + CPPUNIT_ASSERT(duration->minutes() == 18); + CPPUNIT_ASSERT(duration->seconds() == 30); + +// CPPUNIT_ASSERT(*(audioClip->getTitle()) == "The_Sounds_of_Silence"); + + } catch (std::invalid_argument &e) { + CPPUNIT_FAIL("semantic error in configuration file"); + } catch (xmlpp::exception &e) { + std::string eMsg = "error parsing configuration file\n"; + eMsg += e.what(); + CPPUNIT_FAIL(eMsg); + } +} diff --git a/livesupport/modules/core/src/AudioClipTest.h b/livesupport/modules/core/src/AudioClipTest.h new file mode 100644 index 000000000..153061740 --- /dev/null +++ b/livesupport/modules/core/src/AudioClipTest.h @@ -0,0 +1,107 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + LiveSupport is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: fgerlits $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/src/AudioClipTest.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef AudioClipTest_h +#define AudioClipTest_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include + + +namespace LiveSupport { +namespace Core { + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * Unit test for the AudioClip class. + * + * @author $Author: fgerlits $ + * @version $Revision: 1.1 $ + * @see AudioClip + */ +class AudioClipTest : public CPPUNIT_NS::TestFixture +{ + CPPUNIT_TEST_SUITE(AudioClipTest); + CPPUNIT_TEST(firstTest); + CPPUNIT_TEST_SUITE_END(); + + protected: + + /** + * A simple test. + * + * @exception CPPUNIT_NS::Exception on test failures. + */ + void + firstTest(void) throw (CPPUNIT_NS::Exception); + + + public: + + /** + * Set up the environment for the test case. + */ + void + setUp(void) throw (); + + /** + * Clean up the environment after the test case. + */ + void + tearDown(void) throw (); +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + +} // namespace Core +} // namespace LiveSupport + +#endif // AudioClipTest_h + diff --git a/livesupport/products/scheduler/doc/model/SchedulerModel.zuml b/livesupport/products/scheduler/doc/model/SchedulerModel.zuml index 9618bc077..726140fad 100644 Binary files a/livesupport/products/scheduler/doc/model/SchedulerModel.zuml and b/livesupport/products/scheduler/doc/model/SchedulerModel.zuml differ diff --git a/livesupport/products/scheduler/etc/playlist.xml b/livesupport/products/scheduler/etc/playlist.xml new file mode 100644 index 000000000..5dc2234ee --- /dev/null +++ b/livesupport/products/scheduler/etc/playlist.xml @@ -0,0 +1,8 @@ + + + + +]> +