summaryrefslogtreecommitdiffstats
path: root/examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h
diff options
context:
space:
mode:
authorSandro S. Andrade <sandroandrade@kde.org>2013-11-15 18:55:42 -0300
committerSandro S. Andrade <sandroandrade@kde.org>2013-11-15 22:54:57 +0100
commit936870048b0deac4f15c0ef98d245e2519bb7b4b (patch)
tree645ef07df7b81cce8cc84ab1ae4e5ba157c6d3c8 /examples/uml/duse-mt/src/libs/duseinterfaces/iplugincontroller.h
parent845c8c504232d1d664118bcffed91b791a959969 (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.h22
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();
};