OpenWalnut
1.5.0dev
|
Class able to create a new copy of an arbitrary module. More...
#include <WModuleFactory.h>
Public Types | |
typedef std::shared_ptr< WModuleFactory > | SPtr |
Shared pointer to a WModule. More... | |
typedef std::shared_ptr< const WModuleFactory > | ConstSPtr |
Shared pointer to a const WModule. More... | |
typedef std::set< std::shared_ptr< WModule > > | PrototypeContainerType |
For shortening: a type defining a shared set of WModule pointers. More... | |
typedef std::set< std::shared_ptr< WModule > >::const_iterator | PrototypeContainerConstIteratorType |
Const iterator for the prototype set. More... | |
typedef std::set< std::shared_ptr< WModule > >::iterator | PrototypeContainerIteratorType |
Iterator for the prototype set. More... | |
typedef WSharedAssociativeContainer< PrototypeContainerType > | PrototypeSharedContainerType |
The alias for a shared container. More... | |
Public Member Functions | |
virtual | ~WModuleFactory () |
Destructor. More... | |
void | load () |
Loads the modules and creates prototypes. More... | |
std::shared_ptr< WModule > | create (std::shared_ptr< WModule > prototype, std::string uuid="") |
Create a new and initialized module using the specified prototype. More... | |
std::shared_ptr< WModule > | create (std::string prototype, std::string uuid="") |
Create a new and initialized module using the specified prototype. More... | |
const std::shared_ptr< WModule > | isPrototypeAvailable (std::string name) |
Searches a prototype by name. More... | |
const std::shared_ptr< WModule > | getPrototypeByName (std::string name) |
Finds a prototype using the specified name. More... | |
const std::shared_ptr< WModule > | getPrototypeByInstance (std::shared_ptr< WModule > instance) |
Finds a prototype using an instance of a module. More... | |
std::vector< WModule::ConstSPtr > | getPrototypesByType (MODULE_TYPE type) |
Finds a prototype using an type. More... | |
PrototypeSharedContainerType::ReadTicket | getPrototypes () const |
This method gives read access to the list of all prototypes. More... | |
WCombinerTypes::WCompatiblesList | getCompatiblePrototypes (std::shared_ptr< WModule > module=std::shared_ptr< WModule >()) |
Returns a set of module combiners with module combinations compatible with the specified one. More... | |
WCombinerTypes::WCompatiblesList | getAllPrototypes () |
Creates a list of WApplyCombiner for all modules known by the factory. More... | |
template<typename ModuleType > | |
std::vector< std::shared_ptr< ModuleType > > | getPrototypesByType () const |
Get all module prototypes which are of a certain type. More... | |
std::vector< WDataModule::SPtr > | getDataModulePrototypesByInput (WDataModuleInput::ConstSPtr input) const |
Query a list of WDataModule prototypes depending on given input. More... | |
Static Public Member Functions | |
static SPtr | getModuleFactory () |
Returns instance of the module factory to use to create modules. More... | |
static std::shared_ptr< WModuleLoader > | getModuleLoader () |
Returns instance of the module loader. More... | |
template<typename T > | |
static bool | isA (std::shared_ptr< WModule > module) |
Checks whether the first instance can be casted to the second one. More... | |
static void | initializeModule (std::shared_ptr< WModule > module) |
This method uses a newly created instance of WModule and initializes it properly. More... | |
static bool | isPrototype (std::shared_ptr< WModule > module) |
Checks whether the specified module is a prototype or an instantiated module. More... | |
static WModule::SPtr | findByUUID (std::string uuid) |
Find a module instance by UUID. More... | |
Protected Member Functions | |
WModuleFactory () | |
Constructors are protected because this is a Singleton. More... | |
bool | checkPrototype (std::shared_ptr< WModule > module, PrototypeSharedContainerType::ReadTicket ticket) |
Checks whether the specified module is a prototype or an instantiated module. More... | |
Protected Attributes | |
PrototypeSharedContainerType | m_prototypes |
The module prototypes available. More... | |
Private Types | |
typedef std::map< std::string, std::weak_ptr< WModule > > | UuidModuleMap |
Mapping between a UUID and a module. More... | |
Private Attributes | |
WModuleLoader::SPtr | m_moduleLoader |
Loader class managing dynamically loaded modules in OpenWalnut. More... | |
WSharedAssociativeContainer< UuidModuleMap > | m_uuidModuleMap |
Keep track of uuids of each created module. More... | |
Static Private Attributes | |
static std::shared_ptr< WModuleFactory > | m_instance = std::shared_ptr< WModuleFactory >() |
Singleton instance of WModuleFactory. More... | |
Friends | |
class | WModuleFactoryTest |
Access for test class. More... | |
Class able to create a new copy of an arbitrary module.
It uses the Factory and Prototype design pattern.
Definition at line 46 of file WModuleFactory.h.
typedef std::shared_ptr< const WModuleFactory > WModuleFactory::ConstSPtr |
Shared pointer to a const WModule.
Definition at line 58 of file WModuleFactory.h.
typedef std::set< std::shared_ptr< WModule > >::const_iterator WModuleFactory::PrototypeContainerConstIteratorType |
Const iterator for the prototype set.
Definition at line 68 of file WModuleFactory.h.
typedef std::set< std::shared_ptr< WModule > >::iterator WModuleFactory::PrototypeContainerIteratorType |
Iterator for the prototype set.
Definition at line 73 of file WModuleFactory.h.
typedef std::set< std::shared_ptr< WModule > > WModuleFactory::PrototypeContainerType |
For shortening: a type defining a shared set of WModule pointers.
Definition at line 63 of file WModuleFactory.h.
typedef WSharedAssociativeContainer< PrototypeContainerType > WModuleFactory::PrototypeSharedContainerType |
The alias for a shared container.
Definition at line 78 of file WModuleFactory.h.
typedef std::shared_ptr< WModuleFactory > WModuleFactory::SPtr |
Shared pointer to a WModule.
Definition at line 53 of file WModuleFactory.h.
|
private |
Mapping between a UUID and a module.
Definition at line 285 of file WModuleFactory.h.
|
virtual |
Destructor.
Definition at line 52 of file WModuleFactory.cpp.
|
protected |
Constructors are protected because this is a Singleton.
Definition at line 45 of file WModuleFactory.cpp.
Referenced by getModuleFactory().
|
protected |
Checks whether the specified module is a prototype or an instantiated module.
Use isPrototype if no ticket acquired yet.
module | the module to check |
ticket | ticket which already has read lock. |
Definition at line 107 of file WModuleFactory.cpp.
Referenced by create().
std::shared_ptr< WModule > WModuleFactory::create | ( | std::shared_ptr< WModule > | prototype, |
std::string | uuid = "" |
||
) |
Create a new and initialized module using the specified prototype.
prototype | the prototype to clone. |
uuid | the uuid to use for the created module. If you specify an empty string (default), a uuid will be created. This parameter is useful for the project loader. |
Definition at line 117 of file WModuleFactory.cpp.
References checkPrototype(), wlog::debug(), WSharedObject< T >::getReadTicket(), initializeModule(), WSharedAssociativeContainer< T >::insert(), m_prototypes, and m_uuidModuleMap.
Referenced by create().
std::shared_ptr< WModule > WModuleFactory::create | ( | std::string | prototype, |
std::string | uuid = "" |
||
) |
Create a new and initialized module using the specified prototype.
This might fail if the prototype with this name cannot be found. Please refer to getPrototypeByName.
prototype | the prototype to clone as name. |
uuid | the uuid to use for the created module. If you specify an empty string (default), a uuid will be created. This parameter is useful for the project loader. |
Definition at line 112 of file WModuleFactory.cpp.
References create(), and getPrototypeByName().
|
static |
Find a module instance by UUID.
uuid | the uuid to search for. |
Definition at line 319 of file WModuleFactory.cpp.
References getModuleFactory(), and WSharedObject< T >::getReadTicket().
Referenced by WModule::findByUUID().
WCombinerTypes::WCompatiblesList WModuleFactory::getAllPrototypes | ( | ) |
Creates a list of WApplyCombiner for all modules known by the factory.
Definition at line 289 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
WCombinerTypes::WCompatiblesList WModuleFactory::getCompatiblePrototypes | ( | std::shared_ptr< WModule > | module = std::shared_ptr< WModule >() | ) |
Returns a set of module combiners with module combinations compatible with the specified one.
module | the module to find the compatibles for. |
Definition at line 225 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
std::vector< WDataModule::SPtr > WModuleFactory::getDataModulePrototypesByInput | ( | WDataModuleInput::ConstSPtr | input | ) | const |
Query a list of WDataModule prototypes depending on given input.
input | the input to use for matching |
Definition at line 339 of file WModuleFactory.cpp.
References WDataModule::getInputFilter(), and getModuleFactory().
|
static |
Returns instance of the module factory to use to create modules.
Definition at line 151 of file WModuleFactory.cpp.
References m_instance, and WModuleFactory().
Referenced by WApplyCombiner::apply(), WModuleContainer::applyModule(), WModuleContainer::createAndAdd(), WQtControlPanel::createCompatibleButtons(), WModuleContainerWrapper::createDataModule(), findByUUID(), getDataModulePrototypesByInput(), WIconManager::getIcon(), getModuleLoader(), WKernel::init(), WMDiffTensorScalars::initSubModules(), WMProbTractDisplay::initSubModules(), WPrototypeRequirement::isComplied(), isPrototype(), WMDistanceMapIsosurface::moduleMain(), WMEffectiveConnectivityCluster::moduleMain(), WMTemplateContainers::moduleMain(), WModuleProjectFileCombiner::parse(), WBatchLoader::threadMain(), and WQtModuleConfig::WQtModuleConfig().
|
static |
Returns instance of the module loader.
Definition at line 57 of file WModuleFactory.cpp.
References getModuleFactory().
Referenced by WKernel::threadMain().
const std::shared_ptr< WModule > WModuleFactory::getPrototypeByInstance | ( | std::shared_ptr< WModule > | instance | ) |
Finds a prototype using an instance of a module.
This uses the type_info to find a proper prototype.
instance | the instance to use. |
WPrototypeUnknown | if prototype can not be found. |
Definition at line 195 of file WModuleFactory.cpp.
References getPrototypeByName().
const std::shared_ptr< WModule > WModuleFactory::getPrototypeByName | ( | std::string | name | ) |
Finds a prototype using the specified name.
name | the name. |
WPrototypeUnknown | if the prototype is not known. Use isPrototypeAvailable first to check. |
Definition at line 182 of file WModuleFactory.cpp.
References isPrototypeAvailable().
Referenced by create(), and getPrototypeByInstance().
WModuleFactory::PrototypeSharedContainerType::ReadTicket WModuleFactory::getPrototypes | ( | ) | const |
This method gives read access to the list of all prototypes.
Definition at line 220 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
std::vector< std::shared_ptr< ModuleType > > WModuleFactory::getPrototypesByType |
Get all module prototypes which are of a certain type.
ModuleType | the type |
Definition at line 301 of file WModuleFactory.h.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
std::vector< WModule::ConstSPtr > WModuleFactory::getPrototypesByType | ( | MODULE_TYPE | type | ) |
Finds a prototype using an type.
type | the type of module. |
Definition at line 200 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
|
static |
This method uses a newly created instance of WModule and initializes it properly.
After using this method, the module is properly initialized and ready to be used.
module | the module to initialize. |
Definition at line 146 of file WModuleFactory.cpp.
Referenced by create(), and load().
|
static |
Checks whether the first instance can be casted to the second one.
module | the module to check. |
Definition at line 294 of file WModuleFactory.h.
|
static |
Checks whether the specified module is a prototype or an instantiated module.
module | the module to check |
Definition at line 100 of file WModuleFactory.cpp.
References getModuleFactory().
Referenced by WApplyCombiner::apply().
const std::shared_ptr< WModule > WModuleFactory::isPrototypeAvailable | ( | std::string | name | ) |
Searches a prototype by name.
It returns the prototype, or a NULL pointer if it is not found. The difference to getPrototypeByName() is, that an unavailable prototype does not throw an exception. This is nice for checking whether a prototype exists or not.
name | name of the prototype to search |
Definition at line 162 of file WModuleFactory.cpp.
References WSharedObject< T >::getReadTicket(), and m_prototypes.
Referenced by getPrototypeByName().
void WModuleFactory::load | ( | ) |
Loads the modules and creates prototypes.
Definition at line 62 of file WModuleFactory.cpp.
References WLogger::addLogMessage(), WLogger::getLogger(), WSharedObject< T >::getWriteTicket(), initializeModule(), m_moduleLoader, and m_prototypes.
|
friend |
Access for test class.
Definition at line 48 of file WModuleFactory.h.
|
staticprivate |
Singleton instance of WModuleFactory.
Definition at line 280 of file WModuleFactory.h.
Referenced by getModuleFactory().
|
private |
Loader class managing dynamically loaded modules in OpenWalnut.
Definition at line 275 of file WModuleFactory.h.
Referenced by load().
|
protected |
The module prototypes available.
Definition at line 259 of file WModuleFactory.h.
Referenced by create(), getAllPrototypes(), getCompatiblePrototypes(), getPrototypes(), getPrototypesByType(), isPrototypeAvailable(), and load().
|
private |
Keep track of uuids of each created module.
This is needed to find module pointers using uuid.
Definition at line 290 of file WModuleFactory.h.
Referenced by create().