DescribeFeatureType improvement

This commit is contained in:
D'Hont René-Luc 2012-11-15 17:47:02 +01:00
parent b89d0e275c
commit b1e02ee521
2 changed files with 41 additions and 11 deletions

View File

@ -250,6 +250,11 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
}
QStringList wfsLayersId = wfsLayers();
QStringList typeNameList;
if ( aTypeName != "" )
{
typeNameList = aTypeName.split( "," );
}
foreach ( const QDomElement &elem, mProjectLayerElements )
{
@ -258,7 +263,11 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
{
QgsMapLayer *mLayer = createLayerFromElement( elem );
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
if ( layer && wfsLayersId.contains( layer->id() ) && ( aTypeName == "" || layer->name() == aTypeName ) )
QString typeName = layer->name();
typeName = typeName.replace( QString( " " ), QString( "_" ) );
if ( layer && wfsLayersId.contains( layer->id() ) && ( aTypeName == "" || typeNameList.contains( typeName ) ) )
{
//do a select with searchRect and go through all the features
QgsVectorDataProvider* provider = layer->dataProvider();
@ -270,9 +279,6 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
//hidden attributes for this layer
const QSet<QString>& layerExcludedAttributes = layer->excludeAttributesWFS();
QString typeName = layer->name();
typeName = typeName.replace( QString( " " ), QString( "_" ) );
//xsd:element
QDomElement elementElem = doc.createElement( "element"/*xsd:element*/ );
elementElem.setAttribute( "name", typeName );

View File

@ -284,18 +284,42 @@ QDomDocument QgsWFSServer::describeFeatureType()
importElement.setAttribute( "schemaLocation", "http://schemas.opengis.net/gml/2.1.2/feature.xsd" );
schemaElement.appendChild( importElement );
//read TYPENAME
QString typeName;
QMap<QString, QString>::const_iterator type_name_it = mParameterMap.find( "TYPENAME" );
if ( type_name_it != mParameterMap.end() )
//defining typename
QString typeName = "";
QDomDocument queryDoc;
QString errorMsg;
if ( queryDoc.setContent( mParameterMap.value( "REQUEST_BODY" ), true, &errorMsg ) )
{
typeName = type_name_it.value();
//read doc
QDomElement queryDocElem = queryDoc.documentElement();
QDomNodeList docChildNodes = queryDocElem.childNodes();
if ( docChildNodes.size() )
{
for ( int i = 0; i < docChildNodes.size(); i++ )
{
QDomElement docChildElem = docChildNodes.at( i ).toElement();
if ( docChildElem.tagName() == "TypeName" )
{
if ( typeName == "" )
typeName = docChildElem.text();
else
typeName += "," + docChildElem.text();
}
}
}
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
}
else
{
typeName = "";
//read TYPENAME
QMap<QString, QString>::const_iterator type_name_it = mParameterMap.find( "TYPENAME" );
if ( type_name_it != mParameterMap.end() )
{
typeName = type_name_it.value();
}
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
}
mConfigParser->describeFeatureType( typeName, schemaElement, doc );
return doc;
}