Skip to content

Commit ec06223

Browse files
committedMar 27, 2019
Add main loop to configure layers
1 parent 365e01a commit ec06223

File tree

2 files changed

+109
-1
lines changed

2 files changed

+109
-1
lines changed
 

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

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,22 @@ namespace QgsWms
130130
initNicknameLayers();
131131
}
132132

133+
QgsRenderer::QgsRenderer( const QgsWmsRenderContext &context )
134+
: mContext( context )
135+
{
136+
#ifdef HAVE_SERVER_PYTHON_PLUGINS
137+
mAccessControl = mContext.accessControl();
138+
#endif
139+
140+
mProject = mContext.project();
141+
142+
mWmsParameters = mContext.parameters();
143+
mWmsParameters.dump();
144+
145+
initRestrictedLayers();
146+
initNicknameLayers();
147+
}
148+
133149
QgsRenderer::~QgsRenderer()
134150
{
135151
removeTemporaryLayers();
@@ -3436,4 +3452,84 @@ namespace QgsWms
34363452
return mWmsParameters.widthAsInt();
34373453
}
34383454

3455+
void QgsRenderer::configureLayers( QList<QgsMapLayer *> &layers, QgsMapSettings *settings )
3456+
{
3457+
const bool useSld = !mContext.parameters().sldBody().isEmpty();
3458+
3459+
for ( auto layer : layers )
3460+
{
3461+
const QgsWmsParametersLayer param = mContext.parameters( *layer );
3462+
3463+
if ( param.mNickname.isEmpty() )
3464+
{
3465+
continue;
3466+
}
3467+
3468+
if ( useSld )
3469+
{
3470+
setLayerSld( layer, mContext.sld( *layer ) );
3471+
}
3472+
else
3473+
{
3474+
setLayerStyle( layer, mContext.style( *layer ) );
3475+
}
3476+
3477+
if ( mContext.testFlag( QgsWmsRenderContext::UseOpacity ) )
3478+
{
3479+
setLayerOpacity( layer, param.mOpacity );
3480+
}
3481+
3482+
if ( mContext.testFlag( QgsWmsRenderContext::UseFilter ) )
3483+
{
3484+
setLayerFilter( layer, param.mFilter );
3485+
}
3486+
3487+
if ( mContext.testFlag( QgsWmsRenderContext::UseSelection ) )
3488+
{
3489+
setLayerSelection( layer, param.mSelection );
3490+
}
3491+
3492+
if ( settings && mContext.updateExtent() )
3493+
{
3494+
updateExtent( layer, *settings );
3495+
}
3496+
3497+
if ( mContext.testFlag( QgsWmsRenderContext::SetAccessControl ) )
3498+
{
3499+
setLayerAccessControlFilter( layer );
3500+
}
3501+
}
3502+
3503+
if ( mContext.testFlag( QgsWmsRenderContext::AddHighlightLayers ) )
3504+
{
3505+
layers = highlightLayers( mWmsParameters.highlightLayersParameters() ) << layers;
3506+
}
3507+
3508+
if ( mContext.testFlag( QgsWmsRenderContext::AddExternalLayers ) )
3509+
{
3510+
layers = externalLayers( mWmsParameters.externalLayersParameters() ) << layers;
3511+
}
3512+
}
3513+
3514+
void QgsRenderer::setLayerStyle( QgsMapLayer *layer, const QString &style ) const
3515+
{
3516+
if ( style.isEmpty() )
3517+
{
3518+
return;
3519+
}
3520+
3521+
bool rc = layer->styleManager()->setCurrentStyle( style );
3522+
if ( ! rc )
3523+
{
3524+
throw QgsMapServiceException( QStringLiteral( "StyleNotDefined" ),
3525+
QStringLiteral( "Style \"%1\" does not exist for layer \"%2\"" ).arg( style, layer->name() ) );
3526+
}
3527+
}
3528+
3529+
void QgsRenderer::setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const
3530+
{
3531+
QString err;
3532+
layer->readSld( sld, err );
3533+
layer->setCustomProperty( "readSLD", true );
3534+
}
34393535
} // namespace QgsWms

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

Lines changed: 13 additions & 1 deletion
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>
@@ -69,6 +70,8 @@ namespace QgsWms
6970
const QgsProject *project,
7071
const QgsWmsParameters &parameters );
7172

73+
QgsRenderer( const QgsWmsRenderContext &context );
74+
7275
~QgsRenderer();
7376

7477
/**
@@ -313,18 +316,27 @@ namespace QgsWms
313316

314317
const QgsWmsParameters &mWmsParameters;
315318

319+
void configureLayers( QList<QgsMapLayer *> &layers, QgsMapSettings *settings = nullptr );
320+
321+
void setLayerStyle( QgsMapLayer *layer, const QString &style ) const;
322+
323+
void setLayerSld( QgsMapLayer *layer, const QDomElement &sld ) const;
324+
325+
QgsWmsParameters mWmsParameters;
326+
316327
#ifdef HAVE_SERVER_PYTHON_PLUGINS
317328
//! The access control helper
318329
QgsAccessControl *mAccessControl = nullptr;
319330
#endif
320331
QgsFeatureFilter mFeatureFilter;
321332

322-
const QgsServerSettings &mSettings;
333+
QgsServerSettings mSettings;
323334
const QgsProject *mProject = nullptr;
324335
QStringList mRestrictedLayers;
325336
QMap<QString, QgsMapLayer *> mNicknameLayers;
326337
QMap<QString, QList<QgsMapLayer *> > mLayerGroups;
327338
QList<QgsMapLayer *> mTemporaryLayers;
339+
QgsWmsRenderContext mContext;
328340
};
329341

330342
} // namespace QgsWms

0 commit comments

Comments
 (0)