##// END OF EJS Templates
Reads variable metadata to get the data type...
Reads variable metadata to get the data type The data type is then parsed to determine the value type expected when reading result file

File last commit:

r481:328e3d1c7289
r533:a6f250cc335f
Show More
AmdaPlugin.cpp
83 lines | 2.9 KiB | text/x-c | CppLexer
Alexandre Leroux
Initializes plugin
r325 #include "AmdaPlugin.h"
Alexandre Leroux
Hack to download first component of a parameter if the parameter is a vector...
r384 #include "AmdaDefs.h"
Alexandre Leroux
Creates JSON parser
r327 #include "AmdaParser.h"
Alexandre Leroux
Creates actions to load a product in the data source tree
r352 #include "AmdaProvider.h"
Alexandre Leroux
Initializes plugin
r325
#include <DataSource/DataSourceController.h>
Alexandre Leroux
Creates JSON parser
r327 #include <DataSource/DataSourceItem.h>
Alexandre Leroux
Creates actions to load a product in the data source tree
r352 #include <DataSource/DataSourceItemAction.h>
Alexandre Leroux
Initializes plugin
r325
#include <SqpApplication.h>
Q_LOGGING_CATEGORY(LOG_AmdaPlugin, "AmdaPlugin")
namespace {
/// Name of the data source
const auto DATA_SOURCE_NAME = QStringLiteral("AMDA");
Alexandre Leroux
Adds a sample JSON file as a resource in AMDA plugin...
r326 /// Path of the file used to generate the data source item for AMDA
Alexandre Leroux
Updates format of AMDA json and uses it in Sciqlop...
r481 const auto JSON_FILE_PATH = QStringLiteral(":/samples/AmdaSampleV2.json");
Alexandre Leroux
Adds a sample JSON file as a resource in AMDA plugin...
r326
Alexandre Leroux
Creates actions to load a product in the data source tree
r352 void associateActions(DataSourceItem &item, const QUuid &dataSourceUid)
{
Alexandre Leroux
Amda provider update (3)...
r381 auto addLoadAction = [&item, dataSourceUid](const QString &label) {
item.addAction(
std::make_unique<DataSourceItemAction>(label, [dataSourceUid](DataSourceItem &item) {
Alexandre Leroux
Creates actions to load a product in the data source tree
r352 if (auto app = sqpApp) {
app->dataSourceController().loadProductItem(dataSourceUid, item);
}
}));
Alexandre Leroux
Amda provider update (3)...
r381 };
const auto itemType = item.type();
if (itemType == DataSourceItemType::PRODUCT) {
Alexandre Leroux
Hack to download first component of a parameter if the parameter is a vector...
r384 /// @todo : As for the moment we do not manage the loading of vectors, in the case of a
/// parameter, we update the identifier of download of the data:
/// - if the parameter has no component, the identifier remains the same
/// - if the parameter has at least one component, the identifier is that of the first
/// component (for example, "imf" becomes "imf (0)")
if (item.childCount() != 0) {
item.setData(AMDA_XML_ID_KEY, item.child(0)->data(AMDA_XML_ID_KEY));
}
Alexandre Leroux
Amda provider update (3)...
r381 addLoadAction(QObject::tr("Load %1 product").arg(item.name()));
}
else if (itemType == DataSourceItemType::COMPONENT) {
addLoadAction(QObject::tr("Load %1 component").arg(item.name()));
Alexandre Leroux
Creates actions to load a product in the data source tree
r352 }
auto count = item.childCount();
for (auto i = 0; i < count; ++i) {
if (auto child = item.child(i)) {
associateActions(*child, dataSourceUid);
}
}
}
Alexandre Leroux
Initializes plugin
r325 } // namespace
void AmdaPlugin::initialize()
{
if (auto app = sqpApp) {
// Registers to the data source controller
auto &dataSourceController = app->dataSourceController();
auto dataSourceUid = dataSourceController.registerDataSource(DATA_SOURCE_NAME);
// Sets data source tree
Alexandre Leroux
Creates JSON parser
r327 if (auto dataSourceItem = AmdaParser::readJson(JSON_FILE_PATH)) {
Alexandre Leroux
Creates actions to load a product in the data source tree
r352 associateActions(*dataSourceItem, dataSourceUid);
Alexandre Leroux
Creates JSON parser
r327 dataSourceController.setDataSourceItem(dataSourceUid, std::move(dataSourceItem));
}
else {
qCCritical(LOG_AmdaPlugin()) << tr("No data source item could be generated for AMDA");
}
Alexandre Leroux
Inits Amda provider
r348
// Sets data provider
dataSourceController.setDataProvider(dataSourceUid, std::make_unique<AmdaProvider>());
Alexandre Leroux
Initializes plugin
r325 }
else {
qCWarning(LOG_AmdaPlugin()) << tr("Can't access to SciQlop application");
}
}