From c99388804a2a32608fb239fbb29b25a6952f5177 Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Fri, 20 Oct 2017 11:19:02 +0200 Subject: [PATCH] Move creation of datasource uri for external wms layers to QgsWMSParameters --- src/server/services/wms/qgswmsparameters.cpp | 28 ++++++++++++++++++++ src/server/services/wms/qgswmsparameters.h | 8 ++++++ src/server/services/wms/qgswmsrenderer.cpp | 20 ++------------ 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/server/services/wms/qgswmsparameters.cpp b/src/server/services/wms/qgswmsparameters.cpp index 62f434f3503..6a07a4ffe54 100644 --- a/src/server/services/wms/qgswmsparameters.cpp +++ b/src/server/services/wms/qgswmsparameters.cpp @@ -16,6 +16,7 @@ ***************************************************************************/ #include "qgswmsparameters.h" +#include "qgsdatasourceuri.h" #include "qgsmessagelog.h" #include @@ -512,6 +513,16 @@ namespace QgsWms raiseError( name ); } } + else //maybe an external wms parameter? + { + int separator = key.indexOf( ":" ); + if ( separator >= 1 ) + { + QString id = key.left( separator ); + QString param = key.right( key.length() - separator - 1 ); + mExternalWMSParameters[id].insert( param, parameters[key] ); + } + } } } } @@ -1874,6 +1885,23 @@ namespace QgsWms return param; } + QString QgsWmsParameters::externalWMSUri( const QString &id ) const + { + if ( !mExternalWMSParameters.contains( id ) ) + { + return QString(); + } + + QgsDataSourceUri wmsUri; + const QMap ¶mMap = mExternalWMSParameters[ id ]; + QMap::const_iterator paramIt = paramMap.constBegin(); + for ( ; paramIt != paramMap.constEnd(); ++paramIt ) + { + wmsUri.setParam( paramIt.key().toLower(), paramIt.value() ); + } + return wmsUri.encodedUri(); + } + QString QgsWmsParameters::name( ParameterName name ) const { const QMetaEnum metaEnum( QMetaEnum::fromType() ); diff --git a/src/server/services/wms/qgswmsparameters.h b/src/server/services/wms/qgswmsparameters.h index 16ebd463bac..38e54a8ff6e 100644 --- a/src/server/services/wms/qgswmsparameters.h +++ b/src/server/services/wms/qgswmsparameters.h @@ -909,6 +909,13 @@ namespace QgsWms */ QgsWmsParametersComposerMap composerMapParameters( int mapId ) const; + /** + * @brief externalWMSUri + * @param id the id of the external wms + * @return uri string or an empty string if the external wms id does not exist + */ + QString externalWMSUri( const QString &id ) const; + private: QString name( ParameterName name ) const; void raiseError( ParameterName name ) const; @@ -955,6 +962,7 @@ namespace QgsWms QgsServerRequest::Parameters mRequestParameters; QMap mParameters; QMap> mComposerParameters; + QMap > mExternalWMSParameters; QList mVersions; }; } diff --git a/src/server/services/wms/qgswmsrenderer.cpp b/src/server/services/wms/qgswmsrenderer.cpp index 275b5a529f2..467d031da26 100644 --- a/src/server/services/wms/qgswmsrenderer.cpp +++ b/src/server/services/wms/qgswmsrenderer.cpp @@ -2653,24 +2653,8 @@ namespace QgsWms QgsMapLayer *QgsRenderer::createExternalWMSLayer( const QString &externalLayerId ) const { - QgsMapLayer *wmsLayer = 0; - QgsDataSourceUri wmsUri; - - QgsServerRequest::Parameters::const_iterator it = mParameters.lowerBound( externalLayerId.toUpper() + ":" ); - while ( it != mParameters.constEnd() ) - { - if ( !it.key().startsWith( externalLayerId.toUpper() + ":" ) ) - { - break; - } - - QString paramKey = it.key(); - paramKey.remove( 0, externalLayerId.size() + 1 ); - wmsUri.setParam( paramKey.toLower(), it.value() ); - ++it; - } - - wmsLayer = new QgsRasterLayer( wmsUri.encodedUri(), externalLayerId, QStringLiteral( "wms" ) ); + QString wmsUri = mWmsParameters.externalWMSUri( externalLayerId.toUpper() ); + QgsMapLayer *wmsLayer = new QgsRasterLayer( wmsUri, externalLayerId, QStringLiteral( "wms" ) ); if ( !wmsLayer->isValid() ) { delete wmsLayer;