diff options
| author | Zdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com> | 2009-02-04 17:08:01 +0100 |
|---|---|---|
| committer | Zdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com> | 2009-02-04 17:08:01 +0100 |
| commit | f77d6e3432d0a84cc66022c7d820b8d359a87411 (patch) | |
| tree | c5261431e010483b7d415d57fea8b1b95e039bd6 /lib/MiddleWare/MiddleWare.cpp | |
| parent | 0b0e5a3f4327916a93ce020a266cb39dc9924362 (diff) | |
| download | abrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.tar.gz abrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.tar.xz abrt-f77d6e3432d0a84cc66022c7d820b8d359a87411.zip | |
new interface
Diffstat (limited to 'lib/MiddleWare/MiddleWare.cpp')
| -rw-r--r-- | lib/MiddleWare/MiddleWare.cpp | 168 |
1 files changed, 130 insertions, 38 deletions
diff --git a/lib/MiddleWare/MiddleWare.cpp b/lib/MiddleWare/MiddleWare.cpp index 85b88c9..8d773e4 100644 --- a/lib/MiddleWare/MiddleWare.cpp +++ b/lib/MiddleWare/MiddleWare.cpp @@ -20,68 +20,160 @@ */ #include "MiddleWare.h" +#include "DebugDump.h" +#include "Settings.h" CMiddleWare::CMiddleWare(const std::string& pPlugisConfDir, - const std::string& pPlugisLibDir) : - m_PluginManager(NULL) + const std::string& pPlugisLibDir, + const std::string& pMiddleWareConfFile) : + m_pPluginManager(NULL) { - m_PluginManager = new CPluginManager(pPlugisConfDir, pPlugisLibDir); - if (m_PluginManager == NULL) - { - throw std::string("Not enought memory."); - } + m_pPluginManager = new CPluginManager(pPlugisConfDir, pPlugisLibDir); + if (m_pPluginManager == NULL) + { + throw std::string("Not enought memory."); + } + m_pPluginManager->LoadPlugins(); + LoadSettings(pMiddleWareConfFile); } CMiddleWare::~CMiddleWare() { - if (m_PluginManager != NULL) - { - delete m_PluginManager; - } + m_pPluginManager->UnLoadPlugins(); + delete m_pPluginManager; } -void CMiddleWare::LoadPlugins() + +void CMiddleWare::LoadSettings(const std::string& pPath) { - m_PluginManager->LoadPlugins(); + map_settings_t settings; + load_settings(pPath, settings); + if (settings.find("BlackList") != settings.end()) + { + m_sBlackList = settings["BlackList"]; + } + if (settings.find("Database") != settings.end()) + { + m_sDatabase = settings["Database"]; + } + else + { + throw std::string("No database plugin is loaded."); + } } -void CMiddleWare::LoadPlugin(const std::string& pName) +void CMiddleWare::RegisterPlugin(const std::string& pName) { - m_PluginManager->LoadPlugin(pName); + m_pPluginManager->RegisterPlugin(pName); } -void CMiddleWare::UnLoadPlugin(const std::string& pName) +void CMiddleWare::UnRegisterPlugin(const std::string& pName) +{ + m_pPluginManager->UnRegisterPlugin(pName); +} + + +std::string CMiddleWare::GetLocalUUIDLanguage(const std::string& pLanguage, const std::string& pDebugDumpPath) { - m_PluginManager->UnLoadPlugin(pName); + CLanguage* language = m_pPluginManager->GetLanguage(pLanguage); + return language->GetLocalUUID(pDebugDumpPath); } -std::string CMiddleWare::GetUUID(const std::string& pLanguage, void* pData) +std::string CMiddleWare::GetLocalUUIDApplication(const std::string& pApplication, const std::string& pDebugDumpPath) { - CLanguage* language = m_PluginManager->GetLanguage(pLanguage); - if (language == NULL) - { - return ""; - } - return language->GetUUID(pData); + CApplication* application = m_pPluginManager->GetApplication(pApplication); + return application->GetLocalUUID(pDebugDumpPath); } -std::string CMiddleWare::GetReport(const std::string& pLanguage, void* pData) + +void CMiddleWare::GetReport(const std::string& pUUID) { - CLanguage* language = m_PluginManager->GetLanguage(pLanguage); - if (language == NULL) - { - return ""; - } - return language->GetReport(pData); + CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); + database_row_t row; + database->Connect(); + row = database->GetUUIDData(pUUID); + database->DisConnect(); + if (row.m_sUUID != pUUID) + { + throw std::string("CMiddleWare::GetReport(): UUID '"+pUUID+"' is not in database."); + } + // TODO: finish this } -int CMiddleWare::Report(const std::string& pReporter, const std::string& pDebugDumpPath) +int CMiddleWare::Report(const std::string& pReport) { - CReporter* reporter = m_PluginManager->GetReporter(pReporter); - if (reporter == NULL) - { - return -1; - } - reporter->Report(pDebugDumpPath); + // TODO: write this } +void CMiddleWare::SaveDebugDumpToDatabase(const std::string& pDebugDumpPath) +{ + CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); + + std::string UUID; + std::string architecture; + std::string kernel; + std::string executable; + std::string package; + std::string UID; + std::string time; + std::string textData1; + + CDebugDump dd; + + dd.Open(pDebugDumpPath); + dd.LoadText(FILENAME_EXECUTABLE, executable); + + // TODO: blacklist + + if (dd.Exist(FILENAME_LANGUAGE)) + { + std::string language; + dd.LoadText(FILENAME_LANGUAGE, language); + UUID = GetLocalUUIDLanguage(language, pDebugDumpPath); + } + else if (0) + { + // TODO: how to get UUID from app? + } + else + { + throw std::string("CMiddleWare::SaveDebugDumpToDataBase(): Can not get UUID."); + } + if (UUID == "") + { + throw std::string("CMiddleWare::SaveDebugDumpToDataBase(): Wrong UUID."); + } + + dd.LoadText(FILENAME_ARCHITECTURE, architecture); + dd.LoadText(FILENAME_KERNEL, kernel); + dd.LoadText(FILENAME_PACKAGE, package); + dd.LoadText(FILENAME_UID, UID); + dd.LoadText(FILENAME_TIME, time); + + database->Connect(); + database->Insert(UUID, + pDebugDumpPath, + architecture, + kernel, + executable, + package, + UID, + time); + + if (dd.Exist(FILENAME_TEXTDATA1)) + { + dd.LoadText(FILENAME_TEXTDATA1, textData1); + database->InsertTextData1(UUID, textData1); + } + database->DisConnect(); +} + +vector_database_rows_t CMiddleWare::GetDebugDumps(const std::string& pUID) +{ + CDatabase* database = m_pPluginManager->GetDatabase(m_sDatabase); + vector_database_rows_t rows; + database->Connect(); + rows = database->GetUIDData(pUID); + database->DisConnect(); + return rows; +} |
