Branch data Line data Source code
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"
35 : : #include "qgsabstractproviderconnection.h"
36 : : #include "qgsfields.h"
37 : : #include "qgsexception.h"
38 : :
39 : : class QgsDataItem;
40 : : class QgsDataItemProvider;
41 : : class QgsTransaction;
42 : :
43 : : class QgsRasterDataProvider;
44 : : class QgsMeshDataProvider;
45 : : class QgsAbstractDatabaseProviderConnection;
46 : :
47 : : struct QgsMesh;
48 : :
49 : : /**
50 : : * \ingroup core
51 : : * \brief Holds metadata about mesh driver
52 : : *
53 : : * \since QGIS 3.12
54 : : */
55 : 0 : class CORE_EXPORT QgsMeshDriverMetadata
56 : : {
57 : : Q_GADGET
58 : :
59 : : public:
60 : :
61 : : /**
62 : : * Flags for the capabilities of the driver
63 : : */
64 : : enum MeshDriverCapability
65 : : {
66 : : CanWriteFaceDatasets = 1 << 0, //!< If the driver can persist datasets defined on faces
67 : : CanWriteVertexDatasets = 1 << 1, //!< If the driver can persist datasets defined on vertices
68 : : CanWriteEdgeDatasets = 1 << 2, //!< If the driver can persist datasets defined on edges \since QGIS 3.14
69 : : CanWriteMeshData = 1 << 3, //!< If the driver can write mesh data on file \since QGIS 3.16
70 : : };
71 : :
72 : : Q_ENUM( MeshDriverCapability )
73 : : Q_DECLARE_FLAGS( MeshDriverCapabilities, MeshDriverCapability )
74 : : Q_FLAG( MeshDriverCapabilities )
75 : :
76 : : //! Constructs default metadata without any capabilities
77 : : QgsMeshDriverMetadata();
78 : :
79 : : /**
80 : : * Constructs driver metadata with selected capabilities
81 : : *
82 : : * \param name name/key of the driver
83 : : * \param description short description of the driver
84 : : * \param capabilities driver's capabilities
85 : : * \param writeDatasetOnFileSuffix suffix used to write datasets on file
86 : : */
87 : : QgsMeshDriverMetadata( const QString &name,
88 : : const QString &description,
89 : : const MeshDriverCapabilities &capabilities,
90 : : const QString &writeDatasetOnFileSuffix );
91 : :
92 : : /**
93 : : * Returns the capabilities for this driver.
94 : : */
95 : : MeshDriverCapabilities capabilities() const;
96 : :
97 : : /**
98 : : * Returns the name (key) for this driver.
99 : : */
100 : : QString name() const;
101 : :
102 : : /**
103 : : * Returns the description for this driver.
104 : : */
105 : : QString description() const;
106 : :
107 : : /**
108 : : * Returns the suffix used to write datasets on file
109 : : */
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 : :
121 : : /**
122 : : * \ingroup core
123 : : * \brief Holds data provider key, description, and associated shared library file or function pointer information.
124 : : *
125 : : * Provider metadata refers either to providers which are loaded via libraries or
126 : : * which are native providers that are included in the core QGIS installation
127 : : * and accessed through function pointers.
128 : : *
129 : : * For library based providers, the metadata class is used in a lazy load
130 : : * implementation in QgsProviderRegistry. To save memory, data providers
131 : : * are only actually loaded via QLibrary calls if they're to be used. (Though they're all
132 : : * iteratively loaded once to get their metadata information, and then
133 : : * unloaded when the QgsProviderRegistry is created.) QgsProviderMetadata
134 : : * supplies enough information to be able to later load the associated shared
135 : : * library object.
136 : : *
137 : : */
138 : : class CORE_EXPORT QgsProviderMetadata : public QObject
139 : : {
140 : : Q_OBJECT
141 : :
142 : : public:
143 : :
144 : : /**
145 : : * Indicates capabilities of the provider metadata implementation.
146 : : *
147 : : * \since QGIS 3.18
148 : : */
149 : : enum ProviderMetadataCapability
150 : : {
151 : : PriorityForUri = 1 << 0, //!< Indicates that the metadata can calculate a priority for a URI
152 : : LayerTypesForUri = 1 << 1, //!< Indicates that the metadata can determine valid layer types for a URI
153 : : };
154 : : Q_DECLARE_FLAGS( ProviderMetadataCapabilities, ProviderMetadataCapability )
155 : :
156 : : /**
157 : : * Provider capabilities
158 : : *
159 : : * \since QGIS 3.18.1
160 : : */
161 : : enum ProviderCapability
162 : : {
163 : : FileBasedUris = 1 << 0, //!< Indicates that the provider can utilize URIs which are based on paths to files (as opposed to database or internet paths)
164 : : };
165 : : Q_DECLARE_FLAGS( ProviderCapabilities, ProviderCapability )
166 : :
167 : : /**
168 : : * Typedef for data provider creation function.
169 : : * \since QGIS 3.0
170 : : */
171 : : SIP_SKIP typedef std::function < QgsDataProvider*( const QString &, const QgsDataProvider::ProviderOptions &, QgsDataProvider::ReadFlags & ) > CreateDataProviderFunction;
172 : :
173 : : /**
174 : : * Constructor for provider metadata
175 : : * \param key provider key
176 : : * \param description provider description
177 : : * \param library plugin library file name (empty if the provider is not loaded from a library)
178 : : */
179 : : QgsProviderMetadata( const QString &key, const QString &description, const QString &library = QString() );
180 : :
181 : : /**
182 : : * Metadata for provider with direct provider creation function pointer, where
183 : : * no library is involved.
184 : : * \since QGIS 3.0
185 : : * \deprecated QGIS 3.10
186 : : */
187 : : SIP_SKIP Q_DECL_DEPRECATED QgsProviderMetadata( const QString &key, const QString &description, const QgsProviderMetadata::CreateDataProviderFunction &createFunc );
188 : :
189 : : //! dtor
190 : : virtual ~QgsProviderMetadata();
191 : :
192 : : /**
193 : : * This returns the unique key associated with the provider
194 : : *
195 : : * This key string is used for the associative container in QgsProviderRegistry
196 : : */
197 : : QString key() const;
198 : :
199 : : /**
200 : : * This returns descriptive text for the provider
201 : : *
202 : : * This is used to provide a descriptive list of available data providers.
203 : : */
204 : : QString description() const;
205 : :
206 : : /**
207 : : * Returns the provider metadata capabilities.
208 : : *
209 : : * \since QGIS 3.18
210 : : */
211 : : virtual QgsProviderMetadata::ProviderMetadataCapabilities capabilities() const;
212 : :
213 : : /**
214 : : * Returns the provider's capabilities.
215 : : *
216 : : * \since QGIS 3.18.1
217 : : */
218 : : virtual QgsProviderMetadata::ProviderCapabilities providerCapabilities() const;
219 : :
220 : : /**
221 : : * This returns the library file name
222 : : *
223 : : * This is used to QLibrary calls to load the data provider (only for dynamically loaded libraries)
224 : : *
225 : : * \deprecated QGIS 3.10 - providers may not need to be loaded from a library (empty string returned)
226 : : */
227 : : Q_DECL_DEPRECATED QString library() const SIP_DEPRECATED;
228 : :
229 : : /**
230 : : * Returns a pointer to the direct provider creation function, if supported
231 : : * by the provider.
232 : : * \note not available in Python bindings
233 : : * \since QGIS 3.0
234 : : * \deprecated QGIS 3.10
235 : : */
236 : : SIP_SKIP Q_DECL_DEPRECATED CreateDataProviderFunction createFunction() const;
237 : :
238 : : /**
239 : : * Initialize the provider
240 : : * \since QGIS 3.10
241 : : */
242 : : virtual void initProvider();
243 : :
244 : : /**
245 : : * Cleanup the provider
246 : : * \since QGIS 3.10
247 : : */
248 : : virtual void cleanupProvider();
249 : :
250 : : /**
251 : : * Type of file filters
252 : : * \since QGIS 3.10
253 : : */
254 : : enum class FilterType
255 : : {
256 : : FilterVector = 1, //!< Vector layers
257 : : FilterRaster, //!< Raster layers
258 : : FilterMesh, //!< Mesh layers
259 : : FilterMeshDataset, //!< Mesh datasets
260 : : FilterPointCloud, //!< Point clouds (since QGIS 3.18)
261 : : };
262 : :
263 : : /**
264 : : * Builds the list of file filter strings (supported formats)
265 : : *
266 : : * Suitable for use in a QFileDialog::getOpenFileNames() call.
267 : : *
268 : : * \since QGIS 3.10
269 : : */
270 : : virtual QString filters( FilterType type );
271 : :
272 : : /**
273 : : * Builds the list of available mesh drivers metadata
274 : : *
275 : : * \since QGIS 3.12
276 : : */
277 : : virtual QList<QgsMeshDriverMetadata> meshDriversMetadata();
278 : :
279 : : /**
280 : : * Returns an integer representing the priority which this provider should have when opening
281 : : * a dataset with the specified \a uri.
282 : : *
283 : : * A larger priority means that the provider should be selected over others with a lower
284 : : * priority for the same URI.
285 : : *
286 : : * The default implementation returns 0 for all URIs.
287 : : *
288 : : * \warning Not all providers implement this functionality. Check whether capabilities() returns the
289 : : * ProviderMetadataCapability::PriorityForUri to determine whether a specific provider metadata object
290 : : * supports this method.
291 : : *
292 : : * \since QGIS 3.18
293 : : */
294 : : virtual int priorityForUri( const QString &uri ) const;
295 : :
296 : : /**
297 : : * Returns a list of valid layer types which the provider can be used with when
298 : : * opening the specified \a uri.
299 : : *
300 : : * \warning Not all providers implement this functionality. Check whether capabilities() returns the
301 : : * ProviderMetadataCapability::LayerTypesForUri to determine whether a specific provider metadata object
302 : : * supports this method.
303 : : *
304 : : * \since QGIS 3.18
305 : : */
306 : : virtual QList< QgsMapLayerType > validLayerTypesForUri( const QString &uri ) const;
307 : :
308 : : /**
309 : : * Returns TRUE if the specified \a uri is known by this provider to be something which should
310 : : * be blocklisted from the QGIS interface, e.g. an internal detail only.
311 : : *
312 : : * Specifically, this method can be utilized by the browser panel to hide noisy internal details
313 : : * by returning TRUE for URIs which are known to be sidecar files only, such as ".aux.xml" files
314 : : * or ".shp.xml" files, or the "ept-build.json" files which sit alongside Entwine "ept.json" point
315 : : * cloud sources.
316 : : *
317 : : * The default method returns FALSE for all URIs.
318 : : *
319 : : * \warning Returning TRUE from an implementation of this method indicates that ALL providers should
320 : : * ignore the specified \a uri, not just the provider associated with this metadata!
321 : : *
322 : : * \since QGIS 3.18
323 : : */
324 : : virtual bool uriIsBlocklisted( const QString &uri ) const;
325 : :
326 : : /**
327 : : * Class factory to return a pointer to a newly created QgsDataProvider object
328 : : *
329 : : * \param uri the datasource uri
330 : : * \param options creation options
331 : : * \param flags creation flags, sing QGIS 3.16
332 : : *
333 : : * \since QGIS 3.10
334 : : */
335 : : virtual QgsDataProvider *createProvider( const QString &uri,
336 : : const QgsDataProvider::ProviderOptions &options,
337 : : QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) SIP_FACTORY;
338 : :
339 : : /**
340 : : * Sets the \a value into the \a uri \a parameter as a bool.
341 : : * eg. "yes" value will be saved as TRUE, 0 will be saved as FALSE
342 : : *
343 : : * \since QGIS 3.14
344 : : */
345 : : static void setBoolParameter( QVariantMap &uri, const QString ¶meter, const QVariant &value );
346 : :
347 : : /**
348 : : * Returns the \a parameter value in the \a uri as a bool.
349 : : * eg. "yes" value will be returned as TRUE, 0 will be returned as FALSE
350 : : *
351 : : * \since QGIS 3.14
352 : : */
353 : : static bool boolParameter( const QVariantMap &uri, const QString ¶meter, bool defaultValue = false );
354 : :
355 : :
356 : : #ifndef SIP_RUN
357 : :
358 : : /**
359 : : * Creates new empty vector layer
360 : : * \note not available in Python bindings
361 : : * \since QGIS 3.10
362 : : */
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 : :
373 : : /**
374 : : * Creates a new instance of the raster data provider.
375 : : * \since QGIS 3.10
376 : : */
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,
385 : : const QgsCoordinateReferenceSystem &crs,
386 : : const QStringList &createOptions = QStringList() ) SIP_FACTORY;
387 : :
388 : : /**
389 : : * Creates mesh data source, that is the mesh frame stored in file, memory or with other way (depending of the provider)
390 : : * \since QGIS 3.16
391 : : */
392 : : virtual bool createMeshData(
393 : : const QgsMesh &mesh,
394 : : const QString uri,
395 : : const QString &driverName,
396 : : const QgsCoordinateReferenceSystem &crs ) const;
397 : :
398 : : /**
399 : : * Returns pyramid resampling methods available for provider
400 : : * \since QGIS 3.10
401 : : */
402 : : virtual QList<QPair<QString, QString> > pyramidResamplingMethods();
403 : :
404 : : /**
405 : : * Breaks a provider data source URI into its component paths (e.g. file path, layer name).
406 : : * \param uri uri string
407 : : * \returns map containing components. Standard components may include:
408 : : *
409 : : * - "path": file path
410 : : * - "layerName"
411 : : * - "url": base URL, for online services
412 : : * - "referer": referrer string, for HTTP requests
413 : : * - "host": hostname, for database services
414 : : * - "bounds": hardcoded layer bounds (as a QgsRectangle)
415 : : * - "crs": CRS definition
416 : : * - "authcfg": authentication configuration ID
417 : : *
418 : : * \note this function may not be supported by all providers, an empty map will be returned in such case
419 : : * \since QGIS 3.10
420 : : */
421 : : virtual QVariantMap decodeUri( const QString &uri ) const;
422 : :
423 : : /**
424 : : * Reassembles a provider data source URI from its component paths (e.g. file path, layer name).
425 : : * \param parts parts as returned by decodeUri
426 : : * \returns datasource uri string
427 : : * \note this function may not be supported by all providers, an empty string will be returned in such case
428 : : * \see decodeUri()
429 : : * \since QGIS 3.12
430 : : */
431 : : virtual QString encodeUri( const QVariantMap &parts ) const;
432 : :
433 : : /**
434 : : * Returns data item providers. Caller is responsible for ownership of the item providers
435 : : * \see QgsProviderGuiMetadata::dataItemGuiProviders()
436 : : * \note Ownership of created data item providers is passed to the caller.
437 : : * \since QGIS 3.10
438 : : */
439 : : virtual QList< QgsDataItemProvider * > dataItemProviders() const SIP_FACTORY;
440 : :
441 : : /**
442 : : * Lists stored layer styles in the provider defined by \a uri
443 : : * \returns -1 if not implemented by provider, otherwise number of styles stored
444 : : * \since QGIS 3.10
445 : : */
446 : : virtual int listStyles( const QString &uri, QStringList &ids, QStringList &names,
447 : : QStringList &descriptions, QString &errCause );
448 : :
449 : : /**
450 : : * Gets a layer style defined by \a uri
451 : : * \since QGIS 3.10
452 : : */
453 : : virtual QString getStyleById( const QString &uri, QString styleId, QString &errCause );
454 : :
455 : : /**
456 : : * Deletes a layer style defined by \a styleId
457 : : * \since QGIS 3.10
458 : : */
459 : : virtual bool deleteStyleById( const QString &uri, QString styleId, QString &errCause );
460 : :
461 : : /**
462 : : * Saves a layer style to provider
463 : : * \since QGIS 3.10
464 : : */
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 : :
469 : : /**
470 : : * Loads a layer style defined by \a uri
471 : : * \since QGIS 3.10
472 : : */
473 : : virtual QString loadStyle( const QString &uri, QString &errCause );
474 : :
475 : : /**
476 : : * Creates database by the provider on the path
477 : : * \since QGIS 3.10
478 : : */
479 : : virtual bool createDb( const QString &dbPath, QString &errCause );
480 : :
481 : : /**
482 : : * Returns new instance of transaction. Ownership is transferred to the caller
483 : : * \since QGIS 3.10
484 : : */
485 : : virtual QgsTransaction *createTransaction( const QString &connString ) SIP_FACTORY;
486 : :
487 : : /**
488 : : * Returns a dictionary of stored provider connections,
489 : : * the dictionary key is the connection identifier.
490 : : * Ownership is not transferred.
491 : : * Raises a QgsProviderConnectionException if any errors are encountered.
492 : : * \param cached if FALSE connections will be re-read from the settings
493 : : * \throws QgsProviderConnectionException
494 : : * \since QGIS 3.10
495 : : */
496 : : virtual QMap<QString, QgsAbstractProviderConnection *> connections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
497 : :
498 : : /**
499 : : * Returns a dictionary of database provider connections,
500 : : * the dictionary key is the connection identifier.
501 : : * Ownership is not transferred.
502 : : * Raises a QgsProviderConnectionException if any errors are encountered.
503 : : * \param cached if FALSE connections will be re-read from the settings
504 : : * \throws QgsProviderConnectionException
505 : : * \since QGIS 3.10
506 : : */
507 : : QMap<QString, QgsAbstractDatabaseProviderConnection *> dbConnections( bool cached = true ) SIP_THROW( QgsProviderConnectionException );
508 : :
509 : : /**
510 : : * Searches and returns a (possibly NULL) connection from the stored provider connections.
511 : : * Ownership is not transferred.
512 : : * Raises a QgsProviderConnectionException if any errors are encountered.
513 : : * \param name the connection name
514 : : * \param cached if FALSE connections will be re-read from the settings
515 : : * \throws QgsProviderConnectionException
516 : : * \since QGIS 3.10
517 : : */
518 : : QgsAbstractProviderConnection *findConnection( const QString &name, bool cached = true ) SIP_THROW( QgsProviderConnectionException );
519 : :
520 : : #ifndef SIP_RUN
521 : :
522 : : /**
523 : : * Returns a dictionary of provider connections of the specified type T,
524 : : * the dictionary key is the connection identifier.
525 : : * \param cached if FALSE connections will be re-read from the settings
526 : : * \note not available in Python bindings
527 : : * \since QGIS 3.10
528 : : */
529 : : template <typename T> QMap<QString, T *>connections( bool cached = true );
530 : :
531 : :
532 : : #endif
533 : :
534 : : /**
535 : : * Creates a new connection from \a uri and \a configuration,
536 : : * the newly created connection is not automatically stored in the settings, call
537 : : * saveConnection() to save it.
538 : : * Ownership is transferred to the caller.
539 : : * \throws QgsProviderConnectionException
540 : : * \see saveConnection()
541 : : * \since QGIS 3.10
542 : : */
543 : : virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
544 : :
545 : : /**
546 : : * Creates a new connection by loading the connection with the given \a name from the settings.
547 : : * Ownership is transferred to the caller.
548 : : * \throws QgsProviderConnectionException
549 : : * \see findConnection()
550 : : */
551 : : virtual QgsAbstractProviderConnection *createConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
552 : :
553 : : /**
554 : : * Removes the connection with the given \a name from the settings.
555 : : * Raises a QgsProviderConnectionException if any errors are encountered.
556 : : * \throws QgsProviderConnectionException
557 : : * \since QGIS 3.10
558 : : */
559 : : virtual void deleteConnection( const QString &name ) SIP_THROW( QgsProviderConnectionException );
560 : :
561 : : /**
562 : : * Stores the connection in the settings
563 : : * \param connection the connection to be stored in the settings
564 : : * \param name the name under which the connection will be stored
565 : : * \throws QgsProviderConnectionException
566 : : * \since QGIS 3.10
567 : : */
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 : :
580 : : /**
581 : : * Emitted when a connection with the specified \a name is created.
582 : : *
583 : : * \note Only providers which implement the connection handling API will emit this signal.
584 : : * \since QGIS 3.14
585 : : */
586 : : void connectionCreated( const QString &name );
587 : :
588 : : /**
589 : : * Emitted when the connection with the specified \a name was deleted.
590 : : *
591 : : * \note Only providers which implement the connection handling API will emit this signal.
592 : : * \since QGIS 3.14
593 : : */
594 : : void connectionDeleted( const QString &name );
595 : :
596 : : /**
597 : : * Emitted when the connection with the specified \a name is changed, e.g. the settings
598 : : * relating to the connection have been updated.
599 : : *
600 : : * \note Only providers which implement the connection handling API will emit this signal.
601 : : * \since QGIS 3.14
602 : : */
603 : : void connectionChanged( const QString &name );
604 : :
605 : : protected:
606 : :
607 : : #ifndef SIP_RUN
608 : : ///@cond PRIVATE
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 : 0 : template <class T_provider_conn, class T_conn> QMap<QString, QgsAbstractProviderConnection *> connectionsProtected( bool cached = true )
616 : : {
617 : 0 : if ( ! cached || mProviderConnections.isEmpty() )
618 : : {
619 : 0 : qDeleteAll( mProviderConnections );
620 : 0 : mProviderConnections.clear();
621 : 0 : const auto connNames { T_conn::connectionList() };
622 : 0 : for ( const auto &cname : connNames )
623 : : {
624 : 0 : mProviderConnections.insert( cname, new T_provider_conn( cname ) );
625 : : }
626 : 0 : }
627 : 0 : return mProviderConnections;
628 : 0 : }
629 : :
630 : 0 : template <class T_provider_conn> void deleteConnectionProtected( const QString &name )
631 : : {
632 : 0 : T_provider_conn conn( name );
633 : 0 : conn.remove( name );
634 : 0 : mProviderConnections.clear();
635 : 0 : emit connectionDeleted( name );
636 : 0 : }
637 : : virtual void saveConnectionProtected( const QgsAbstractProviderConnection *connection, const QString &name );
638 : : //! Provider connections cache
639 : : QMap<QString, QgsAbstractProviderConnection *> mProviderConnections;
640 : :
641 : : /// @endcond
642 : :
643 : : #endif
644 : :
645 : : private:
646 : :
647 : : /// unique key for data provider
648 : : QString mKey;
649 : :
650 : : /// associated terse description
651 : : QString mDescription;
652 : :
653 : : /// file path
654 : : /// deprecated QGIS 3.10
655 : : QString mLibrary;
656 : :
657 : : CreateDataProviderFunction mCreateFunction = nullptr;
658 : :
659 : : };
660 : :
661 : 0 : Q_DECLARE_OPERATORS_FOR_FLAGS( QgsProviderMetadata::ProviderMetadataCapabilities )
662 : :
663 : :
664 : : #endif //QGSPROVIDERMETADATA_H
|