00001 #include "ArchivingManager.h"
00002 #include "Sct/SctNames.h"
00003
00004 #include "Sct/IoExceptions.h"
00005 #include "Sct/LogicErrors.h"
00006 #include <sstream>
00007 #include <iomanip>
00008 #include <cstdlib>
00009 #include <boost/date_time/posix_time/posix_time.hpp>
00010
00011 using namespace Sct;
00012 using namespace boost;
00013
00014
00015
00016 using boost::shared_ptr;
00017
00018 ArchivingManager::ArchivingManager() {}
00019
00020 ArchivingManager::~ArchivingManager() {}
00021
00022 ArchivingManager& ArchivingManager::instance() throw () {
00023 static ArchivingManager bertha;
00024 return bertha;
00025 }
00026
00027
00028
00029 shared_ptr<ArchScanResult> ArchivingManager::getScanFromMap(shared_ptr<const Serializable> ob) const throw(Sct::LogicError) {
00030 const string classname = ob->getClassName();
00031 ArchivingScanMap::const_iterator it = theScanMap.find(classname);
00032 if ( it == theScanMap.end() ){
00033 cerr << "ArchivingScanManager::getFromScanMap no archiver for " << classname << endl;
00034 cerr << "known Scanarchivers:" << endl ;
00035 for (ArchivingScanMap::const_iterator it = theScanMap.begin(); it != theScanMap.end(); ++it){
00036 cerr << (*it).first << endl;
00037 }
00038 throw InvalidArgumentError( string("ArchivingManager::getScanFromMap no Scanarchiver for ") + classname, __FILE__, __LINE__ );
00039 } else {
00040
00041 return (*it).second ;
00042
00043 }
00044 }
00045
00046 shared_ptr<ArchTestResult> ArchivingManager::getTestFromMap(shared_ptr<const Serializable> ob) const throw(Sct::LogicError) {
00047 const string classname = ob->getClassName();
00048 ArchivingTestMap::const_iterator it = theTestMap.find(classname);
00049 if ( it == theTestMap.end() ){
00050 cerr << "ArchivingTestManager::getFromMap no archiver for " << classname << endl;
00051 cerr << "known Testarchivers:" << endl ;
00052 for (ArchivingTestMap::const_iterator it = theTestMap.begin(); it != theTestMap.end(); ++it){
00053 cerr << (*it).first << endl;
00054 }
00055 throw InvalidArgumentError( string("ArchivingManager::getTestFromMap no Testarchiver for ") + classname, __FILE__, __LINE__ );
00056 } else {
00057 return (*it).second;
00058
00059 }
00060 }
00061
00062 bool ArchivingManager::addScanArchiver(const string& scanName, shared_ptr<ArchScanResult> archiver) throw(Sct::LogicError) {
00063 if (theScanMap.find(scanName) == theScanMap.end() ){
00064 theScanMap[scanName] = archiver;
00065 return true;
00066 }
00067 return false;
00068 }
00069
00070 bool ArchivingManager::addTestArchiver(const string& testName, shared_ptr<ArchTestResult> archiver) throw(Sct::LogicError) {
00071 if (theTestMap.find(testName) == theTestMap.end() ){
00072 theTestMap[testName] = archiver;
00073 return true;
00074 }
00075 return false;
00076 }