Skip to content

Commit ec8bfa8

Browse files
authoredApr 6, 2019
Merge pull request #9723 from qgis/backport-9696-to-release-3_4
[Backport release-3_4] [server] Server removes empty string in style parameter even if it describes default style
2 parents 070ca7a + 30bf12c commit ec8bfa8

File tree

10 files changed

+89
-9
lines changed

10 files changed

+89
-9
lines changed
 

‎python/server/auto_generated/qgsserverparameters.sip.in

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,12 @@ Returns true if the parameter is valid, false otherwise.
4848
Converts the parameter into a string.
4949
%End
5050

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

5555
:param delimiter: The character used for delimiting
56+
:param skipEmptyParts: To use QString.SkipEmptyParts for splitting
5657

5758
:return: A list of strings
5859
%End

‎src/server/qgsserverparameters.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,21 @@ QString QgsServerParameterDefinition::toString() const
6666
return mValue.toString();
6767
}
6868

69-
QStringList QgsServerParameterDefinition::toStringList( const char delimiter ) const
69+
QStringList QgsServerParameterDefinition::toStringList( const char delimiter, const bool skipEmptyParts ) const
7070
{
71-
return toString().split( delimiter, QString::SkipEmptyParts );
71+
if ( skipEmptyParts )
72+
{
73+
return toString().split( delimiter, QString::SkipEmptyParts );
74+
}
75+
else
76+
{
77+
QStringList list;
78+
if ( !toString().isEmpty() )
79+
{
80+
list = toString().split( delimiter, QString::KeepEmptyParts );
81+
}
82+
return list;
83+
}
7284
}
7385

7486
QList<QgsGeometry> QgsServerParameterDefinition::toGeomList( bool &ok, const char delimiter ) const

‎src/server/qgsserverparameters.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,12 @@ class SERVER_EXPORT QgsServerParameterDefinition
6565
QString toString() const;
6666

6767
/**
68-
* Converts the parameter into a list of strings.
68+
* Converts the parameter into a list of strings
6969
* \param delimiter The character used for delimiting
70+
* \param skipEmptyParts To use QString::SkipEmptyParts for splitting
7071
* \returns A list of strings
7172
*/
72-
QStringList toStringList( char delimiter = ',' ) const;
73+
QStringList toStringList( char delimiter = ',', bool skipEmptyParts = true ) const;
7374

7475
/**
7576
* Converts the parameter into a list of integers.

‎src/server/services/wms/qgswmsparameters.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ namespace QgsWms
4545
QgsServerParameterDefinition::raiseError( msg );
4646
}
4747

48+
QStringList QgsWmsParameter::toStyleList( const char delimiter ) const
49+
{
50+
return QgsServerParameterDefinition::toStringList( delimiter, false );
51+
}
52+
4853
QList<QgsGeometry> QgsWmsParameter::toGeomList( const char delimiter ) const
4954
{
5055
bool ok = true;
@@ -1287,8 +1292,8 @@ namespace QgsWms
12871292

12881293
QStringList QgsWmsParameters::allStyles() const
12891294
{
1290-
QStringList style = mWmsParameters[ QgsWmsParameter::STYLE ].toStringList();
1291-
const QStringList styles = mWmsParameters[ QgsWmsParameter::STYLES ].toStringList();
1295+
QStringList style = mWmsParameters[ QgsWmsParameter::STYLE ].toStyleList();
1296+
const QStringList styles = mWmsParameters[ QgsWmsParameter::STYLES ].toStyleList();
12921297
return style << styles;
12931298
}
12941299

@@ -1550,7 +1555,7 @@ namespace QgsWms
15501555
wmsParam = idParameter( QgsWmsParameter::STYLES, mapId );
15511556
if ( wmsParam.isValid() )
15521557
{
1553-
styles = wmsParam.toStringList();
1558+
styles = wmsParam.toStyleList();
15541559
}
15551560

15561561
QList<QgsWmsParametersLayer> lParams;

‎src/server/services/wms/qgswmsparameters.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,15 @@ namespace QgsWms
192192
*/
193193
bool isValid() const override;
194194

195+
/**
196+
* Converts the parameter into a list of strings and keeps empty parts
197+
* Default style value is an empty string
198+
* \param delimiter The character used for delimiting
199+
* \returns A list of strings
200+
* \since QGIS 3.8
201+
*/
202+
QStringList toStyleList( const char delimiter = ',' ) const;
203+
195204
/**
196205
* Converts the parameter into a list of geometries.
197206
* \param delimiter The character delimiting string geometries

‎tests/src/python/test_qgsserver_wms_getmap.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,58 @@ def test_wms_getmap_style(self):
723723
r, h = self._result(self._execute_request(qs))
724724
self._img_diff_error(r, h, "WMS_GetMap_StyleCustom")
725725

726+
# mixed custom and default style with STYLES parameter
727+
qs = "?" + "&".join(["%s=%s" % i for i in list({
728+
"MAP": urllib.parse.quote(self.projectPath),
729+
"SERVICE": "WMS",
730+
"VERSION": "1.1.1",
731+
"REQUEST": "GetMap",
732+
"LAYERS": "Country_Labels,Hello",
733+
"STYLES": "custom,",
734+
"FORMAT": "image/png",
735+
"BBOX": "-16817707,-4710778,5696513,14587125",
736+
"HEIGHT": "500",
737+
"WIDTH": "500",
738+
"CRS": "EPSG:3857"
739+
}.items())])
740+
741+
r, h = self._result(self._execute_request(qs))
742+
self._img_diff_error(r, h, "WMS_GetMap_StyleMixed")
743+
744+
qs = "?" + "&".join(["%s=%s" % i for i in list({
745+
"MAP": urllib.parse.quote(self.projectPath),
746+
"SERVICE": "WMS",
747+
"VERSION": "1.1.1",
748+
"REQUEST": "GetMap",
749+
"LAYERS": "Hello,Country_Labels",
750+
"STYLES": "default,custom",
751+
"FORMAT": "image/png",
752+
"BBOX": "-16817707,-4710778,5696513,14587125",
753+
"HEIGHT": "500",
754+
"WIDTH": "500",
755+
"CRS": "EPSG:3857"
756+
}.items())])
757+
758+
r, h = self._result(self._execute_request(qs))
759+
self._img_diff_error(r, h, "WMS_GetMap_StyleMixed_LayerOrder")
760+
761+
qs = "?" + "&".join(["%s=%s" % i for i in list({
762+
"MAP": urllib.parse.quote(self.projectPath),
763+
"SERVICE": "WMS",
764+
"VERSION": "1.1.1",
765+
"REQUEST": "GetMap",
766+
"LAYERS": "Hello,Country_Labels",
767+
"STYLES": ",custom",
768+
"FORMAT": "image/png",
769+
"BBOX": "-16817707,-4710778,5696513,14587125",
770+
"HEIGHT": "500",
771+
"WIDTH": "500",
772+
"CRS": "EPSG:3857"
773+
}.items())])
774+
775+
r, h = self._result(self._execute_request(qs))
776+
self._img_diff_error(r, h, "WMS_GetMap_StyleMixed_LayerOrder")
777+
726778
def test_wms_getmap_filter(self):
727779
qs = "?" + "&".join(["%s=%s" % i for i in list({
728780
"MAP": urllib.parse.quote(self.projectPath),
Loading

0 commit comments

Comments
 (0)
Please sign in to comment.