Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
added encode and decode functions for the wms provider uri
  • Loading branch information
Samweli committed Apr 26, 2020
1 parent 3d3477e commit 5773c0e
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/providers/wms/qgswmsprovider.cpp
Expand Up @@ -4551,6 +4551,30 @@ QList<QgsDataItemProvider *> QgsWmsProviderMetadata::dataItemProviders() const
return providers;
}

QVariantMap QgsWmsProviderMetadata::decodeUri( const QString &uri )
{
const QUrlQuery query { uri };
const auto constItems { query.queryItems() };
QVariantMap decoded;
for ( const auto &item : constItems )
{
decoded[ item.first ] = item.second;
}
return decoded;
}

QString QgsWmsProviderMetadata::encodeUri( const QVariantMap &parts )
{
QUrlQuery query;
QList<QPair<QString, QString> > items;
for ( auto it = parts.constBegin(); it != parts.constEnd(); ++it )
{
items.push_back( {it.key(), it.value().toString() } );
}
query.setQueryItems( items );
return query.toString();
}

#ifndef HAVE_STATIC_PROVIDERS
QGISEXTERN QgsProviderMetadata *providerMetadataFactory()
{
Expand Down
2 changes: 2 additions & 0 deletions src/providers/wms/qgswmsprovider.h
Expand Up @@ -591,6 +591,8 @@ class QgsWmsProviderMetadata final: public QgsProviderMetadata
QgsWmsProviderMetadata();
QgsWmsProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) override;
QList<QgsDataItemProvider *> dataItemProviders() const override;
QVariantMap decodeUri( const QString &uri ) override;
QString encodeUri( const QVariantMap &parts ) override;
};

#endif
Expand Down
27 changes: 27 additions & 0 deletions tests/src/providers/testqgswmsprovider.cpp
Expand Up @@ -19,6 +19,7 @@
#include <qgsapplication.h>
#include <qgsmultirenderchecker.h>
#include <qgsrasterlayer.h>
#include <qgsproviderregistry.h>

/**
* \ingroup UnitTests
Expand Down Expand Up @@ -119,6 +120,32 @@ class TestQgsWmsProvider: public QObject
QVERIFY( imageCheck( "mbtiles_1", &layer, layer.extent() ) );
}

void providerUriUpdates()
{
QgsProviderMetadata *metadata = QgsProviderRegistry::instance()->providerMetadata( "wms" );
QString uriString = QStringLiteral( "crs=EPSG:4326&dpiMode=7&"
"layers=testlayer&styles&"
"url=http://localhost:8380/mapserv&"
"testParam=true" );
QVariantMap parts = metadata->decodeUri( uriString );
QVariantMap expectedParts { { QString( "crs" ), QVariant( "EPSG:4326" ) }, { QString( "dpiMode" ), QVariant( "7" ) },
{ QString( "testParam" ), QVariant( "true" ) }, { QString( "layers" ), QVariant( "testlayer" ) },
{ QString( "styles" ), QString() }, { QString( "url" ), QVariant( "http://localhost:8380/mapserv" ) } };
QCOMPARE( parts, expectedParts );

parts["testParam"] = QVariant( "false" );

QCOMPARE( parts["testParam"], QVariant( "false" ) );

QString updatedUri = metadata->encodeUri( parts );
QString expectedUri = QStringLiteral( "crs=EPSG:4326&dpiMode=7&"
"layers=testlayer&styles&"
"testParam=false&"
"url=http://localhost:8380/mapserv" );
QCOMPARE( updatedUri, expectedUri );

}


bool imageCheck( const QString &testType, QgsMapLayer *layer, const QgsRectangle &extent )
{
Expand Down

0 comments on commit 5773c0e

Please sign in to comment.