Skip to content

Commit 57a5794

Browse files
committedJan 30, 2015
Server: create wfs layer objects only if layer is published as wfs. Bugfix funded by Sourcepole QGIS Enterprise
1 parent c19eb60 commit 57a5794

File tree

1 file changed

+106
-100
lines changed

1 file changed

+106
-100
lines changed
 

‎src/server/qgswfsprojectparser.cpp

Lines changed: 106 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -66,120 +66,126 @@ void QgsWFSProjectParser::featureTypeList( QDomElement& parentElement, QDomDocum
6666
QString type = elem.attribute( "type" );
6767
if ( type == "vector" )
6868
{
69+
QString layerId = mProjectParser->layerId( elem );
70+
if ( !wfsLayersId.contains( layerId ) )
71+
{
72+
continue;
73+
}
6974
QgsMapLayer *layer = mProjectParser->createLayerFromElement( elem );
70-
if ( layer && wfsLayersId.contains( layer->id() ) )
75+
if ( !layer )
7176
{
72-
QgsDebugMsg( QString( "add layer %1 to map" ).arg( layer->id() ) );
73-
layerMap.insert( layer->id(), layer );
74-
75-
QDomElement layerElem = doc.createElement( "FeatureType" );
76-
QDomElement nameElem = doc.createElement( "Name" );
77-
//We use the layer name even though it might not be unique.
78-
//Because the id sometimes contains user/pw information and the name is more descriptive
79-
QString typeName = layer->name();
80-
typeName = typeName.replace( " ", "_" );
81-
QDomText nameText = doc.createTextNode( typeName );
82-
nameElem.appendChild( nameText );
83-
layerElem.appendChild( nameElem );
84-
85-
QDomElement titleElem = doc.createElement( "Title" );
86-
QString titleName = layer->title();
87-
if ( titleName.isEmpty() )
88-
{
89-
titleName = layer->name();
90-
}
91-
QDomText titleText = doc.createTextNode( titleName );
92-
titleElem.appendChild( titleText );
93-
layerElem.appendChild( titleElem );
77+
continue;
78+
}
79+
QgsDebugMsg( QString( "add layer %1 to map" ).arg( layer->id() ) );
80+
layerMap.insert( layer->id(), layer );
9481

95-
QDomElement abstractElem = doc.createElement( "Abstract" );
96-
QString abstractName = layer->abstract();
97-
if ( abstractName.isEmpty() )
98-
{
99-
abstractName = "";
100-
}
101-
QDomText abstractText = doc.createTextNode( abstractName );
102-
abstractElem.appendChild( abstractText );
103-
layerElem.appendChild( abstractElem );
82+
QDomElement layerElem = doc.createElement( "FeatureType" );
83+
QDomElement nameElem = doc.createElement( "Name" );
84+
//We use the layer name even though it might not be unique.
85+
//Because the id sometimes contains user/pw information and the name is more descriptive
86+
QString typeName = layer->name();
87+
typeName = typeName.replace( " ", "_" );
88+
QDomText nameText = doc.createTextNode( typeName );
89+
nameElem.appendChild( nameText );
90+
layerElem.appendChild( nameElem );
10491

105-
//keyword list
106-
if ( !layer->keywordList().isEmpty() )
107-
{
108-
QDomElement keywordsElem = doc.createElement( "Keywords" );
109-
QDomText keywordsText = doc.createTextNode( layer->keywordList() );
110-
keywordsElem.appendChild( keywordsText );
111-
layerElem.appendChild( keywordsElem );
112-
}
92+
QDomElement titleElem = doc.createElement( "Title" );
93+
QString titleName = layer->title();
94+
if ( titleName.isEmpty() )
95+
{
96+
titleName = layer->name();
97+
}
98+
QDomText titleText = doc.createTextNode( titleName );
99+
titleElem.appendChild( titleText );
100+
layerElem.appendChild( titleElem );
113101

114-
//appendExGeographicBoundingBox( layerElem, doc, layer->extent(), layer->crs() );
102+
QDomElement abstractElem = doc.createElement( "Abstract" );
103+
QString abstractName = layer->abstract();
104+
if ( abstractName.isEmpty() )
105+
{
106+
abstractName = "";
107+
}
108+
QDomText abstractText = doc.createTextNode( abstractName );
109+
abstractElem.appendChild( abstractText );
110+
layerElem.appendChild( abstractElem );
115111

116-
QDomElement srsElem = doc.createElement( "SRS" );
117-
QDomText srsText = doc.createTextNode( layer->crs().authid() );
118-
srsElem.appendChild( srsText );
119-
layerElem.appendChild( srsElem );
112+
//keyword list
113+
if ( !layer->keywordList().isEmpty() )
114+
{
115+
QDomElement keywordsElem = doc.createElement( "Keywords" );
116+
QDomText keywordsText = doc.createTextNode( layer->keywordList() );
117+
keywordsElem.appendChild( keywordsText );
118+
layerElem.appendChild( keywordsElem );
119+
}
120120

121-
//wfs:Operations element
122-
QDomElement operationsElement = doc.createElement( "Operations"/*wfs:Operations*/ );
123-
//wfs:Query element
124-
QDomElement queryElement = doc.createElement( "Query"/*wfs:Query*/ );
125-
operationsElement.appendChild( queryElement );
121+
//appendExGeographicBoundingBox( layerElem, doc, layer->extent(), layer->crs() );
126122

127-
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( layer );
128-
QgsVectorDataProvider* provider = vlayer->dataProvider();
129-
if (( provider->capabilities() & QgsVectorDataProvider::AddFeatures ) && wfstInsertLayersId.contains( layer->id() ) )
130-
{
131-
//wfs:Insert element
132-
QDomElement insertElement = doc.createElement( "Insert"/*wfs:Insert*/ );
133-
operationsElement.appendChild( insertElement );
134-
}
135-
if (( provider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues ) &&
136-
( provider->capabilities() & QgsVectorDataProvider::ChangeGeometries ) &&
137-
wfstUpdateLayersId.contains( layer->id() ) )
138-
{
139-
//wfs:Update element
140-
QDomElement updateElement = doc.createElement( "Update"/*wfs:Update*/ );
141-
operationsElement.appendChild( updateElement );
142-
}
143-
if (( provider->capabilities() & QgsVectorDataProvider::DeleteFeatures ) && wfstDeleteLayersId.contains( layer->id() ) )
144-
{
145-
//wfs:Delete element
146-
QDomElement deleteElement = doc.createElement( "Delete"/*wfs:Delete*/ );
147-
operationsElement.appendChild( deleteElement );
148-
}
123+
QDomElement srsElem = doc.createElement( "SRS" );
124+
QDomText srsText = doc.createTextNode( layer->crs().authid() );
125+
srsElem.appendChild( srsText );
126+
layerElem.appendChild( srsElem );
127+
128+
//wfs:Operations element
129+
QDomElement operationsElement = doc.createElement( "Operations"/*wfs:Operations*/ );
130+
//wfs:Query element
131+
QDomElement queryElement = doc.createElement( "Query"/*wfs:Query*/ );
132+
operationsElement.appendChild( queryElement );
133+
134+
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer*>( layer );
135+
QgsVectorDataProvider* provider = vlayer->dataProvider();
136+
if (( provider->capabilities() & QgsVectorDataProvider::AddFeatures ) && wfstInsertLayersId.contains( layer->id() ) )
137+
{
138+
//wfs:Insert element
139+
QDomElement insertElement = doc.createElement( "Insert"/*wfs:Insert*/ );
140+
operationsElement.appendChild( insertElement );
141+
}
142+
if (( provider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues ) &&
143+
( provider->capabilities() & QgsVectorDataProvider::ChangeGeometries ) &&
144+
wfstUpdateLayersId.contains( layer->id() ) )
145+
{
146+
//wfs:Update element
147+
QDomElement updateElement = doc.createElement( "Update"/*wfs:Update*/ );
148+
operationsElement.appendChild( updateElement );
149+
}
150+
if (( provider->capabilities() & QgsVectorDataProvider::DeleteFeatures ) && wfstDeleteLayersId.contains( layer->id() ) )
151+
{
152+
//wfs:Delete element
153+
QDomElement deleteElement = doc.createElement( "Delete"/*wfs:Delete*/ );
154+
operationsElement.appendChild( deleteElement );
155+
}
149156

150-
layerElem.appendChild( operationsElement );
157+
layerElem.appendChild( operationsElement );
151158

152-
QgsRectangle layerExtent = layer->extent();
153-
QDomElement bBoxElement = doc.createElement( "LatLongBoundingBox" );
154-
bBoxElement.setAttribute( "minx", QString::number( layerExtent.xMinimum() ) );
155-
bBoxElement.setAttribute( "miny", QString::number( layerExtent.yMinimum() ) );
156-
bBoxElement.setAttribute( "maxx", QString::number( layerExtent.xMaximum() ) );
157-
bBoxElement.setAttribute( "maxy", QString::number( layerExtent.yMaximum() ) );
158-
layerElem.appendChild( bBoxElement );
159+
QgsRectangle layerExtent = layer->extent();
160+
QDomElement bBoxElement = doc.createElement( "LatLongBoundingBox" );
161+
bBoxElement.setAttribute( "minx", QString::number( layerExtent.xMinimum() ) );
162+
bBoxElement.setAttribute( "miny", QString::number( layerExtent.yMinimum() ) );
163+
bBoxElement.setAttribute( "maxx", QString::number( layerExtent.xMaximum() ) );
164+
bBoxElement.setAttribute( "maxy", QString::number( layerExtent.yMaximum() ) );
165+
layerElem.appendChild( bBoxElement );
159166

160-
// layer metadata URL
161-
QString metadataUrl = layer->metadataUrl();
162-
if ( !metadataUrl.isEmpty() )
167+
// layer metadata URL
168+
QString metadataUrl = layer->metadataUrl();
169+
if ( !metadataUrl.isEmpty() )
170+
{
171+
QDomElement metaUrlElem = doc.createElement( "MetadataURL" );
172+
QString metadataUrlType = layer->metadataUrlType();
173+
metaUrlElem.setAttribute( "type", metadataUrlType );
174+
QString metadataUrlFormat = layer->metadataUrlFormat();
175+
if ( metadataUrlFormat == "text/xml" )
163176
{
164-
QDomElement metaUrlElem = doc.createElement( "MetadataURL" );
165-
QString metadataUrlType = layer->metadataUrlType();
166-
metaUrlElem.setAttribute( "type", metadataUrlType );
167-
QString metadataUrlFormat = layer->metadataUrlFormat();
168-
if ( metadataUrlFormat == "text/xml" )
169-
{
170-
metaUrlElem.setAttribute( "format", "XML" );
171-
}
172-
else
173-
{
174-
metaUrlElem.setAttribute( "format", "TXT" );
175-
}
176-
QDomText metaUrlText = doc.createTextNode( metadataUrl );
177-
metaUrlElem.appendChild( metaUrlText );
178-
layerElem.appendChild( metaUrlElem );
177+
metaUrlElem.setAttribute( "format", "XML" );
179178
}
180-
181-
parentElement.appendChild( layerElem );
179+
else
180+
{
181+
metaUrlElem.setAttribute( "format", "TXT" );
182+
}
183+
QDomText metaUrlText = doc.createTextNode( metadataUrl );
184+
metaUrlElem.appendChild( metaUrlText );
185+
layerElem.appendChild( metaUrlElem );
182186
}
187+
188+
parentElement.appendChild( layerElem );
183189
}
184190
}
185191
return;

0 commit comments

Comments
 (0)
Please sign in to comment.