23
23
#include " qgsmaplayerstylemanager.h"
24
24
#include " qgsmapserviceexception.h"
25
25
#include " qgspallabeling.h"
26
+ #include " qgsrendererv2.h"
26
27
#include " qgsvectorlayer.h"
27
28
28
29
#include " qgscomposition.h"
41
42
#include < QFileInfo>
42
43
#include < QTextDocument>
43
44
45
+ // style name to use for the unnamed style of layers (must not be empty name in WMS)
46
+ // this implies that a layer style called "default" will not be usable in WMS server
47
+ #define EMPTY_STYLE_NAME " default"
48
+
44
49
QgsWMSProjectParser::QgsWMSProjectParser ( const QString& filePath )
45
50
: QgsWMSConfigParser()
46
51
{
@@ -119,7 +124,7 @@ QList<QgsMapLayer*> QgsWMSProjectParser::mapLayerFromStyle( const QString& lName
119
124
if ( !styleName.isEmpty () )
120
125
{
121
126
// try to apply the specified style
122
- if ( !ml->styleManager ()->setCurrentStyle ( styleName ) )
127
+ if ( !ml->styleManager ()->setCurrentStyle ( styleName != EMPTY_STYLE_NAME ? styleName : QString () ) )
123
128
throw QgsMapServiceException ( " StyleNotDefined" , QString ( " Style \" %1\" does not exist for layer \" %2\" " ).arg ( styleName ).arg ( lName ) );
124
129
}
125
130
return QList<QgsMapLayer*>() << ml;
@@ -901,10 +906,10 @@ void QgsWMSProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrde
901
906
902
907
void QgsWMSProjectParser::addLayerStyles ( QgsMapLayer* currentLayer, QDomDocument& doc, QDomElement& layerElem, const QString& version ) const
903
908
{
904
- foreach ( const QString& styleName, currentLayer->styleManager ()->styles () )
909
+ foreach ( QString styleName, currentLayer->styleManager ()->styles () )
905
910
{
906
911
if ( styleName.isEmpty () )
907
- continue ; // do not explicitly list the default style with no name
912
+ styleName = EMPTY_STYLE_NAME;
908
913
909
914
QDomElement styleElem = doc.createElement ( " Style" );
910
915
QDomElement styleNameElem = doc.createElement ( " Name" );
@@ -1292,10 +1297,10 @@ void QgsWMSProjectParser::addLayers( QDomDocument &doc,
1292
1297
1293
1298
void QgsWMSProjectParser::addOWSLayerStyles ( QgsMapLayer* currentLayer, QDomDocument& doc, QDomElement& layerElem ) const
1294
1299
{
1295
- foreach ( const QString& styleName, currentLayer->styleManager ()->styles () )
1300
+ foreach ( QString styleName, currentLayer->styleManager ()->styles () )
1296
1301
{
1297
1302
if ( styleName.isEmpty () )
1298
- continue ; // do not explicitly list the default style with no name
1303
+ styleName = EMPTY_STYLE_NAME;
1299
1304
1300
1305
QDomElement styleListElem = doc.createElement ( " StyleList" );
1301
1306
// only one default style in project file mode
@@ -1630,7 +1635,8 @@ QDomDocument QgsWMSProjectParser::getStyles( QStringList& layerList ) const
1630
1635
{
1631
1636
QString layerName;
1632
1637
layerName = layerList.at ( i );
1633
- QList<QgsMapLayer*> currentLayerList = mapLayerFromStyle ( layerName, " " , true );
1638
+ // don't use a cache - we may be changing styles
1639
+ QList<QgsMapLayer*> currentLayerList = mapLayerFromStyle ( layerName, " " , false );
1634
1640
if ( currentLayerList.size () < 1 )
1635
1641
{
1636
1642
throw QgsMapServiceException ( " Error" , QString ( " The layer for the TypeName '%1' is not found" ).arg ( layerName ) );
@@ -1647,10 +1653,21 @@ QDomDocument QgsWMSProjectParser::getStyles( QStringList& layerList ) const
1647
1653
QDomElement namedLayerNode = myDocument.createElement ( " NamedLayer" );
1648
1654
root.appendChild ( namedLayerNode );
1649
1655
1650
- QString errorMsg;
1651
- if ( !layer->writeSld ( namedLayerNode, myDocument, errorMsg ) )
1656
+ // store the Name element
1657
+ QDomElement nameNode = myDocument.createElement ( " se:Name" );
1658
+ nameNode.appendChild ( myDocument.createTextNode ( layerName ) );
1659
+ namedLayerNode.appendChild ( nameNode );
1660
+
1661
+ foreach ( QString styleName, layer->styleManager ()->styles () )
1652
1662
{
1653
- throw QgsMapServiceException ( " Error" , QString ( " Could not get style because:\n %1" ).arg ( errorMsg ) );
1663
+ if ( layer->hasGeometryType () )
1664
+ {
1665
+ layer->styleManager ()->setCurrentStyle ( styleName );
1666
+ if ( styleName.isEmpty () )
1667
+ styleName = EMPTY_STYLE_NAME;
1668
+ QDomElement styleElem = layer->rendererV2 ()->writeSld ( myDocument, styleName );
1669
+ namedLayerNode.appendChild ( styleElem );
1670
+ }
1654
1671
}
1655
1672
}
1656
1673
}
0 commit comments