QGIS API Documentation 4.3.0-Master (bf28115e945)
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:
74
75 Q_ENUM( MeshDriverCapability )
78
81
92 Q_DECL_DEPRECATED QgsMeshDriverMetadata( const QString &name, const QString &description, const MeshDriverCapabilities &capabilities, const QString &writeDatasetOnFileSuffix ) SIP_DEPRECATED;
93
107 const QString &name, const QString &description, const MeshDriverCapabilities &capabilities, const QString &writeDatasetOnFileSuffix, const QString &writeMeshFrameOnFileSuffix, int maxVerticesPerface
108 );
109
114
118 QString name() const;
119
123 QString description() const;
124
128 QString writeDatasetOnFileSuffix() const;
129
135 QString writeMeshFrameOnFileSuffix() const;
136
142 int maximumVerticesCountPerFace() const;
143
144 private:
145 QString mName;
146 QString mDescription;
147 MeshDriverCapabilities mCapabilities;
148 QString mWriteDatasetOnFileSuffix;
149 QString mWriteMeshFrameOnFileSuffix;
150 int mMaxVerticesPerFace = -1;
151};
152
154
155
163{
164 public:
166
167#ifndef SIP_RUN
172 : mResult( result )
173 , mCreatedLayerUri( createdLayerUri )
174 , mErrorMessage( errorMessage )
175 , mCreatedAttributeIndexMap( createdAttributeIndexMap )
176 {}
177#endif
178
182 Qgis::VectorExportResult result() const { return mResult; }
183
192 QString createdLayerUri() const { return mCreatedLayerUri; }
193
197 QString errorMessage() const { return mErrorMessage; }
198
207 QMap<int, int> createdAttributeIndexMap() const { return mCreatedAttributeIndexMap; }
208
209 private:
211 QString mCreatedLayerUri;
212 QString mErrorMessage;
213 QMap<int, int> mCreatedAttributeIndexMap;
214};
215
233class CORE_EXPORT QgsProviderMetadata : public QObject
234{
235 Q_OBJECT
236
237 public:
252
253
265
266
269 SIP_SKIP typedef std::function< QgsDataProvider *( const QString &, const QgsDataProvider::ProviderOptions &, Qgis::DataProviderReadFlags & ) > CreateDataProviderFunction;
270
277 QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
278
284 SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
285
286 ~QgsProviderMetadata() override;
287
293 QString key() const;
294
300 QString description() const;
301
307 virtual QIcon icon() const;
308
315
322
328#ifndef SIP_RUN
329 virtual QList< Qgis::LayerType > supportedLayerTypes() const;
330#else
331 // clang-format off
332 SIP_PYOBJECT supportedLayerTypes() const SIP_TYPEHINT( List[Qgis.LayerType] );
333 % MethodCode
334 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
335
336 const QList< Qgis::LayerType > cppRes = sipCpp->supportedLayerTypes();
337
338 PyObject *l = PyList_New( cppRes.size() );
339
340 if ( !l )
341 sipIsErr = 1;
342 else
343 {
344 for ( int i = 0; i < cppRes.size(); ++i )
345 {
346 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
347 sipType_Qgis_LayerType );
348
349 if ( !eobj )
350 {
351 sipIsErr = 1;
352 }
353
354 PyList_SetItem( l, i, eobj );
355 }
356
357 if ( !sipIsErr )
358 {
359 sipRes = l;
360 }
361 else
362 {
363 Py_DECREF( l );
364 }
365 }
366 % End
367// clang-format on
368#endif
369
377 Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
378
385 SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
386
391 virtual void initProvider();
392
397 virtual void cleanupProvider();
398
406 virtual QString filters( Qgis::FileFilterType type );
407
413 virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
414
430 virtual int priorityForUri( const QString &uri ) const;
431
442 virtual QList< Qgis::LayerType > validLayerTypesForUri( const QString &uri ) const;
443
460 virtual bool uriIsBlocklisted( const QString &uri ) const;
461
483 virtual QStringList sidecarFilesForUri( const QString &uri ) const;
484
499 virtual QList< QgsProviderSublayerDetails > querySublayers( const QString &uri, Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlags(), QgsFeedback *feedback = nullptr ) const;
500
509 virtual QString suggestGroupNameForUri( const QString &uri ) const;
510
520 virtual QgsDataProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() ) SIP_FACTORY;
521
528 static void setBoolParameter( QVariantMap &uri, const QString &parameter, const QVariant &value );
529
536 static bool boolParameter( const QVariantMap &uri, const QString &parameter, bool defaultValue = false );
537
551 virtual QgsEmptyLayerCreationResult createEmptyLayer(
552 const QString &uri,
553 const QgsFields &fields,
554 Qgis::WkbType wkbType = Qgis::WkbType::NoGeometry,
555 const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem(),
556 Qgis::CreateLayerActionOnExisting actionOnExisting = Qgis::CreateLayerActionOnExisting::Abort
557 );
558
559#ifndef SIP_RUN
560
571 virtual Qgis::VectorExportResult createEmptyLayer(
572 const QString &uri,
573 const QgsFields &fields,
574 Qgis::WkbType wkbType,
575 const QgsCoordinateReferenceSystem &srs,
576 bool overwrite,
577 QMap<int, int> &oldToNewAttrIdxMap,
578 QString &errorMessage,
579 const QMap<QString, QVariant> *options,
580 QString &createdLayerUri
581 );
582#endif
583
599 virtual bool createDatabase( const QString &uri, QString &errorMessage SIP_OUT );
600
601 // TODO QGIS 5.0: rename createOptions to creationOptions for consistency with GDAL
602
607 virtual QgsRasterDataProvider *createRasterDataProvider(
608 const QString &uri,
609 const QString &format,
610 int nBands,
611 Qgis::DataType type,
612 int width,
613 int height,
614 double *geoTransform,
615 const QgsCoordinateReferenceSystem &crs,
616 const QStringList &createOptions = QStringList()
617 ) SIP_FACTORY;
618
624 virtual bool createMeshData(
625 const QgsMesh &mesh, const QString &fileName, const QString &driverName, const QgsCoordinateReferenceSystem &crs, const QMap<QString, QString> &metadata = QMap<QString, QString>()
626 ) const;
627
633 virtual bool createMeshData( const QgsMesh &mesh, const QString &uri, const QgsCoordinateReferenceSystem &crs, const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
634
639 virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
640
658 virtual QVariantMap decodeUri( const QString &uri ) const;
659
668 virtual QString encodeUri( const QVariantMap &parts ) const;
669
681 virtual QString absoluteToRelativeUri( const QString &uri, const QgsReadWriteContext &context ) const;
682
694 virtual QString relativeToAbsoluteUri( const QString &uri, const QgsReadWriteContext &context ) const;
695
701 virtual QString cleanUri( const QString &uri, Qgis::UriCleaningFlags flags = Qgis::UriCleaningFlag::RemoveCredentials ) const;
702
717 virtual bool urisReferToSame( const QString &uri1, const QString &uri2, Qgis::SourceHierarchyLevel level = Qgis::SourceHierarchyLevel::Object ) const;
718
725 virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
726
732 virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names, QStringList &descriptions, QString &errCause );
733
745 virtual bool styleExists( const QString &uri, const QString &styleId, QString &errorCause SIP_OUT );
746
754 virtual QString getStyleById( const QString &uri, const QString &styleId, QString &errCause );
755
760 virtual bool deleteStyleById( const QString &uri, const QString &styleId, QString &errCause );
761
773 virtual bool saveStyle(
774 const QString &uri, const QString &qmlStyle, const QString &sldStyle, const QString &styleName, const QString &styleDescription, const QString &uiFileContent, bool useAsDefault, QString &errCause
775 );
776
781 virtual QString loadStyle( const QString &uri, QString &errCause );
782
791 virtual QString loadStoredStyle( const QString &uri, QString &styleName, QString &errCause );
792
807 virtual bool saveLayerMetadata( const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage SIP_OUT ) SIP_THROW( QgsNotSupportedException );
808
813 virtual bool createDb( const QString &dbPath, QString &errCause );
814
819 virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
820
830 virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
831
841 QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
842
852 QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
853
854#ifndef SIP_RUN
855
863 template<typename T> QMap<QString, T *> connections( bool cached = true );
864
865
866#endif
867
877 virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
878
885 virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
886
893 virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
894
902 virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) SIP_THROW( QgsProviderConnectionException );
903
904#ifdef SIP_RUN
905 // clang-format off
906 SIP_PYOBJECT __repr__();
907 % MethodCode
908 QString str = u"<QgsProviderMetadata: %1>"_s.arg( sipCpp->key() );
909 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
910 % End
911// clang-format on
912#endif
913
914 signals :
915
922 void connectionCreated( const QString &name );
923
930 void connectionDeleted( const QString &name );
931
939 void connectionChanged( const QString &name );
940
941 protected:
942#ifndef SIP_RUN
944
945 // Common functionality for connections management, to be moved into the class
946 // when all the providers are ready
947 // T_provider_conn: subclass of QgsAbstractProviderConnection,
948 // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
949 // TODO QGIS 5: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
950 template<class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
951 {
952 if ( !cached || mProviderConnections.isEmpty() )
953 {
954 qDeleteAll( mProviderConnections );
955 mProviderConnections.clear();
956 const auto connNames { T_conn::connectionList() };
957 for ( const auto &cname : connNames )
958 {
959 mProviderConnections.insert( cname, new T_provider_conn( cname ) );
960 }
961 }
962 return mProviderConnections;
963 }
964
965 template<class T_provider_conn> void deleteConnectionProtected( const QString &name )
966 {
967 T_provider_conn conn( name );
968 conn.remove( name );
969 mProviderConnections.clear();
970 emit connectionDeleted( name );
971 }
972 virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
974 QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
975
977
978#endif
979
980 private:
982 QString mKey;
983
985 QString mDescription;
986
989 QString mLibrary;
990
991 CreateDataProviderFunction mCreateFunction = nullptr;
992};
993
996
997#endif //QGSPROVIDERMETADATA_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:62
VectorExportResult
Vector layer export result codes.
Definition qgis.h:1133
@ UserCanceled
User canceled the export.
Definition qgis.h:1145
DataType
Raster data types.
Definition qgis.h:393
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:294
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.
QgsEmptyLayerCreationResult(Qgis::VectorExportResult result, const QString &createdLayerUri, const QString &errorMessage, const QMap< int, int > &createdAttributeIndexMap)
Constructor for QgsEmptyLayerCreationResult.
Qgis::VectorExportResult result() const
Returns the result code of the layer creation.
QString errorMessage() const
Returns any user-friendly error messages obtained if the creation fails.
QMap< int, int > createdAttributeIndexMap() const
Returns a map of the original requested field index to the actual created field index.
QString createdLayerUri() const
Returns the created layer URI.
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.
std::function< QgsDataProvider *(const QString &, const QgsDataProvider::ProviderOptions &, Qgis::DataProviderReadFlags &) > CreateDataProviderFunction
Typedef for data provider creation function.
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...
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:237
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:272
#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.