Skip to content

Commit d7f12ea

Browse files
authoredMar 28, 2019
Merge pull request #9624 from pblottiere/server_context_3
[server] Add a WMS render context
2 parents 5b5cc50 + 131b659 commit d7f12ea

14 files changed

+1035
-688
lines changed
 

‎src/server/services/wms/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ SET (wms_SRCS
2020
qgswmsrenderer.cpp
2121
qgswmsparameters.cpp
2222
qgslayerrestorer.cpp
23+
qgswmsrendercontext.cpp
2324
)
2425

2526
SET (wms_MOC_HDRS

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,24 @@ email : david dot marteau at 3liz dot com
2222
namespace QgsWms
2323
{
2424
void writeAsDxf( QgsServerInterface *serverIface, const QgsProject *project,
25-
const QString &version, const QgsServerRequest &request,
25+
const QString &, const QgsServerRequest &request,
2626
QgsServerResponse &response )
2727
{
28-
Q_UNUSED( version );
28+
// get wms parameters from query
29+
QgsWmsParameters parameters( QUrlQuery( request.url() ) );
2930

30-
QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) );
31-
QgsRenderer renderer( serverIface, project, wmsParameters );
31+
// prepare render context
32+
QgsWmsRenderContext context( project, serverIface );
33+
context.setFlag( QgsWmsRenderContext::UseWfsLayersOnly );
34+
context.setFlag( QgsWmsRenderContext::UseOpacity );
35+
context.setFlag( QgsWmsRenderContext::UseFilter );
36+
context.setFlag( QgsWmsRenderContext::SetAccessControl );
37+
context.setParameters( parameters );
3238

3339
// Write output
40+
QgsRenderer renderer( context );
3441
QgsDxfExport dxf = renderer.getDxf();
3542
response.setHeader( "Content-Type", "application/dxf" );
36-
dxf.writeToFile( response.io(), wmsParameters.dxfCodec() );
43+
dxf.writeToFile( response.io(), parameters.dxfCodec() );
3744
}
3845
} // namespace QgsWms

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

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,25 @@
2424

2525
namespace QgsWms
2626
{
27-
2827
void writeGetFeatureInfo( QgsServerInterface *serverIface, const QgsProject *project,
2928
const QString &version, const QgsServerRequest &request,
3029
QgsServerResponse &response )
3130
{
32-
Q_UNUSED( version );
33-
QgsServerRequest::Parameters params = request.parameters();
34-
35-
QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) );
36-
QgsRenderer renderer( serverIface, project, wmsParameters );
37-
38-
QString infoFormat = params.value( QStringLiteral( "INFO_FORMAT" ), QStringLiteral( "text/plain" ) );
39-
31+
// get wms parameters from query
32+
QgsWmsParameters parameters( QUrlQuery( request.url() ) );
33+
34+
// prepare render context
35+
QgsWmsRenderContext context( project, serverIface );
36+
context.setFlag( QgsWmsRenderContext::AddQueryLayers );
37+
context.setFlag( QgsWmsRenderContext::UseFilter );
38+
context.setFlag( QgsWmsRenderContext::UseScaleDenominator );
39+
context.setFlag( QgsWmsRenderContext::SetAccessControl );
40+
context.setParameters( parameters );
41+
42+
const QString infoFormat = request.parameters().value( QStringLiteral( "INFO_FORMAT" ), QStringLiteral( "text/plain" ) );
4043
response.setHeader( QStringLiteral( "Content-Type" ), infoFormat + QStringLiteral( "; charset=utf-8" ) );
44+
45+
QgsRenderer renderer( context );
4146
response.write( renderer.getFeatureInfo( version ) );
4247
}
43-
44-
4548
} // namespace QgsWms
46-
47-
48-
49-

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

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,20 @@
2626

2727
namespace QgsWms
2828
{
29-
3029
void writeGetLegendGraphics( QgsServerInterface *serverIface, const QgsProject *project,
31-
const QString &version, const QgsServerRequest &request,
30+
const QString &, const QgsServerRequest &request,
3231
QgsServerResponse &response )
3332
{
34-
Q_UNUSED( version );
35-
36-
QgsServerRequest::Parameters params = request.parameters();
37-
QString format = params.value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
33+
// get parameters from query
34+
QgsWmsParameters parameters( QUrlQuery( request.url() ) );
3835

39-
QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) );
36+
// init render context
37+
QgsWmsRenderContext context( project, serverIface );
38+
context.setFlag( QgsWmsRenderContext::UseScaleDenominator );
39+
context.setParameters( parameters );
4040

4141
// Get cached image
42+
const QString format = request.parameters().value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
4243
QgsAccessControl *accessControl = nullptr;
4344
QgsServerCacheManager *cacheManager = nullptr;
4445
#ifdef HAVE_SERVER_PYTHON_PLUGINS
@@ -79,13 +80,12 @@ namespace QgsWms
7980
}
8081
}
8182

82-
QgsRenderer renderer( serverIface, project, wmsParameters );
83-
83+
QgsRenderer renderer( context );
8484
std::unique_ptr<QImage> result( renderer.getLegendGraphics() );
8585

8686
if ( result )
8787
{
88-
writeImage( response, *result, format, renderer.imageQuality() );
88+
writeImage( response, *result, format, context.imageQuality() );
8989
if ( cacheManager )
9090
{
9191
QByteArray content = response.data();
@@ -99,10 +99,4 @@ namespace QgsWms
9999
QStringLiteral( "Failed to compute GetLegendGraphics image" ) );
100100
}
101101
}
102-
103-
104102
} // namespace QgsWms
105-
106-
107-
108-

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

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,31 +28,36 @@ namespace QgsWms
2828
{
2929

3030
void writeGetMap( QgsServerInterface *serverIface, const QgsProject *project,
31-
const QString &version, const QgsServerRequest &request,
31+
const QString &, const QgsServerRequest &request,
3232
QgsServerResponse &response )
3333
{
34-
Q_UNUSED( version );
35-
36-
QgsServerRequest::Parameters params = request.parameters();
37-
38-
QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) );
39-
QgsRenderer renderer( serverIface, project, wmsParameters );
40-
34+
// get wms parameters from query
35+
const QgsWmsParameters parameters( QUrlQuery( request.url() ) );
36+
37+
// prepare render context
38+
QgsWmsRenderContext context( project, serverIface );
39+
context.setFlag( QgsWmsRenderContext::UpdateExtent );
40+
context.setFlag( QgsWmsRenderContext::UseOpacity );
41+
context.setFlag( QgsWmsRenderContext::UseFilter );
42+
context.setFlag( QgsWmsRenderContext::UseSelection );
43+
context.setFlag( QgsWmsRenderContext::AddHighlightLayers );
44+
context.setFlag( QgsWmsRenderContext::AddExternalLayers );
45+
context.setFlag( QgsWmsRenderContext::SetAccessControl );
46+
context.setParameters( parameters );
47+
48+
// rendering
49+
QgsRenderer renderer( context );
4150
std::unique_ptr<QImage> result( renderer.getMap() );
51+
4252
if ( result )
4353
{
44-
QString format = params.value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
45-
writeImage( response, *result, format, renderer.imageQuality() );
54+
const QString format = request.parameters().value( QStringLiteral( "FORMAT" ), QStringLiteral( "PNG" ) );
55+
writeImage( response, *result, format, context.imageQuality() );
4656
}
4757
else
4858
{
4959
throw QgsServiceException( QStringLiteral( "UnknownError" ),
5060
QStringLiteral( "Failed to compute GetMap image" ) );
5161
}
5262
}
53-
5463
} // namespace QgsWms
55-
56-
57-
58-

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,12 @@ namespace QgsWms
2828
const QString &, const QgsServerRequest &request,
2929
QgsServerResponse &response )
3030
{
31+
// get wms parameters from query
3132
const QgsWmsParameters wmsParameters( QUrlQuery( request.url() ) );
32-
QgsRenderer renderer( serverIface, project, wmsParameters );
3333

34+
// GetPrint supports svg/png/pdf
3435
const QgsWmsParameters::Format format = wmsParameters.format();
3536
QString contentType;
36-
37-
// GetPrint supports svg/png/pdf
3837
switch ( format )
3938
{
4039
case QgsWmsParameters::PNG:
@@ -55,8 +54,20 @@ namespace QgsWms
5554
break;
5655
}
5756

57+
// prepare render context
58+
QgsWmsRenderContext context( project, serverIface );
59+
context.setFlag( QgsWmsRenderContext::UpdateExtent );
60+
context.setFlag( QgsWmsRenderContext::UseOpacity );
61+
context.setFlag( QgsWmsRenderContext::UseFilter );
62+
context.setFlag( QgsWmsRenderContext::UseSelection );
63+
context.setFlag( QgsWmsRenderContext::SetAccessControl );
64+
context.setFlag( QgsWmsRenderContext::AddHighlightLayers );
65+
context.setFlag( QgsWmsRenderContext::AddExternalLayers );
66+
context.setParameters( wmsParameters );
67+
68+
// rendering
69+
QgsRenderer renderer( context );
5870
response.setHeader( QStringLiteral( "Content-Type" ), contentType );
5971
response.write( renderer.getPrint() );
6072
}
61-
6273
} // namespace QgsWms

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1534,10 +1534,12 @@ namespace QgsWms
15341534

15351535
QList<QgsWmsParametersExternalLayer> QgsWmsParameters::externalLayersParameters() const
15361536
{
1537+
auto notExternalLayer = []( const QString & name ) { return ! QgsWmsParameters::isExternalLayer( name ); };
1538+
15371539
QList<QgsWmsParametersExternalLayer> externalLayers;
15381540

15391541
QStringList layers = allLayersNickname();
1540-
QStringList::const_iterator rit = std::remove_if( layers.begin(), layers.end(), QgsWmsParameters::isExternalLayer );
1542+
QStringList::const_iterator rit = std::remove_if( layers.begin(), layers.end(), notExternalLayer );
15411543

15421544
for ( QStringList::const_iterator it = layers.begin(); it != rit; ++it )
15431545
{

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

Lines changed: 521 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
/***************************************************************************
2+
qgswmsrendercontext.h
3+
---------------------
4+
begin : March 22, 2019
5+
copyright : (C) 2019 by Paul Blottiere
6+
email : paul.blottiere@oslandia.com
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#ifndef QGSWMSRENDERCONTEXT_H
19+
#define QGSWMSRENDERCONTEXT_H
20+
21+
#include "qgswmsparameters.h"
22+
#include "qgsproject.h"
23+
#include "qgsserverinterface.h"
24+
25+
namespace QgsWms
26+
{
27+
28+
/**
29+
* \ingroup server
30+
* \class QgsWmsRenderContext
31+
* \brief Rendering context for the WMS renderer
32+
* \since QGIS 3.8
33+
*/
34+
class QgsWmsRenderContext
35+
{
36+
public:
37+
//! Available rendering options
38+
enum Flag
39+
{
40+
UseScaleDenominator = 0x01,
41+
UseOpacity = 0x02,
42+
UseFilter = 0x04,
43+
UseSelection = 0x08,
44+
AddHighlightLayers = 0x10,
45+
UpdateExtent = 0x20,
46+
SetAccessControl = 0x40,
47+
AddQueryLayers = 0x80,
48+
UseWfsLayersOnly = 0x100,
49+
AddExternalLayers = 0x200
50+
};
51+
Q_DECLARE_FLAGS( Flags, Flag )
52+
53+
/**
54+
* Default constructor for QgsWmsRenderContext.
55+
*/
56+
QgsWmsRenderContext() = default;
57+
58+
/**
59+
* Constructor for QgsWmsRenderContext.
60+
* \param project The project to use for the rendering
61+
* \param interface The server interface
62+
*/
63+
QgsWmsRenderContext( const QgsProject *project, QgsServerInterface *interface );
64+
65+
/**
66+
* Sets WMS parameters.
67+
*/
68+
void setParameters( const QgsWmsParameters &parameters );
69+
70+
/**
71+
* Returns WMS parameters.
72+
*/
73+
QgsWmsParameters parameters() const;
74+
75+
/**
76+
* Returns settings of the server.
77+
*/
78+
const QgsServerSettings &settings() const;
79+
80+
/**
81+
* Returns the project.
82+
*/
83+
const QgsProject *project() const;
84+
85+
/**
86+
* Sets or unsets a rendering flag according to the \a on value.
87+
*/
88+
void setFlag( Flag flag, bool on = true );
89+
90+
/**
91+
* Returns the status of a rendering flag.
92+
* \param flag The flag to test
93+
* \returns true if the rendering option is activated, false otherwise
94+
*/
95+
bool testFlag( Flag flag ) const;
96+
97+
/**
98+
* Returns a list of all layers read from the project.
99+
*/
100+
QList<QgsMapLayer *> layers() const;
101+
102+
/**
103+
* Returns a list of all layers to actually render according to the
104+
* current configuration.
105+
*/
106+
QList<QgsMapLayer *> layersToRender() const;
107+
108+
/**
109+
* Returns a SLD document for a specific layer. An empty document is
110+
* returned if not available.
111+
*/
112+
QDomElement sld( const QgsMapLayer &layer ) const;
113+
114+
/**
115+
* Returns a style's name for a specific layer. An empty string is
116+
* returned if not available.
117+
*/
118+
QString style( const QgsMapLayer &layer ) const;
119+
120+
/**
121+
* Returns the scale denominator to use for rendering according to the
122+
* current configuration.
123+
*/
124+
double scaleDenominator() const;
125+
126+
/**
127+
* Sets a custom scale denominator. In this case, layers to render are
128+
* updated according to their scale visibility.
129+
*/
130+
void setScaleDenominator( double scaleDenominator );
131+
132+
/**
133+
* Returns true if the extent has to be updated before the rendering,
134+
* false otherwise.
135+
*/
136+
bool updateExtent() const;
137+
138+
/**
139+
* Returns WMS parameters for a specific layer. An empty instance is
140+
* returned if not available.
141+
*/
142+
QgsWmsParametersLayer parameters( const QgsMapLayer &layer ) const;
143+
144+
/**
145+
* Returns the image quality to use for rendering according to the
146+
* current configuration.
147+
*/
148+
int imageQuality() const;
149+
150+
/**
151+
* Returns the precision to use according to the current configuration.
152+
*/
153+
int precision() const;
154+
155+
/**
156+
* Returns the nickname (short name, id or name) of the layer according
157+
* to the current configuration.
158+
*/
159+
QString layerNickname( const QgsMapLayer &layer ) const;
160+
161+
/**
162+
* Returns the layer corresponding to the nickname, or a nullptr if not
163+
* found or if the layer do not need to be rendered.
164+
*/
165+
QgsMapLayer *layer( const QString &nickname ) const;
166+
167+
/**
168+
* Returns true if the layer has to be rendered, false otherwise.
169+
*/
170+
bool isValidLayer( const QString &nickname ) const;
171+
172+
/**
173+
* Returns true if \a name is a group.
174+
*/
175+
bool isValidGroup( const QString &name ) const;
176+
177+
/**
178+
* Returns default dots per mm according to the current configuration.
179+
*/
180+
qreal dotsPerMm() const;
181+
182+
#ifdef HAVE_SERVER_PYTHON_PLUGINS
183+
184+
/**
185+
* Returns the access control interface.
186+
*/
187+
QgsAccessControl *accessControl() const;
188+
#endif
189+
190+
private:
191+
void initNicknameLayers();
192+
void initRestrictedLayers();
193+
void initLayerGroupsRecursive( const QgsLayerTreeGroup *group, const QString &groupName );
194+
195+
void searchLayersToRender();
196+
void searchLayersToRenderSld();
197+
void searchLayersToRenderStyle();
198+
void removeUnwantedLayers();
199+
200+
void checkLayerReadPermissions();
201+
202+
bool layerScaleVisibility( const QString &name ) const;
203+
204+
const QgsProject *mProject = nullptr;
205+
QgsServerInterface *mInterface = nullptr;
206+
QgsWmsParameters mParameters;
207+
Flags mFlags = nullptr;
208+
double mScaleDenominator = -1.0;
209+
210+
// nickname of all layers defined within the project
211+
QMap<QString, QgsMapLayer *> mNicknameLayers;
212+
213+
// map of layers to use for rendering
214+
QList<QgsMapLayer *> mLayersToRender;
215+
216+
// list of layers which are not usable
217+
QStringList mRestrictedLayers;
218+
219+
QMap<QString, QList<QgsMapLayer *> > mLayerGroups;
220+
221+
QMap<QString, QDomElement> mSlds;
222+
QMap<QString, QString> mStyles;
223+
};
224+
};
225+
226+
#endif

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

Lines changed: 175 additions & 575 deletions
Large diffs are not rendered by default.

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

Lines changed: 17 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include "qgsserversettings.h"
2424
#include "qgswmsparameters.h"
25+
#include "qgswmsrendercontext.h"
2526
#include "qgsfeaturefilter.h"
2627
#include <QDomDocument>
2728
#include <QMap>
@@ -63,12 +64,15 @@ namespace QgsWms
6364
public:
6465

6566
/**
66-
* Constructor. Does _NOT_ take ownership of
67-
QgsConfigParser and QgsCapabilitiesCache*/
68-
QgsRenderer( QgsServerInterface *serverIface,
69-
const QgsProject *project,
70-
const QgsWmsParameters &parameters );
67+
* Constructor for QgsRenderer.
68+
* \param context The rendering context.
69+
* \since QGIS 3.8
70+
*/
71+
QgsRenderer( const QgsWmsRenderContext &context );
7172

73+
/**
74+
* Destructor for QgsRenderer.
75+
*/
7276
~QgsRenderer();
7377

7478
/**
@@ -108,54 +112,20 @@ namespace QgsWms
108112
*/
109113
QByteArray getFeatureInfo( const QString &version = "1.3.0" );
110114

111-
//! Returns the image quality to use for getMap request
112-
int imageQuality() const;
113-
114-
//! Returns the precision to use for GetFeatureInfo request
115-
int wmsPrecision() const;
116-
117115
private:
118116

119-
// Init the restricted layers with nicknames
120-
void initRestrictedLayers();
121-
122117
// Build and returns highlight layers
123118
QList<QgsMapLayer *> highlightLayers( QList<QgsWmsParametersHighlightLayer> params );
124119

125120
// Build and returns external layers
126121
QList<QgsMapLayer *> externalLayers( const QList<QgsWmsParametersExternalLayer> &params );
127122

128-
// Init a map with nickname for layers' project
129-
void initNicknameLayers();
130-
131-
void initLayerGroupsRecursive( const QgsLayerTreeGroup *group, const QString &groupName );
132-
133-
// Return the nickname of the layer (short name, id or name according to
134-
// the project configuration)
135-
QString layerNickname( const QgsMapLayer &layer ) const;
136-
137-
// Return true if the layer has to be displayed according to he current
138-
// scale
139-
bool layerScaleVisibility( const QgsMapLayer &layer, double scaleDenominator ) const;
140-
141-
// Remove unwanted layers (restricted, not visible, etc)
142-
void removeUnwantedLayers( QList<QgsMapLayer *> &layers, double scaleDenominator = -1 ) const;
143-
144-
// Remove non identifiable layers (restricted, not visible, etc)
145-
void removeNonIdentifiableLayers( QList<QgsMapLayer *> &layers ) const;
146-
147123
// Rendering step for layers
148124
QPainter *layersRendering( const QgsMapSettings &mapSettings, QImage &image, HitTest *hitTest = nullptr ) const;
149125

150126
// Rendering step for annotations
151127
void annotationsRendering( QPainter *painter ) const;
152128

153-
// Return a list of layers stylized with LAYERS/STYLES parameters
154-
QList<QgsMapLayer *> stylizedLayers( const QList<QgsWmsParametersLayer> &params );
155-
156-
// Return a list of layers stylized with SLD parameter
157-
QList<QgsMapLayer *> sldStylizedLayers( const QString &sld ) const;
158-
159129
// Set layer opacity
160130
void setLayerOpacity( QgsMapLayer *layer, int opacity ) const;
161131

@@ -174,15 +144,9 @@ namespace QgsWms
174144
// Scale image with WIDTH/HEIGHT if necessary
175145
QImage *scaleImage( const QImage *image ) const;
176146

177-
// Check layer read permissions
178-
void checkLayerReadPermissions( QgsMapLayer *layer ) const;
179-
180147
// Build a layer tree model for legend
181148
QgsLayerTreeModel *buildLegendTreeModel( const QList<QgsMapLayer *> &layers, double scaleDenominator, QgsLayerTree &rootGroup );
182149

183-
// Returns default dots per mm
184-
qreal dotsPerMm() const;
185-
186150
/**
187151
* Creates a QImage from the HEIGHT and WIDTH parameters
188152
* \param width image width (or -1 if width should be taken from WIDTH wms parameter)
@@ -311,20 +275,19 @@ namespace QgsWms
311275
*/
312276
int width() const;
313277

314-
const QgsWmsParameters &mWmsParameters;
278+
void configureLayers( QList<QgsMapLayer *> &layers, QgsMapSettings *settings = nullptr );
279+
280+
void setLayerStyle( QgsMapLayer *layer, const QString &style ) const;
281+
282+
void setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const;
283+
284+
QgsWmsParameters mWmsParameters;
315285

316-
#ifdef HAVE_SERVER_PYTHON_PLUGINS
317-
//! The access control helper
318-
QgsAccessControl *mAccessControl = nullptr;
319-
#endif
320286
QgsFeatureFilter mFeatureFilter;
321287

322-
const QgsServerSettings &mSettings;
323288
const QgsProject *mProject = nullptr;
324-
QStringList mRestrictedLayers;
325-
QMap<QString, QgsMapLayer *> mNicknameLayers;
326-
QMap<QString, QList<QgsMapLayer *> > mLayerGroups;
327289
QList<QgsMapLayer *> mTemporaryLayers;
290+
QgsWmsRenderContext mContext;
328291
};
329292

330293
} // namespace QgsWms

‎tests/src/python/test_qgsserver_wms_getmap.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ def test_wms_getmap_invalid_size(self):
622622
"SERVICE": "WMS",
623623
"VERSION": "1.3.0",
624624
"REQUEST": "GetMap",
625-
"LAYERS": "Hello",
625+
"LAYERS": "",
626626
"STYLES": "",
627627
"FORMAT": "image/png",
628628
"HEIGHT": "5001",

‎tests/src/server/wms/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ SET(MODULE_WMS_SRCS
3434
${CMAKE_SOURCE_DIR}/src/server/services/wms/qgslayerrestorer.cpp
3535
${CMAKE_SOURCE_DIR}/src/server/services/wms/qgsmaprendererjobproxy.cpp
3636
${CMAKE_SOURCE_DIR}/src/server/services/wms/qgswmsparameters.cpp
37+
${CMAKE_SOURCE_DIR}/src/server/services/wms/qgswmsrendercontext.cpp
3738
)
3839

3940
MACRO (ADD_QGIS_TEST TESTSRC)

‎tests/src/server/wms/test_qgsserver_wms_dxf.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "qgsserverinterfaceimpl.h"
2020
#include "qgswmsparameters.h"
2121
#include "qgswmsrenderer.h"
22+
#include "qgswmsrendercontext.h"
2223

2324
/**
2425
* \ingroup UnitTests
@@ -76,9 +77,17 @@ void TestQgsServerWmsDxf::use_title_as_layername_true()
7677
QgsServiceRegistry registry;
7778
QgsServerSettings settings;
7879
QgsServerInterfaceImpl interface( &cache, &registry, &settings );
79-
QgsWms::QgsRenderer renderer( &interface, &project, parameters );
8080

81+
QgsWms::QgsWmsRenderContext context( &project, &interface );
82+
context.setFlag( QgsWms::QgsWmsRenderContext::UseWfsLayersOnly );
83+
context.setFlag( QgsWms::QgsWmsRenderContext::UseOpacity );
84+
context.setFlag( QgsWms::QgsWmsRenderContext::UseFilter );
85+
context.setFlag( QgsWms::QgsWmsRenderContext::SetAccessControl );
86+
context.setParameters( parameters );
87+
88+
QgsWms::QgsRenderer renderer( context );
8189
QgsDxfExport exporter = renderer.getDxf();
90+
8291
const QString name = exporter.layerName( vl );
8392
QCOMPARE( exporter.layerName( vl ), QString( "testlayer \u00E8\u00E9" ) );
8493

@@ -117,9 +126,17 @@ void TestQgsServerWmsDxf::use_title_as_layername_false()
117126
QgsServiceRegistry registry;
118127
QgsServerSettings settings;
119128
QgsServerInterfaceImpl interface( &cache, &registry, &settings );
120-
QgsWms::QgsRenderer renderer( &interface, &project, parameters );
121129

130+
QgsWms::QgsWmsRenderContext context( &project, &interface );
131+
context.setFlag( QgsWms::QgsWmsRenderContext::UseWfsLayersOnly );
132+
context.setFlag( QgsWms::QgsWmsRenderContext::UseOpacity );
133+
context.setFlag( QgsWms::QgsWmsRenderContext::UseFilter );
134+
context.setFlag( QgsWms::QgsWmsRenderContext::SetAccessControl );
135+
context.setParameters( parameters );
136+
137+
QgsWms::QgsRenderer renderer( context );
122138
QgsDxfExport exporter = renderer.getDxf();
139+
123140
const QString name = exporter.layerName( vl );
124141
QCOMPARE( exporter.layerName( vl ), QString( "A test vector layer" ) );
125142

0 commit comments

Comments
 (0)
Please sign in to comment.