QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsprovidermetadata.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsprovidermetadata.h - Metadata class for
3 describing a data provider.
4 -------------------
5 begin : Sat Jan 10 2004
6 copyright : (C) 2004 by Gary E.Sherman
7 email : sherman at mrcc.com
8 ***************************************************************************/
9
10/***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
19#ifndef QGSPROVIDERMETADATA_H
20#define QGSPROVIDERMETADATA_H
21
22
23#include <QString>
24#include <QVariantMap>
25#include <QMap>
26#include <QList>
27#include <memory>
28#include <QPair>
29
30#include "qgis_sip.h"
31#include "qgsdataprovider.h"
32#include "qgis_core.h"
33#include <functional>
35#include "qgsfields.h"
36
37class QgsDataItem;
39class QgsTransaction;
40
46class QgsFeedback;
47
48struct QgsMesh;
49
56class CORE_EXPORT QgsMeshDriverMetadata
57{
58 Q_GADGET
59
60 public:
61
66 {
67 CanWriteFaceDatasets = 1 << 0,
68 CanWriteVertexDatasets = 1 << 1,
69 CanWriteEdgeDatasets = 1 << 2,
70 CanWriteMeshData = 1 << 3,
71 };
72
73 Q_ENUM( MeshDriverCapability )
76
79
90 Q_DECL_DEPRECATED QgsMeshDriverMetadata( const QString &name,
91 const QString &description,
92 const MeshDriverCapabilities &capabilities,
93 const QString &writeDatasetOnFileSuffix ) SIP_DEPRECATED;
94
107 QgsMeshDriverMetadata( const QString &name,
108 const QString &description,
109 const MeshDriverCapabilities &capabilities,
110 const QString &writeDatasetOnFileSuffix,
111 const QString &writeMeshFrameOnFileSuffix,
112 int maxVerticesPerface );
113
117 MeshDriverCapabilities capabilities() const;
118
122 QString name() const;
123
127 QString description() const;
128
132 QString writeDatasetOnFileSuffix() const;
133
139 QString writeMeshFrameOnFileSuffix() const;
140
146 int maximumVerticesCountPerFace() const;
147
148 private:
149 QString mName;
150 QString mDescription;
151 MeshDriverCapabilities mCapabilities;
152 QString mWriteDatasetOnFileSuffix;
153 QString mWriteMeshFrameOnFileSuffix;
154 int mMaxVerticesPerFace = -1;
155};
156
158
176class CORE_EXPORT QgsProviderMetadata : public QObject
177{
178 Q_OBJECT
179
180 public:
181
188 {
189 PriorityForUri = 1 << 0,
190 LayerTypesForUri = 1 << 1,
191 QuerySublayers = 1 << 2,
192 CreateDatabase = 1 << 3,
193 };
195
196
202 {
203 FileBasedUris = 1 << 0,
204 SaveLayerMetadata = 1 << 1,
205 ParallelCreateProvider = 1 << 2,
206 };
208
209
212 SIP_SKIP typedef std::function < QgsDataProvider*( const QString &, const QgsDataProvider::ProviderOptions &, QgsDataProvider::ReadFlags & ) > CreateDataProviderFunction;
213
220 QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
221
227 SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
228
230 virtual ~QgsProviderMetadata();
231
237 QString key() const;
238
244 QString description() const;
245
251 virtual QIcon icon() const;
252
258 virtual QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const;
259
265 virtual QgsProviderMetadata::ProviderCapabilities providerCapabilities() const;
266
272#ifndef SIP_RUN
273 virtual QList< Qgis::LayerType > supportedLayerTypes() const;
274#else
275 SIP_PYOBJECT supportedLayerTypes() const SIP_TYPEHINT( List[Qgis.LayerType] );
276 % MethodCode
277 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
278
279 const QList< Qgis::LayerType > cppRes = sipCpp->supportedLayerTypes();
280
281 PyObject *l = PyList_New( cppRes.size() );
282
283 if ( !l )
284 sipIsErr = 1;
285 else
286 {
287 for ( int i = 0; i < cppRes.size(); ++i )
288 {
289 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
290 sipType_Qgis_LayerType );
291
292 if ( !eobj )
293 {
294 sipIsErr = 1;
295 }
296
297 PyList_SetItem( l, i, eobj );
298 }
299
300 if ( !sipIsErr )
301 {
302 sipRes = l;
303 }
304 else
305 {
306 Py_DECREF( l );
307 }
308 }
309 % End
310#endif
311
319 Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
320
327 SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
328
333 virtual void initProvider();
334
339 virtual void cleanupProvider();
340
348 virtual QString filters( Qgis::FileFilterType type );
349
355 virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
356
372 virtual int priorityForUri( const QString &uri ) const;
373
384 virtual QList< Qgis::LayerType > validLayerTypesForUri( const QString &uri ) const;
385
402 virtual bool uriIsBlocklisted( const QString &uri ) const;
403
425 virtual QStringList sidecarFilesForUri( const QString &uri ) const;
426
441 virtual QList< QgsProviderSublayerDetails > querySublayers( const QString &uri, Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlags(), QgsFeedback *feedback = nullptr ) const;
442
451 virtual QString suggestGroupNameForUri( const QString &uri ) const;
452
462 virtual QgsDataProvider *createProvider( const QString &uri,
463 const QgsDataProvider::ProviderOptions &options,
464 QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) SIP_FACTORY;
465
472 static void setBoolParameter( QVariantMap &uri, const QString &parameter, const QVariant &value );
473
480 static bool boolParameter( const QVariantMap &uri, const QString &parameter, bool defaultValue = false );
481
482
483#ifndef SIP_RUN
484
490 virtual Qgis::VectorExportResult createEmptyLayer( const QString &uri,
491 const QgsFields &fields,
492 Qgis::WkbType wkbType,
494 bool overwrite,
495 QMap<int, int> &oldToNewAttrIdxMap,
496 QString &errorMessage,
497 const QMap<QString, QVariant> *options );
498#endif
499
515 virtual bool createDatabase( const QString &uri, QString &errorMessage SIP_OUT );
516
521 virtual QgsRasterDataProvider *createRasterDataProvider(
522 const QString &uri,
523 const QString &format,
524 int nBands,
525 Qgis::DataType type,
526 int width,
527 int height,
528 double *geoTransform,
530 const QStringList &createOptions = QStringList() ) SIP_FACTORY;
531
536 virtual bool createMeshData(
537 const QgsMesh &mesh,
538 const QString &fileName,
539 const QString &driverName,
540 const QgsCoordinateReferenceSystem &crs ) const;
541
546 virtual bool createMeshData(
547 const QgsMesh &mesh,
548 const QString &uri,
549 const QgsCoordinateReferenceSystem &crs ) const;
550
555 virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
556
574 virtual QVariantMap decodeUri( const QString &uri ) const;
575
584 virtual QString encodeUri( const QVariantMap &parts ) const;
585
597 virtual QString absoluteToRelativeUri( const QString &uri, const QgsReadWriteContext &context ) const;
598
610 virtual QString relativeToAbsoluteUri( const QString &uri, const QgsReadWriteContext &context ) const;
611
618 virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
619
625 virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names,
626 QStringList &descriptions, QString &errCause );
627
639 virtual bool styleExists( const QString &uri, const QString &styleId, QString &errorCause SIP_OUT );
640
648 virtual QString getStyleById( const QString &uri, const QString &styleId, QString &errCause );
649
654 virtual bool deleteStyleById( const QString &uri, const QString &styleId, QString &errCause );
655
667 virtual bool saveStyle( const QString &uri, const QString &qmlStyle, const QString &sldStyle,
668 const QString &styleName, const QString &styleDescription,
669 const QString &uiFileContent, bool useAsDefault, QString &errCause );
670
675 virtual QString loadStyle( const QString &uri, QString &errCause );
676
685 virtual QString loadStoredStyle( const QString &uri, QString &styleName, QString &errCause );
686
701 virtual bool saveLayerMetadata( const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage SIP_OUT ) SIP_THROW( QgsNotSupportedException );
702
707 virtual bool createDb( const QString &dbPath, QString &errCause );
708
713 virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
714
724 virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
725
735 QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
736
746 QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
747
748#ifndef SIP_RUN
749
757 template <typename T> QMap<QString, T *>connections( bool cached = true );
758
759
760#endif
761
771 virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
772
779 virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
780
787 virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
788
796 virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) SIP_THROW( QgsProviderConnectionException );
797
798#ifdef SIP_RUN
799 SIP_PYOBJECT __repr__();
800 % MethodCode
801 QString str = QStringLiteral( "<QgsProviderMetadata: %1>" ).arg( sipCpp->key() );
802 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
803 % End
804#endif
805
806 signals:
807
814 void connectionCreated( const QString &name );
815
822 void connectionDeleted( const QString &name );
823
831 void connectionChanged( const QString &name );
832
833 protected:
834
835#ifndef SIP_RUN
837
838 // Common functionality for connections management, to be moved into the class
839 // when all the providers are ready
840 // T_provider_conn: subclass of QgsAbstractProviderConnection,
841 // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
842 // TODO QGIS4: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
843 template <class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
844 {
845 if ( ! cached || mProviderConnections.isEmpty() )
846 {
847 qDeleteAll( mProviderConnections );
848 mProviderConnections.clear();
849 const auto connNames { T_conn::connectionList() };
850 for ( const auto &cname : connNames )
851 {
852 mProviderConnections.insert( cname, new T_provider_conn( cname ) );
853 }
854 }
855 return mProviderConnections;
856 }
857
858 template <class T_provider_conn> void deleteConnectionProtected( const QString &name )
859 {
860 T_provider_conn conn( name );
861 conn.remove( name );
862 mProviderConnections.clear();
863 emit connectionDeleted( name );
864 }
865 virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
867 QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
868
870
871#endif
872
873 private:
874
876 QString mKey;
877
879 QString mDescription;
880
883 QString mLibrary;
884
885 CreateDataProviderFunction mCreateFunction = nullptr;
886
887};
888
891
892#endif //QGSPROVIDERMETADATA_H
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:54
VectorExportResult
Vector layer export result codes.
Definition: qgis.h:784
DataType
Raster data types.
Definition: qgis.h:269
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition: qgis.h:182
The QgsAbstractDatabaseProviderConnection class provides common functionality for DB based connection...
The QgsAbstractProviderConnection provides an interface for data provider connections.
This class represents a coordinate reference system (CRS).
This is the interface for those who want to add custom data items to the browser tree.
Base class for all items in the model.
Definition: qgsdataitem.h:46
Abstract base class for spatial data provider implementations.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:44
Container of fields for a vector layer.
Definition: qgsfields.h:45
A structured metadata store for a map layer.
Base class for providing data for QgsMeshLayer.
Holds metadata about mesh driver.
MeshDriverCapability
Flags for the capabilities of the driver.
QFlags< MeshDriverCapability > MeshDriverCapabilities
Custom exception class which is raised when an operation is not supported.
Definition: qgsexception.h:118
Custom exception class for provider connection related exceptions.
Definition: qgsexception.h:101
Holds data provider key, description, and associated shared library file or function pointer informat...
QFlags< ProviderMetadataCapability > ProviderMetadataCapabilities
QFlags< ProviderCapability > ProviderCapabilities
ProviderCapability
Provider capabilities.
std::function< QgsDataProvider *(const QString &, const QgsDataProvider::ProviderOptions &, QgsDataProvider::ReadFlags &) > CreateDataProviderFunction
Typedef for data provider creation function.
void connectionDeleted(const QString &name)
Emitted when the connection with the specified name was deleted.
void connectionChanged(const QString &name)
Emitted when the connection with the specified name is changed, e.g.
void connectionCreated(const QString &name)
Emitted when a connection with the specified name is created.
ProviderMetadataCapability
Indicates capabilities of the provider metadata implementation.
Contains details about a sub layer available from a dataset.
Base class for raster data providers.
The class is used as a container of context for various read/write operations on other objects.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
#define str(x)
Definition: qgis.cpp:38
#define SIP_TYPEHINT(type)
Definition: qgis_sip.h:232
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_ENUM_BASETYPE(type)
Definition: qgis_sip.h:278
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_THROW(name,...)
Definition: qgis_sip.h:203
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)
const QgsCoordinateReferenceSystem & crs
Mesh - vertices, edges and faces.