CCAFFEINE  0.8.8
ComponentFactory.h
00001 #ifndef __COMPONENTFACTORY_H__
00002 #define __COMPONENTFACTORY_H__
00003 
00004 #define BUFLEN 1024
00005 
00006 namespace ccafe {
00007 class ComponentRecord_Impl;
00008 } ENDSEMI
00009 typedef ::boost::shared_ptr< ccafe::ComponentRecord_Impl > ComponentRecord_shared;
00010 
00024 class ComponentFactory : public virtual ccafeopq::ComponentFactory, public virtual KernelPort , public virtual ComponentRegistrar
00025 {
00026 
00027 private:
00028 
00029   static bool debug;
00030 
00032   std::vector< std::string > componentPathEntries;
00034   std::vector< std::string > parsedFiles;
00036   std::vector< ComponentRecord_shared > repository;
00038   std::map< std::string, void *> loadedLibraries;
00039 
00041   int addClass(const char *className, void * (*create)());
00042 
00043   int addClass(const char *className, void * (*create)(), bool required);
00044 
00046   int addClassBabel(const char *className);
00047 
00049   virtual int addStaticClass(const char *className, void *(*create)(), const char * classAlias);
00050 
00052   virtual int addStaticClassBabel(const char *className, void *(*create)(), const char * classAlias);
00053 
00055   int addStaticClassKind(const char *className, void *(*create)(), const char * classAlias, const char *classtype);
00056 
00060   bool checkAlreadyLoaded(const char *fname);
00061 
00068   int countUnloadedClasses();
00069 
00071   ComponentRecord_shared getRecordByPaletteClassName( const char *cname);
00072 
00078   ComponentRecord_shared getRecordByLibraryClassName( char *lib, char *lcname);
00079 
00081   void dump_babel_dl_info();
00082 
00083 public:
00084 
00085   ComponentFactory();
00086   virtual ~ComponentFactory();
00091   void initPalette();
00092 
00094   void dumpFactory();
00095 
00097   void setDebug(bool tf){debug = tf;}
00098 
00102   std::vector< std::string > getPalette();
00103 
00106   ccafeopq::Component * instantiate(const char *deploymentClassAlias);
00107 
00108 //============== old repository ===============================================
00109 
00114   void readComponentDescription( const std::string & uri);
00115 
00137   void setComponentPath(const std::vector< std::string > & p);
00138 
00142   void setComponentPath(const char  **pathDirArgv);
00143 
00144 
00152   int searchComponentPath();
00153 
00168   std::vector< std::string > getLoadedComponents();
00169 
00173   std::vector< std::string > getUnloadedComponents();
00174 
00180   std::vector< std::string > getLoadedLibraries();
00181 
00183   std::vector< std::string > getParsedFiles();
00184 
00198   int loadPalette(const std::string& className, bool global, bool lazy);
00199 
00201   int loadPalette(const char *className, bool global, bool lazy);
00202 
00204   // opq factory interface
00205   
00206   virtual std::vector< std::string> getComponentClassAliases();
00207 
00208   virtual std::vector< ccafeopq::ComponentClassDescription_shared > getComponentClasses();
00209 
00210   virtual ccafeopq::Component * createComponentInstance(const std::string & className);
00211 
00212   virtual ccafeopq::Component * createComponentInstance(const std::string & className, ccafeopq::TypeMap_shared & properties);
00213 
00214   virtual void destroyComponentInstance(const std::string & componentClassName, ccafeopq::Component * component);
00215 
00216   // virtual void setComponentPath(const std::vector< std::string > & paths);
00217 
00223   virtual std::vector< std::string > getComponentPath();
00224 
00225   virtual void loadComponentDescription(const std::string & uri);
00226 
00227   virtual void indexComponentPath( );
00228 
00229   virtual void loadClass( const std::string paletteClassAlias , bool global, bool lazy);
00230 
00231   virtual int loadPorts(const std::string & libPathName);
00232 
00234   
00235 private:
00236 
00237 
00249   int loadPalette(const char *libraryPath, const char *mapName, const char *cFuncName, bool global, bool lazy, const char * cmptType, const char * buildPath);
00250 
00251 
00252 
00253 #if 0 //argv
00254 //======================= argv class =======================================
00256   static /* CFREE */ char **copyArgv(char **argv); 
00257 
00259   static void destroyArgv(char **&argv); 
00260 
00263   static char **appendArgv(char **&argv, char *string); 
00264 
00266   static int sizeofArgv(char **);
00267 #endif // 0
00268 
00269 };
00270 #endif //__COMPONENTFACTORY_H__