diff --git a/BlueBerry/Bundles/org.blueberry.osgi/src/internal/berryProvisioningInfo.cpp b/BlueBerry/Bundles/org.blueberry.osgi/src/internal/berryProvisioningInfo.cpp index 9dd4e1c78a..94c9b2a4cd 100644 --- a/BlueBerry/Bundles/org.blueberry.osgi/src/internal/berryProvisioningInfo.cpp +++ b/BlueBerry/Bundles/org.blueberry.osgi/src/internal/berryProvisioningInfo.cpp @@ -1,191 +1,199 @@ /*========================================================================= Program: BlueBerry Platform Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "berryProvisioningInfo.h" #include #include #include #include namespace berry { #ifdef CMAKE_INTDIR const QString ProvisioningInfo::intermediateOutDir = QString(CMAKE_INTDIR); #else const QString ProvisioningInfo::intermediateOutDir = QString(); #endif ProvisioningInfo::ProvisioningInfo(const QString& file) { this->readProvisioningFile(file); } QStringList ProvisioningInfo::getPluginDirs() const { return pluginDirs.toList(); } QList ProvisioningInfo::getPluginsToInstall() const { return pluginsToInstall; } QList ProvisioningInfo::getPluginsToStart() const { return pluginsToStart; } void ProvisioningInfo::readProvisioningFile(const QString& filePath) { QFile file(filePath); file.open(QFile::ReadOnly); QTextStream fileStream(&file); QRegExp sep("\\s+"); QString line; int count = 1; do { line = fileStream.readLine().trimmed(); if (!line.isEmpty() && !line.startsWith('#')) { QString keyword = line.section(sep, 0, 0); QString value = line.mid(keyword.size()).trimmed(); if (keyword.isEmpty()) { BERRY_WARN << "Keyword missing in line " << count << " of provisioning file " << filePath.toStdString(); continue; } Keyword key = UNKNOWN; if (keyword.compare("READ", Qt::CaseInsensitive) == 0) { key = READ; } else if (keyword.compare("INSTALL", Qt::CaseInsensitive) == 0) { key = INSTALL; } else if (keyword.compare("START", Qt::CaseInsensitive) == 0) { key = START; } + else if (keyword.compare("STOP", Qt::CaseInsensitive) == 0) + { + key = STOP; + } if (key == UNKNOWN) { - BERRY_WARN << "Keyword " << keyword.toStdString() << " in line" + BERRY_WARN << "Keyword " << keyword.toStdString() << " in line " << count << " of provisioning file " << filePath.toStdString() << " unknown"; continue; } if (value.isEmpty()) { BERRY_WARN << "Value after keyword " << keyword.toStdString() << " missing in line " << count << " of provisioning file " << filePath.toStdString(); continue; } switch (key) { case READ: { QUrl readFileUrl(value); if (!readFileUrl.isValid()) { BERRY_WARN << "The READ URL " << value.toStdString() << "is invalid: " << readFileUrl.errorString().toStdString(); break; } this->readProvisioningFile(readFileUrl.toLocalFile()); break; } case INSTALL: { this->addPluginToInstall(value); break; } case START: { this->addPluginToStart(value); break; } + case STOP: + { + break; + } } } ++count; } while (!line.isNull()); } QUrl ProvisioningInfo::addPluginToInstall(const QString& file) { QUrl pluginUrl(file); if (!pluginUrl.isValid()) { BERRY_WARN << "The plugin URL " << file.toStdString() << " is invalid:" << pluginUrl.errorString().toStdString(); return QUrl(); } QFileInfo fileInfo(pluginUrl.toLocalFile()); if (!fileInfo.exists()) { QString fileName = fileInfo.fileName(); QString filePath = fileInfo.absolutePath(); if (!intermediateOutDir.isEmpty()) { // search in the intermediate output dir QString filePath2 = filePath + "/" + intermediateOutDir; fileInfo = QFileInfo(filePath2 + "/" + fileName); if (!fileInfo.exists()) { BERRY_WARN << "The plugin " << fileName.toStdString() << " was not found in " << filePath.toStdString() << " or " << filePath2.toStdString(); return QUrl(); } pluginUrl = QUrl::fromLocalFile(fileInfo.canonicalFilePath()); pluginDirs.insert(fileInfo.canonicalPath()); } else { BERRY_WARN << "The plugin " << fileName.toStdString() << " was not found in " << filePath.toStdString(); return QUrl(); } } else { pluginDirs.insert(fileInfo.canonicalPath()); } pluginsToInstall.append(pluginUrl); return pluginUrl; } void ProvisioningInfo::addPluginToStart(const QString& file) { QUrl pluginUrl = this->addPluginToInstall(file); if (!pluginUrl.isEmpty()) { pluginsToStart.append(pluginUrl); } } } diff --git a/BlueBerry/Bundles/org.blueberry.osgi/src/internal/berryProvisioningInfo.h b/BlueBerry/Bundles/org.blueberry.osgi/src/internal/berryProvisioningInfo.h index 317124b55d..9f472f913f 100644 --- a/BlueBerry/Bundles/org.blueberry.osgi/src/internal/berryProvisioningInfo.h +++ b/BlueBerry/Bundles/org.blueberry.osgi/src/internal/berryProvisioningInfo.h @@ -1,60 +1,61 @@ /*========================================================================= Program: BlueBerry Platform Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef BERRYPROVISIONINGINFO_H #define BERRYPROVISIONINGINFO_H #include #include #include #include namespace berry { class ProvisioningInfo { public: ProvisioningInfo(const QString& file); QStringList getPluginDirs() const; QList getPluginsToInstall() const; QList getPluginsToStart() const; private: enum Keyword { UNKNOWN, READ, INSTALL, - START + START, + STOP }; QSet pluginDirs; QList pluginsToInstall; QList pluginsToStart; static const QString intermediateOutDir; void readProvisioningFile(const QString& file); QUrl addPluginToInstall(const QString& file); void addPluginToStart(const QString& file); }; } #endif // BERRYPROVISIONINGINFO_H