diff --git a/src/mapserver/qgsprojectparser.cpp b/src/mapserver/qgsprojectparser.cpp index 406b57e3c846..3e623cae6292 100644 --- a/src/mapserver/qgsprojectparser.cpp +++ b/src/mapserver/qgsprojectparser.cpp @@ -953,10 +953,44 @@ int QgsProjectParser::layersAndStyles( QStringList& layers, QStringList& styles } QDomDocument QgsProjectParser::getStyle( const QString& styleName, const QString& layerName ) const -{ - Q_UNUSED( styleName ); - Q_UNUSED( layerName ); - return QDomDocument(); +{ + QDomDocument myDocument = QDomDocument(); + + QDomNode header = myDocument.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"" ); + myDocument.appendChild( header ); + + // Create the root element + QDomElement root = myDocument.createElementNS( "http://www.opengis.net/sld", "StyledLayerDescriptor" ); + root.setAttribute( "version", "1.1.0" ); + root.setAttribute( "xsi:schemaLocation", "http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" ); + root.setAttribute( "xmlns:ogc", "http://www.opengis.net/ogc" ); + root.setAttribute( "xmlns:se", "http://www.opengis.net/se" ); + root.setAttribute( "xmlns:xlink", "http://www.w3.org/1999/xlink" ); + root.setAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); + myDocument.appendChild( root ); + + QList layerList = mapLayerFromStyle( layerName, styleName ); + if ( layerList.size() < 1 ) + { + throw QgsMapServiceException( "Error", QString( "The layer for the TypeName '%1' is not found" ).arg( layerName ) ); + } + + QgsMapLayer* currentLayer = layerList.at( 0 ); + QgsVectorLayer* layer = dynamic_cast( currentLayer ); + if ( !layer ) + { + throw QgsMapServiceException( "Error", QString( "Could not get style because:\n%1" ).arg( "Non-vector layers not supported yet" ) ); + } + // Create the NamedLayer element + QDomElement namedLayerNode = myDocument.createElement( "NamedLayer" ); + root.appendChild( namedLayerNode ); + + QString errorMsg; + if ( !layer->writeSld( namedLayerNode, myDocument, errorMsg ) ) + { + throw QgsMapServiceException( "Error", QString( "Could not get style because:\n%1" ).arg( errorMsg ) ); + } + return myDocument; } QgsMapRenderer::OutputUnits QgsProjectParser::outputUnits() const