QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
qgsprovidermetadata.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsprovidermetadata.cpp - 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 #include "qgsprovidermetadata.h"
20 #include "qgsdataprovider.h"
21 #include "qgsmaplayer.h"
22 #include "qgsexception.h"
23 
25  QString const &description,
26  QString const &library )
27  : mKey( key )
28  , mDescription( description )
29  , mLibrary( library )
30 {}
31 
32 QgsProviderMetadata::QgsProviderMetadata( const QString &key, const QString &description, const CreateDataProviderFunction &createFunc )
33  : mKey( key )
34  , mDescription( description )
35  , mCreateFunction( createFunc )
36 {}
37 
39 {
40  qDeleteAll( mProviderConnections );
41 }
42 
43 QString QgsProviderMetadata::key() const
44 {
45  return mKey;
46 }
47 
49 {
50  return mDescription;
51 }
52 
54 {
55  return mLibrary;
56 }
57 
59 {
60  return mCreateFunction;
61 }
62 
64 {
65 
66 }
67 
69 {
70 
71 }
72 
74 {
75  return QString();
76 }
77 
78 QList<QgsMeshDriverMetadata> QgsProviderMetadata::meshDriversMetadata()
79 {
80  return QList<QgsMeshDriverMetadata>();
81 }
82 
84 {
85  if ( mCreateFunction )
86  {
87  return mCreateFunction( uri, options );
88  }
89  return nullptr;
90 }
91 
92 QVariantMap QgsProviderMetadata::decodeUri( const QString & )
93 {
94  return QVariantMap();
95 }
96 
97 QString QgsProviderMetadata::encodeUri( const QVariantMap & )
98 {
99  return QString();
100 }
101 
103  const QString &, const QgsFields &,
105  bool, QMap<int, int> &,
106  QString &errorMessage, const QMap<QString, QVariant> * )
107 {
108  errorMessage = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "createEmptyLayer" ) );
109  return QgsVectorLayerExporter::ExportError::ErrProviderUnsupportedFeature;
110 }
111 
113  const QString &, const QString &,
114  int, Qgis::DataType, int,
115  int, double *,
117  const QStringList & )
118 {
119  return nullptr;
120 }
121 
122 QList<QPair<QString, QString> > QgsProviderMetadata::pyramidResamplingMethods()
123 {
124  return QList<QPair<QString, QString> >();
125 }
126 
127 QList<QgsDataItemProvider *> QgsProviderMetadata::dataItemProviders() const
128 {
129  return QList<QgsDataItemProvider *>();
130 }
131 
132 int QgsProviderMetadata::listStyles( const QString &, QStringList &, QStringList &,
133  QStringList &, QString &errCause )
134 {
135  errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "listStyles" ) );
136  return -1;
137 }
138 
139 QString QgsProviderMetadata::getStyleById( const QString &, QString, QString &errCause )
140 {
141  errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "getStyleById" ) );
142  return QString();
143 }
144 
145 bool QgsProviderMetadata::deleteStyleById( const QString &, QString, QString &errCause )
146 {
147  errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "deleteStyleById" ) );
148  return false;
149 }
150 
151 bool QgsProviderMetadata::saveStyle( const QString &, const QString &, const QString &, const QString &,
152  const QString &, const QString &, bool, QString &errCause )
153 {
154  errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "saveStyle" ) );
155  return false;
156 }
157 
158 QString QgsProviderMetadata::loadStyle( const QString &, QString &errCause )
159 {
160  errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "loadStyle" ) );
161  return QString();
162 }
163 
164 bool QgsProviderMetadata::createDb( const QString &, QString &errCause )
165 {
166  errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "createDb" ) );
167  return false;
168 }
169 
171 {
172  return nullptr;
173 }
174 
175 QMap<QString, QgsAbstractProviderConnection *> QgsProviderMetadata::connections( bool cached )
176 {
177  Q_UNUSED( cached );
178  throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "connections" ) ) );
179 }
180 
181 QMap<QString, QgsAbstractDatabaseProviderConnection *> QgsProviderMetadata::dbConnections( bool cached )
182 {
183  return connections<QgsAbstractDatabaseProviderConnection>( cached ) ;
184 }
185 
187 {
188  const QMap<QString, QgsAbstractProviderConnection *> constConns { connections( cached ) };
189  const QStringList constKeys { constConns.keys( ) };
190  for ( const QString &key : constKeys )
191  {
192  if ( key == name )
193  {
194  return constConns.value( key );
195  }
196  }
197  return nullptr;
198 }
199 
201 {
202  Q_UNUSED( name );
203  throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "connection" ) ) );
204 }
205 
206 
207 QgsAbstractProviderConnection *QgsProviderMetadata::createConnection( const QString &uri, const QVariantMap &configuration )
208 {
209  Q_UNUSED( configuration );
210  Q_UNUSED( uri );
211  throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "connection" ) ) );
212 }
213 
214 void QgsProviderMetadata::deleteConnection( const QString &name )
215 {
216  Q_UNUSED( name );
217  throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "deleteConnection" ) ) );
218 }
219 
220 void QgsProviderMetadata::saveConnection( const QgsAbstractProviderConnection *connection, const QString &name )
221 {
222  Q_UNUSED( connection )
223  Q_UNUSED( name )
224  throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "saveConnection" ) ) );
225 }
226 
228 void QgsProviderMetadata::saveConnectionProtected( const QgsAbstractProviderConnection *conn, const QString &name )
229 {
230  conn->store( name );
231  mProviderConnections.clear();
232 }
234 
235 template<typename T>
236 QMap<QString, T *> QgsProviderMetadata::connections( bool cached )
237 {
238  QMap<QString, T *> result;
239  const auto constConns { connections( cached ) };
240  const QStringList constConnKeys { constConns.keys() };
241  for ( const auto &c : constConnKeys )
242  {
243  T *casted { static_cast<T *>( constConns.value( c ) ) };
244  if ( casted )
245  {
246  result.insert( c, casted );
247  }
248  }
249  return result;
250 }
251 
253 
254 QgsMeshDriverMetadata::QgsMeshDriverMetadata( const QString &name, const QString &description, const MeshDriverCapabilities &capabilities )
255  : mName( name ), mDescription( description ), mCapabilities( capabilities )
256 {
257 }
258 
259 QgsMeshDriverMetadata::MeshDriverCapabilities QgsMeshDriverMetadata::capabilities() const
260 {
261  return mCapabilities;
262 }
263 
265 {
266  return mName;
267 }
268 
270 {
271  return mDescription;
272 }
QString name() const
Returns the name (key) for this driver.
virtual QgsTransaction * createTransaction(const QString &connString)
Returns new instance of transaction.
QString description() const
This returns descriptive text for the provider.
MeshDriverCapabilities capabilities() const
Returns the capabilities for this driver.
virtual QString getStyleById(const QString &uri, QString styleId, QString &errCause)
Gets a layer style defined by uri.
QString key() const
This returns the unique key associated with the provider.
virtual void store(const QString &name) const =0
Stores the connection in the settings.
virtual QgsRasterDataProvider * createRasterDataProvider(const QString &uri, const QString &format, int nBands, Qgis::DataType type, int width, int height, double *geoTransform, const QgsCoordinateReferenceSystem &crs, const QStringList &createOptions=QStringList())
Creates a new instance of the raster data provider.
virtual QMap< QString, QgsAbstractProviderConnection * > connections(bool cached=true) SIP_THROW(QgsProviderConnectionException)
Returns a dictionary of stored provider connections, the dictionary key is the connection identifier...
Q_DECL_DEPRECATED QString library() const
This returns the library file name.
virtual QgsDataProvider * createProvider(const QString &uri, const QgsDataProvider::ProviderOptions &options)
Class factory to return a pointer to a newly created QgsDataProvider object.
DataType
Raster data types.
Definition: qgis.h:101
virtual bool createDb(const QString &dbPath, QString &errCause)
Creates database by the provider on the path.
Container of fields for a vector layer.
Definition: qgsfields.h:42
virtual QgsAbstractProviderConnection * createConnection(const QString &uri, const QVariantMap &configuration)
Creates a new connection from uri and configuration, the newly created connection is not automaticall...
Abstract base class for spatial data provider implementations.
virtual ~QgsProviderMetadata()
dtor
The QgsAbstractProviderConnection provides an interface for data provider connections.
virtual void deleteConnection(const QString &name) SIP_THROW(QgsProviderConnectionException)
Removes the connection with the given name from the settings.
virtual QString filters(FilterType type)
Builds the list of file filter strings (supported formats)
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:68
QMap< QString, QgsAbstractDatabaseProviderConnection * > dbConnections(bool cached=true) SIP_THROW(QgsProviderConnectionException)
Returns a dictionary of database provider connections, the dictionary key is the connection identifie...
virtual QString encodeUri(const QVariantMap &parts)
Reassembles a provider data source URI from its component paths (e.g.
virtual QVariantMap decodeUri(const QString &uri)
Breaks a provider data source URI into its component paths (e.g.
virtual QList< QPair< QString, QString > > pyramidResamplingMethods()
Returns pyramid resampling methods available for provider.
virtual QString loadStyle(const QString &uri, QString &errCause)
Loads a layer style defined by uri.
virtual void initProvider()
Initialize the provider.
Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const
Returns a pointer to the direct provider creation function, if supported by the provider.
std::function< QgsDataProvider *(const QString &, const QgsDataProvider::ProviderOptions &) > CreateDataProviderFunction
Typedef for data provider creation function.
virtual void saveConnection(const QgsAbstractProviderConnection *connection, const QString &name)
Stores the connection in the settings.
virtual bool saveStyle(const QString &uri, const QString &qmlStyle, const QString &sldStyle, const QString &styleName, const QString &styleDescription, const QString &uiFileContent, bool useAsDefault, QString &errCause)
Saves a layer style to provider.
QgsAbstractProviderConnection * findConnection(const QString &name, bool cached=true) SIP_THROW(QgsProviderConnectionException)
Searches and returns a (possibly NULL) connection from the stored provider connections.
QgsProviderMetadata(const QString &key, const QString &description, const QString &library=QString())
Constructor for provider metadata.
Setting options for creating vector data providers.
virtual QgsVectorLayerExporter::ExportError createEmptyLayer(const QString &uri, const QgsFields &fields, QgsWkbTypes::Type wkbType, const QgsCoordinateReferenceSystem &srs, bool overwrite, QMap< int, int > &oldToNewAttrIdxMap, QString &errorMessage, const QMap< QString, QVariant > *options)
Creates new empty vector layer.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
virtual QList< QgsDataItemProvider *> dataItemProviders() const
Returns data item providers.
This class represents a coordinate reference system (CRS).
virtual void cleanupProvider()
Cleanup the provider.
virtual int listStyles(const QString &uri, QStringList &ids, QStringList &names, QStringList &descriptions, QString &errCause)
Lists stored layer styles in the provider defined by uri.
FilterType
Type of file filters.
virtual bool deleteStyleById(const QString &uri, QString styleId, QString &errCause)
Deletes a layer style defined by styleId.
virtual QList< QgsMeshDriverMetadata > meshDriversMetadata()
Builds the list of available mesh drivers metadata.
Custom exception class for provider connection related exceptions.
Definition: qgsexception.h:100
QString description() const
Returns the description for this driver.
Base class for raster data providers.
QgsMeshDriverMetadata()
Constructs default metadata without any capabilities.