Branch data Line data Source code
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 : : #include "qgsabstractdatabaseproviderconnection.h"
24 : :
25 : 344 : QgsProviderMetadata::QgsProviderMetadata( QString const &key,
26 : : QString const &description,
27 : : QString const &library )
28 : 344 : : mKey( key )
29 : 344 : , mDescription( description )
30 : 344 : , mLibrary( library )
31 : 1032 : {}
32 : :
33 : 6 : QgsProviderMetadata::QgsProviderMetadata( const QString &key, const QString &description, const CreateDataProviderFunction &createFunc )
34 : 6 : : mKey( key )
35 : 6 : , mDescription( description )
36 : 6 : , mCreateFunction( createFunc )
37 : 12 : {}
38 : :
39 : 356 : QgsProviderMetadata::~QgsProviderMetadata()
40 : 356 : {
41 : 350 : qDeleteAll( mProviderConnections );
42 : 356 : }
43 : :
44 : 6 : QString QgsProviderMetadata::key() const
45 : : {
46 : 6 : return mKey;
47 : : }
48 : :
49 : 0 : QString QgsProviderMetadata::description() const
50 : : {
51 : 0 : return mDescription;
52 : : }
53 : :
54 : 0 : QgsProviderMetadata::ProviderMetadataCapabilities QgsProviderMetadata::capabilities() const
55 : : {
56 : 0 : return QgsProviderMetadata::ProviderMetadataCapabilities();
57 : : }
58 : :
59 : 0 : QgsProviderMetadata::ProviderCapabilities QgsProviderMetadata::providerCapabilities() const
60 : : {
61 : 0 : return QgsProviderMetadata::ProviderCapabilities();
62 : : }
63 : :
64 : 0 : QString QgsProviderMetadata::library() const
65 : : {
66 : 0 : return mLibrary;
67 : : }
68 : :
69 : 0 : QgsProviderMetadata::CreateDataProviderFunction QgsProviderMetadata::createFunction() const
70 : : {
71 : 0 : return mCreateFunction;
72 : : }
73 : :
74 : 15 : void QgsProviderMetadata::initProvider()
75 : : {
76 : :
77 : 15 : }
78 : :
79 : 15 : void QgsProviderMetadata::cleanupProvider()
80 : : {
81 : :
82 : 15 : }
83 : :
84 : 45 : QString QgsProviderMetadata::filters( FilterType )
85 : : {
86 : 45 : return QString();
87 : : }
88 : :
89 : 0 : QList<QgsMeshDriverMetadata> QgsProviderMetadata::meshDriversMetadata()
90 : : {
91 : 0 : return QList<QgsMeshDriverMetadata>();
92 : : }
93 : :
94 : 0 : int QgsProviderMetadata::priorityForUri( const QString & ) const
95 : : {
96 : 0 : return 0;
97 : : }
98 : :
99 : 0 : QList<QgsMapLayerType> QgsProviderMetadata::validLayerTypesForUri( const QString & ) const
100 : : {
101 : 0 : return QList<QgsMapLayerType>();
102 : : }
103 : :
104 : 0 : bool QgsProviderMetadata::uriIsBlocklisted( const QString & ) const
105 : : {
106 : 0 : return false;
107 : : }
108 : :
109 : 14 : QgsDataProvider *QgsProviderMetadata::createProvider( const QString &uri,
110 : : const QgsDataProvider::ProviderOptions &options,
111 : : QgsDataProvider::ReadFlags flags )
112 : : {
113 : 14 : if ( mCreateFunction )
114 : : {
115 : 14 : return mCreateFunction( uri, options, flags );
116 : : }
117 : 0 : return nullptr;
118 : 14 : }
119 : :
120 : 0 : void QgsProviderMetadata::setBoolParameter( QVariantMap &uri, const QString ¶meter, const QVariant &value )
121 : : {
122 : 0 : if ( value.toString().compare( QStringLiteral( "yes" ), Qt::CaseInsensitive ) == 0 ||
123 : 0 : value.toString().compare( QStringLiteral( "1" ), Qt::CaseInsensitive ) == 0 ||
124 : 0 : value.toString().compare( QStringLiteral( "true" ), Qt::CaseInsensitive ) == 0 )
125 : : {
126 : 0 : uri[ parameter ] = true;
127 : 0 : }
128 : 0 : else if ( value.toString().compare( QStringLiteral( "no" ), Qt::CaseInsensitive ) == 0 ||
129 : 0 : value.toString().compare( QStringLiteral( "0" ), Qt::CaseInsensitive ) == 0 ||
130 : 0 : value.toString().compare( QStringLiteral( "false" ), Qt::CaseInsensitive ) == 0 )
131 : : {
132 : 0 : uri[ parameter ] = false;
133 : 0 : }
134 : 0 : }
135 : :
136 : 0 : bool QgsProviderMetadata::boolParameter( const QVariantMap &uri, const QString ¶meter, bool defaultValue )
137 : : {
138 : 0 : if ( uri.value( parameter, QString() ).toString().compare( QStringLiteral( "yes" ), Qt::CaseInsensitive ) == 0 ||
139 : 0 : uri.value( parameter, QString() ).toString().compare( QStringLiteral( "1" ), Qt::CaseInsensitive ) == 0 ||
140 : 0 : uri.value( parameter, QString() ).toString().compare( QStringLiteral( "true" ), Qt::CaseInsensitive ) == 0 )
141 : : {
142 : 0 : return true;
143 : : }
144 : 0 : else if ( uri.value( parameter, QString() ).toString().compare( QStringLiteral( "no" ), Qt::CaseInsensitive ) == 0 ||
145 : 0 : uri.value( parameter, QString() ).toString().compare( QStringLiteral( "0" ), Qt::CaseInsensitive ) == 0 ||
146 : 0 : uri.value( parameter, QString() ).toString().compare( QStringLiteral( "false" ), Qt::CaseInsensitive ) == 0 )
147 : : {
148 : 0 : return false;
149 : : }
150 : :
151 : 0 : return defaultValue;
152 : 0 : }
153 : :
154 : 0 : QVariantMap QgsProviderMetadata::decodeUri( const QString & ) const
155 : : {
156 : 0 : return QVariantMap();
157 : : }
158 : :
159 : 0 : QString QgsProviderMetadata::encodeUri( const QVariantMap & ) const
160 : : {
161 : 0 : return QString();
162 : : }
163 : :
164 : 0 : QgsVectorLayerExporter::ExportError QgsProviderMetadata::createEmptyLayer(
165 : : const QString &, const QgsFields &,
166 : : QgsWkbTypes::Type, const QgsCoordinateReferenceSystem &,
167 : : bool, QMap<int, int> &,
168 : : QString &errorMessage, const QMap<QString, QVariant> * )
169 : : {
170 : 0 : errorMessage = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "createEmptyLayer" ) );
171 : 0 : return QgsVectorLayerExporter::ExportError::ErrProviderUnsupportedFeature;
172 : 0 : }
173 : :
174 : 0 : QgsRasterDataProvider *QgsProviderMetadata::createRasterDataProvider(
175 : : const QString &, const QString &,
176 : : int, Qgis::DataType, int,
177 : : int, double *,
178 : : const QgsCoordinateReferenceSystem &,
179 : : const QStringList & )
180 : : {
181 : 0 : return nullptr;
182 : : }
183 : :
184 : 0 : bool QgsProviderMetadata::createMeshData(
185 : : const QgsMesh &,
186 : : const QString,
187 : : const QString &,
188 : : const QgsCoordinateReferenceSystem & ) const
189 : : {
190 : 0 : return false;
191 : : }
192 : :
193 : 0 : QList<QPair<QString, QString> > QgsProviderMetadata::pyramidResamplingMethods()
194 : : {
195 : 0 : return QList<QPair<QString, QString> >();
196 : : }
197 : :
198 : 6 : QList<QgsDataItemProvider *> QgsProviderMetadata::dataItemProviders() const
199 : : {
200 : 6 : return QList<QgsDataItemProvider *>();
201 : : }
202 : :
203 : 0 : int QgsProviderMetadata::listStyles( const QString &, QStringList &, QStringList &,
204 : : QStringList &, QString &errCause )
205 : : {
206 : 0 : errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "listStyles" ) );
207 : 0 : return -1;
208 : 0 : }
209 : :
210 : 0 : QString QgsProviderMetadata::getStyleById( const QString &, QString, QString &errCause )
211 : : {
212 : 0 : errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "getStyleById" ) );
213 : 0 : return QString();
214 : 0 : }
215 : :
216 : 0 : bool QgsProviderMetadata::deleteStyleById( const QString &, QString, QString &errCause )
217 : : {
218 : 0 : errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "deleteStyleById" ) );
219 : 0 : return false;
220 : 0 : }
221 : :
222 : 0 : bool QgsProviderMetadata::saveStyle( const QString &, const QString &, const QString &, const QString &,
223 : : const QString &, const QString &, bool, QString &errCause )
224 : : {
225 : 0 : errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "saveStyle" ) );
226 : 0 : return false;
227 : 0 : }
228 : :
229 : 0 : QString QgsProviderMetadata::loadStyle( const QString &, QString &errCause )
230 : : {
231 : 0 : errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "loadStyle" ) );
232 : 0 : return QString();
233 : 0 : }
234 : :
235 : 0 : bool QgsProviderMetadata::createDb( const QString &, QString &errCause )
236 : : {
237 : 0 : errCause = QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "createDb" ) );
238 : 0 : return false;
239 : 0 : }
240 : :
241 : 0 : QgsTransaction *QgsProviderMetadata::createTransaction( const QString & )
242 : : {
243 : 0 : return nullptr;
244 : : }
245 : :
246 : 0 : QMap<QString, QgsAbstractProviderConnection *> QgsProviderMetadata::connections( bool cached )
247 : : {
248 : : Q_UNUSED( cached );
249 : 0 : throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "connections" ) ) );
250 : 0 : }
251 : :
252 : 0 : QMap<QString, QgsAbstractDatabaseProviderConnection *> QgsProviderMetadata::dbConnections( bool cached )
253 : : {
254 : 0 : return connections<QgsAbstractDatabaseProviderConnection>( cached ) ;
255 : : }
256 : :
257 : 0 : QgsAbstractProviderConnection *QgsProviderMetadata::findConnection( const QString &name, bool cached )
258 : : {
259 : 0 : const QMap<QString, QgsAbstractProviderConnection *> constConns { connections( cached ) };
260 : 0 : const QStringList constKeys { constConns.keys( ) };
261 : 0 : for ( const QString &key : constKeys )
262 : : {
263 : 0 : if ( key == name )
264 : : {
265 : 0 : return constConns.value( key );
266 : : }
267 : : }
268 : 0 : return nullptr;
269 : 0 : }
270 : :
271 : 0 : QgsAbstractProviderConnection *QgsProviderMetadata::createConnection( const QString &name )
272 : : {
273 : 0 : Q_UNUSED( name );
274 : 0 : throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "connection" ) ) );
275 : 0 : }
276 : :
277 : :
278 : 0 : QgsAbstractProviderConnection *QgsProviderMetadata::createConnection( const QString &uri, const QVariantMap &configuration )
279 : : {
280 : 0 : Q_UNUSED( configuration );
281 : 0 : Q_UNUSED( uri );
282 : 0 : throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "connection" ) ) );
283 : 0 : }
284 : :
285 : 0 : void QgsProviderMetadata::deleteConnection( const QString &name )
286 : : {
287 : 0 : Q_UNUSED( name );
288 : 0 : throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "deleteConnection" ) ) );
289 : 0 : }
290 : :
291 : 0 : void QgsProviderMetadata::saveConnection( const QgsAbstractProviderConnection *connection, const QString &name )
292 : : {
293 : : Q_UNUSED( connection )
294 : 0 : Q_UNUSED( name )
295 : 0 : throw QgsProviderConnectionException( QObject::tr( "Provider %1 has no %2 method" ).arg( key(), QStringLiteral( "saveConnection" ) ) );
296 : 0 : }
297 : :
298 : : ///@cond PRIVATE
299 : 0 : void QgsProviderMetadata::saveConnectionProtected( const QgsAbstractProviderConnection *conn, const QString &name )
300 : : {
301 : 0 : const bool isNewConnection = !connections().contains( name );
302 : 0 : conn->store( name );
303 : 0 : mProviderConnections.clear();
304 : :
305 : 0 : if ( !isNewConnection )
306 : 0 : emit connectionChanged( name );
307 : : else
308 : 0 : emit connectionCreated( name );
309 : 0 : }
310 : : ///@endcond
311 : :
312 : : template<typename T>
313 : 0 : QMap<QString, T *> QgsProviderMetadata::connections( bool cached )
314 : : {
315 : 0 : QMap<QString, T *> result;
316 : 0 : const auto constConns { connections( cached ) };
317 : 0 : const QStringList constConnKeys { constConns.keys() };
318 : 0 : for ( const auto &c : constConnKeys )
319 : : {
320 : 0 : T *casted { static_cast<T *>( constConns.value( c ) ) };
321 : 0 : if ( casted )
322 : : {
323 : 0 : result.insert( c, casted );
324 : 0 : }
325 : : }
326 : 0 : return result;
327 : 0 : }
328 : :
329 : 0 : QgsMeshDriverMetadata::QgsMeshDriverMetadata() = default;
330 : :
331 : 0 : QgsMeshDriverMetadata::QgsMeshDriverMetadata( const QString &name, const QString &description, const MeshDriverCapabilities &capabilities, const QString &writeDatasetOnfileSuffix )
332 : 0 : : mName( name ), mDescription( description ), mCapabilities( capabilities ), mWriteDatasetOnFileSuffix( writeDatasetOnfileSuffix )
333 : : {
334 : 0 : }
335 : :
336 : 0 : QgsMeshDriverMetadata::MeshDriverCapabilities QgsMeshDriverMetadata::capabilities() const
337 : : {
338 : 0 : return mCapabilities;
339 : : }
340 : :
341 : 0 : QString QgsMeshDriverMetadata::name() const
342 : : {
343 : 0 : return mName;
344 : : }
345 : :
346 : 0 : QString QgsMeshDriverMetadata::description() const
347 : : {
348 : 0 : return mDescription;
349 : : }
350 : :
351 : 0 : QString QgsMeshDriverMetadata::writeDatasetOnFileSuffix() const
352 : : {
353 : 0 : return mWriteDatasetOnFileSuffix;
354 : : }
|