#include // ------------------------------------------------------------------------- cpPlugins::Interface::Interface:: Interface( ) { this->m_Pluma.acceptProviderType< ProcessObjectProvider >( ); } // ------------------------------------------------------------------------- cpPlugins::Interface::Interface:: ~Interface( ) { this->UnloadAll( ); } // ------------------------------------------------------------------------- cpPlugins::Interface::Interface:: TClasses& cpPlugins::Interface::Interface:: GetClasses( ) { return( this->m_Classes ); } // ------------------------------------------------------------------------- const cpPlugins::Interface::Interface:: TClasses& cpPlugins::Interface::Interface:: GetClasses( ) const { return( this->m_Classes ); } // ------------------------------------------------------------------------- cpPlugins::Interface::ProcessObject::Pointer cpPlugins::Interface::Interface:: CreateObject( const std::string& name ) const { TClassesIterator cIt = this->m_Classes.find( name ); if( cIt != this->m_Classes.end( ) ) { ProcessObjectProvider* provider = dynamic_cast< ProcessObjectProvider* >( this->m_Providers[ cIt->second ] ); if( provider != NULL ) { cpPlugins::Interface::ProcessObject::Pointer po = provider->create( ); po->SetName( name ); return( po ); } // fi } // fi return( NULL ); } // ------------------------------------------------------------------------- bool cpPlugins::Interface::Interface:: Load( const std::string& path ) { bool ret = true; try { ret = this->m_Pluma.load( path ); if( ret ) this->_LoadClasses( ); } catch( ... ) { ret = false; } // yrt return( ret ); } // ------------------------------------------------------------------------- bool cpPlugins::Interface::Interface:: Load( const std::string& folder, const std::string& name ) { bool ret = true; try { ret = this->m_Pluma.load( folder, name ); if( ret ) this->_LoadClasses( ); } catch( ... ) { ret = false; } // yrt return( ret ); } // ------------------------------------------------------------------------- std::list< std::string > cpPlugins::Interface::Interface:: LoadFromFolder( const std::string& folder, bool r ) { std::list< std::string > files; try { files = this->m_Pluma.loadFromFolder( folder, r ); if( files.size( ) > 0 ) this->_LoadClasses( ); } catch( ... ) { } // yrt return( files ); } // ------------------------------------------------------------------------- bool cpPlugins::Interface::Interface:: Unload( const std::string& name ) { bool ret = true; try { ret = this->m_Pluma.unload( name ); if( ret ) { this->m_Providers.clear( ); this->m_Classes.clear( ); this->_LoadClasses( ); } // fi } catch( ... ) { ret = false; } // yrt return( ret ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Interface:: UnloadAll( ) { try { this->m_Pluma.unloadAll( ); } catch( ... ) { // Do nothing } // yrt this->m_Providers.clear( ); this->m_Classes.clear( ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Interface:: GetLoadedPlugins( std::vector< const std::string* >& names ) const { this->m_Pluma.getLoadedPlugins( names ); } // ------------------------------------------------------------------------- bool cpPlugins::Interface::Interface:: IsLoaded( const std::string& name ) const { return( this->m_Pluma.isLoaded( name ) ); } // ------------------------------------------------------------------------- void cpPlugins::Interface::Interface:: _LoadClasses( ) { this->m_Providers.clear( ); this->m_Classes.clear( ); this->m_Pluma.getProviders( this->m_Providers ); // Get reader provider for( unsigned int i = 0; i < this->m_Providers.size( ); ++i ) { ProcessObject::Pointer dummy = this->m_Providers[ i ]->create( ); this->m_Classes[ dummy->GetClassName( ) ] = i; } // rof } // eof - $RCSfile$