diff options
author | Sandro S. Andrade <sandroandrade@kde.org> | 2013-11-15 18:55:42 -0300 |
---|---|---|
committer | Sandro S. Andrade <sandroandrade@kde.org> | 2013-11-15 22:54:57 +0100 |
commit | 936870048b0deac4f15c0ef98d245e2519bb7b4b (patch) | |
tree | 645ef07df7b81cce8cc84ab1ae4e5ba157c6d3c8 /examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h | |
parent | 845c8c504232d1d664118bcffed91b791a959969 (diff) |
Implement plugin loading based on dependencies
- If plugin A depends on plugin B so A implements interfaces defined in B.
- Such dependency should be informed in A's .json file, build includes and
linker dependencies are automatically handled by qmake.
- In DuSE-MT startup, dependent plugins (e.g. A) are loaded first so that
, in B initialization, PluginManager can be queried by using pluginsByType()
in order to get all plugins implementing a specific interface.
Change-Id: I201f12d2ce6972725f3aa11e9815374cf0948c5d
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h')
-rw-r--r-- | examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h b/examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h index 1bdc074d..e5a250e5 100644 --- a/examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h +++ b/examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h @@ -43,6 +43,9 @@ #include <QtCore/QObject> +#include <QtCore/QPair> +#include <QtCore/QJsonObject> + class QMetaModelPlugin; namespace DuSE @@ -59,10 +62,25 @@ public: virtual bool initialize() = 0; - virtual const QHash< QString, QPair<QMetaModelPlugin *, QJsonObject> > &metamodelPlugins() const = 0; - virtual const QList< QPair<DuSE::IPlugin *, QJsonObject> > &dusemtPlugins() const = 0; + typedef QPair<QMetaModelPlugin *, QJsonObject> MetamodelPluginPair; + typedef QPair<IPlugin *, QJsonObject> DusemtPluginPair; + + virtual const QHash<QString, DuSE::IPluginController::MetamodelPluginPair> &metamodelPlugins() const = 0; + virtual const QList<DuSE::IPluginController::DusemtPluginPair> &dusemtPlugins() const = 0; + virtual QStringList errorStrings() const = 0; + template <class T> + QList<IPlugin *> pluginsByType() const + { + QList<IPlugin *> foundPlugins; + const QList<DusemtPluginPair> &plugins = dusemtPlugins(); + foreach (const DusemtPluginPair &pair, plugins) + if (dynamic_cast<T>(pair.first)) + foundPlugins << pair.first; + return foundPlugins; + } + protected: IPluginController(); }; |