configmgr.c

Go to the documentation of this file.
00001 /***************************************************************************
00002  begin       : Mon Aug 11 2008
00003  copyright   : (C) 2008 by Martin Preuss
00004  email       : martin@libchipcard.de
00005 
00006  ***************************************************************************
00007  *                                                                         *
00008  *   This library is free software; you can redistribute it and/or         *
00009  *   modify it under the terms of the GNU Lesser General Public            *
00010  *   License as published by the Free Software Foundation; either          *
00011  *   version 2.1 of the License, or (at your option) any later version.    *
00012  *                                                                         *
00013  *   This library is distributed in the hope that it will be useful,       *
00014  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00015  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00016  *   Lesser General Public License for more details.                       *
00017  *                                                                         *
00018  *   You should have received a copy of the GNU Lesser General Public      *
00019  *   License along with this library; if not, write to the Free Software   *
00020  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston,                 *
00021  *   MA  02111-1307  USA                                                   *
00022  *                                                                         *
00023  ***************************************************************************/
00024 
00025 
00026 #ifdef HAVE_CONFIG_H
00027 # include <config.h>
00028 #endif
00029 
00030 #include "configmgr_p.h"
00031 
00032 #include <gwenhywfar/gwenhywfar.h>
00033 #include <gwenhywfar/misc.h>
00034 #include <gwenhywfar/url.h>
00035 #include <gwenhywfar/debug.h>
00036 
00037 
00038 #include <stdlib.h>
00039 #include <assert.h>
00040 #include <string.h>
00041 #include <errno.h>
00042 #include <ctype.h>
00043 
00044 
00045 
00046 GWEN_INHERIT_FUNCTIONS(GWEN_CONFIGMGR)
00047 
00048 GWEN_INHERIT(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN)
00049 
00050 
00051 
00052 int GWEN_ConfigMgr_ModuleInit(){
00053   GWEN_PLUGIN_MANAGER *pm;
00054   int err;
00055   GWEN_STRINGLIST *sl;
00056 
00057   pm=GWEN_PluginManager_new(GWEN_CONFIGMGR_PLUGIN_NAME, GWEN_PM_LIBNAME);
00058   err=GWEN_PluginManager_Register(pm);
00059   if (err) {
00060     DBG_ERROR(GWEN_LOGDOMAIN, "Could not register ConfigMgr plugin manager");
00061     return err;
00062   }
00063 
00064   /* create plugin paths */
00065   sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_PLUGINDIR);
00066   if (sl) {
00067     GWEN_STRINGLISTENTRY *se;
00068     GWEN_BUFFER *pbuf;
00069 
00070     pbuf=GWEN_Buffer_new(0, 256, 0, 1);
00071 
00072     se=GWEN_StringList_FirstEntry(sl);
00073     while(se) {
00074       GWEN_Buffer_AppendString(pbuf, GWEN_StringListEntry_Data(se));
00075       GWEN_Buffer_AppendString(pbuf, GWEN_DIR_SEPARATOR_S GWEN_CONFIGMGR_FOLDER);
00076       DBG_INFO(GWEN_LOGDOMAIN, "Adding plugin path [%s]",
00077                GWEN_Buffer_GetStart(pbuf));
00078       GWEN_PluginManager_AddPath(pm, GWEN_PM_LIBNAME,
00079                                  GWEN_Buffer_GetStart(pbuf));
00080       GWEN_Buffer_Reset(pbuf);
00081       se=GWEN_StringListEntry_Next(se);
00082     }
00083     GWEN_Buffer_free(pbuf);
00084   }
00085 
00086   return 0;
00087 }
00088 
00089 
00090 
00091 int GWEN_ConfigMgr_ModuleFini(){
00092   GWEN_PLUGIN_MANAGER *pm;
00093 
00094   pm=GWEN_PluginManager_FindPluginManager(GWEN_CONFIGMGR_PLUGIN_NAME);
00095   if (pm) {
00096     int rv;
00097 
00098     rv=GWEN_PluginManager_Unregister(pm);
00099     if (rv) {
00100       DBG_ERROR(GWEN_LOGDOMAIN,
00101                 "Could not unregister ConfigMgr plugin manager (%d)", rv);
00102       return rv;
00103     }
00104     else
00105       GWEN_PluginManager_free(pm);
00106   }
00107 
00108   return 0;
00109 }
00110 
00111 
00112 
00113 
00114 GWEN_CONFIGMGR *GWEN_ConfigMgr_new(const char *url) {
00115   GWEN_CONFIGMGR *mgr;
00116 
00117   GWEN_NEW_OBJECT(GWEN_CONFIGMGR, mgr);
00118   GWEN_INHERIT_INIT(GWEN_CONFIGMGR, mgr);
00119 
00120   if (url)
00121     mgr->url=strdup(url);
00122 
00123   return mgr;
00124 }
00125 
00126 
00127 
00128 void GWEN_ConfigMgr_free(GWEN_CONFIGMGR *mgr) {
00129   if (mgr) {
00130     GWEN_INHERIT_FINI(GWEN_CONFIGMGR, mgr);
00131     free(mgr->url);
00132     GWEN_FREE_OBJECT(mgr);
00133   }
00134 }
00135 
00136 
00137 
00138 GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr,
00139                                                         GWEN_CONFIGMGR_GETGROUP_FN f) {
00140   GWEN_CONFIGMGR_GETGROUP_FN of;
00141 
00142   assert(mgr);
00143   of=mgr->getGroupFn;
00144   mgr->getGroupFn=f;
00145 
00146   return of;
00147 }
00148 
00149 
00150 
00151 GWEN_CONFIGMGR_SETGROUP_FN GWEN_ConfigMgr_SetSetGroupFn(GWEN_CONFIGMGR *mgr,
00152                                                         GWEN_CONFIGMGR_SETGROUP_FN f) {
00153   GWEN_CONFIGMGR_SETGROUP_FN of;
00154 
00155   assert(mgr);
00156   of=mgr->setGroupFn;
00157   mgr->setGroupFn=f;
00158 
00159   return of;
00160 }
00161 
00162 
00163 
00164 GWEN_CONFIGMGR_LOCKGROUP_FN GWEN_ConfigMgr_SetLockGroupFn(GWEN_CONFIGMGR *mgr,
00165                                                           GWEN_CONFIGMGR_LOCKGROUP_FN f) {
00166   GWEN_CONFIGMGR_LOCKGROUP_FN of;
00167 
00168   assert(mgr);
00169   of=mgr->lockGroupFn;
00170   mgr->lockGroupFn=f;
00171 
00172   return of;
00173 }
00174 
00175 
00176 
00177 GWEN_CONFIGMGR_UNLOCKGROUP_FN GWEN_ConfigMgr_SetUnlockGroupFn(GWEN_CONFIGMGR *mgr,
00178                                                               GWEN_CONFIGMGR_UNLOCKGROUP_FN f) {
00179   GWEN_CONFIGMGR_UNLOCKGROUP_FN of;
00180 
00181   assert(mgr);
00182   of=mgr->unlockGroupFn;
00183   mgr->unlockGroupFn=f;
00184 
00185   return of;
00186 }
00187 
00188 
00189 
00190 GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr,
00191                                                               GWEN_CONFIGMGR_DELETEGROUP_FN f) {
00192   GWEN_CONFIGMGR_DELETEGROUP_FN of;
00193 
00194   assert(mgr);
00195   of=mgr->deleteGroupFn;
00196   mgr->deleteGroupFn=f;
00197 
00198   return of;
00199 }
00200 
00201 
00202 
00203 GWEN_CONFIGMGR_LISTGROUPS_FN GWEN_ConfigMgr_SetListGroupsFn(GWEN_CONFIGMGR *mgr,
00204                                                             GWEN_CONFIGMGR_LISTGROUPS_FN f) {
00205   GWEN_CONFIGMGR_LISTGROUPS_FN of;
00206 
00207   assert(mgr);
00208   of=mgr->listGroupsFn;
00209   mgr->listGroupsFn=f;
00210 
00211   return of;
00212 }
00213 
00214 
00215 
00216 GWEN_CONFIGMGR_LISTSUBGROUPS_FN GWEN_ConfigMgr_SetListSubGroupsFn(GWEN_CONFIGMGR *mgr,
00217                                                                   GWEN_CONFIGMGR_LISTSUBGROUPS_FN f) {
00218   GWEN_CONFIGMGR_LISTSUBGROUPS_FN of;
00219 
00220   assert(mgr);
00221   of=mgr->listSubGroupsFn;
00222   mgr->listSubGroupsFn=f;
00223 
00224   return of;
00225 }
00226 
00227 
00228 
00229 int GWEN_ConfigMgr_GetGroup(GWEN_CONFIGMGR *mgr,
00230                             const char *groupName,
00231                             const char *subGroupName,
00232                             GWEN_DB_NODE **pDb) {
00233   assert(mgr);
00234   if (mgr->getGroupFn)
00235     return mgr->getGroupFn(mgr, groupName, subGroupName, pDb);
00236   else
00237     return GWEN_ERROR_NOT_IMPLEMENTED;
00238 }
00239 
00240 
00241 
00242 int GWEN_ConfigMgr_SetGroup(GWEN_CONFIGMGR *mgr,
00243                             const char *groupName,
00244                             const char *subGroupName,
00245                             GWEN_DB_NODE *db) {
00246   assert(mgr);
00247   if (mgr->setGroupFn)
00248     return mgr->setGroupFn(mgr, groupName, subGroupName, db);
00249   else
00250     return GWEN_ERROR_NOT_IMPLEMENTED;
00251 }
00252 
00253 
00254 
00255 int GWEN_ConfigMgr_LockGroup(GWEN_CONFIGMGR *mgr,
00256                              const char *groupName,
00257                              const char *subGroupName) {
00258   assert(mgr);
00259   if (mgr->lockGroupFn)
00260     return mgr->lockGroupFn(mgr, groupName, subGroupName);
00261   else
00262     return GWEN_ERROR_NOT_IMPLEMENTED;
00263 }
00264 
00265 
00266 
00267 int GWEN_ConfigMgr_UnlockGroup(GWEN_CONFIGMGR *mgr,
00268                                const char *groupName,
00269                                const char *subGroupName) {
00270   assert(mgr);
00271   if (mgr->unlockGroupFn)
00272     return mgr->unlockGroupFn(mgr, groupName, subGroupName);
00273   else
00274     return GWEN_ERROR_NOT_IMPLEMENTED;
00275 }
00276 
00277 
00278 
00279 int GWEN_ConfigMgr_DeleteGroup(GWEN_CONFIGMGR *mgr,
00280                                const char *groupName,
00281                                const char *subGroupName) {
00282   assert(mgr);
00283   if (mgr->deleteGroupFn)
00284     return mgr->deleteGroupFn(mgr, groupName, subGroupName);
00285   else
00286     return GWEN_ERROR_NOT_IMPLEMENTED;
00287 }
00288 
00289 
00290 
00291 int GWEN_ConfigMgr_ListGroups(GWEN_CONFIGMGR *mgr,
00292                               GWEN_STRINGLIST *sl) {
00293   assert(mgr);
00294   if (mgr->listGroupsFn)
00295     return mgr->listGroupsFn(mgr, sl);
00296   else
00297     return GWEN_ERROR_NOT_IMPLEMENTED;
00298 }
00299 
00300 
00301 int GWEN_ConfigMgr_ListSubGroups(GWEN_CONFIGMGR *mgr,
00302                                  const char *groupName,
00303                                  GWEN_STRINGLIST *sl) {
00304   assert(mgr);
00305   if (mgr->listSubGroupsFn)
00306     return mgr->listSubGroupsFn(mgr, groupName, sl);
00307   else
00308     return GWEN_ERROR_NOT_IMPLEMENTED;
00309 }
00310 
00311 
00312 
00313 
00314 
00315 
00316 
00317 
00318 
00319 GWEN_PLUGIN *GWEN_ConfigMgr_Plugin_new(GWEN_PLUGIN_MANAGER *pm,
00320                                        const char *name,
00321                                        const char *fileName) {
00322   GWEN_PLUGIN *pl;
00323   GWEN_CONFIGMGR_PLUGIN *xpl;
00324 
00325   pl=GWEN_Plugin_new(pm, name, fileName);
00326   GWEN_NEW_OBJECT(GWEN_CONFIGMGR_PLUGIN, xpl);
00327   GWEN_INHERIT_SETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl, xpl,
00328                        GWEN_ConfigMgr_Plugin_FreeData);
00329 
00330   return pl;
00331 }
00332 
00333 
00334 
00335 void GWENHYWFAR_CB GWEN_ConfigMgr_Plugin_FreeData(void *bp, void *p) {
00336   GWEN_CONFIGMGR_PLUGIN *xpl;
00337 
00338   xpl=(GWEN_CONFIGMGR_PLUGIN*)p;
00339   GWEN_FREE_OBJECT(xpl);
00340 }
00341 
00342 
00343 
00344 void GWEN_ConfigMgr_Plugin_SetFactoryFn(GWEN_PLUGIN *pl,
00345                                         GWEN_CONFIGMGR_PLUGIN_FACTORYFN f) {
00346   GWEN_CONFIGMGR_PLUGIN *xpl;
00347 
00348   assert(pl);
00349   xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
00350   assert(xpl);
00351 
00352   xpl->factoryFn=f;
00353 }
00354 
00355 
00356 
00357 GWEN_CONFIGMGR *GWEN_ConfigMgr_Plugin_Factory(GWEN_PLUGIN *pl,
00358                                               const char *url) {
00359   GWEN_CONFIGMGR_PLUGIN *xpl;
00360 
00361   assert(pl);
00362   xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
00363   assert(xpl);
00364 
00365   assert(xpl->factoryFn);
00366   return xpl->factoryFn(pl, url);
00367 }
00368 
00369 
00370 
00371 GWEN_CONFIGMGR *GWEN_ConfigMgr_Factory(const char *url) {
00372   GWEN_PLUGIN_MANAGER *pm;
00373   GWEN_PLUGIN *pl;
00374   GWEN_CONFIGMGR *mgr=NULL;
00375   GWEN_URL *purl;
00376   const char *modname;
00377 
00378   pm=GWEN_PluginManager_FindPluginManager(GWEN_CONFIGMGR_PLUGIN_NAME);
00379   if (!pm) {
00380     DBG_ERROR(GWEN_LOGDOMAIN, "No plugin manager for \"ConfigMgr\" found");
00381     return 0;
00382   }
00383 
00384   purl=GWEN_Url_fromString(url);
00385   if (purl==NULL) {
00386     DBG_INFO(GWEN_LOGDOMAIN, "Invalid url [%s]", url);
00387     return NULL;
00388   }
00389 
00390   modname=GWEN_Url_GetProtocol(purl);
00391   if (modname==NULL)
00392     modname="file";
00393 
00394   pl=GWEN_PluginManager_GetPlugin(pm, modname);
00395   if (!pl) {
00396     DBG_INFO(GWEN_LOGDOMAIN, "ConfigMgr-Plugin \"%s\" not found", modname);
00397     GWEN_Url_free(purl);
00398     return 0;
00399   }
00400   GWEN_Url_free(purl);
00401 
00402   mgr=GWEN_ConfigMgr_Plugin_Factory(pl, url);
00403   if (mgr==NULL) {
00404     DBG_INFO(GWEN_LOGDOMAIN,
00405              "Plugin did not create a GWEN_CONFIGMGR");
00406   }
00407 
00408   return mgr;
00409 }
00410 
00411 
00412 
00413 
00414 
00415 
00416 
00417 
00418 

Generated on Wed Sep 3 15:21:57 2008 for gwenhywfar by  doxygen 1.5.6