QGIS API Documentation  3.18.1-Zürich (202f1bf7e5)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 <QString>
24 #include <QVariantMap>
25 #include <QMap>
26 #include <QList>
27 #include <memory>
28 #include <QPair>
29 
30 #include "qgis_sip.h"
31 #include "qgsdataprovider.h"
32 #include "qgis_core.h"
33 #include <functional>
34 #include "qgsvectorlayerexporter.h"
36 #include "qgsfields.h"
37 #include "qgsexception.h"
38 
39 class QgsDataItem;
41 class QgsTransaction;
42 
46 
47 struct QgsMesh;
48 
55 class CORE_EXPORT QgsMeshDriverMetadata
56 {
57  Q_GADGET
58 
59  public:
60 
65  {
66  CanWriteFaceDatasets = 1 << 0,
67  CanWriteVertexDatasets = 1 << 1,
68  CanWriteEdgeDatasets = 1 << 2,
69  CanWriteMeshData = 1 << 3,
70  };
71 
72  Q_ENUM( MeshDriverCapability )
73  Q_DECLARE_FLAGS( MeshDriverCapabilities, MeshDriverCapability )
74  Q_FLAG( MeshDriverCapabilities )
75 
76 
78 
87  QgsMeshDriverMetadata( const QString &name,
88  const QString &description,
89  const MeshDriverCapabilities &capabilities,
90  const QString &writeDatasetOnFileSuffix );
91 
95  MeshDriverCapabilities capabilities() const;
96 
100  QString name() const;
101 
105  QString description() const;
106 
110  QString writeDatasetOnFileSuffix() const;
111 
112  private:
113  QString mName;
114  QString mDescription;
115  MeshDriverCapabilities mCapabilities;
116  QString mWriteDatasetOnFileSuffix;
117 };
118 
119 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMeshDriverMetadata::MeshDriverCapabilities )
120 
138 class CORE_EXPORT QgsProviderMetadata : public QObject
139 {
140  Q_OBJECT
141 
142  public:
143 
150  {
151  PriorityForUri = 1 << 0,
152  LayerTypesForUri = 1 << 1,
153  };
154  Q_DECLARE_FLAGS( ProviderMetadataCapabilities, ProviderMetadataCapability )
155 
156 
162  {
163  FileBasedUris = 1 << 0,
164  };
165  Q_DECLARE_FLAGS( ProviderCapabilities, ProviderCapability )
166 
167 
171  SIP_SKIP typedef std::function < QgsDataProvider*( const QString &, const QgsDataProvider::ProviderOptions &, QgsDataProvider::ReadFlags & ) > CreateDataProviderFunction;
172 
179  QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
180 
187  SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
188 
190  virtual ~QgsProviderMetadata();
191 
197  QString key() const;
198 
204  QString description() const;
205 
211  virtual QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const;
212 
218  virtual QgsProviderMetadata::ProviderCapabilities providerCapabilities() const;
219 
227  Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
228 
236  SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
237 
242  virtual void initProvider();
243 
248  virtual void cleanupProvider();
249 
254  enum class FilterType
255  {
256  FilterVector = 1,
257  FilterRaster,
258  FilterMesh,
259  FilterMeshDataset,
260  FilterPointCloud,
261  };
262 
270  virtual QString filters( FilterType type );
271 
277  virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
278 
294  virtual int priorityForUri( const QString &uri ) const;
295 
306  virtual QList< QgsMapLayerType > validLayerTypesForUri( const QString &uri ) const;
307 
324  virtual bool uriIsBlocklisted( const QString &uri ) const;
325 
335  virtual QgsDataProvider *createProvider( const QString &uri,
336  const QgsDataProvider::ProviderOptions &options,
337  QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) SIP_FACTORY;
338 
345  static void setBoolParameter( QVariantMap &uri, const QString &parameter, const QVariant &value );
346 
353  static bool boolParameter( const QVariantMap &uri, const QString &parameter, bool defaultValue = false );
354 
355 
356 #ifndef SIP_RUN
357 
363  virtual QgsVectorLayerExporter::ExportError createEmptyLayer( const QString &uri,
364  const QgsFields &fields,
365  QgsWkbTypes::Type wkbType,
366  const QgsCoordinateReferenceSystem &srs,
367  bool overwrite,
368  QMap<int, int> &oldToNewAttrIdxMap,
369  QString &errorMessage,
370  const QMap<QString, QVariant> *options );
371 #endif
372 
377  virtual QgsRasterDataProvider *createRasterDataProvider(
378  const QString &uri,
379  const QString &format,
380  int nBands,
381  Qgis::DataType type,
382  int width,
383  int height,
384  double *geoTransform,
386  const QStringList &createOptions = QStringList() ) SIP_FACTORY;
387 
392  virtual bool createMeshData(
393  const QgsMesh &mesh,
394  const QString uri,
395  const QString &driverName,
396  const QgsCoordinateReferenceSystem &crs ) const;
397 
402  virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
403 
421  virtual QVariantMap decodeUri( const QString &uri ) const;
422 
431  virtual QString encodeUri( const QVariantMap &parts ) const;
432 
439  virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
440 
446  virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names,
447  QStringList &descriptions, QString &errCause );
448 
453  virtual QString getStyleById( const QString &uri, QString styleId, QString &errCause );
454 
459  virtual bool deleteStyleById( const QString &uri, QString styleId, QString &errCause );
460 
465  virtual bool saveStyle( const QString &uri, const QString &qmlStyle, const QString &sldStyle,
466  const QString &styleName, const QString &styleDescription,
467  const QString &uiFileContent, bool useAsDefault, QString &errCause );
468 
473  virtual QString loadStyle( const QString &uri, QString &errCause );
474 
479  virtual bool createDb( const QString &dbPath, QString &errCause );
480 
485  virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
486 
496  virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
497 
507  QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
508 
518  QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
519 
520 #ifndef SIP_RUN
521 
529  template <typename T> QMap<QString, T *>connections( bool cached = true );
530 
531 
532 #endif
533 
543  virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
544 
551  virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
552 
559  virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
560 
568  virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) SIP_THROW( QgsProviderConnectionException );
569 
570 #ifdef SIP_RUN
571  SIP_PYOBJECT __repr__();
572  % MethodCode
573  QString str = QStringLiteral( "<QgsProviderMetadata: %1>" ).arg( sipCpp->key() );
574  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
575  % End
576 #endif
577 
578  signals:
579 
586  void connectionCreated( const QString &name );
587 
594  void connectionDeleted( const QString &name );
595 
603  void connectionChanged( const QString &name );
604 
605  protected:
606 
607 #ifndef SIP_RUN
609 
610  // Common functionality for connections management, to be moved into the class
611  // when all the providers are ready
612  // T_provider_conn: subclass of QgsAbstractProviderConnection,
613  // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
614  // TODO QGIS4: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
615  template <class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
616  {
617  if ( ! cached || mProviderConnections.isEmpty() )
618  {
619  qDeleteAll( mProviderConnections );
620  mProviderConnections.clear();
621  const auto connNames { T_conn::connectionList() };
622  for ( const auto &cname : connNames )
623  {
624  mProviderConnections.insert( cname, new T_provider_conn( cname ) );
625  }
626  }
627  return mProviderConnections;
628  }
629 
630  template <class T_provider_conn> void deleteConnectionProtected( const QString &name )
631  {
632  T_provider_conn conn( name );
633  conn.remove( name );
634  mProviderConnections.clear();
635  emit connectionDeleted( name );
636  }
637  virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
639  QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
640 
642 
643 #endif
644 
645  private:
646 
648  QString mKey;
649 
651  QString mDescription;
652 
655  QString mLibrary;
656 
657  CreateDataProviderFunction mCreateFunction = nullptr;
658 
659 };
660 
661 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsProviderMetadata::ProviderMetadataCapabilities )
662 
663 
664 #endif //QGSPROVIDERMETADATA_H
DataType
Raster data types.
Definition: qgis.h:102
The QgsAbstractDatabaseProviderConnection class provides common functionality for DB based connection...
The QgsAbstractProviderConnection provides an interface for data provider connections.
This class represents a coordinate reference system (CRS).
This is the interface for those who want to add custom data items to the browser tree.
Base class for all items in the model.
Definition: qgsdataitem.h:52
Abstract base class for spatial data provider implementations.
Container of fields for a vector layer.
Definition: qgsfields.h:45
Base class for providing data for QgsMeshLayer.
Holds metadata about mesh driver.
MeshDriverCapability
Flags for the capabilities of the driver.
Custom exception class for provider connection related exceptions.
Definition: qgsexception.h:101
Holds data provider key, description, and associated shared library file or function pointer informat...
FilterType
Type of file filters.
ProviderCapability
Provider capabilities.
std::function< QgsDataProvider *(const QString &, const QgsDataProvider::ProviderOptions &, QgsDataProvider::ReadFlags &) > CreateDataProviderFunction
Typedef for data provider creation function.
void connectionDeleted(const QString &name)
Emitted when the connection with the specified name was deleted.
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.
ProviderMetadataCapability
Indicates capabilities of the provider metadata implementation.
Base class for raster data providers.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:70
#define SIP_THROW(name)
Definition: qgis_sip.h:189
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_FACTORY
Definition: qgis_sip.h:76
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.
Mesh - vertices, edges and faces.