00001 #include "ISSummaryManager.h"
00002 #include "ISSummaryWriter.h"
00003 #include "SctData/TestResult.h"
00004 #include "Sct/SctNames.h"
00005 #include <sstream>
00006 #include <iomanip>
00007 #include <cstdlib>
00008 #include <boost/date_time/posix_time/posix_time.hpp>
00009
00010 using namespace Sct;
00011 using namespace boost;
00012 using namespace std;
00013
00014 namespace SctData {
00015 namespace ISTestSummary{
00016 using boost::shared_ptr;
00017
00018 ISSummaryManager::ISSummaryManager() {}
00019
00020 ISSummaryManager::~ISSummaryManager() {}
00021
00022 ISSummaryManager& ISSummaryManager::instance() {
00023 static ISSummaryManager bertha;
00024 return bertha;
00025 }
00026
00027 void ISSummaryManager::write(const TestResult& t) {
00028 shared_ptr<const ISSummaryWriter> writer = getWriter(t.getClassName());
00029 writer->write(t);
00030 }
00031
00032 shared_ptr<const ISSummaryWriter> ISSummaryManager::getWriter(const string& classname) const {
00033 WriterMap::const_iterator it = theMap.find(classname);
00034 if ( it == theMap.end() ){
00035 cerr << "ISSummaryManager::getWriter no writer for " << classname << endl;
00036 cerr << "known writers:" << endl ;
00037 for (WriterMap::const_iterator it = theMap.begin(); it != theMap.end(); ++it){
00038 cerr << (*it).first << endl;
00039 }
00040 throw InvalidArgumentError( string("ISSummaryManager::getWriter no writer for ") + classname, __FILE__, __LINE__ );
00041 } else {
00042 return (*it).second ;
00043 }
00044 }
00045
00046 bool ISSummaryManager::addWriter(const string& testname, shared_ptr<ISSummaryWriter> writer) {
00047 if (theMap.find(testname) == theMap.end() ){
00048 theMap[testname] = writer;
00049 return true;
00050 }
00051 return false;
00052 }
00053
00054 }
00055 }