QGIS API Documentation 3.27.0-Master (1c05421486)
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"
25
27 QString const &description,
28 QString const &library )
29 : mKey( key )
30 , mDescription( description )
31 , mLibrary( library )
32{}
33
34QgsProviderMetadata::QgsProviderMetadata( const QString &key, const QString &description, const CreateDataProviderFunction &createFunc )
35 : mKey( key )
36 , mDescription( description )
37 , mCreateFunction( createFunc )
38{}
39
41{
42 qDeleteAll( mProviderConnections );
43}
44
46{
47 return mKey;
48}
49
51{
52 return mDescription;
53}
54
56{
57 return QIcon();
58}
59
60QgsProviderMetadata::ProviderMetadataCapabilities QgsProviderMetadata::capabilities() const
61{
62 return QgsProviderMetadata::ProviderMetadataCapabilities();
63}
64
65QgsProviderMetadata::ProviderCapabilities QgsProviderMetadata::providerCapabilities() const
66{
67 return QgsProviderMetadata::ProviderCapabilities();
68}
69
70QList<QgsMapLayerType> QgsProviderMetadata::supportedLayerTypes() const
71{
72 return {};
73}
74
76{
77 return mLibrary;
78}
79
81{
82 return mCreateFunction;
83}
84
86{
87
88}
89
91{
92
93}
94
96{
97 return QString();
98}
99
100QList<QgsMeshDriverMetadata> QgsProviderMetadata::meshDriversMetadata()
101{
102 return QList<QgsMeshDriverMetadata>();
103}
104
105int QgsProviderMetadata::priorityForUri( const QString & ) const
106{
107 return 0;
108}
109
110QList<QgsMapLayerType> QgsProviderMetadata::validLayerTypesForUri( const QString & ) const
111{
112 return QList<QgsMapLayerType>();
113}
114
115bool QgsProviderMetadata::uriIsBlocklisted( const QString & ) const
116{
117 return false;
118}
119
120QStringList QgsProviderMetadata::sidecarFilesForUri( const QString & ) const
121{
122 return QStringList();
123}
124
125QList<QgsProviderSublayerDetails> QgsProviderMetadata::querySublayers( const QString &, Qgis::SublayerQueryFlags, QgsFeedback * ) const
126{
127 return QList<QgsProviderSublayerDetails>();
128}
129
132 QgsDataProvider::ReadFlags flags )
133{
134 if ( mCreateFunction )
135 {
136 return mCreateFunction( uri, options, flags );
137 }
138 return nullptr;
139}
140
141void QgsProviderMetadata::setBoolParameter( QVariantMap &uri, const QString &parameter, const QVariant &value )
142{
143 if ( value.toString().compare( QStringLiteral( "yes" ), Qt::CaseInsensitive ) == 0 ||
144 value.toString().compare( QStringLiteral( "1" ), Qt::CaseInsensitive ) == 0 ||
145 value.toString().compare( QStringLiteral( "true" ), Qt::CaseInsensitive ) == 0 )
146 {
147 uri[ parameter ] = true;
148 }
149 else if ( value.toString().compare( QStringLiteral( "no" ), Qt::CaseInsensitive ) == 0 ||
150 value.toString().compare( QStringLiteral( "0" ), Qt::CaseInsensitive ) == 0 ||
151 value.toString().compare( QStringLiteral( "false" ), Qt::CaseInsensitive ) == 0 )
152 {
153 uri[ parameter ] = false;
154 }
155}
156
157bool QgsProviderMetadata::boolParameter( const QVariantMap &uri, const QString &parameter, bool defaultValue )
158{
159 if ( uri.value( parameter, QString() ).toString().compare( QStringLiteral( "yes" ), Qt::CaseInsensitive ) == 0 ||
160 uri.value( parameter, QString() ).toString().compare( QStringLiteral( "1" ), Qt::CaseInsensitive ) == 0 ||
161 uri.value( parameter, QString() ).toString().compare( QStringLiteral( "true" ), Qt::CaseInsensitive ) == 0 )
162 {
163 return true;
164 }
165 else if ( uri.value( parameter, QString() ).toString().compare( QStringLiteral( "no" ), Qt::CaseInsensitive ) == 0 ||
166 uri.value( parameter, QString() ).toString().compare( QStringLiteral( "0" ), Qt::CaseInsensitive ) == 0 ||
167 uri.value( parameter, QString() ).toString().compare( QStringLiteral( "false" ), Qt::CaseInsensitive ) == 0 )
168 {
169 return false;
170 }
171
172 return defaultValue;
173}
174
175QVariantMap QgsProviderMetadata::decodeUri( const QString & ) const
176{
177 return QVariantMap();
178}
179
180QString QgsProviderMetadata::encodeUri( const QVariantMap & ) const
181{
182 return QString();
183}
184
186 const QString &, const QgsFields &,
188 bool, QMap<int, int> &,
189 QString &errorMessage, const QMap<QString, QVariant> * )
190{
191 errorMessage = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "createEmptyLayer" ) );
192 return Qgis::VectorExportResult::ErrorProviderUnsupportedFeature;
193}
194
195bool QgsProviderMetadata::createDatabase( const QString &, QString &errorMessage )
196{
197 errorMessage = QObject::tr( "The %1 provider does not support database creation" ).arg( key() );
198 return false;
199}
200
202 const QString &, const QString &,
203 int, Qgis::DataType, int,
204 int, double *,
206 const QStringList & )
207{
208 return nullptr;
209}
210
212 const QString &,
213 const QString &,
214 const QgsCoordinateReferenceSystem & ) const
215{
216 return false;
217}
218
220 const QString &,
221 const QgsCoordinateReferenceSystem & ) const
222{
223 return false;
224}
225
226QList<QPair<QString, QString> > QgsProviderMetadata::pyramidResamplingMethods()
227{
228 return QList<QPair<QString, QString> >();
229}
230
231QList<QgsDataItemProvider *> QgsProviderMetadata::dataItemProviders() const
232{
233 return QList<QgsDataItemProvider *>();
234}
235
236int QgsProviderMetadata::listStyles( const QString &, QStringList &, QStringList &,
237 QStringList &, QString &errCause )
238{
239 errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "listStyles" ) );
240 return -1;
241}
242
243
244bool QgsProviderMetadata::styleExists( const QString &, const QString &, QString &errorCause )
245{
246 errorCause.clear();
247 return false;
248}
249
250QString QgsProviderMetadata::getStyleById( const QString &, const QString &, QString &errCause )
251{
252 errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "getStyleById" ) );
253 return QString();
254}
255
256bool QgsProviderMetadata::deleteStyleById( const QString &, const QString &, QString &errCause )
257{
258 errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "deleteStyleById" ) );
259 return false;
260}
261
262bool QgsProviderMetadata::saveStyle( const QString &, const QString &, const QString &, const QString &,
263 const QString &, const QString &, bool, QString &errCause )
264{
265 errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "saveStyle" ) );
266 return false;
267}
268
269QString QgsProviderMetadata::loadStyle( const QString &, QString &errCause )
270{
271 errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "loadStyle" ) );
272 return QString();
273}
274
275bool QgsProviderMetadata::saveLayerMetadata( const QString &, const QgsLayerMetadata &, QString & )
276{
277 throw QgsNotSupportedException( QObject::tr( "Provider %1 does not support writing layer metadata" ).arg( key() ) );
278}
279
280bool QgsProviderMetadata::createDb( const QString &, QString &errCause )
281{
282 errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "createDb" ) );
283 return false;
284}
285
287{
288 return nullptr;
289}
290
291QMap<QString, QgsAbstractProviderConnection *> QgsProviderMetadata::connections( bool cached )
292{
293 Q_UNUSED( cached );
294 throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "connections" ) ) );
295}
296
297QMap<QString, QgsAbstractDatabaseProviderConnection *> QgsProviderMetadata::dbConnections( bool cached )
298{
299 return connections<QgsAbstractDatabaseProviderConnection>( cached ) ;
300}
301
303{
304 const QMap<QString, QgsAbstractProviderConnection *> constConns { connections( cached ) };
305 const QStringList constKeys { constConns.keys( ) };
306 for ( const QString &key : constKeys )
307 {
308 if ( key == name )
309 {
310 return constConns.value( key );
311 }
312 }
313 return nullptr;
314}
315
317{
318 Q_UNUSED( name );
319 throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "createConnection" ) ) );
320}
321
322
323QgsAbstractProviderConnection *QgsProviderMetadata::createConnection( const QString &uri, const QVariantMap &configuration )
324{
325 Q_UNUSED( configuration );
326 Q_UNUSED( uri );
327 throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "createConnection" ) ) );
328}
329
330void QgsProviderMetadata::deleteConnection( const QString &name )
331{
332 Q_UNUSED( name );
333 throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "deleteConnection" ) ) );
334}
335
336void QgsProviderMetadata::saveConnection( const QgsAbstractProviderConnection *connection, const QString &name )
337{
338 Q_UNUSED( connection )
339 Q_UNUSED( name )
340 throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "saveConnection" ) ) );
341}
342
344void QgsProviderMetadata::saveConnectionProtected( const QgsAbstractProviderConnection *conn, const QString &name )
345{
346 const bool isNewConnection = !connections().contains( name );
347 conn->store( name );
348 mProviderConnections.clear();
349
350 if ( !isNewConnection )
351 emit connectionChanged( name );
352 else
353 emit connectionCreated( name );
354}
356
357template<typename T>
358QMap<QString, T *> QgsProviderMetadata::connections( bool cached )
359{
360 QMap<QString, T *> result;
361 const auto constConns { connections( cached ) };
362 const QStringList constConnKeys { constConns.keys() };
363 for ( const auto &c : constConnKeys )
364 {
365 T *casted { static_cast<T *>( constConns.value( c ) ) };
366 if ( casted )
367 {
368 result.insert( c, casted );
369 }
370 }
371 return result;
372}
373
375
377 const QString &description,
378 const MeshDriverCapabilities &capabilities,
379 const QString &writeDatasetOnfileSuffix )
380 : mName( name )
381 , mDescription( description )
382 , mCapabilities( capabilities )
383 , mWriteDatasetOnFileSuffix( writeDatasetOnfileSuffix )
384{
385}
386
388 const QString &description,
389 const MeshDriverCapabilities &capabilities,
390 const QString &writeDatasetOnfileSuffix,
391 const QString &writeMeshFrameOnFileSuffix,
392 int maxVerticesPerface )
393 : mName( name )
394 , mDescription( description )
395 , mCapabilities( capabilities )
396 , mWriteDatasetOnFileSuffix( writeDatasetOnfileSuffix )
397 , mWriteMeshFrameOnFileSuffix( ( writeMeshFrameOnFileSuffix ) )
398 , mMaxVerticesPerFace( maxVerticesPerface )
399{
400}
401
402QgsMeshDriverMetadata::MeshDriverCapabilities QgsMeshDriverMetadata::capabilities() const
403{
404 return mCapabilities;
405}
406
408{
409 return mName;
410}
411
413{
414 return mDescription;
415}
416
418{
419 return mWriteDatasetOnFileSuffix;
420}
421
423{
424 return mWriteMeshFrameOnFileSuffix;
425}
426
428{
429 return mMaxVerticesPerFace;
430}
VectorExportResult
Vector layer export result codes.
Definition: qgis.h:450
DataType
Raster data types.
Definition: qgis.h:129
The QgsAbstractProviderConnection provides an interface for data provider connections.
virtual void store(const QString &name) const =0
Stores the connection in the settings.
This class represents a coordinate reference system (CRS).
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:45
Container of fields for a vector layer.
Definition: qgsfields.h:45
A structured metadata store for a map layer.
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.
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.
Custom exception class which is raised when an operation is not supported.
Definition: qgsexception.h:118
Custom exception class for provider connection related exceptions.
Definition: qgsexception.h:101
virtual bool uriIsBlocklisted(const QString &uri) const
Returns true if the specified uri is known by this provider to be something which should be blocklist...
virtual QgsProviderMetadata::ProviderCapabilities providerCapabilities() const
Returns the provider's capabilities.
static void setBoolParameter(QVariantMap &uri, const QString &parameter, const QVariant &value)
Sets the value into the uri parameter as a bool.
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.
Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const
Returns a pointer to the direct provider creation function, if supported by the provider.
QgsAbstractProviderConnection * findConnection(const QString &name, bool cached=true) SIP_THROW(QgsProviderConnectionException)
Searches and returns a (possibly NULL) connection from the stored provider connections.
virtual QIcon icon() const
Returns an icon representing the provider.
virtual int priorityForUri(const QString &uri) const
Returns an integer representing the priority which this provider should have when opening a dataset w...
FilterType
Type of file filters.
static bool boolParameter(const QVariantMap &uri, const QString &parameter, bool defaultValue=false)
Returns the parameter value in the uri as a bool.
std::function< QgsDataProvider *(const QString &, const QgsDataProvider::ProviderOptions &, QgsDataProvider::ReadFlags &) > CreateDataProviderFunction
Typedef for data provider creation function.
virtual bool deleteStyleById(const QString &uri, const QString &styleId, QString &errCause)
Deletes a layer style defined by styleId.
virtual ~QgsProviderMetadata()
dtor
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.
virtual QgsDataProvider * createProvider(const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags=QgsDataProvider::ReadFlags())
Class factory to return a pointer to a newly created QgsDataProvider object.
virtual QString filters(FilterType type)
Builds the list of file filter strings (supported formats)
virtual bool saveLayerMetadata(const QString &uri, const QgsLayerMetadata &metadata, QString &errorMessage) SIP_THROW(QgsNotSupportedException)
Saves metadata to the layer corresponding to the specified uri.
virtual QString encodeUri(const QVariantMap &parts) const
Reassembles a provider data source URI from its component paths (e.g.
QMap< QString, QgsAbstractDatabaseProviderConnection * > dbConnections(bool cached=true) SIP_THROW(QgsProviderConnectionException)
Returns a dictionary of database provider connections, the dictionary key is the connection identifie...
QString description() const
This returns descriptive text for the provider.
virtual bool createMeshData(const QgsMesh &mesh, const QString &fileName, const QString &driverName, const QgsCoordinateReferenceSystem &crs) const
Creates mesh data source from a file name fileName and a driver driverName, that is the mesh frame st...
virtual bool styleExists(const QString &uri, const QString &styleId, QString &errorCause)
Returns true if a layer style with the specified styleId exists in the provider defined by uri.
void connectionChanged(const QString &name)
Emitted when the connection with the specified name is changed, e.g.
virtual QStringList sidecarFilesForUri(const QString &uri) const
Given a uri, returns any sidecar files which are associated with the URI and this provider.
void connectionCreated(const QString &name)
Emitted when a connection with the specified name is created.
virtual void saveConnection(const QgsAbstractProviderConnection *connection, const QString &name) SIP_THROW(QgsProviderConnectionException)
Stores the connection in the settings.
virtual QgsAbstractProviderConnection * createConnection(const QString &uri, const QVariantMap &configuration) SIP_THROW(QgsProviderConnectionException)
Creates a new connection from uri and configuration, the newly created connection is not automaticall...
virtual Qgis::VectorExportResult 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.
virtual void deleteConnection(const QString &name) SIP_THROW(QgsProviderConnectionException)
Removes the connection with the given name from the settings.
QString key() const
This returns the unique key associated with the provider.
virtual QgsTransaction * createTransaction(const QString &connString)
Returns new instance of transaction.
virtual void initProvider()
Initialize the provider.
virtual QString getStyleById(const QString &uri, const QString &styleId, QString &errCause)
Gets a layer style defined by uri.
virtual QList< QgsMapLayerType > supportedLayerTypes() const
Returns a list of the map layer types supported by the provider.
QgsProviderMetadata(const QString &key, const QString &description, const QString &library=QString())
Constructor for provider metadata.
virtual bool createDatabase(const QString &uri, QString &errorMessage)
Creates a new empty database at the specified uri.
virtual QList< QgsProviderSublayerDetails > querySublayers(const QString &uri, Qgis::SublayerQueryFlags flags=Qgis::SublayerQueryFlags(), QgsFeedback *feedback=nullptr) const
Queries the specified uri and returns a list of any valid sublayers found in the dataset which can be...
virtual QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const
Returns the provider metadata capabilities.
virtual void cleanupProvider()
Cleanup the provider.
virtual QString loadStyle(const QString &uri, QString &errCause)
Loads a layer style defined by uri.
virtual int listStyles(const QString &uri, QStringList &ids, QStringList &names, QStringList &descriptions, QString &errCause)
Lists stored layer styles in the provider defined by uri.
virtual QList< QPair< QString, QString > > pyramidResamplingMethods()
Returns pyramid resampling methods available for provider.
virtual QList< QgsMapLayerType > validLayerTypesForUri(const QString &uri) const
Returns a list of valid layer types which the provider can be used with when opening the specified ur...
virtual QList< QgsDataItemProvider * > dataItemProviders() const
Returns data item providers.
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.
virtual QList< QgsMeshDriverMetadata > meshDriversMetadata()
Builds the list of available mesh drivers metadata.
virtual QVariantMap decodeUri(const QString &uri) const
Breaks a provider data source URI into its component paths (e.g.
Q_DECL_DEPRECATED QString library() const
This returns the library file name.
virtual bool createDb(const QString &dbPath, QString &errCause)
Creates database by the provider on the path.
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
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
Setting options for creating vector data providers.
Mesh - vertices, edges and faces.