17 #include <QCoreApplication> 20 #include <QTextStream> 25 const QString ProvisioningInfo::intermediateOutDir = QString(CMAKE_INTDIR);
27 const QString ProvisioningInfo::intermediateOutDir = QString();
34 void ProvisioningInfo::readProvisioningFile(
const QString &filePath)
37 file.open(QFile::ReadOnly);
38 QTextStream fileStream(&file);
44 line = fileStream.readLine().trimmed();
45 if (!line.isEmpty() && !line.startsWith(
'#'))
47 QString keyword = line.section(sep, 0, 0);
48 QString value = line.mid(keyword.size()).trimmed();
49 value = substituteKeywords(value);
51 if (keyword.isEmpty())
53 MITK_WARN <<
"Keyword missing in line " << count <<
" of provisioning file " << filePath.toStdString();
57 Keyword key = UNKNOWN;
58 if (keyword.compare(
"READ", Qt::CaseInsensitive) == 0)
62 else if (keyword.compare(
"INSTALL", Qt::CaseInsensitive) == 0)
66 else if (keyword.compare(
"START", Qt::CaseInsensitive) == 0)
70 else if (keyword.compare(
"STOP", Qt::CaseInsensitive) == 0)
77 MITK_WARN <<
"Keyword " << keyword.toStdString() <<
" in line " << count <<
" of provisioning file " 78 << filePath.toStdString() <<
" unknown";
84 MITK_WARN <<
"Value after keyword " << keyword.toStdString() <<
" missing in line " << count
85 <<
" of provisioning file " << filePath.toStdString();
93 QUrl readFileUrl(value);
94 if (!readFileUrl.isValid())
96 MITK_WARN <<
"The READ URL " << value.toStdString()
97 <<
"is invalid: " << readFileUrl.errorString().toStdString();
100 this->readProvisioningFile(readFileUrl.toLocalFile());
105 this->addPluginToInstall(value);
110 this->addPluginToStart(value);
124 }
while (!line.isNull());
127 QUrl ProvisioningInfo::addPluginToInstall(
const QString &file)
129 QUrl pluginUrl(file);
130 if (!pluginUrl.isValid())
132 MITK_WARN <<
"The plugin URL " << file.toStdString() <<
" is invalid:" << pluginUrl.errorString().toStdString();
136 QFileInfo fileInfo(pluginUrl.toLocalFile());
137 if (!fileInfo.exists())
139 QString fileName = fileInfo.fileName();
140 QString filePath = fileInfo.absolutePath();
141 if (!intermediateOutDir.isEmpty())
144 QString filePath2 = filePath +
"/" + intermediateOutDir;
145 fileInfo = QFileInfo(filePath2 +
"/" + fileName);
146 if (!fileInfo.exists())
148 MITK_WARN <<
"The plugin " << fileName.toStdString() <<
" was not found in " << filePath.toStdString()
149 <<
" or " << filePath2.toStdString();
152 pluginUrl = QUrl::fromLocalFile(fileInfo.canonicalFilePath());
153 pluginDirs.insert(fileInfo.canonicalPath());
157 MITK_WARN <<
"The plugin " << fileName.toStdString() <<
" was not found in " << filePath.toStdString();
163 pluginDirs.insert(fileInfo.canonicalPath());
166 pluginsToInstall.append(pluginUrl);
170 void ProvisioningInfo::addPluginToStart(
const QString &file)
172 QUrl pluginUrl = this->addPluginToInstall(file);
173 if (!pluginUrl.isEmpty())
175 pluginsToStart.append(pluginUrl);
179 QString ProvisioningInfo::substituteKeywords(
const QString &value)
const 181 QString appPath = QCoreApplication::applicationDirPath();
182 if (appPath.endsWith(
'/'))
189 QString intDir(CMAKE_INTDIR);
190 if (appPath.endsWith(intDir))
192 appPath.chop(intDir.size() + 1);
197 if (value.contains(
"@EXECUTABLE_DIR") && value.contains(
"blueberry_osgi"))
200 return QString(value).replace(
"@EXECUTABLE_DIR", appPath, Qt::CaseInsensitive).replace(
"plugins/",
"");
204 return QString(value).replace(
"@EXECUTABLE_DIR", appPath, Qt::CaseInsensitive);
QStringList getPluginDirs() const
DataCollection - Class to facilitate loading/accessing structured data.
QList< QUrl > getPluginsToStart() const
ProvisioningInfo(const QString &file)
QList< QUrl > getPluginsToInstall() const