Skip to content

Commit

Permalink
Merge pull request #9696 from rldhont/fix-server-styles-parameters-sp…
Browse files Browse the repository at this point in the history
…litting-master

[server] Server removes empty string in style parameter even if it describes default style
  • Loading branch information
rldhont committed Apr 5, 2019
2 parents 41a9e6f + 98235eb commit 8b508dd
Show file tree
Hide file tree
Showing 10 changed files with 89 additions and 9 deletions.
5 changes: 3 additions & 2 deletions python/server/auto_generated/qgsserverparameters.sip.in
Expand Up @@ -49,11 +49,12 @@ Converts the parameter into a string. If ``defaultValue`` is true
and current value is empty, then the default value is returned.
%End

QStringList toStringList( char delimiter = ',' ) const;
QStringList toStringList( char delimiter = ',', bool skipEmptyParts = true ) const;
%Docstring
Converts the parameter into a list of strings.
Converts the parameter into a list of strings

:param delimiter: The character used for delimiting
:param skipEmptyParts: To use QString.SkipEmptyParts for splitting

:return: A list of strings
%End
Expand Down
16 changes: 14 additions & 2 deletions src/server/qgsserverparameters.cpp
Expand Up @@ -72,9 +72,21 @@ QString QgsServerParameterDefinition::toString( const bool defaultValue ) const
return value;
}

QStringList QgsServerParameterDefinition::toStringList( const char delimiter ) const
QStringList QgsServerParameterDefinition::toStringList( const char delimiter, const bool skipEmptyParts ) const
{
return toString().split( delimiter, QString::SkipEmptyParts );
if ( skipEmptyParts )
{
return toString().split( delimiter, QString::SkipEmptyParts );
}
else
{
QStringList list;
if ( !toString().isEmpty() )
{
list = toString().split( delimiter, QString::KeepEmptyParts );
}
return list;
}
}

QList<QgsGeometry> QgsServerParameterDefinition::toGeomList( bool &ok, const char delimiter ) const
Expand Down
5 changes: 3 additions & 2 deletions src/server/qgsserverparameters.h
Expand Up @@ -65,11 +65,12 @@ class SERVER_EXPORT QgsServerParameterDefinition
QString toString( bool defaultValue = false ) const;

/**
* Converts the parameter into a list of strings.
* Converts the parameter into a list of strings
* \param delimiter The character used for delimiting
* \param skipEmptyParts To use QString::SkipEmptyParts for splitting
* \returns A list of strings
*/
QStringList toStringList( char delimiter = ',' ) const;
QStringList toStringList( char delimiter = ',', bool skipEmptyParts = true ) const;

/**
* Converts the parameter into a list of integers.
Expand Down
11 changes: 8 additions & 3 deletions src/server/services/wms/qgswmsparameters.cpp
Expand Up @@ -46,6 +46,11 @@ namespace QgsWms
QgsServerParameterDefinition::raiseError( msg );
}

QStringList QgsWmsParameter::toStyleList( const char delimiter ) const
{
return QgsServerParameterDefinition::toStringList( delimiter, false );
}

QList<QgsGeometry> QgsWmsParameter::toGeomList( const char delimiter ) const
{
bool ok = true;
Expand Down Expand Up @@ -1368,8 +1373,8 @@ namespace QgsWms

QStringList QgsWmsParameters::allStyles() const
{
QStringList style = mWmsParameters[ QgsWmsParameter::STYLE ].toStringList();
const QStringList styles = mWmsParameters[ QgsWmsParameter::STYLES ].toStringList();
QStringList style = mWmsParameters[ QgsWmsParameter::STYLE ].toStyleList();
const QStringList styles = mWmsParameters[ QgsWmsParameter::STYLES ].toStyleList();
return style << styles;
}

Expand Down Expand Up @@ -1673,7 +1678,7 @@ namespace QgsWms
wmsParam = idParameter( QgsWmsParameter::STYLES, mapId );
if ( wmsParam.isValid() )
{
styles = wmsParam.toStringList();
styles = wmsParam.toStyleList();
}

QList<QgsWmsParametersLayer> lParams;
Expand Down
9 changes: 9 additions & 0 deletions src/server/services/wms/qgswmsparameters.h
Expand Up @@ -201,6 +201,15 @@ namespace QgsWms
*/
bool isValid() const override;

/**
* Converts the parameter into a list of strings and keeps empty parts
* Default style value is an empty string
* \param delimiter The character used for delimiting
* \returns A list of strings
* \since QGIS 3.8
*/
QStringList toStyleList( const char delimiter = ',' ) const;

/**
* Converts the parameter into a list of geometries.
* \param delimiter The character delimiting string geometries
Expand Down
52 changes: 52 additions & 0 deletions tests/src/python/test_qgsserver_wms_getmap.py
Expand Up @@ -742,6 +742,58 @@ def test_wms_getmap_style(self):
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_StyleCustom")

# mixed custom and default style with STYLES parameter
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetMap",
"LAYERS": "Country_Labels,Hello",
"STYLES": "custom,",
"FORMAT": "image/png",
"BBOX": "-16817707,-4710778,5696513,14587125",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857"
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_StyleMixed")

qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetMap",
"LAYERS": "Hello,Country_Labels",
"STYLES": "default,custom",
"FORMAT": "image/png",
"BBOX": "-16817707,-4710778,5696513,14587125",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857"
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_StyleMixed_LayerOrder")

qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetMap",
"LAYERS": "Hello,Country_Labels",
"STYLES": ",custom",
"FORMAT": "image/png",
"BBOX": "-16817707,-4710778,5696513,14587125",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857"
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_StyleMixed_LayerOrder")

def test_wms_getmap_filter(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 8b508dd

Please sign in to comment.