QGIS API Documentation 3.99.0-Master (7d2ca374f2d)
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
199
200
212
213
216 SIP_SKIP typedef std::function < QgsDataProvider*( const QString &, const QgsDataProvider::ProviderOptions &, Qgis::DataProviderReadFlags & ) > CreateDataProviderFunction;
217
224 QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
225
231 SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
232
233 ~QgsProviderMetadata() override;
234
240 QString key() const;
241
247 QString description() const;
248
254 virtual QIcon icon() const;
255
262
269
275#ifndef SIP_RUN
276 virtual QList< Qgis::LayerType > supportedLayerTypes() const;
277#else
278 SIP_PYOBJECT supportedLayerTypes() const SIP_TYPEHINT( List[Qgis.LayerType] );
279 % MethodCode
280 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
281
282 const QList< Qgis::LayerType > cppRes = sipCpp->supportedLayerTypes();
283
284 PyObject *l = PyList_New( cppRes.size() );
285
286 if ( !l )
287 sipIsErr = 1;
288 else
289 {
290 for ( int i = 0; i < cppRes.size(); ++i )
291 {
292 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
293 sipType_Qgis_LayerType );
294
295 if ( !eobj )
296 {
297 sipIsErr = 1;
298 }
299
300 PyList_SetItem( l, i, eobj );
301 }
302
303 if ( !sipIsErr )
304 {
305 sipRes = l;
306 }
307 else
308 {
309 Py_DECREF( l );
310 }
311 }
312 % End
313#endif
314
322 Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
323
330 SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
331
336 virtual void initProvider();
337
342 virtual void cleanupProvider();
343
351 virtual QString filters( Qgis::FileFilterType type );
352
358 virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
359
375 virtual int priorityForUri( const QString &uri ) const;
376
387 virtual QList< Qgis::LayerType > validLayerTypesForUri( const QString &uri ) const;
388
405 virtual bool uriIsBlocklisted( const QString &uri ) const;
406
428 virtual QStringList sidecarFilesForUri( const QString &uri ) const;
429
444 virtual QList< QgsProviderSublayerDetails > querySublayers( const QString &uri, Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlags(), QgsFeedback *feedback = nullptr ) const;
445
454 virtual QString suggestGroupNameForUri( const QString &uri ) const;
455
465 virtual QgsDataProvider *createProvider( const QString &uri,
466 const QgsDataProvider::ProviderOptions &options,
467 Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() ) SIP_FACTORY;
468
475 static void setBoolParameter( QVariantMap &uri, const QString &parameter, const QVariant &value );
476
483 static bool boolParameter( const QVariantMap &uri, const QString &parameter, bool defaultValue = false );
484
485
486#ifndef SIP_RUN
487
498 virtual Qgis::VectorExportResult createEmptyLayer( const QString &uri,
499 const QgsFields &fields,
500 Qgis::WkbType wkbType,
501 const QgsCoordinateReferenceSystem &srs,
502 bool overwrite,
503 QMap<int, int> &oldToNewAttrIdxMap,
504 QString &errorMessage,
505 const QMap<QString, QVariant> *options,
506 QString &createdLayerUri );
507#endif
508
524 virtual bool createDatabase( const QString &uri, QString &errorMessage SIP_OUT );
525
526 // TODO QGIS 5.0: rename createOptions to creationOptions for consistency with GDAL
527
532 virtual QgsRasterDataProvider *createRasterDataProvider(
533 const QString &uri,
534 const QString &format,
535 int nBands,
536 Qgis::DataType type,
537 int width,
538 int height,
539 double *geoTransform,
540 const QgsCoordinateReferenceSystem &crs,
541 const QStringList &createOptions = QStringList() ) SIP_FACTORY;
542
548 virtual bool createMeshData(
549 const QgsMesh &mesh,
550 const QString &fileName,
551 const QString &driverName,
552 const QgsCoordinateReferenceSystem &crs,
553 const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
554
560 virtual bool createMeshData(
561 const QgsMesh &mesh,
562 const QString &uri,
563 const QgsCoordinateReferenceSystem &crs,
564 const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
565
570 virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
571
589 virtual QVariantMap decodeUri( const QString &uri ) const;
590
599 virtual QString encodeUri( const QVariantMap &parts ) const;
600
612 virtual QString absoluteToRelativeUri( const QString &uri, const QgsReadWriteContext &context ) const;
613
625 virtual QString relativeToAbsoluteUri( const QString &uri, const QgsReadWriteContext &context ) const;
626
632 virtual QString cleanUri( const QString &uri, Qgis::UriCleaningFlags flags = Qgis::UriCleaningFlag::RemoveCredentials ) const;
633
648 virtual bool urisReferToSame( const QString &uri1, const QString &uri2, Qgis::SourceHierarchyLevel level = Qgis::SourceHierarchyLevel::Object ) const;
649
656 virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
657
663 virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names,
664 QStringList &descriptions, QString &errCause );
665
677 virtual bool styleExists( const QString &uri, const QString &styleId, QString &errorCause SIP_OUT );
678
686 virtual QString getStyleById( const QString &uri, const QString &styleId, QString &errCause );
687
692 virtual bool deleteStyleById( const QString &uri, const QString &styleId, QString &errCause );
693
705 virtual bool saveStyle( const QString &uri, const QString &qmlStyle, const QString &sldStyle,
706 const QString &styleName, const QString &styleDescription,
707 const QString &uiFileContent, bool useAsDefault, QString &errCause );
708
713 virtual QString loadStyle( const QString &uri, QString &errCause );
714
723 virtual QString loadStoredStyle( const QString &uri, QString &styleName, QString &errCause );
724
739 virtual bool saveLayerMetadata( const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage SIP_OUT ) SIP_THROW( QgsNotSupportedException );
740
745 virtual bool createDb( const QString &dbPath, QString &errCause );
746
751 virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
752
762 virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
763
773 QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
774
784 QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
785
786#ifndef SIP_RUN
787
795 template <typename T> QMap<QString, T *>connections( bool cached = true );
796
797
798#endif
799
809 virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
810
817 virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
818
825 virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
826
834 virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) SIP_THROW( QgsProviderConnectionException );
835
836#ifdef SIP_RUN
837 SIP_PYOBJECT __repr__();
838 % MethodCode
839 QString str = u"<QgsProviderMetadata: %1>"_s.arg( sipCpp->key() );
840 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
841 % End
842#endif
843
844 signals:
845
852 void connectionCreated( const QString &name );
853
860 void connectionDeleted( const QString &name );
861
869 void connectionChanged( const QString &name );
870
871 protected:
872
873#ifndef SIP_RUN
875
876 // Common functionality for connections management, to be moved into the class
877 // when all the providers are ready
878 // T_provider_conn: subclass of QgsAbstractProviderConnection,
879 // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
880 // TODO QGIS 5: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
881 template <class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
882 {
883 if ( ! cached || mProviderConnections.isEmpty() )
884 {
885 qDeleteAll( mProviderConnections );
886 mProviderConnections.clear();
887 const auto connNames { T_conn::connectionList() };
888 for ( const auto &cname : connNames )
889 {
890 mProviderConnections.insert( cname, new T_provider_conn( cname ) );
891 }
892 }
893 return mProviderConnections;
894 }
895
896 template <class T_provider_conn> void deleteConnectionProtected( const QString &name )
897 {
898 T_provider_conn conn( name );
899 conn.remove( name );
900 mProviderConnections.clear();
901 emit connectionDeleted( name );
902 }
903 virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
905 QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
906
908
909#endif
910
911 private:
912
914 QString mKey;
915
917 QString mDescription;
918
921 QString mLibrary;
922
923 CreateDataProviderFunction mCreateFunction = nullptr;
924
925};
926
929
930#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:1073
DataType
Raster data types.
Definition qgis.h:390
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:291
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.
@ UrisReferToSame
Indicates that the metadata can check whether layer URIs refer to the same object.
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:239
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:274
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_OUT
Definition qgis_sip.h:57
#define SIP_FACTORY
Definition qgis_sip.h:83
#define SIP_THROW(name,...)
Definition qgis_sip.h:210
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsProjectionSelectionWidget::CrsOptions)
Mesh - vertices, edges and faces.