Skip to content

Commit a85387d

Browse files
author
mhugent
committed
[FEATURE]: Optionally specify wms service capabilities in the properties section of the project file (instead of wms_metadata.xml file)
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@15067 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 8ca338e commit a85387d

File tree

5 files changed

+44
-21
lines changed

5 files changed

+44
-21
lines changed

src/mapserver/qgsconfigparser.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "qgsrasterlayer.h"
2424
#include "qgsvectorlayer.h"
2525
#include <sqlite3.h>
26+
#include <QFile>
2627

2728

2829
QgsConfigParser::QgsConfigParser()
@@ -401,3 +402,20 @@ QgsComposition* QgsConfigParser::createPrintComposition( const QString& composer
401402

402403
return c;
403404
}
405+
406+
void QgsConfigParser::serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const
407+
{
408+
QFile wmsService( "wms_metadata.xml" );
409+
if ( wmsService.open( QIODevice::ReadOnly ) )
410+
{
411+
QDomDocument externServiceDoc;
412+
QString parseError;
413+
int errorLineNo;
414+
if ( externServiceDoc.setContent( &wmsService, false, &parseError, &errorLineNo ) )
415+
{
416+
wmsService.close();
417+
QDomElement service = externServiceDoc.firstChildElement();
418+
parentElement.appendChild( service );
419+
}
420+
}
421+
}

src/mapserver/qgsconfigparser.h

+3
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ class QgsConfigParser
101101
/**Adds print capabilities to xml document. ParentElem usually is the <Capabilities> element*/
102102
virtual void printCapabilities( QDomElement& parentElement, QDomDocument& doc ) const = 0;
103103

104+
/**Appends service metadata to the capabilities document*/
105+
virtual void serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const;
106+
104107
protected:
105108
/**Parser to forward not resolved requests (e.g. SLD parser based on user request might have a fallback parser with admin configuration)*/
106109
QgsConfigParser* mFallbackParser;

src/mapserver/qgsprojectparser.cpp

+18-1
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ QSet<int> QgsProjectParser::supportedOutputCrsSet() const
422422
{
423423
return epsgSet;
424424
}
425-
QDomNodeList valueList = propertiesElem.elementsByTagName( "value" );
425+
QDomNodeList valueList = wmsEpsgElem.elementsByTagName( "value" );
426426
bool conversionOk;
427427
for ( int i = 0; i < valueList.size(); ++i )
428428
{
@@ -1009,3 +1009,20 @@ QDomElement QgsProjectParser::composerByName( const QString& composerName ) cons
10091009
return composerElem;
10101010
}
10111011

1012+
void QgsProjectParser::serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const
1013+
{
1014+
QDomElement qgisElem = mXMLDoc->documentElement();
1015+
QDomNodeList serviceCapabilitiesList = qgisElem.elementsByTagName( "WMSServiceCapabilities" );
1016+
if ( serviceCapabilitiesList.size() < 1 ) //service capabilities not embedded in the project file. Use wms_metadata.xml as fallback
1017+
{
1018+
QgsConfigParser::serviceCapabilities( parentElement, doc );
1019+
return;
1020+
}
1021+
1022+
QDomElement serviceElem = serviceCapabilitiesList.at( 0 ).firstChildElement( "Service" );
1023+
if ( !serviceElem.isNull() )
1024+
{
1025+
parentElement.appendChild( doc.importNode( serviceElem, true ) );
1026+
}
1027+
}
1028+

src/mapserver/qgsprojectparser.h

+3
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ class QgsProjectParser: public QgsConfigParser
9393
/**Adds print capabilities to xml document. ParentElem usually is the <Capabilities> element*/
9494
void printCapabilities( QDomElement& parentElement, QDomDocument& doc ) const;
9595

96+
/**Reads service metadata from projectfile or falls back to parent class method if not there*/
97+
void serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const;
98+
9699
private:
97100
/**Content of project file*/
98101
QDomDocument* mXMLDoc;

src/mapserver/qgswmsserver.cpp

+2-20
Original file line numberDiff line numberDiff line change
@@ -78,27 +78,9 @@ QDomDocument QgsWMSServer::getCapabilities()
7878
wmsCapabilitiesElement.setAttribute( "version", "1.3.0" );
7979
doc.appendChild( wmsCapabilitiesElement );
8080

81-
QFile wmsService( "wms_metadata.xml" );
82-
if ( !wmsService.open( QIODevice::ReadOnly ) )
83-
{
84-
//throw an exception...
85-
QgsMSDebugMsg( "external wms service capabilities not found" )
86-
}
87-
else
81+
if ( mConfigParser )
8882
{
89-
QDomDocument externServiceDoc;
90-
QString parseError;
91-
int errorLineNo;
92-
if ( !externServiceDoc.setContent( &wmsService, false, &parseError, &errorLineNo ) )
93-
{
94-
QgsMSDebugMsg( "parse error at setting content of external wms service capabilities: "
95-
+ parseError + " at line " + QString::number( errorLineNo ) )
96-
wmsService.close();
97-
}
98-
wmsService.close();
99-
100-
QDomElement service = externServiceDoc.firstChildElement();
101-
wmsCapabilitiesElement.appendChild( service );
83+
mConfigParser->serviceCapabilities( wmsCapabilitiesElement, doc );
10284
}
10385

10486
//wms:Capability element

0 commit comments

Comments
 (0)