00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "mmsconfig/mmsconfig.h"
00034 #include "mmscore/mmspluginmanager.h"
00035 #include "mmsbase/interfaces/immsswitcher.h"
00036
00037 MMSPluginManager::MMSPluginManager() {
00038 MMSConfigData *config = new MMSConfigData();
00039 this->source = new DataSource(config->getConfigDBDBMS(),
00040 config->getConfigDBDatabase(),
00041 config->getConfigDBAddress(),
00042 config->getConfigDBPort(),
00043 config->getConfigDBUser(),
00044 config->getConfigDBPassword());
00045 delete config;
00046
00047 this->service = new MMSPluginService(source);
00048 }
00049
00050 MMSPluginManager::~MMSPluginManager() {
00051 if(this->source) delete this->source;
00052 if(this->service) delete this->service;
00053 for(vector<MMSOSDPluginHandler*>::iterator it = this->osdPluginHandlers.begin(); it != this->osdPluginHandlers.end(); ++it)
00054 delete *it;
00055 for(vector<MMSCentralPluginHandler*>::iterator it = this->centralPluginHandlers.begin(); it != this->centralPluginHandlers.end(); ++it)
00056 delete *it;
00057 for(vector<MMSImportPluginHandler*>::iterator it = this->importPluginHandlers.begin(); it != this->importPluginHandlers.end(); ++it)
00058 delete *it;
00059 for(vector<MMSBackendPluginHandler*>::iterator it = this->backendPluginHandlers.begin(); it != this->backendPluginHandlers.end(); ++it)
00060 delete *it;
00061 this->osdPluginHandlers.clear();
00062 this->centralPluginHandlers.clear();
00063 this->importPluginHandlers.clear();
00064 this->backendPluginHandlers.clear();
00065 }
00066
00067 void MMSPluginManager::registerStaticOSDPlugin(string name, IMMSOSDPlugin *plugin) {
00068 this->staticOSDPlugins[name] = plugin;
00069 }
00070
00071 void MMSPluginManager::registerStaticCentralPlugin(string name, IMMSCentralPlugin *plugin) {
00072 this->staticCentralPlugins[name] = plugin;
00073 }
00074
00075 void MMSPluginManager::registerStaticImportPlugin(string name, IMMSImportPlugin *plugin) {
00076 this->staticImportPlugins[name] = plugin;
00077 }
00078
00079 void MMSPluginManager::registerStaticBackendPlugin(string name, IMMSBackendPlugin *plugin) {
00080 this->staticBackendPlugins[name] = plugin;
00081 }
00082
00083 void MMSPluginManager::loadOSDPlugins() {
00084 vector<MMSPluginData *> data;
00085
00086 if(!this->osdPluginHandlers.empty()) {
00087 throw MMSPluginManagerError(0,"OSD Plugins already loaded");
00088 }
00089
00090 DEBUGMSG("MMSCore", "getOSDPlugins from service");
00091 data = this->service->getOSDPlugins();
00092
00093 for(vector<MMSPluginData*>::iterator i = data.begin(); i != data.end(); ++i) {
00094 MMSOSDPluginHandler *myhandler;
00095 map<string, IMMSOSDPlugin*>::iterator iter = this->staticOSDPlugins.find((*i)->getName());
00096 if(iter != this->staticOSDPlugins.end())
00097 myhandler = new MMSOSDPluginHandler(*(*i), true, iter->second);
00098 else
00099 myhandler = new MMSOSDPluginHandler(*(*i), true);
00100 this->osdPluginHandlers.push_back(myhandler);
00101 DEBUGMSG("MMSCore", " %s", (*i)->getName().c_str());
00102 }
00103 }
00104
00105 void MMSPluginManager::loadCentralPlugins() {
00106 vector<MMSPluginData *> data;
00107
00108 if (!this->centralPluginHandlers.empty()) {
00109 throw MMSPluginManagerError(0,"Central Plugins already loaded");
00110 }
00111
00112 data = this->service->getCentralPlugins();
00113
00114 for(vector<MMSPluginData*>::iterator i = data.begin(); i != data.end(); ++i) {
00115 MMSCentralPluginHandler *myhandler;
00116 map<string, IMMSCentralPlugin*>::iterator iter = this->staticCentralPlugins.find((*i)->getName());
00117 if(iter != this->staticCentralPlugins.end())
00118 myhandler = new MMSCentralPluginHandler(*(*i), true, iter->second);
00119 else
00120 myhandler = new MMSCentralPluginHandler(*(*i), true);
00121 this->centralPluginHandlers.push_back(myhandler);
00122 DEBUGMSG("MMSCore", " %s", (*i)->getName().c_str());
00123 }
00124 }
00125
00126 void MMSPluginManager::loadImportPlugins() {
00127 vector<MMSPluginData *> data;
00128
00129 if (!this->importPluginHandlers.empty()) {
00130 throw MMSPluginManagerError(0,"Import Plugins already loaded");
00131 }
00132
00133 data = this->service->getImportPlugins();
00134
00135 for(vector<MMSPluginData*>::iterator i = data.begin(); i != data.end(); ++i) {
00136 MMSImportPluginHandler *myhandler;
00137 map<string, IMMSImportPlugin*>::iterator iter = this->staticImportPlugins.find((*i)->getName());
00138 if(iter != this->staticImportPlugins.end())
00139 myhandler = new MMSImportPluginHandler(*(*i), true, iter->second);
00140 else
00141 myhandler = new MMSImportPluginHandler(*(*i), true);
00142 this->importPluginHandlers.push_back(myhandler);
00143 DEBUGMSG("MMSCore", " %s", (*i)->getName().c_str());
00144 }
00145 }
00146
00147 void MMSPluginManager::loadBackendPlugins() {
00148 vector<MMSPluginData *> data;
00149
00150 if (!this->backendPluginHandlers.empty()) {
00151 throw MMSPluginManagerError(0,"Backend Plugins already loaded");
00152 }
00153
00154 data = this->service->getBackendPlugins();
00155
00156 for(vector<MMSPluginData*>::iterator i = data.begin(); i != data.end(); ++i) {
00157 MMSBackendPluginHandler *myhandler;
00158 map<string, IMMSBackendPlugin*>::iterator iter = this->staticBackendPlugins.find((*i)->getName());
00159 if(iter != this->staticBackendPlugins.end())
00160 myhandler = new MMSBackendPluginHandler(*(*i), true, iter->second);
00161 else
00162 myhandler = new MMSBackendPluginHandler(*(*i), true);
00163 this->backendPluginHandlers.push_back(myhandler);
00164 DEBUGMSG("MMSCore", " %s", (*i)->getName().c_str());
00165 }
00166 }
00167
00168 void MMSPluginManager::initializeOSDPlugins() {
00169 for(vector<MMSOSDPluginHandler*>::iterator i = this->osdPluginHandlers.begin(); i != this->osdPluginHandlers.end(); ++i) {
00170 MMSPluginData pd = (*i)->getPluginData();
00171 (*i)->setSwitcherInterface(switcher->newSwitcher(&pd));
00172 (*i)->invokeInitialize();
00173 }
00174 }
00175
00176 void MMSPluginManager::initializeCentralPlugins() {
00177 for(vector<MMSCentralPluginHandler*>::iterator i = this->centralPluginHandlers.begin(); i != this->centralPluginHandlers.end(); ++i) {
00178 MMSPluginData pd = (*i)->getPluginData();
00179 (*i)->setSwitcherInterface(switcher->newSwitcher(&pd));
00180 (*i)->invokeInitialize();
00181 }
00182 }
00183
00184 void MMSPluginManager::initializeImportPlugins() {
00185 for(vector<MMSImportPluginHandler*>::iterator i = this->importPluginHandlers.begin(); i != this->importPluginHandlers.end(); ++i) {
00186 (*i)->invokeInitialize();
00187 }
00188 }
00189
00190 void MMSPluginManager::initializeBackendPlugins() {
00191 for(vector<MMSBackendPluginHandler*>::iterator i = this->backendPluginHandlers.begin(); i != this->backendPluginHandlers.end(); ++i) {
00192 MMSPluginData pd = (*i)->getPluginData();
00193 (*i)->setSwitcherInterface(switcher->newSwitcher(&pd));
00194 (*i)->invokeInitialize();
00195 }
00196 }
00197
00198 vector<MMSOSDPluginHandler *> MMSPluginManager::getOSDPluginHandlers(vector <MMSPluginData *> data) {
00199 vector<MMSOSDPluginHandler *> myhandlers;
00200
00201 vector<MMSPluginData*>::iterator pdi;
00202 vector<MMSPluginData*>::iterator end = data.end();
00203 for(pdi = data.begin(); pdi != end; ++pdi) {
00204 vector<MMSOSDPluginHandler*>::iterator oi;
00205 vector<MMSOSDPluginHandler*>::iterator oi_end = this->osdPluginHandlers.end();
00206 for(oi = this->osdPluginHandlers.begin(); oi != oi_end; ++oi) {
00207 if((*oi)->getPluginData().getId() == (*pdi)->getId()) {
00208 if((*oi)->getPluginData().getType()->getName() == PT_OSD_PLUGIN) {
00209 myhandlers.push_back(*oi);
00210 } else {
00211 throw MMSPluginManagerError(0,"handler for id " + iToStr((*pdi)->getId()) + " is not a osd plugin");
00212 }
00213 }
00214 }
00215 }
00216
00217 return myhandlers;
00218 }
00219
00220 MMSOSDPluginHandler *MMSPluginManager::getOSDPluginHandler(int pluginid) {
00221 vector<MMSOSDPluginHandler*>::iterator i;
00222 vector<MMSOSDPluginHandler*>::iterator end = this->osdPluginHandlers.end();
00223 for(i = this->osdPluginHandlers.begin(); i != end; ++i) {
00224 if((*i)->getPluginData().getId() == pluginid) {
00225 if((*i)->getPluginData().getType()->getName() == PT_OSD_PLUGIN) {
00226 return (*i);
00227 } else {
00228 throw MMSPluginManagerError(0,"handler for id " + iToStr(pluginid) + " is not a osd plugin");
00229 }
00230 }
00231 }
00232
00233 throw MMSPluginManagerError(0,"osd plugin handler for id " + iToStr(pluginid) + " was not found");
00234 }
00235
00236 vector<MMSCentralPluginHandler *> MMSPluginManager::getCentralPluginHandlers(vector <MMSPluginData *> data) {
00237 vector<MMSCentralPluginHandler *> myhandlers;
00238
00239 vector<MMSPluginData*>::iterator pdi;
00240 vector<MMSPluginData*>::iterator end = data.end();
00241 for(pdi = data.begin(); pdi != end; ++pdi) {
00242 vector<MMSCentralPluginHandler*>::iterator ci;
00243 vector<MMSCentralPluginHandler*>::iterator ci_end = this->centralPluginHandlers.end();
00244 for(ci = this->centralPluginHandlers.begin(); ci != ci_end; ++ci) {
00245 if((*ci)->getPluginData().getId() == (*pdi)->getId()) {
00246 if((*ci)->getPluginData().getType()->getName() == PT_CENTRAL_PLUGIN) {
00247 myhandlers.push_back(*ci);
00248 } else {
00249 throw MMSPluginManagerError(0,"handler for id " + iToStr((*pdi)->getId()) + " is not a central plugin");
00250 }
00251 }
00252 }
00253 }
00254
00255 return myhandlers;
00256 }
00257
00258 MMSCentralPluginHandler *MMSPluginManager::getCentralPluginHandler(int pluginid) {
00259 vector<MMSCentralPluginHandler*>::iterator i;
00260 vector<MMSCentralPluginHandler*>::iterator end = this->centralPluginHandlers.end();
00261 for(i = this->centralPluginHandlers.begin(); i != end; ++i) {
00262 if((*i)->getPluginData().getId() == pluginid) {
00263 if((*i)->getPluginData().getType()->getName() == PT_CENTRAL_PLUGIN) {
00264 return (*i);
00265 } else {
00266 throw MMSPluginManagerError(0,"handler for id " + iToStr(pluginid) + " is not a central plugin");
00267 }
00268 }
00269 }
00270
00271 throw MMSPluginManagerError(0,"central plugin handler for id " + iToStr(pluginid) + " was not found");
00272 }
00273
00274 vector<MMSImportPluginHandler *> MMSPluginManager::getImportPluginHandlers(vector <MMSPluginData *> data) {
00275 vector<MMSImportPluginHandler *> myhandlers;
00276
00277 vector<MMSPluginData*>::iterator pdi;
00278 vector<MMSPluginData*>::iterator end = data.end();
00279 for(pdi = data.begin(); pdi != end; ++pdi) {
00280 vector<MMSImportPluginHandler*>::iterator ii;
00281 vector<MMSImportPluginHandler*>::iterator ii_end = this->importPluginHandlers.end();
00282 for(ii = this->importPluginHandlers.begin(); ii != ii_end; ++ii) {
00283 if((*ii)->getPluginData().getId() == (*pdi)->getId()) {
00284 if((*ii)->getPluginData().getType()->getName() == PT_IMPORT_PLUGIN) {
00285 myhandlers.push_back(*ii);
00286 } else {
00287 throw MMSPluginManagerError(0,"handler for id " + iToStr((*pdi)->getId()) + " is not an import plugin");
00288 }
00289 }
00290 }
00291 }
00292
00293 return myhandlers;
00294 }
00295
00296 MMSImportPluginHandler *MMSPluginManager::getImportPluginHandler(int pluginid) {
00297 vector<MMSImportPluginHandler*>::iterator i;
00298 vector<MMSImportPluginHandler*>::iterator end = this->importPluginHandlers.end();
00299 for(i = this->importPluginHandlers.begin(); i != end; ++i) {
00300 if((*i)->getPluginData().getId() == pluginid) {
00301 if((*i)->getPluginData().getType()->getName() == PT_IMPORT_PLUGIN) {
00302 return (*i);
00303 } else {
00304 throw MMSPluginManagerError(0,"handler for id " + iToStr(pluginid) + " is not an import plugin");
00305 }
00306 }
00307 }
00308
00309 throw MMSPluginManagerError(0,"import plugin handler for id " + iToStr(pluginid) + " was not found");
00310 }
00311
00312 vector<MMSBackendPluginHandler *> MMSPluginManager::getBackendPluginHandlers(vector <MMSPluginData *> data) {
00313 vector<MMSBackendPluginHandler *> myhandlers;
00314
00315 vector<MMSPluginData*>::iterator pdi;
00316 vector<MMSPluginData*>::iterator end = data.end();
00317 for(pdi = data.begin(); pdi != end; ++pdi) {
00318 vector<MMSBackendPluginHandler*>::iterator bi;
00319 vector<MMSBackendPluginHandler*>::iterator bi_end = this->backendPluginHandlers.end();
00320 for(bi = this->backendPluginHandlers.begin(); bi != bi_end; ++bi) {
00321 if((*bi)->getPluginData().getId() == (*pdi)->getId()) {
00322 if((*bi)->getPluginData().getType()->getName() == PT_BACKEND_PLUGIN) {
00323 myhandlers.push_back(*bi);
00324 } else {
00325 throw MMSPluginManagerError(0,"handler for id " + iToStr((*pdi)->getId()) + " is not a backend plugin");
00326 }
00327 }
00328 }
00329 }
00330
00331 return myhandlers;
00332 }
00333
00334 MMSBackendPluginHandler *MMSPluginManager::getBackendPluginHandler(int pluginid) {
00335 vector<MMSBackendPluginHandler*>::iterator i;
00336 vector<MMSBackendPluginHandler*>::iterator end = this->backendPluginHandlers.end();
00337 for(i = this->backendPluginHandlers.begin(); i != end; ++i) {
00338 if((*i)->getPluginData().getId() == pluginid) {
00339 if((*i)->getPluginData().getType()->getName() == PT_BACKEND_PLUGIN) {
00340 return (*i);
00341 } else {
00342 throw MMSPluginManagerError(0,"handler for id " + iToStr(pluginid) + " is not a backend plugin");
00343 }
00344 }
00345 }
00346
00347 throw MMSPluginManagerError(0,"backend plugin handler for id " + iToStr(pluginid) + " was not found");
00348 }
00349
00350
00351 void MMSPluginManager::setActiceOSDPlugin(MMSPluginData *plugin) {
00352 this->activeosdplugin = plugin;
00353 }
00354
00355 MMSPluginData *MMSPluginManager::getActiveOSDPlugin() {
00356 return this->activeosdplugin;
00357 }
00358
00359 void MMSPluginManager::setActiceCentralPlugin(MMSPluginData *plugin) {
00360 this->activecentralplugin = plugin;
00361 }
00362
00363 MMSPluginData *MMSPluginManager::getActiveCentralPlugin() {
00364 return this->activecentralplugin;
00365 }
00366
00367 void MMSPluginManager::setSwitcher(IMMSSwitcher *switcher) {
00368 this->switcher = switcher;
00369 }