QGIS API Documentation 4.1.0-Master (60fea48833c)
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
172class CORE_EXPORT QgsProviderMetadata : public QObject
173{
174 Q_OBJECT
175
176 public:
191
192
204
205
208 SIP_SKIP typedef std::function< QgsDataProvider *( const QString &, const QgsDataProvider::ProviderOptions &, Qgis::DataProviderReadFlags & ) > CreateDataProviderFunction;
209
216 QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
217
223 SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
224
225 ~QgsProviderMetadata() override;
226
232 QString key() const;
233
239 QString description() const;
240
246 virtual QIcon icon() const;
247
254
261
267#ifndef SIP_RUN
268 virtual QList< Qgis::LayerType > supportedLayerTypes() const;
269#else
270 // clang-format off
271 SIP_PYOBJECT supportedLayerTypes() const SIP_TYPEHINT( List[Qgis.LayerType] );
272 % MethodCode
273 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
274
275 const QList< Qgis::LayerType > cppRes = sipCpp->supportedLayerTypes();
276
277 PyObject *l = PyList_New( cppRes.size() );
278
279 if ( !l )
280 sipIsErr = 1;
281 else
282 {
283 for ( int i = 0; i < cppRes.size(); ++i )
284 {
285 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
286 sipType_Qgis_LayerType );
287
288 if ( !eobj )
289 {
290 sipIsErr = 1;
291 }
292
293 PyList_SetItem( l, i, eobj );
294 }
295
296 if ( !sipIsErr )
297 {
298 sipRes = l;
299 }
300 else
301 {
302 Py_DECREF( l );
303 }
304 }
305 % End
306// clang-format on
307#endif
308
316 Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
317
324 SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
325
330 virtual void initProvider();
331
336 virtual void cleanupProvider();
337
345 virtual QString filters( Qgis::FileFilterType type );
346
352 virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
353
369 virtual int priorityForUri( const QString &uri ) const;
370
381 virtual QList< Qgis::LayerType > validLayerTypesForUri( const QString &uri ) const;
382
399 virtual bool uriIsBlocklisted( const QString &uri ) const;
400
422 virtual QStringList sidecarFilesForUri( const QString &uri ) const;
423
438 virtual QList< QgsProviderSublayerDetails > querySublayers( const QString &uri, Qgis::SublayerQueryFlags flags = Qgis::SublayerQueryFlags(), QgsFeedback *feedback = nullptr ) const;
439
448 virtual QString suggestGroupNameForUri( const QString &uri ) const;
449
459 virtual QgsDataProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags = Qgis::DataProviderReadFlags() ) SIP_FACTORY;
460
467 static void setBoolParameter( QVariantMap &uri, const QString &parameter, const QVariant &value );
468
475 static bool boolParameter( const QVariantMap &uri, const QString &parameter, bool defaultValue = false );
476
477
478#ifndef SIP_RUN
479
490 virtual Qgis::VectorExportResult createEmptyLayer(
491 const QString &uri,
492 const QgsFields &fields,
493 Qgis::WkbType wkbType,
494 const QgsCoordinateReferenceSystem &srs,
495 bool overwrite,
496 QMap<int, int> &oldToNewAttrIdxMap,
497 QString &errorMessage,
498 const QMap<QString, QVariant> *options,
499 QString &createdLayerUri
500 );
501#endif
502
518 virtual bool createDatabase( const QString &uri, QString &errorMessage SIP_OUT );
519
520 // TODO QGIS 5.0: rename createOptions to creationOptions for consistency with GDAL
521
526 virtual QgsRasterDataProvider *createRasterDataProvider(
527 const QString &uri,
528 const QString &format,
529 int nBands,
530 Qgis::DataType type,
531 int width,
532 int height,
533 double *geoTransform,
534 const QgsCoordinateReferenceSystem &crs,
535 const QStringList &createOptions = QStringList()
536 ) SIP_FACTORY;
537
543 virtual bool createMeshData(
544 const QgsMesh &mesh, const QString &fileName, const QString &driverName, const QgsCoordinateReferenceSystem &crs, const QMap<QString, QString> &metadata = QMap<QString, QString>()
545 ) const;
546
552 virtual bool createMeshData( const QgsMesh &mesh, const QString &uri, const QgsCoordinateReferenceSystem &crs, const QMap<QString, QString> &metadata = QMap<QString, QString>() ) const;
553
558 virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
559
577 virtual QVariantMap decodeUri( const QString &uri ) const;
578
587 virtual QString encodeUri( const QVariantMap &parts ) const;
588
600 virtual QString absoluteToRelativeUri( const QString &uri, const QgsReadWriteContext &context ) const;
601
613 virtual QString relativeToAbsoluteUri( const QString &uri, const QgsReadWriteContext &context ) const;
614
620 virtual QString cleanUri( const QString &uri, Qgis::UriCleaningFlags flags = Qgis::UriCleaningFlag::RemoveCredentials ) const;
621
636 virtual bool urisReferToSame( const QString &uri1, const QString &uri2, Qgis::SourceHierarchyLevel level = Qgis::SourceHierarchyLevel::Object ) const;
637
644 virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
645
651 virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names, QStringList &descriptions, QString &errCause );
652
664 virtual bool styleExists( const QString &uri, const QString &styleId, QString &errorCause SIP_OUT );
665
673 virtual QString getStyleById( const QString &uri, const QString &styleId, QString &errCause );
674
679 virtual bool deleteStyleById( const QString &uri, const QString &styleId, QString &errCause );
680
692 virtual bool saveStyle(
693 const QString &uri, const QString &qmlStyle, const QString &sldStyle, const QString &styleName, const QString &styleDescription, const QString &uiFileContent, bool useAsDefault, QString &errCause
694 );
695
700 virtual QString loadStyle( const QString &uri, QString &errCause );
701
710 virtual QString loadStoredStyle( const QString &uri, QString &styleName, QString &errCause );
711
726 virtual bool saveLayerMetadata( const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage SIP_OUT ) SIP_THROW( QgsNotSupportedException );
727
732 virtual bool createDb( const QString &dbPath, QString &errCause );
733
738 virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
739
749 virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
750
760 QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
761
771 QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
772
773#ifndef SIP_RUN
774
782 template<typename T> QMap<QString, T *> connections( bool cached = true );
783
784
785#endif
786
796 virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
797
804 virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
805
812 virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
813
821 virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) SIP_THROW( QgsProviderConnectionException );
822
823#ifdef SIP_RUN
824 // clang-format off
825 SIP_PYOBJECT __repr__();
826 % MethodCode
827 QString str = u"<QgsProviderMetadata: %1>"_s.arg( sipCpp->key() );
828 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
829 % End
830// clang-format on
831#endif
832
833 signals :
834
841 void connectionCreated( const QString &name );
842
849 void connectionDeleted( const QString &name );
850
858 void connectionChanged( const QString &name );
859
860 protected:
861#ifndef SIP_RUN
863
864 // Common functionality for connections management, to be moved into the class
865 // when all the providers are ready
866 // T_provider_conn: subclass of QgsAbstractProviderConnection,
867 // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
868 // TODO QGIS 5: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
869 template<class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
870 {
871 if ( !cached || mProviderConnections.isEmpty() )
872 {
873 qDeleteAll( mProviderConnections );
874 mProviderConnections.clear();
875 const auto connNames { T_conn::connectionList() };
876 for ( const auto &cname : connNames )
877 {
878 mProviderConnections.insert( cname, new T_provider_conn( cname ) );
879 }
880 }
881 return mProviderConnections;
882 }
883
884 template<class T_provider_conn> void deleteConnectionProtected( const QString &name )
885 {
886 T_provider_conn conn( name );
887 conn.remove( name );
888 mProviderConnections.clear();
889 emit connectionDeleted( name );
890 }
891 virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
893 QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
894
896
897#endif
898
899 private:
901 QString mKey;
902
904 QString mDescription;
905
908 QString mLibrary;
909
910 CreateDataProviderFunction mCreateFunction = nullptr;
911};
912
915
916#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:1078
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.
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: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.