From bea1a4667aa977a45746c8e54d08aeafecedbecf Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Thu, 15 Dec 2011 17:22:37 +0100 Subject: [PATCH] Publish layer titles and abstracts in WMS capabilities --- src/mapserver/qgsconfigparser.cpp | 22 ++++++---------------- src/mapserver/qgsconfigparser.h | 2 +- src/mapserver/qgsprojectparser.cpp | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/mapserver/qgsconfigparser.cpp b/src/mapserver/qgsconfigparser.cpp index 14fc79f4f33..a189270b14a 100644 --- a/src/mapserver/qgsconfigparser.cpp +++ b/src/mapserver/qgsconfigparser.cpp @@ -363,6 +363,8 @@ void QgsConfigParser::appendCRSElementsToLayer( QDomElement& layerElement, QDomD //insert the CRS elements after the title element to be in accordance with the WMS 1.3 specification QDomElement titleElement = layerElement.firstChildElement( "Title" ); + QDomElement abstractElement = layerElement.firstChildElement( "Abstract" ); + QDomElement CRSPrecedingElement = abstractElement.isNull() ? titleElement : abstractElement; //last element before the CRS elements //In case the number of advertised CRS is constrained QStringList constrainedCrsList = supportedOutputCrsList(); @@ -370,37 +372,25 @@ void QgsConfigParser::appendCRSElementsToLayer( QDomElement& layerElement, QDomD { for ( int i = constrainedCrsList.size() - 1; i >= 0; --i ) { - appendCRSElementToLayer( layerElement, titleElement, constrainedCrsList.at( i ), doc ); -#if 0 - QDomElement crsElement = doc.createElement( "CRS" ); - QDomText crsText = doc.createTextNode( constrainedCrsList.at( i ) ); - crsElement.appendChild( crsText ); - layerElement.insertAfter( crsElement, titleElement ); -#endif + appendCRSElementToLayer( layerElement, CRSPrecedingElement, constrainedCrsList.at( i ), doc ); } } else //no crs constraint { foreach( QString crs, crsList ) { - appendCRSElementToLayer( layerElement, titleElement, crs, doc ); -#if 0 - QDomElement crsElement = doc.createElement( "CRS" ); - QDomText crsText = doc.createTextNode( *crsIt ); - crsElement.appendChild( crsText ); - layerElement.insertAfter( crsElement, titleElement ); -#endif + appendCRSElementToLayer( layerElement, CRSPrecedingElement, crs, doc ); } } } -void QgsConfigParser::appendCRSElementToLayer( QDomElement& layerElement, const QDomElement& titleElement, const QString& crsText, QDomDocument& doc ) const +void QgsConfigParser::appendCRSElementToLayer( QDomElement& layerElement, const QDomElement& precedingElement, const QString& crsText, QDomDocument& doc ) const { QString version = doc.documentElement().attribute( "version" ); QDomElement crsElement = doc.createElement( version == "1.1.1" ? "SRS" : "CRS" ); QDomText crsTextNode = doc.createTextNode( crsText ); crsElement.appendChild( crsTextNode ); - layerElement.insertAfter( crsElement, titleElement ); + layerElement.insertAfter( crsElement, precedingElement ); } QgsComposition* QgsConfigParser::createPrintComposition( const QString& composerTemplate, QgsMapRenderer* mapRenderer, const QMap< QString, QString >& parameterMap ) const diff --git a/src/mapserver/qgsconfigparser.h b/src/mapserver/qgsconfigparser.h index 8b4b1984f7d..81b64533499 100644 --- a/src/mapserver/qgsconfigparser.h +++ b/src/mapserver/qgsconfigparser.h @@ -170,7 +170,7 @@ class QgsConfigParser @return true in case of success*/ bool crsSetForLayer( const QDomElement& layerElement, QSet &crsSet ) const; void appendCRSElementsToLayer( QDomElement& layerElement, QDomDocument& doc, const QStringList &crsList ) const; - void appendCRSElementToLayer( QDomElement& layerElement, const QDomElement& titleElement, const QString& crsText, QDomDocument& doc ) const; + void appendCRSElementToLayer( QDomElement& layerElement, const QDomElement& precedingElement, const QString& crsText, QDomDocument& doc ) const; void setDefaultLegendSettings(); }; diff --git a/src/mapserver/qgsprojectparser.cpp b/src/mapserver/qgsprojectparser.cpp index 9e46b254519..02dc10aedc3 100644 --- a/src/mapserver/qgsprojectparser.cpp +++ b/src/mapserver/qgsprojectparser.cpp @@ -239,10 +239,24 @@ void QgsProjectParser::addLayers( QDomDocument &doc, layerElem.appendChild( nameElem ); QDomElement titleElem = doc.createElement( "Title" ); - QDomText titleText = doc.createTextNode( currentLayer->name() ); + QString titleName = currentLayer->title(); + if ( titleName.isEmpty() ) + { + titleName = currentLayer->name(); + } + QDomText titleText = doc.createTextNode( titleName ); titleElem.appendChild( titleText ); layerElem.appendChild( titleElem ); + QString abstract = currentLayer->abstract(); + if ( !abstract.isEmpty() ) + { + QDomElement abstractElem = doc.createElement( "Abstract" ); + QDomText abstractText = doc.createTextNode( abstract ); + abstractElem.appendChild( abstractText ); + layerElem.appendChild( abstractElem ); + } + //CRS QStringList crsList = createCRSListForLayer( currentLayer ); appendCRSElementsToLayer( layerElem, doc, crsList );