CDynamicQueryFactory Class Reference

#include <CDynamicQueryFactory.h>

Inheritance diagram for CDynamicQueryFactory:

CStaticQueryFactory

List of all members.

Public Member Functions

CQuerymakeQuery (const string &inBaseType, CAccessorAdminCollection &inAccessorAdminCollection, CAlgorithm &inAlgorithm)
 CDynamicQueryFactory (string inDirectoryName)


Detailed Description

Definition at line 41 of file CDynamicQueryFactory.h.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }


The documentation for this class was generated from the following files:

Generated on Wed Jan 7 00:31:08 2009 for Gift by  doxygen 1.5.6