Skip to content

Commit 3df34a8

Browse files
committedApr 4, 2014
Re-enable vector joins and value relations
1 parent 3bd2537 commit 3df34a8

File tree

4 files changed

+81
-14
lines changed

4 files changed

+81
-14
lines changed
 

‎src/mapserver/qgsserverprojectparser.cpp

Lines changed: 70 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgsconfigparserutils.h"
2121
#include "qgscrscache.h"
2222
#include "qgsdatasourceuri.h"
23+
#include "qgsmaplayerregistry.h"
2324
#include "qgsmslayercache.h"
2425
#include "qgsrasterlayer.h"
2526

@@ -76,9 +77,8 @@ void QgsServerProjectParser::projectLayerMap( QMap<QString, QgsMapLayer*>& layer
7677
QList<QDomElement>::const_iterator layerElemIt = mProjectLayerElements.constBegin();
7778
for ( ; layerElemIt != mProjectLayerElements.constEnd(); ++layerElemIt )
7879
{
79-
//todo: fixme
80-
//addJoinLayersForElement( *layerElemIt );
81-
//addValueRelationLayersForElement( *layerElemIt );
80+
addJoinLayersForElement( *layerElemIt );
81+
addValueRelationLayersForElement( *layerElemIt );
8282
QgsMapLayer *layer = createLayerFromElement( *layerElemIt );
8383
if ( layer )
8484
{
@@ -257,6 +257,16 @@ QgsMapLayer* QgsServerProjectParser::createLayerFromElement( const QDomElement&
257257
return layer;
258258
}
259259

260+
QgsMapLayer* QgsServerProjectParser::mapLayerFromLayerId( const QString& lId, bool useCache ) const
261+
{
262+
QHash< QString, QDomElement >::const_iterator layerIt = mProjectLayerElementsById.find( lId );
263+
if ( layerIt != mProjectLayerElementsById.constEnd() )
264+
{
265+
return createLayerFromElement( layerIt.value(), useCache );
266+
}
267+
return 0;
268+
}
269+
260270
QString QgsServerProjectParser::layerIdFromLegendLayer( const QDomElement& legendLayer ) const
261271
{
262272
if ( legendLayer.isNull() )
@@ -854,9 +864,9 @@ void QgsServerProjectParser::addLayerFromLegendLayer( const QDomElement& legendL
854864
QHash< QString, QDomElement >::const_iterator layerIt = mProjectLayerElementsById.find( id );
855865
if ( layerIt != mProjectLayerElementsById.constEnd() )
856866
{
857-
//todo: fixme
858-
/*addJoinLayersForElement( layerIt.value(), useCache );
859-
addValueRelationLayersForElement( layerIt.value(), useCache );*/
867+
868+
addJoinLayersForElement( layerIt.value(), useCache );
869+
addValueRelationLayersForElement( layerIt.value(), useCache );
860870
QgsMapLayer* layer = createLayerFromElement( layerIt.value(), useCache );
861871
if ( layer )
862872
{
@@ -1060,3 +1070,57 @@ QStringList QgsServerProjectParser::wfsLayers() const
10601070
}
10611071
return wfsList;
10621072
}
1073+
1074+
void QgsServerProjectParser::addJoinLayersForElement( const QDomElement& layerElem, bool useCache ) const
1075+
{
1076+
QDomElement vectorJoinsElem = layerElem.firstChildElement( "vectorjoins" );
1077+
if ( vectorJoinsElem.isNull() )
1078+
{
1079+
return;
1080+
}
1081+
1082+
QDomNodeList joinNodeList = vectorJoinsElem.elementsByTagName( "join" );
1083+
if ( joinNodeList.size() > 1 )
1084+
{
1085+
return;
1086+
}
1087+
1088+
for ( int i = 0; i < joinNodeList.size(); ++i )
1089+
{
1090+
QString id = joinNodeList.at( i ).toElement().attribute( "joinLayerId" );
1091+
QgsMapLayer* layer = mapLayerFromLayerId( id, useCache );
1092+
if ( layer )
1093+
{
1094+
QgsMapLayerRegistry::instance()->addMapLayer( layer, false, false );
1095+
}
1096+
}
1097+
}
1098+
1099+
void QgsServerProjectParser::addValueRelationLayersForElement( const QDomElement& layerElem, bool useCache ) const
1100+
{
1101+
QDomElement editTypesElem = layerElem.firstChildElement( "edittypes" );
1102+
if ( editTypesElem.isNull() )
1103+
{
1104+
return;
1105+
}
1106+
1107+
QDomNodeList editTypeNodeList = editTypesElem.elementsByTagName( "edittype" );
1108+
for ( int i = 0; i < editTypeNodeList.size(); ++i )
1109+
{
1110+
QDomElement editTypeElem = editTypeNodeList.at( i ).toElement();
1111+
int type = editTypeElem.attribute( "type" ).toInt();
1112+
if ( type == QgsVectorLayer::ValueRelation )
1113+
{
1114+
QString layerId = editTypeElem.attribute( "layer" );
1115+
/*QString keyAttribute = editTypeEleml.attribute( "id" ); //relation attribute in other layer
1116+
QString valueAttribute = editTypeElem.attribute( "value" ); //value attribute in other layer
1117+
QString relationAttribute = editTypeElem.attribute( "name" );*/
1118+
1119+
QgsMapLayer* layer = mapLayerFromLayerId( layerId, useCache );
1120+
if ( layer )
1121+
{
1122+
QgsMapLayerRegistry::instance()->addMapLayer( layer, false, false );
1123+
}
1124+
}
1125+
}
1126+
}

‎src/mapserver/qgsserverprojectparser.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class QgsServerProjectParser
5050
@return the maplayer or 0 in case of error*/
5151
QgsMapLayer* createLayerFromElement( const QDomElement& elem, bool useCache = true ) const;
5252

53+
QgsMapLayer* mapLayerFromLayerId( const QString& lId, bool useCache = true ) const;
54+
5355
/**Returns the layer id under a <legendlayer> tag in the QGIS projectfile*/
5456
QString layerIdFromLegendLayer( const QDomElement& legendLayer ) const;
5557

@@ -105,6 +107,10 @@ class QgsServerProjectParser
105107

106108
QStringList wfsLayers() const;
107109

110+
void addJoinLayersForElement( const QDomElement& layerElem, bool useCache = true ) const;
111+
112+
void addValueRelationLayersForElement( const QDomElement& layerElem, bool useCache = true ) const;
113+
108114
private:
109115

110116
/**Content of project file*/

‎src/mapserver/qgswfsprojectparser.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ void QgsWFSProjectParser::featureTypeList( QDomElement& parentElement, QDomDocum
172172
QString type = elem.attribute( "type" );
173173
if ( type == "vector" )
174174
{
175-
//addJoinLayersForElement( elem ); //todo: fixme
175+
mProjectParser.addJoinLayersForElement( elem );
176176
QgsMapLayer *layer = mProjectParser.createLayerFromElement( elem );
177177
if ( layer && wfsLayersId.contains( layer->id() ) )
178178
{
@@ -421,7 +421,7 @@ void QgsWFSProjectParser::describeFeatureType( const QString& aTypeName, QDomEle
421421
QString type = elem.attribute( "type" );
422422
if ( type == "vector" )
423423
{
424-
//addJoinLayersForElement( elem ); //todo: fixme
424+
mProjectParser.addJoinLayersForElement( elem );
425425
QgsMapLayer *mLayer = mProjectParser.createLayerFromElement( elem );
426426
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
427427
if ( !layer )
@@ -580,7 +580,7 @@ QList<QgsMapLayer*> QgsWFSProjectParser::mapLayerFromTypeName( const QString& aT
580580
QString type = elem.attribute( "type" );
581581
if ( type == "vector" )
582582
{
583-
//addJoinLayersForElement( elem, useCache ); //todo: fixme
583+
mProjectParser.addJoinLayersForElement( elem, useCache );
584584
QgsMapLayer *mLayer = mProjectParser.createLayerFromElement( elem );
585585
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
586586
if ( !layer )

‎src/mapserver/qgswmsprojectparser.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,8 @@ QList<QgsMapLayer*> QgsWMSProjectParser::mapLayerFromStyle( const QString& lName
101101
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElementsByName.find( lName );
102102
if ( layerElemIt != projectLayerElementsByName.constEnd() )
103103
{
104-
//todo: fixme
105-
/*
106-
addJoinLayersForElement( layerElemIt.value(), useCache );
107-
addValueRelationLayersForElement( layerElemIt.value(), useCache );
108-
*/
104+
mProjectParser.addJoinLayersForElement( layerElemIt.value(), useCache );
105+
mProjectParser.addValueRelationLayersForElement( layerElemIt.value(), useCache );
109106
QgsMapLayer* layer = mProjectParser.createLayerFromElement( layerElemIt.value(), useCache );
110107
if ( layer )
111108
{

0 commit comments

Comments
 (0)
Please sign in to comment.