#include <CDynamicQueryFactory.h>

Public Member Functions | |
| CQuery * | makeQuery (const string &inBaseType, CAccessorAdminCollection &inAccessorAdminCollection, CAlgorithm &inAlgorithm) |
| CDynamicQueryFactory (string inDirectoryName) | |
Definition at line 41 of file CDynamicQueryFactory.h.
| CDynamicQueryFactory::CDynamicQueryFactory | ( | string | inDirectoryName | ) |
constructor: scans a given directory for plugins
Definition at line 61 of file CDynamicQueryFactory.cc.
References getLibNameFromFileName(), CQueryPlugin::getName(), and CQueryPlugin::isSane().
00061 { 00062 cout << "--" << endl 00063 << "Configuring CDynamicQueryFactory " << endl 00064 << "Looking for libGIFTQu*.so in directory " << endl 00065 << inDirectoryName << endl; 00066 set<string> lSeenLibs; 00067 DIR* lDirectory(opendir(inDirectoryName.c_str())); 00068 if(!lDirectory){ 00069 // this means the library has disappeared. 00070 cerr << "FATAL ERROR, cannot find " << inDirectoryName << endl; 00071 00072 exit(20); 00073 }else{ 00074 dirent* lDirectoryEntry; 00075 while(lDirectoryEntry=readdir(lDirectory)){ 00076 string lFileName(lDirectoryEntry->d_name); 00077 00078 pair<bool,string> lIsLibAndLibName(getLibNameFromFileName("libGIFTQu",lFileName)); 00079 bool lIsLib(lIsLibAndLibName.first); 00080 string lLibName(lIsLibAndLibName.second); 00081 00082 if(lIsLib && (lSeenLibs.find(lLibName)==lSeenLibs.end())){ 00083 CQueryPlugin* lPlugin(new CQueryPlugin(inDirectoryName, 00084 lFileName, 00085 lLibName)); 00086 if(lPlugin->isSane()){ 00087 cout << lFileName << " contains a sane GIFT Query plugin: " << lPlugin->getName() << endl; 00088 insert(make_pair(string(lPlugin->getName()), 00089 lPlugin)); 00090 lSeenLibs.insert(lLibName); 00091 }else{ 00092 delete lPlugin; 00093 } 00094 }else{ 00095 if(!lIsLib){ 00096 cout << "Not testing file:" << lFileName << " (File name does not match plugin name) " << endl; 00097 }else{ 00098 cout << "Lib:" << lLibName << ", to be linked from " << lFileName << " already registered! " << endl; 00099 } 00100 } 00101 } 00102 } 00103 cout << "FINISHED Configuring CDynamicQueryFactory " << endl; 00104 }
| CQuery * CDynamicQueryFactory::makeQuery | ( | const string & | inBaseType, | |
| CAccessorAdminCollection & | inAccessorAdminCollection, | |||
| CAlgorithm & | inAlgorithm | |||
| ) | [virtual] |
makes a query of a given BaseType (i.e. name)
Reimplemented from CStaticQueryFactory.
Definition at line 35 of file CDynamicQueryFactory.cc.
References my_throw.
00037 { 00038 if(inBaseType=="multiple"){ 00039 return(new CQMultiple(inAccessorAdminCollection, 00040 inAlgorithm)); 00041 } 00042 00043 #ifdef __GIFT_WITH_PERL__ 00044 if(inBaseType=="perl"){ 00045 return(new CQPerl(inAccessorAdminCollection, 00046 inAlgorithm)); 00047 } 00048 #endif 00049 00050 const_iterator lFound(find(inBaseType)); 00051 if(lFound!=end()){ 00052 cout << "CDynamicQueryFactory" << endl; 00053 return lFound->second->makeQuery(inAccessorAdminCollection, 00054 inAlgorithm); 00055 }else{ 00056 cerr << "CDynamicQueryFactory: " << inBaseType << " was not found"; 00057 my_throw(VEConfigurationError(inBaseType.c_str())); 00058 } 00059 }
1.5.6