34 QDomDocument doc =
describeLayer( serverIface, project, version, request );
35 response.
setHeader( QStringLiteral(
"Content-Type" ), QStringLiteral(
"text/xml; charset=utf-8" ) );
36 response.
write( doc.toByteArray() );
47 if ( !parameters.contains( QStringLiteral(
"SLD_VERSION" ) ) )
50 QStringLiteral(
"SLD_VERSION is mandatory for DescribeLayer operation" ), 400 );
52 if ( parameters[ QStringLiteral(
"SLD_VERSION" )] != QLatin1String(
"1.1.0" ) )
54 throw QgsServiceException( QStringLiteral(
"InvalidParameterValue" ),
55 QStringLiteral(
"SLD_VERSION = %1 is not supported" ).arg( parameters[ QStringLiteral(
"SLD_VERSION" )] ), 400 );
58 if ( !parameters.contains( QStringLiteral(
"LAYERS" ) ) )
61 QStringLiteral(
"LAYERS is mandatory for DescribeLayer operation" ), 400 );
64 QStringList layersList = parameters[ QStringLiteral(
"LAYERS" )].split(
',', QString::SkipEmptyParts );
65 if ( layersList.isEmpty() )
67 throw QgsServiceException( QStringLiteral(
"InvalidParameterValue" ), QStringLiteral(
"Layers is empty" ), 400 );
69 QDomDocument myDocument = QDomDocument();
71 QDomNode header = myDocument.createProcessingInstruction( QStringLiteral(
"xml" ), QStringLiteral(
"version=\"1.0\" encoding=\"UTF-8\"" ) );
72 myDocument.appendChild( header );
75 QDomElement root = myDocument.createElementNS( QStringLiteral(
"http://www.opengis.net/sld" ), QStringLiteral(
"DescribeLayerResponse" ) );
76 root.setAttribute( QStringLiteral(
"xsi:schemaLocation" ), QStringLiteral(
"http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/DescribeLayer.xsd" ) );
77 root.setAttribute( QStringLiteral(
"xmlns:ows" ), QStringLiteral(
"http://www.opengis.net/ows" ) );
78 root.setAttribute( QStringLiteral(
"xmlns:se" ), QStringLiteral(
"http://www.opengis.net/se" ) );
79 root.setAttribute( QStringLiteral(
"xmlns:xlink" ), QStringLiteral(
"http://www.w3.org/1999/xlink" ) );
80 root.setAttribute( QStringLiteral(
"xmlns:xsi" ), QStringLiteral(
"http://www.w3.org/2001/XMLSchema-instance" ) );
81 myDocument.appendChild( root );
84 QDomElement versionNode = myDocument.createElement( QStringLiteral(
"Version" ) );
85 versionNode.appendChild( myDocument.createTextNode( QStringLiteral(
"1.1.0" ) ) );
86 root.appendChild( versionNode );
90 QString wmsHrefString =
serviceUrl( request, project ).toString();
95 if ( wfsHrefString.isEmpty() )
97 wfsHrefString = wmsHrefString;
103 if ( wcsHrefString.isEmpty() )
105 wcsHrefString = wmsHrefString;
109 #ifdef HAVE_SERVER_PYTHON_PLUGINS
125 QString name = layer->name();
128 else if ( !layer->shortName().isEmpty() )
129 name = layer->shortName();
131 if ( !layersList.contains( name ) )
137 if ( restrictedLayers.contains( layer->name() ) )
139 throw QgsSecurityException( QStringLiteral(
"You are not allowed to access to this layer" ) );
142 #ifdef HAVE_SERVER_PYTHON_PLUGINS
145 throw QgsSecurityException( QStringLiteral(
"You are not allowed to access to this layer" ) );
150 QDomElement layerNode = myDocument.createElement( QStringLiteral(
"LayerDescription" ) );
151 root.appendChild( layerNode );
154 QDomElement typeNode = myDocument.createElement( QStringLiteral(
"owsType" ) );
156 QDomElement oResNode = myDocument.createElement( QStringLiteral(
"se:OnlineResource" ) );
157 oResNode.setAttribute( QStringLiteral(
"xlink:type" ), QStringLiteral(
"simple" ) );
159 QDomElement nameNode = myDocument.createElement( QStringLiteral(
"TypeName" ) );
160 switch ( layer->type() )
164 typeNode.appendChild( myDocument.createTextNode( QStringLiteral(
"wfs" ) ) );
168 oResNode.setAttribute( QStringLiteral(
"xlink:href" ), wfsHrefString );
172 QDomElement typeNameNode = myDocument.createElement( QStringLiteral(
"se:FeatureTypeName" ) );
173 typeNameNode.appendChild( myDocument.createTextNode( name ) );
174 nameNode.appendChild( typeNameNode );
179 typeNode.appendChild( myDocument.createTextNode( QStringLiteral(
"wcs" ) ) );
183 oResNode.setAttribute( QStringLiteral(
"xlink:href" ), wcsHrefString );
187 QDomElement typeNameNode = myDocument.createElement( QStringLiteral(
"se:CoverageTypeName" ) );
188 typeNameNode.appendChild( myDocument.createTextNode( name ) );
189 nameNode.appendChild( typeNameNode );
198 layerNode.appendChild( typeNode );
199 layerNode.appendChild( oResNode );
200 layerNode.appendChild( nameNode );