DataSourceController.h
99 lines
| 4.0 KiB
| text/x-c
|
CLexer
r21 | #ifndef SCIQLOP_DATASOURCECONTROLLER_H | |||
#define SCIQLOP_DATASOURCECONTROLLER_H | ||||
Alexandre Leroux
|
r461 | #include "CoreGlobal.h" | ||
r21 | #include <QLoggingCategory> | |||
#include <QObject> | ||||
Alexandre Leroux
|
r36 | #include <QUuid> | ||
r21 | ||||
#include <Common/spimpl.h> | ||||
Q_DECLARE_LOGGING_CATEGORY(LOG_DataSourceController) | ||||
Alexandre Leroux
|
r37 | class DataSourceItem; | ||
Alexandre Leroux
|
r127 | class IDataProvider; | ||
Alexandre Leroux
|
r37 | |||
r21 | /** | |||
Alexandre Leroux
|
r36 | * @brief The DataSourceController class aims to make the link between SciQlop and its plugins. This | ||
* is the intermediate class that SciQlop has to use in the way to connect a data source. Please | ||||
* first use register method to initialize a plugin specified by its metadata name (JSON plugin | ||||
* source) then others specifics method will be able to access it. You can load a data source driver | ||||
* plugin then create a data source. | ||||
r21 | */ | |||
Alexandre Leroux
|
r461 | class SCIQLOP_CORE_EXPORT DataSourceController : public QObject { | ||
r21 | Q_OBJECT | |||
public: | ||||
explicit DataSourceController(QObject *parent = 0); | ||||
virtual ~DataSourceController(); | ||||
Alexandre Leroux
|
r36 | /** | ||
* Registers a data source. The method delivers a unique id that can be used afterwards to | ||||
* access to the data source properties (structure, connection parameters, data provider, etc.) | ||||
* @param dataSourceName the name of the data source | ||||
* @return the unique id with which the data source has been registered | ||||
*/ | ||||
QUuid registerDataSource(const QString &dataSourceName) noexcept; | ||||
Alexandre Leroux
|
r37 | /** | ||
* Sets the structure of a data source. The controller takes ownership of the structure. | ||||
* @param dataSourceUid the unique id with which the data source has been registered into the | ||||
* controller. If it is invalid, the method has no effect. | ||||
Alexandre Leroux
|
r357 | * @param dataSourceItem the structure of the data source. It must be not null to be registered | ||
Alexandre Leroux
|
r37 | * @sa registerDataSource() | ||
*/ | ||||
void setDataSourceItem(const QUuid &dataSourceUid, | ||||
std::unique_ptr<DataSourceItem> dataSourceItem) noexcept; | ||||
Alexandre Leroux
|
r127 | /** | ||
* Sets the data provider used to retrieve data from of a data source. The controller takes | ||||
* ownership of the provider. | ||||
* @param dataSourceUid the unique id with which the data source has been registered into the | ||||
* controller. If it is invalid, the method has no effect. | ||||
* @param dataProvider the provider of the data source | ||||
* @sa registerDataSource() | ||||
*/ | ||||
void setDataProvider(const QUuid &dataSourceUid, | ||||
std::unique_ptr<IDataProvider> dataProvider) noexcept; | ||||
Alexandre Leroux
|
r146 | /** | ||
* Loads an item (product) as a variable in SciQlop | ||||
Alexandre Leroux
|
r167 | * @param dataSourceUid the unique id of the data source containing the item. It is used to get | ||
* the data provider associated to the data source, and pass it to for the variable creation | ||||
Alexandre Leroux
|
r146 | * @param productItem the item to load | ||
*/ | ||||
Alexandre Leroux
|
r167 | void loadProductItem(const QUuid &dataSourceUid, const DataSourceItem &productItem) noexcept; | ||
Alexandre Leroux
|
r146 | |||
r868 | QByteArray mimeDataForProductsData(const QVariantList &productsData) const; | |||
QVariantList productsDataForMimeData(const QByteArray &mimeData) const; | ||||
r21 | public slots: | |||
/// Manage init/end of the controller | ||||
void initialize(); | ||||
void finalize(); | ||||
r870 | void requestVariable(const QVariantHash &productData); | |||
Alexandre Leroux
|
r37 | signals: | ||
/// Signal emitted when a structure has been set for a data source | ||||
Alexandre Leroux
|
r92 | void dataSourceItemSet(DataSourceItem *dataSourceItem); | ||
Alexandre Leroux
|
r37 | |||
Alexandre Leroux
|
r169 | /** | ||
* Signal emitted when a variable creation is asked for a product | ||||
* @param variableName the name of the variable | ||||
Alexandre Leroux
|
r410 | * @param variableMetadata the metadata of the variable | ||
Alexandre Leroux
|
r169 | * @param variableProvider the provider that will be used to retrieve the data of the variable | ||
* (can be null) | ||||
*/ | ||||
void variableCreationRequested(const QString &variableName, | ||||
Alexandre Leroux
|
r410 | const QVariantHash &variableMetadata, | ||
Alexandre Leroux
|
r169 | std::shared_ptr<IDataProvider> variableProvider); | ||
r21 | private: | |||
void waitForFinish(); | ||||
class DataSourceControllerPrivate; | ||||
spimpl::unique_impl_ptr<DataSourceControllerPrivate> impl; | ||||
}; | ||||
#endif // SCIQLOP_DATASOURCECONTROLLER_H | ||||