diff options
author | Sandro S. Andrade <sandroandrade@kde.org> | 2013-11-16 14:20:05 -0300 |
---|---|---|
committer | Sandro S. Andrade <sandroandrade@kde.org> | 2013-11-16 18:15:39 +0100 |
commit | 7d079325d62bcdf24d46ed5cbb86aa20e82fa0e5 (patch) | |
tree | 6736bb5080ba3a2a45536d261eaa9ea72d1518b8 /examples/uml | |
parent | d0691c1bf509ae963dafb75abb57342ffdb54eeb (diff) |
Add further improvements in DuSE-MT plugin controller
Change-Id: I7fe13c8252d755e2355c6f41222889b56289f680
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'examples/uml')
-rw-r--r-- | examples/uml/duse-mt/src/app/shell/plugincontroller.cpp | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/examples/uml/duse-mt/src/app/shell/plugincontroller.cpp b/examples/uml/duse-mt/src/app/shell/plugincontroller.cpp index bbf5fe01..eda70fd0 100644 --- a/examples/uml/duse-mt/src/app/shell/plugincontroller.cpp +++ b/examples/uml/duse-mt/src/app/shell/plugincontroller.cpp @@ -69,12 +69,11 @@ PluginController::~PluginController() bool PluginController::initialize() { - ICore *core = ICore::self(); - IPlugin *dusePlugin; + // Load metamodel plugins foreach (QString pluginPath, QCoreApplication::libraryPaths()) { QDir pluginsDir(pluginPath); pluginsDir.cd("metamodels"); - foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { + foreach (const QString &fileName, pluginsDir.entryList(QDir::Files)) { QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); QObject *plugin = loader.instance(); QMetaModelPlugin *metamodelPlugin = 0; @@ -85,33 +84,40 @@ bool PluginController::initialize() } } } + + // Load DuSE-MT plugins QDir dusePluginsDir(QCoreApplication::applicationDirPath()); dusePluginsDir.cd("../lib/duse-mt/plugins"); - const QFileInfoList subdirs = dusePluginsDir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot); QHash<QString, QString> invertedDependency; - QStringList pluginList; - foreach (const QFileInfo &subdir, subdirs) { + QObjectList pluginList; + foreach (const QFileInfo &subdir, dusePluginsDir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot)) { QDir dusePluginSubDir(subdir.absoluteFilePath()); - foreach (QString fileName, dusePluginSubDir.entryList(QDir::Files)) { + foreach (const QString &fileName, dusePluginSubDir.entryList(QDir::Files)) { QPluginLoader loader(dusePluginSubDir.absoluteFilePath(fileName)); QObject *plugin = loader.instance(); - if (plugin && (dusePlugin = qobject_cast<DuSE::IPlugin *>(plugin))) { + if (plugin && qobject_cast<DuSE::IPlugin *>(plugin)) { QJsonObject jsonObject = loader.metaData().value(QStringLiteral("MetaData")).toObject(); QJsonArray dependencies = jsonObject.value(QStringLiteral("DependencyList")).toArray(); + plugin->setProperty("metadata", loader.metaData().value(QStringLiteral("MetaData")).toObject()); + plugin->setObjectName(plugin->metaObject()->className()); int dependencyCount = dependencies.size(); for (int i = 0; i < dependencyCount; ++i) - invertedDependency.insert(dependencies.at(i).toString(), dusePlugin->metaObject()->className()); - pluginList << dusePluginSubDir.absoluteFilePath(fileName); + invertedDependency.insert(dependencies.at(i).toString(), plugin->objectName()); + pluginList << plugin; + } + else { + _errorStrings << "Error when loading plugin" << fileName << ":" << loader.errorString(); } - delete plugin; } } + + // Initialize DuSE-MT plugins + ICore *core = ICore::self(); + IPlugin *dusePlugin; int previousPluginListSize = 0; while (pluginList.size() != previousPluginListSize) { previousPluginListSize = pluginList.size(); - foreach (const QString &pluginFileName, pluginList) { - QPluginLoader loader(pluginFileName); - QObject *plugin = loader.instance(); + foreach (QObject *plugin, pluginList) { if (plugin && (dusePlugin = qobject_cast<DuSE::IPlugin *>(plugin))) { int dependencyCount = invertedDependency.values(dusePlugin->metaObject()->className()).count(); int loadedDependencies = 0; @@ -124,16 +130,22 @@ bool PluginController::initialize() } } if (loadedDependencies == dependencyCount) { - dusePlugin->initialize(core); - dusePlugin->setProperty("metadata", loader.metaData().value(QStringLiteral("MetaData")).toObject()); - _dusemtPlugins << dusePlugin; - pluginList.removeAll(pluginFileName); + if (dusePlugin->initialize(core)) { + _dusemtPlugins << dusePlugin; + pluginList.removeAll(plugin); + } } } - else - _errorStrings << "Error when loading plugin" << pluginFileName << ":" << loader.errorString(); } } + if (!pluginList.isEmpty()) { + QString errorString = "The following plugins have not been initialized: "; + foreach (QObject *plugin, pluginList) + errorString += plugin->objectName() + ", "; + errorString.chop(2); + _errorStrings << errorString; + } + return _errorStrings.isEmpty() ? true:false; } |