QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
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 <functional>
24#include <memory>
25
26#include "qgis_core.h"
27#include "qgis_sip.h"
29#include "qgsdataprovider.h"
30#include "qgsfields.h"
31
32#include <QList>
33#include <QMap>
34#include <QPair>
35#include <QString>
36#include <QVariantMap>
37
38using namespace Qt::StringLiterals;
39
40class QgsDataItem;
42class QgsTransaction;
43
49class QgsFeedback;
50
51struct QgsMesh;
52
59class CORE_EXPORT QgsMeshDriverMetadata
60{
61 Q_GADGET
62
63 public:
64
75
76 Q_ENUM( MeshDriverCapability )
79
82
93 Q_DECL_DEPRECATED QgsMeshDriverMetadata( const QString &name,
94 const QString &description,
97
110 QgsMeshDriverMetadata( const QString &name,
111 const QString &description,
113 const QString &writeDatasetOnFileSuffix,
114 const QString &writeMeshFrameOnFileSuffix,
115 int maxVerticesPerface );
116
121
125 QString name() const;
126
130 QString description() const;
131
135 QString writeDatasetOnFileSuffix() const;
136
142 QString writeMeshFrameOnFileSuffix() const;
143
149 int maximumVerticesCountPerFace() const;
150
151 private:
152 QString mName;
153 QString mDescription;
154 MeshDriverCapabilities mCapabilities;
155 QString mWriteDatasetOnFileSuffix;
156 QString mWriteMeshFrameOnFileSuffix;
157 int mMaxVerticesPerFace = -1;
158};
159
161
179class CORE_EXPORT QgsProviderMetadata : public QObject
180{
181 Q_OBJECT
182
183 public:
184
198
199
211
212
215 SIP_SKIP typedef std::function < QgsDataProvider*( const QString &, const QgsDataProvider::ProviderOptions &, Qgis::DataProviderReadFlags & ) > CreateDataProviderFunction;
216
223 QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
224
230 SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
231
232 ~QgsProviderMetadata() override;
233
239 QString key() const;
240
246 QString description() const;
247
253 virtual QIcon icon() const;
254
261
268
274#ifndef SIP_RUN
275 virtual QList< Qgis::LayerType > supportedLayerTypes() const;
276#else
277 SIP_PYOBJECT supportedLayerTypes() const SIP_TYPEHINT( List[Qgis.LayerType] );
278 % MethodCode
279 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
280
281 const QList< Qgis::LayerType > cppRes = sipCpp->supportedLayerTypes();
282
283 PyObject *l = PyList_New( cppRes.size() );
284
285 if ( !l )
286 sipIsErr = 1;
287 else
288 {
289 for ( int i = 0; i < cppRes.size(); ++i )
290 {
291 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
292 sipType_Qgis_LayerType );
293
294 if ( !eobj )
295 {
296 sipIsErr = 1;
297 }
298
299 PyList_SetItem( l, i, eobj );
300 }
301
302 if ( !sipIsErr )
303 {
304 sipRes = l;
305 }
306 else
307 {
308 Py_DECREF( l );
309 }
310 }
311 % End
312#endif
313
321 Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
322
329 SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
330
335 virtual void initProvider();
336
341 virtual void cleanupProvider();
342
350 virtual QString filters( Qgis::FileFilterType type );
351
357 virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
358
374 virtual int priorityForUri( const QString &uri ) const;
375
386 virtual QList< Qgis::LayerType > validLayerTypesForUri( const QString &uri ) const;
387
404 virtual bool uriIsBlocklisted( const QString &uri ) const;
405
427 virtual QStringList sidecarFilesForUri( const QString &uri ) const;
428
443 virtual QList< QgsProviderSublayerDetails > querySublayers( const QString &uri, Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlags(), QgsFeedback *feedback = nullptr ) const;
444
453 virtual QString suggestGroupNameForUri( const QString &uri ) const;
454
464 virtual QgsDataProvider *createProvider( const QString &uri,
465 const QgsDataProvider::ProviderOptions &options,
466 Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() ) SIP_FACTORY;
467
474 static void setBoolParameter( QVariantMap &uri, const QString &parameter, const QVariant &value );
475
482 static bool boolParameter( const QVariantMap &uri, const QString &parameter, bool defaultValue = false );
483
484
485#ifndef SIP_RUN
486
497 virtual Qgis::VectorExportResult createEmptyLayer( const QString &uri,
498 const QgsFields &fields,
499 Qgis::WkbType wkbType,
500 const QgsCoordinateReferenceSystem &srs,
501 bool overwrite,
502 QMap<int, int> &oldToNewAttrIdxMap,
503 QString &errorMessage,
504 const QMap<QString, QVariant> *options,
505 QString &createdLayerUri );
506#endif
507
523 virtual bool createDatabase( const QString &uri, QString &errorMessage SIP_OUT );
524
525 // TODO QGIS 5.0: rename createOptions to creationOptions for consistency with GDAL
526
531 virtual QgsRasterDataProvider *createRasterDataProvider(
532 const QString &uri,
533 const QString &format,
534 int nBands,
535 Qgis::DataType type,
536 int width,
537 int height,
538 double *geoTransform,
539 const QgsCoordinateReferenceSystem &crs,
540 const QStringList &createOptions = QStringList() ) SIP_FACTORY;
541
547 virtual bool createMeshData(
548 const QgsMesh &mesh,
549 const QString &fileName,
550 const QString &driverName,
551 const QgsCoordinateReferenceSystem &crs,
552 const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
553
559 virtual bool createMeshData(
560 const QgsMesh &mesh,
561 const QString &uri,
562 const QgsCoordinateReferenceSystem &crs,
563 const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
564
569 virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
570
588 virtual QVariantMap decodeUri( const QString &uri ) const;
589
598 virtual QString encodeUri( const QVariantMap &parts ) const;
599
611 virtual QString absoluteToRelativeUri( const QString &uri, const QgsReadWriteContext &context ) const;
612
624 virtual QString relativeToAbsoluteUri( const QString &uri, const QgsReadWriteContext &context ) const;
625
631 virtual QString cleanUri( const QString &uri, Qgis::UriCleaningFlags flags = Qgis::UriCleaningFlag::RemoveCredentials ) const;
632
639 virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
640
646 virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names,
647 QStringList &descriptions, QString &errCause );
648
660 virtual bool styleExists( const QString &uri, const QString &styleId, QString &errorCause SIP_OUT );
661
669 virtual QString getStyleById( const QString &uri, const QString &styleId, QString &errCause );
670
675 virtual bool deleteStyleById( const QString &uri, const QString &styleId, QString &errCause );
676
688 virtual bool saveStyle( const QString &uri, const QString &qmlStyle, const QString &sldStyle,
689 const QString &styleName, const QString &styleDescription,
690 const QString &uiFileContent, bool useAsDefault, QString &errCause );
691
696 virtual QString loadStyle( const QString &uri, QString &errCause );
697
706 virtual QString loadStoredStyle( const QString &uri, QString &styleName, QString &errCause );
707
722 virtual bool saveLayerMetadata( const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage SIP_OUT ) SIP_THROW( QgsNotSupportedException );
723
728 virtual bool createDb( const QString &dbPath, QString &errCause );
729
734 virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
735
745 virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
746
756 QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
757
767 QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
768
769#ifndef SIP_RUN
770
778 template <typename T> QMap<QString, T *>connections( bool cached = true );
779
780
781#endif
782
792 virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
793
800 virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
801
808 virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
809
817 virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) SIP_THROW( QgsProviderConnectionException );
818
819#ifdef SIP_RUN
820 SIP_PYOBJECT __repr__();
821 % MethodCode
822 QString str = u"<QgsProviderMetadata: %1>"_s.arg( sipCpp->key() );
823 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
824 % End
825#endif
826
827 signals:
828
835 void connectionCreated( const QString &name );
836
843 void connectionDeleted( const QString &name );
844
852 void connectionChanged( const QString &name );
853
854 protected:
855
856#ifndef SIP_RUN
858
859 // Common functionality for connections management, to be moved into the class
860 // when all the providers are ready
861 // T_provider_conn: subclass of QgsAbstractProviderConnection,
862 // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
863 // TODO QGIS 5: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
864 template <class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
865 {
866 if ( ! cached || mProviderConnections.isEmpty() )
867 {
868 qDeleteAll( mProviderConnections );
869 mProviderConnections.clear();
870 const auto connNames { T_conn::connectionList() };
871 for ( const auto &cname : connNames )
872 {
873 mProviderConnections.insert( cname, new T_provider_conn( cname ) );
874 }
875 }
876 return mProviderConnections;
877 }
878
879 template <class T_provider_conn> void deleteConnectionProtected( const QString &name )
880 {
881 T_provider_conn conn( name );
882 conn.remove( name );
883 mProviderConnections.clear();
884 emit connectionDeleted( name );
885 }
886 virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
888 QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
889
891
892#endif
893
894 private:
895
897 QString mKey;
898
900 QString mDescription;
901
904 QString mLibrary;
905
906 CreateDataProviderFunction mCreateFunction = nullptr;
907
908};
909
912
913#endif //QGSPROVIDERMETADATA_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:59
VectorExportResult
Vector layer export result codes.
Definition qgis.h:1071
DataType
Raster data types.
Definition qgis.h:379
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:280
Provides common functionality for database based connections.
Interface for providers that add custom data items to the browser tree.
Base class for all items in the model.
Definition qgsdataitem.h:50
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
A structured metadata store for a map layer.
Base class for providing data for QgsMeshLayer.
MeshDriverCapability
Flags for the capabilities of the driver.
@ CanWriteVertexDatasets
If the driver can persist datasets defined on vertices.
@ CanWriteMeshData
If the driver can write mesh data on file.
@ CanWriteEdgeDatasets
If the driver can persist datasets defined on edges.
@ CanWriteFaceDatasets
If the driver can persist datasets defined on faces.
int maximumVerticesCountPerFace() const
Returns the maximum number of vertices per face supported by the driver.
QString writeDatasetOnFileSuffix() const
Returns the suffix used to write datasets on file.
MeshDriverCapabilities capabilities() const
Returns the capabilities for this driver.
QFlags< MeshDriverCapability > MeshDriverCapabilities
QString writeMeshFrameOnFileSuffix() const
Returns the suffix used to write mesh on file.
QString description() const
Returns the description for this driver.
QgsMeshDriverMetadata()
Constructs default metadata without any capabilities.
QString name() const
Returns the name (key) for this driver.
QFlags< ProviderMetadataCapability > ProviderMetadataCapabilities
virtual QgsProviderMetadata::ProviderCapabilities providerCapabilities() const
Returns the provider's capabilities.
QFlags< ProviderCapability > ProviderCapabilities
virtual QIcon icon() const
Returns an icon representing the provider.
ProviderCapability
Provider capabilities.
@ SaveLayerMetadata
Indicates that the provider supports saving native layer metadata.
@ ParallelCreateProvider
Indicates that the provider supports parallel creation, that is, can be created on another thread tha...
@ FileBasedUris
Indicates that the provider can utilize URIs which are based on paths to files (as opposed to databas...
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.
QString description() const
This returns descriptive text for the provider.
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.
QString key() const
This returns the unique key associated with the provider.
virtual QList< Qgis::LayerType > supportedLayerTypes() const
Returns a list of the map layer types supported by the provider.
ProviderMetadataCapability
Indicates capabilities of the provider metadata implementation.
@ QuerySublayers
Indicates that the metadata can query sublayers for a URI.
@ LayerTypesForUri
Indicates that the metadata can determine valid layer types for a URI.
@ PriorityForUri
Indicates that the metadata can calculate a priority for a URI.
@ CreateDatabase
Indicates that the metadata can create new empty databases.
QgsProviderMetadata(const QString &key, const QString &description, const QString &library=QString())
Constructor for provider metadata.
virtual QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const
Returns the provider metadata capabilities.
Q_DECL_DEPRECATED QString library() const
This returns the library file name.
Contains details about a sub layer available from a dataset.
Base class for raster data providers.
Allows creation of a multi-layer database-side transaction.
#define SIP_TYPEHINT(type)
Definition qgis_sip.h:240
#define SIP_DEPRECATED
Definition qgis_sip.h:114
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:275
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:84
#define SIP_THROW(name,...)
Definition qgis_sip.h:211
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsProjectionSelectionWidget::CrsOptions)
Mesh - vertices, edges and faces.