Carousel
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Properties Pages
Public Member Functions | Protected Member Functions | List of all members
DirectoryComponentProvider Class Reference

The DirectoryComponentProvider uses to load custom components from the specified library path. More...

#include <DirectoryComponentProvider.h>

Inherits IDirectoryComponentProvider.

Public Member Functions

 DirectoryComponentProvider (QObject *parent=nullptr)
 
 DirectoryComponentProvider (const QString &path, QObject *parent=nullptr)
 
 DirectoryComponentProvider (const QString &path, const QString &definitionExtension, QObject *parent=nullptr)
 
QList< IComponent * > components () const
 
const QStringextension () const
 
QDir::Filters filters () const
 
QDirIterator::IteratorFlags flags () const
 
bool initialize ()
 
bool isInitialized () const
 
const QStringpath () const
 
void registerComponent (IComponent *component)
 
void setExtension (const QString &definitionExtension)
 
void setFilters (QDir::Filters filters)
 
void setFlags (QDirIterator::IteratorFlags flags)
 
void setPath (const QString &path)
 
QList< IComponent * > update ()
 
- Public Member Functions inherited from QObject
 QObject (QObject *parent)
 
 QObject (QObject *parent, const char *name)
 
bool blockSignals (bool block)
 
QObjectchild (const char *objName, const char *inheritsClass, bool recursiveSearch) const
 
const QObjectList & children () const
 
const char * className () const
 
bool connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const
 
void deleteLater ()
 
void destroyed (QObject *obj)
 
bool disconnect (const QObject *receiver, const char *method)
 
bool disconnect (const char *signal, const QObject *receiver, const char *method)
 
void dumpObjectInfo ()
 
void dumpObjectTree ()
 
QList< QByteArraydynamicPropertyNames () const
 
virtual bool event (QEvent *e)
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 
findChild (const QString &name) const
 
QList< T > findChildren (const QRegExp &regExp) const
 
QList< T > findChildren (const QString &name) const
 
bool inherits (const char *className) const
 
void insertChild (QObject *object)
 
void installEventFilter (QObject *filterObj)
 
bool isA (const char *className) const
 
bool isWidgetType () const
 
void killTimer (int id)
 
virtual const QMetaObjectmetaObject () const
 
void moveToThread (QThread *targetThread)
 
const char * name () const
 
const char * name (const char *defaultName) const
 
QString objectName () const
 
QObjectparent () const
 
QVariant property (const char *name) const
 
void removeChild (QObject *object)
 
void removeEventFilter (QObject *obj)
 
void setName (const char *name)
 
void setObjectName (const QString &name)
 
void setParent (QObject *parent)
 
bool setProperty (const char *name, const QVariant &value)
 
bool signalsBlocked () const
 
int startTimer (int interval)
 
QThreadthread () const
 

Protected Member Functions

virtual FileComponentProvidercreateFileComponentProvider (const QString &definitionPath)
 
bool onInitialize ()
 
- Protected Member Functions inherited from QObject
bool checkConnectArgs (const char *signal, const QObject *object, const char *method)
 
virtual void childEvent (QChildEvent *event)
 
virtual void connectNotify (const char *signal)
 
virtual void customEvent (QEvent *event)
 
virtual void disconnectNotify (const char *signal)
 
int receivers (const char *signal) const
 
QObjectsender () const
 
int senderSignalIndex () const
 
virtual void timerEvent (QTimerEvent *event)
 

Additional Inherited Members

- Static Public Member Functions inherited from QObject
bool connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
 
bool connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
 
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
 
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
 
QString tr (const char *sourceText, const char *disambiguation, int n)
 
QString trUtf8 (const char *sourceText, const char *disambiguation, int n)
 
- Static Protected Member Functions inherited from QObject
QByteArray normalizeSignalSlot (const char *signalSlot)
 
- Properties inherited from QObject
 objectName
 

Detailed Description

The DirectoryComponentProvider uses to load custom components from the specified library path.

DirectoryComponentProvider does not instantiate components from the shared libraries, it uses FileComponentProvider instead.

To export your component in shared library you have to define it:

* #include <carousel/componentsystem/BaseComponent.h>
*
* class MyComponent : public BaseComponent
* {
* Q_OBJECT
* public:
* MyComponent(QObject *parent = nullptr);
* protected:
* bool onStartup(IServiceLocator *serviceLocator);
* private:
* IServiceLocator *m_serviceLocator;
* };
*

and to export it in MyComponent.cpp file using macros EXPORT_COMPONENT:

* #include "MyComponent.h"
* #include <carousel/componentsystem/ComponentExport.h>
*
* MyComponent::MyComponent(QObject *parent)
* : BaseComponent("MyComponent", parent)
* , m_serviceLocator(nullptr)
* {
* }
*
* bool MyComponent::onStartup(IServiceLocator *serviceLocator)
* {
* m_serviceLocator = serviceLocator;
* return (m_serviceLocator != nullptr);
* }
*
* EXPORT_COMPONENT(MyComponent)
*
*

You also should provide definition for the component:

* <component name="MyComponent">
* <productName>My super product</productName>
* <description>Ultra feature</description>
* <location>./MyComponent</location>
* <parents>
* <parentComponent name="ComponentA"/>
* <parentComponent name="ComponentC"/>
* <parentComponent name="ComponentB"/>
* </parents>
* </component>
*

XmlDefinitionParser will be used to read this meta-information, by which ProxyComponent should load the real component.

Then you should override BootloaderBase::createComponentProvider() to return DirectoryComponentProvider pointer or BootloaderBase::configureComponentProvider() to specify path for the library:

* IComponentProvider *MyBootloader::createComponentProvider()
* {
* return new DirectoryComponentProvider("plugins/");
* }
* void MyBootloader::configureComponentProvider()
* {
* static_cast<DirectoryComponentProvider *>(m_componentProvider)->setPath("plugins/");
* }
*

During boot loading sequence DirectoryComponentProvider will find all component definitions in the plugins/ directory and instantiate proxy components for them, which creates real components by demand.

Note
it does not take ownership neither for proxy components that will be discovered in libraries nor for components registered by registerComponent().

Member Function Documentation

QList<IComponent *> DirectoryComponentProvider::components ( ) const
virtual

Gets the all components registered at the provider.

Implements IComponentProvider.

bool DirectoryComponentProvider::initialize ( )
virtual

Initializes the provider, which may load and validate the components. Returns true, if initialization was succesful; otherwise, returns false.

Implements IComponentProvider.

bool DirectoryComponentProvider::isInitialized ( ) const
virtual

Returns true, if provider alreadyinitialzied; otherwise, returns false.

Implements IComponentProvider.

void DirectoryComponentProvider::registerComponent ( IComponent component)
virtual

Registers the specified component at the provider. Usually, you can register the same components or components with same names using existing providers, but when components will be pushed to the IComponentManager from the providers - the last one doesn't allow duplicating components. Null pointers will be skipped.

Implements IComponentProvider.

void DirectoryComponentProvider::setPath ( const QString path)
virtual

Sets the root directory path containing component definitions.

Implements IDirectoryComponentProvider.

void DirectoryComponentProvider::setExtension ( const QString definitionExtension)
virtual

Sets the definition files extension "*.definition" is by default.

Implements IDirectoryComponentProvider.

void DirectoryComponentProvider::setFilters ( QDir::Filters  filters)
virtual

Sets the filters for searching files in the specified path.

QDir::NoDotAndDotDot | QDir::Readable are by default.

Implements IDirectoryComponentProvider.

void DirectoryComponentProvider::setFlags ( QDirIterator::IteratorFlags  flags)
virtual

Sets the flag for iterating over files in the specified path.

QDirIterator::Subdirectories is by default.

Implements IDirectoryComponentProvider.

const QString& DirectoryComponentProvider::path ( ) const
virtual

Gets the directory path containing component definitions.

Implements IDirectoryComponentProvider.

const QString& DirectoryComponentProvider::extension ( ) const
virtual

Gets the definition files extension.

Implements IDirectoryComponentProvider.

QDir::Filters DirectoryComponentProvider::filters ( ) const
virtual

Gets the filters for searching files in the specified path.

Implements IDirectoryComponentProvider.

QDirIterator::IteratorFlags DirectoryComponentProvider::flags ( ) const
virtual

Gets the flag for iterating over files in the specified path.

Implements IDirectoryComponentProvider.

QList<IComponent *> DirectoryComponentProvider::update ( )
virtual

Loads definitions from the specified root path and tries to create proxy the components from them if they have not created yet.

Returns list of the new discovered components.

Implements IDirectoryComponentProvider.

bool DirectoryComponentProvider::onInitialize ( )
protected

Initializes the provider and calls update() to load components.

Returns
false, if path is empty.
virtual FileComponentProvider* DirectoryComponentProvider::createFileComponentProvider ( const QString definitionPath)
protectedvirtual

Creates a file provider to instantiate component from the definition.

Note that it takes ownership for the provider.