QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
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"
37 #include "qgsfields.h"
38 #include "qgsexception.h"
39 
40 class QgsDataItem;
42 class QgsTransaction;
43 
45 
52 class CORE_EXPORT QgsMeshDriverMetadata
53 {
54  Q_GADGET
55 
56  public:
57 
62  {
63  CanWriteFaceDatasets = 1 << 0,
64  CanWriteVertexDatasets = 1 << 1,
65  };
66 
67  Q_ENUM( MeshDriverCapability )
68  Q_DECLARE_FLAGS( MeshDriverCapabilities, MeshDriverCapability )
69  Q_FLAG( MeshDriverCapabilities )
70 
71 
73 
81  QgsMeshDriverMetadata( const QString &name,
82  const QString &description,
83  const MeshDriverCapabilities &capabilities );
84 
88  MeshDriverCapabilities capabilities() const;
89 
93  QString name() const;
94 
98  QString description() const;
99 
100  private:
101  QString mName;
102  QString mDescription;
103  MeshDriverCapabilities mCapabilities;
104 };
105 
106 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsMeshDriverMetadata::MeshDriverCapabilities )
107 
108 
125 class CORE_EXPORT QgsProviderMetadata
126 {
127  public:
128 
133  SIP_SKIP typedef std::function < QgsDataProvider*( const QString &, const QgsDataProvider::ProviderOptions & ) > CreateDataProviderFunction;
134 
141  QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
142 
149  SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
150 
152  virtual ~QgsProviderMetadata();
153 
159  QString key() const;
160 
166  QString description() const;
167 
175  Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
176 
184  SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
185 
190  virtual void initProvider();
191 
196  virtual void cleanupProvider();
197 
202  enum class FilterType
203  {
204  FilterVector = 1,
205  FilterRaster,
206  FilterMesh,
207  FilterMeshDataset
208  };
209 
217  virtual QString filters( FilterType type );
218 
224  virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
225 
230  virtual QgsDataProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) SIP_FACTORY;
231 
232 #ifndef SIP_RUN
233 
239  virtual QgsVectorLayerExporter::ExportError createEmptyLayer( const QString &uri,
240  const QgsFields &fields,
241  QgsWkbTypes::Type wkbType,
242  const QgsCoordinateReferenceSystem &srs,
243  bool overwrite,
244  QMap<int, int> &oldToNewAttrIdxMap,
245  QString &errorMessage,
246  const QMap<QString, QVariant> *options );
247 #endif
248 
253  virtual QgsRasterDataProvider *createRasterDataProvider(
254  const QString &uri,
255  const QString &format,
256  int nBands,
257  Qgis::DataType type,
258  int width,
259  int height,
260  double *geoTransform,
262  const QStringList &createOptions = QStringList() ) SIP_FACTORY;
263 
268  virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
269 
277  virtual QVariantMap decodeUri( const QString &uri );
278 
287  virtual QString encodeUri( const QVariantMap &parts );
288 
295  virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
296 
302  virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names,
303  QStringList &descriptions, QString &errCause );
304 
309  virtual QString getStyleById( const QString &uri, QString styleId, QString &errCause );
310 
315  virtual bool deleteStyleById( const QString &uri, QString styleId, QString &errCause );
316 
321  virtual bool saveStyle( const QString &uri, const QString &qmlStyle, const QString &sldStyle,
322  const QString &styleName, const QString &styleDescription,
323  const QString &uiFileContent, bool useAsDefault, QString &errCause );
324 
329  virtual QString loadStyle( const QString &uri, QString &errCause );
330 
335  virtual bool createDb( const QString &dbPath, QString &errCause );
336 
341  virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
342 
352  virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
353 
363  QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
364 
374  QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
375 
376 #ifndef SIP_RUN
377 
385  template <typename T> QMap<QString, T *>connections( bool cached = true );
386 
387 
388 #endif
389 
398  virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_FACTORY;
399 
405  virtual QgsAbstractProviderConnection *createConnection( const QString &name );
406 
413  virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
414 
421  virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name );
422 
423  protected:
424 
425 #ifndef SIP_RUN
426 
428  // Common functionality for connections management, to be moved into the class
429  // when all the providers are ready
430  // T_provider_conn: subclass of QgsAbstractProviderConnection,
431  // T_conn: provider connection class (such as QgsOgrDbConnection or QgsPostgresConn)
432  // TODO QGIS4: remove all old provider conn classes and move functionality into QgsAbstractProviderConnection subclasses
433  template <class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
434  {
435  if ( ! cached || mProviderConnections.isEmpty() )
436  {
437  qDeleteAll( mProviderConnections );
438  mProviderConnections.clear();
439  const auto connNames { T_conn::connectionList() };
440  for ( const auto &cname : connNames )
441  {
442  mProviderConnections.insert( cname, new T_provider_conn( cname ) );
443  }
444  }
445  return mProviderConnections;
446  }
447 
448  template <class T_provider_conn> void deleteConnectionProtected( const QString &name )
449  {
450  T_provider_conn conn( name );
451  conn.remove( name );
452  mProviderConnections.clear();
453  }
454  virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
456  QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
457 
459 #endif
460 
461  private:
462 
464  QString mKey;
465 
467  QString mDescription;
468 
471  QString mLibrary;
472 
473  CreateDataProviderFunction mCreateFunction = nullptr;
474 
475 };
476 
477 #endif //QGSPROVIDERMETADATA_H
DataType
Raster data types.
Definition: qgis.h:101
Container of fields for a vector layer.
Definition: qgsfields.h:42
Abstract base class for spatial data provider implementations.
const QgsCoordinateReferenceSystem & crs
The QgsAbstractProviderConnection provides an interface for data provider connections.
Holds metadata about mesh driver.
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:68
#define SIP_SKIP
Definition: qgis_sip.h:126
std::function< QgsDataProvider *(const QString &, const QgsDataProvider::ProviderOptions &) > CreateDataProviderFunction
Typedef for data provider creation function.
#define SIP_FACTORY
Definition: qgis_sip.h:76
MeshDriverCapability
Flags for the capabilities of the driver.
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
Base class for all items in the model.
Definition: qgsdataitem.h:49
Setting options for creating vector data providers.
Holds data provider key, description, and associated shared library file or function pointer informat...
This class allows including a set of layers in a database-side transaction, provided the layer data p...
This class represents a coordinate reference system (CRS).
#define SIP_THROW(name)
Definition: qgis_sip.h:184
FilterType
Type of file filters.
This is the interface for those who want to add custom data items to the browser tree.
Custom exception class for provider connection related exceptions.
Definition: qgsexception.h:100
Base class for raster data providers.