00001 #include "AnalysisAlgorithmMap.h" 00002 #include "AnalysisAlgorithm.h" 00003 #include "CalibrationController/IS/TestData.h" 00004 #include <sstream> 00005 00006 using namespace std; 00007 00008 namespace SctAnalysis { 00009 00010 typedef map<string, shared_ptr<AnalysisAlgorithm> > MapType; 00011 00012 AnalysisAlgorithmMap& AnalysisAlgorithmMap::instance() { 00013 static AnalysisAlgorithmMap* instance = new AnalysisAlgorithmMap(); 00014 return *instance; 00015 } 00016 00017 shared_ptr <AnalysisAlgorithm> AnalysisAlgorithmMap::getAlgorithm(shared_ptr<const TestData> testData, const string& moduleName) const throw(Sct::InvalidArgument) { 00018 if (!testData.get()) throw Sct::InvalidArgumentError("Attempt to use null TestData",__FILE__,__LINE__); 00019 string nameToUse = testData->testName; 00020 if (nameToUse=="NONE") { 00021 shared_ptr<AnalysisAlgorithm> alg; 00022 return alg; 00023 } 00024 00025 if (testData->analysisAlgorithm!=""){ 00026 nameToUse=testData->analysisAlgorithm; 00027 } 00028 00029 if (algMap.count(nameToUse) == 0) { 00030 Sct::InvalidArgumentError iae("No map for Test: " + nameToUse, __FILE__, __LINE__); 00031 iae.setSeverity(MRS_DIAGNOSTIC); 00032 throw iae; 00033 } 00034 00035 return (*algMap.find(nameToUse)).second->clone(testData, moduleName); 00036 } 00037 00038 bool AnalysisAlgorithmMap::setAlgorithm(const string testName, auto_ptr<AnalysisAlgorithm> alg) throw() { 00039 algMap[testName] = shared_ptr<AnalysisAlgorithm>(alg); 00040 return true; 00041 } 00042 00043 string AnalysisAlgorithmMap::getStatus(string testName) { 00044 if (algMap.count(testName) == 0) { 00045 return string(); 00046 } 00047 return algMap[testName]->getStatus(); 00048 } 00049 00050 string AnalysisAlgorithmMap::getAllStatus() { 00051 ostringstream status; 00052 for (MapType::const_iterator i=algMap.begin(); i!=algMap.end(); ++i) { 00053 status << i->first << " Algorithm " << i->second->getStatus() << "\n"; 00054 } 00055 return status.str(); 00056 } 00057 00058 std::list<std::string> AnalysisAlgorithmMap::listAlgorithms(){ 00059 std::list<std::string> alg_list; 00060 for (MapType::const_iterator i=algMap.begin(); i!=algMap.end(); ++i) { 00061 alg_list.push_back(i->first); 00062 } 00063 return alg_list; 00064 } 00065 00066 }