QGIS API Documentation 3.43.0-Master (5df50c54ce9)
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 &, Qgis::DataProviderReadFlags & ) > 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
229 virtual ~QgsProviderMetadata();
230
236 QString key() const;
237
243 QString description() const;
244
250 virtual QIcon icon() const;
251
257 virtual QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const;
258
264 virtual QgsProviderMetadata::ProviderCapabilities providerCapabilities() const;
265
271#ifndef SIP_RUN
272 virtual QList< Qgis::LayerType > supportedLayerTypes() const;
273#else
274 SIP_PYOBJECT supportedLayerTypes() const SIP_TYPEHINT( List[Qgis.LayerType] );
275 % MethodCode
276 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
277
278 const QList< Qgis::LayerType > cppRes = sipCpp->supportedLayerTypes();
279
280 PyObject *l = PyList_New( cppRes.size() );
281
282 if ( !l )
283 sipIsErr = 1;
284 else
285 {
286 for ( int i = 0; i < cppRes.size(); ++i )
287 {
288 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
289 sipType_Qgis_LayerType );
290
291 if ( !eobj )
292 {
293 sipIsErr = 1;
294 }
295
296 PyList_SetItem( l, i, eobj );
297 }
298
299 if ( !sipIsErr )
300 {
301 sipRes = l;
302 }
303 else
304 {
305 Py_DECREF( l );
306 }
307 }
308 % End
309#endif
310
318 Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
319
326 SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
327
332 virtual void initProvider();
333
338 virtual void cleanupProvider();
339
347 virtual QString filters( Qgis::FileFilterType type );
348
354 virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
355
371 virtual int priorityForUri( const QString &uri ) const;
372
383 virtual QList< Qgis::LayerType > validLayerTypesForUri( const QString &uri ) const;
384
401 virtual bool uriIsBlocklisted( const QString &uri ) const;
402
424 virtual QStringList sidecarFilesForUri( const QString &uri ) const;
425
440 virtual QList< QgsProviderSublayerDetails > querySublayers( const QString &uri, Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlags(), QgsFeedback *feedback = nullptr ) const;
441
450 virtual QString suggestGroupNameForUri( const QString &uri ) const;
451
461 virtual QgsDataProvider *createProvider( const QString &uri,
462 const QgsDataProvider::ProviderOptions &options,
463 Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() ) SIP_FACTORY;
464
471 static void setBoolParameter( QVariantMap &uri, const QString &parameter, const QVariant &value );
472
479 static bool boolParameter( const QVariantMap &uri, const QString &parameter, bool defaultValue = false );
480
481
482#ifndef SIP_RUN
483
494 virtual Qgis::VectorExportResult createEmptyLayer( const QString &uri,
495 const QgsFields &fields,
496 Qgis::WkbType wkbType,
498 bool overwrite,
499 QMap<int, int> &oldToNewAttrIdxMap,
500 QString &errorMessage,
501 const QMap<QString, QVariant> *options,
502 QString &createdLayerUri );
503#endif
504
520 virtual bool createDatabase( const QString &uri, QString &errorMessage SIP_OUT );
521
522 // TODO QGIS 4.0: rename createOptions to creationOptions for consistency with GDAL
523
528 virtual QgsRasterDataProvider *createRasterDataProvider(
529 const QString &uri,
530 const QString &format,
531 int nBands,
532 Qgis::DataType type,
533 int width,
534 int height,
535 double *geoTransform,
537 const QStringList &createOptions = QStringList() ) SIP_FACTORY;
538
544 virtual bool createMeshData(
545 const QgsMesh &mesh,
546 const QString &fileName,
547 const QString &driverName,
549 const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
550
556 virtual bool createMeshData(
557 const QgsMesh &mesh,
558 const QString &uri,
560 const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
561
566 virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
567
585 virtual QVariantMap decodeUri( const QString &uri ) const;
586
595 virtual QString encodeUri( const QVariantMap &parts ) const;
596
608 virtual QString absoluteToRelativeUri( const QString &uri, const QgsReadWriteContext &context ) const;
609
621 virtual QString relativeToAbsoluteUri( const QString &uri, const QgsReadWriteContext &context ) const;
622
628 virtual QString cleanUri( const QString &uri, Qgis::UriCleaningFlags flags = Qgis::UriCleaningFlag::RemoveCredentials ) const;
629
636 virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
637
643 virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names,
644 QStringList &descriptions, QString &errCause );
645
657 virtual bool styleExists( const QString &uri, const QString &styleId, QString &errorCause SIP_OUT );
658
666 virtual QString getStyleById( const QString &uri, const QString &styleId, QString &errCause );
667
672 virtual bool deleteStyleById( const QString &uri, const QString &styleId, QString &errCause );
673
685 virtual bool saveStyle( const QString &uri, const QString &qmlStyle, const QString &sldStyle,
686 const QString &styleName, const QString &styleDescription,
687 const QString &uiFileContent, bool useAsDefault, QString &errCause );
688
693 virtual QString loadStyle( const QString &uri, QString &errCause );
694
703 virtual QString loadStoredStyle( const QString &uri, QString &styleName, QString &errCause );
704
719 virtual bool saveLayerMetadata( const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage SIP_OUT ) SIP_THROW( QgsNotSupportedException );
720
725 virtual bool createDb( const QString &dbPath, QString &errCause );
726
731 virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
732
742 virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
743
753 QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
754
764 QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
765
766#ifndef SIP_RUN
767
775 template <typename T> QMap<QString, T *>connections( bool cached = true );
776
777
778#endif
779
789 virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
790
797 virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
798
805 virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
806
814 virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) SIP_THROW( QgsProviderConnectionException );
815
816#ifdef SIP_RUN
817 SIP_PYOBJECT __repr__();
818 % MethodCode
819 QString str = QStringLiteral( "<QgsProviderMetadata: %1>" ).arg( sipCpp->key() );
820 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
821 % End
822#endif
823
824 signals:
825
832 void connectionCreated( const QString &name );
833
840 void connectionDeleted( const QString &name );
841
849 void connectionChanged( const QString &name );
850
851 protected:
852
853#ifndef SIP_RUN
855
856 // Common functionality for connections management, to be moved into the class
857 // when all the providers are ready
858 // T_provider_conn: subclass of QgsAbstractProviderConnection,
859 // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
860 // TODO QGIS4: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
861 template <class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
862 {
863 if ( ! cached || mProviderConnections.isEmpty() )
864 {
865 qDeleteAll( mProviderConnections );
866 mProviderConnections.clear();
867 const auto connNames { T_conn::connectionList() };
868 for ( const auto &cname : connNames )
869 {
870 mProviderConnections.insert( cname, new T_provider_conn( cname ) );
871 }
872 }
873 return mProviderConnections;
874 }
875
876 template <class T_provider_conn> void deleteConnectionProtected( const QString &name )
877 {
878 T_provider_conn conn( name );
879 conn.remove( name );
880 mProviderConnections.clear();
881 emit connectionDeleted( name );
882 }
883 virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
885 QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
886
888
889#endif
890
891 private:
892
894 QString mKey;
895
897 QString mDescription;
898
901 QString mLibrary;
902
903 CreateDataProviderFunction mCreateFunction = nullptr;
904
905};
906
909
910#endif //QGSPROVIDERMETADATA_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:54
VectorExportResult
Vector layer export result codes.
Definition qgis.h:1016
DataType
Raster data types.
Definition qgis.h:351
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:256
Provides common functionality for database based connections.
An interface for data provider connections.
Represents a coordinate reference system (CRS).
Interface for providers that 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:46
A structured metadata store for a map layer.
Base class for providing data for QgsMeshLayer.
Holds metadata about mesh drivers.
MeshDriverCapability
Flags for the capabilities of the driver.
QFlags< MeshDriverCapability > MeshDriverCapabilities
Custom exception class which is raised when an operation is not supported.
Custom exception class for provider connection related exceptions.
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 &, Qgis::DataProviderReadFlags &) > 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.
A container for the context for various read/write operations on objects.
Allows creation of a multi-layer database-side transaction.
#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.