QGIS API Documentation 3.99.0-Master (2fe06baccd8)
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
38class QgsDataItem;
40class QgsTransaction;
41
47class QgsFeedback;
48
49struct QgsMesh;
50
57class CORE_EXPORT QgsMeshDriverMetadata
58{
59 Q_GADGET
60
61 public:
62
73
74 Q_ENUM( MeshDriverCapability )
77
80
91 Q_DECL_DEPRECATED QgsMeshDriverMetadata( const QString &name,
92 const QString &description,
95
108 QgsMeshDriverMetadata( const QString &name,
109 const QString &description,
111 const QString &writeDatasetOnFileSuffix,
112 const QString &writeMeshFrameOnFileSuffix,
113 int maxVerticesPerface );
114
119
123 QString name() const;
124
128 QString description() const;
129
133 QString writeDatasetOnFileSuffix() const;
134
140 QString writeMeshFrameOnFileSuffix() const;
141
147 int maximumVerticesCountPerFace() const;
148
149 private:
150 QString mName;
151 QString mDescription;
152 MeshDriverCapabilities mCapabilities;
153 QString mWriteDatasetOnFileSuffix;
154 QString mWriteMeshFrameOnFileSuffix;
155 int mMaxVerticesPerFace = -1;
156};
157
159
177class CORE_EXPORT QgsProviderMetadata : public QObject
178{
179 Q_OBJECT
180
181 public:
182
196
197
209
210
213 SIP_SKIP typedef std::function < QgsDataProvider*( const QString &, const QgsDataProvider::ProviderOptions &, Qgis::DataProviderReadFlags & ) > CreateDataProviderFunction;
214
221 QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
222
228 SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
229
230 ~QgsProviderMetadata() override;
231
237 QString key() const;
238
244 QString description() const;
245
251 virtual QIcon icon() const;
252
259
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 Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() ) 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
495 virtual Qgis::VectorExportResult createEmptyLayer( const QString &uri,
496 const QgsFields &fields,
497 Qgis::WkbType wkbType,
498 const QgsCoordinateReferenceSystem &srs,
499 bool overwrite,
500 QMap<int, int> &oldToNewAttrIdxMap,
501 QString &errorMessage,
502 const QMap<QString, QVariant> *options,
503 QString &createdLayerUri );
504#endif
505
521 virtual bool createDatabase( const QString &uri, QString &errorMessage SIP_OUT );
522
523 // TODO QGIS 4.0: rename createOptions to creationOptions for consistency with GDAL
524
529 virtual QgsRasterDataProvider *createRasterDataProvider(
530 const QString &uri,
531 const QString &format,
532 int nBands,
533 Qgis::DataType type,
534 int width,
535 int height,
536 double *geoTransform,
537 const QgsCoordinateReferenceSystem &crs,
538 const QStringList &createOptions = QStringList() ) SIP_FACTORY;
539
545 virtual bool createMeshData(
546 const QgsMesh &mesh,
547 const QString &fileName,
548 const QString &driverName,
549 const QgsCoordinateReferenceSystem &crs,
550 const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
551
557 virtual bool createMeshData(
558 const QgsMesh &mesh,
559 const QString &uri,
560 const QgsCoordinateReferenceSystem &crs,
561 const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
562
567 virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
568
586 virtual QVariantMap decodeUri( const QString &uri ) const;
587
596 virtual QString encodeUri( const QVariantMap &parts ) const;
597
609 virtual QString absoluteToRelativeUri( const QString &uri, const QgsReadWriteContext &context ) const;
610
622 virtual QString relativeToAbsoluteUri( const QString &uri, const QgsReadWriteContext &context ) const;
623
629 virtual QString cleanUri( const QString &uri, Qgis::UriCleaningFlags flags = Qgis::UriCleaningFlag::RemoveCredentials ) const;
630
637 virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
638
644 virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names,
645 QStringList &descriptions, QString &errCause );
646
658 virtual bool styleExists( const QString &uri, const QString &styleId, QString &errorCause SIP_OUT );
659
667 virtual QString getStyleById( const QString &uri, const QString &styleId, QString &errCause );
668
673 virtual bool deleteStyleById( const QString &uri, const QString &styleId, QString &errCause );
674
686 virtual bool saveStyle( const QString &uri, const QString &qmlStyle, const QString &sldStyle,
687 const QString &styleName, const QString &styleDescription,
688 const QString &uiFileContent, bool useAsDefault, QString &errCause );
689
694 virtual QString loadStyle( const QString &uri, QString &errCause );
695
704 virtual QString loadStoredStyle( const QString &uri, QString &styleName, QString &errCause );
705
720 virtual bool saveLayerMetadata( const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage SIP_OUT ) SIP_THROW( QgsNotSupportedException );
721
726 virtual bool createDb( const QString &dbPath, QString &errCause );
727
732 virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
733
743 virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
744
754 QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
755
765 QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
766
767#ifndef SIP_RUN
768
776 template <typename T> QMap<QString, T *>connections( bool cached = true );
777
778
779#endif
780
790 virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
791
798 virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
799
806 virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
807
815 virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) SIP_THROW( QgsProviderConnectionException );
816
817#ifdef SIP_RUN
818 SIP_PYOBJECT __repr__();
819 % MethodCode
820 QString str = QStringLiteral( "<QgsProviderMetadata: %1>" ).arg( sipCpp->key() );
821 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
822 % End
823#endif
824
825 signals:
826
833 void connectionCreated( const QString &name );
834
841 void connectionDeleted( const QString &name );
842
850 void connectionChanged( const QString &name );
851
852 protected:
853
854#ifndef SIP_RUN
856
857 // Common functionality for connections management, to be moved into the class
858 // when all the providers are ready
859 // T_provider_conn: subclass of QgsAbstractProviderConnection,
860 // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
861 // TODO QGIS4: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
862 template <class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
863 {
864 if ( ! cached || mProviderConnections.isEmpty() )
865 {
866 qDeleteAll( mProviderConnections );
867 mProviderConnections.clear();
868 const auto connNames { T_conn::connectionList() };
869 for ( const auto &cname : connNames )
870 {
871 mProviderConnections.insert( cname, new T_provider_conn( cname ) );
872 }
873 }
874 return mProviderConnections;
875 }
876
877 template <class T_provider_conn> void deleteConnectionProtected( const QString &name )
878 {
879 T_provider_conn conn( name );
880 conn.remove( name );
881 mProviderConnections.clear();
882 emit connectionDeleted( name );
883 }
884 virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
886 QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
887
889
890#endif
891
892 private:
893
895 QString mKey;
896
898 QString mDescription;
899
902 QString mLibrary;
903
904 CreateDataProviderFunction mCreateFunction = nullptr;
905
906};
907
910
911#endif //QGSPROVIDERMETADATA_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:56
VectorExportResult
Vector layer export result codes.
Definition qgis.h:1052
DataType
Raster data types.
Definition qgis.h:372
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:277
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:47
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.