Logo
  • Main Page
  • Related Pages
  • Modules
  • Classes
  • Files

mmspluginmanager.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2005-2007 Stefan Schwarzer, Jens Schneider,             *
00003  *                           Matthias Hardt, Guido Madaus                  *
00004  *                                                                         *
00005  *   Copyright (C) 2007-2008 BerLinux Solutions GbR                        *
00006  *                           Stefan Schwarzer & Guido Madaus               *
00007  *                                                                         *
00008  *   Copyright (C) 2009-2013 BerLinux Solutions GmbH                       *
00009  *                                                                         *
00010  *   Authors:                                                              *
00011  *      Stefan Schwarzer   <stefan.schwarzer@diskohq.org>,                 *
00012  *      Matthias Hardt     <matthias.hardt@diskohq.org>,                   *
00013  *      Jens Schneider     <jens.schneider@diskohq.org>,                   *
00014  *      Guido Madaus       <guido.madaus@diskohq.org>,                     *
00015  *      Patrick Helterhoff <patrick.helterhoff@diskohq.org>,               *
00016  *      René Bählkow       <rene.baehlkow@diskohq.org>                     *
00017  *                                                                         *
00018  *   This library is free software; you can redistribute it and/or         *
00019  *   modify it under the terms of the GNU Lesser General Public            *
00020  *   License version 2.1 as published by the Free Software Foundation.     *
00021  *                                                                         *
00022  *   This library is distributed in the hope that it will be useful,       *
00023  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00024  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00025  *   Lesser General Public License for more details.                       *
00026  *                                                                         *
00027  *   You should have received a copy of the GNU Lesser General Public      *
00028  *   License along with this library; if not, write to the                 *
00029  *   Free Software Foundation, Inc.,                                       *
00030  *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
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 }

Generated by doxygen