|
20 | 20 | #include "qgsconfigparserutils.h"
|
21 | 21 | #include "qgscrscache.h"
|
22 | 22 | #include "qgsdatasourceuri.h"
|
| 23 | +#include "qgsmaplayerregistry.h" |
23 | 24 | #include "qgsmslayercache.h"
|
24 | 25 | #include "qgsrasterlayer.h"
|
25 | 26 |
|
@@ -76,9 +77,8 @@ void QgsServerProjectParser::projectLayerMap( QMap<QString, QgsMapLayer*>& layer
|
76 | 77 | QList<QDomElement>::const_iterator layerElemIt = mProjectLayerElements.constBegin();
|
77 | 78 | for ( ; layerElemIt != mProjectLayerElements.constEnd(); ++layerElemIt )
|
78 | 79 | {
|
79 |
| - //todo: fixme |
80 |
| - //addJoinLayersForElement( *layerElemIt ); |
81 |
| - //addValueRelationLayersForElement( *layerElemIt ); |
| 80 | + addJoinLayersForElement( *layerElemIt ); |
| 81 | + addValueRelationLayersForElement( *layerElemIt ); |
82 | 82 | QgsMapLayer *layer = createLayerFromElement( *layerElemIt );
|
83 | 83 | if ( layer )
|
84 | 84 | {
|
@@ -257,6 +257,16 @@ QgsMapLayer* QgsServerProjectParser::createLayerFromElement( const QDomElement&
|
257 | 257 | return layer;
|
258 | 258 | }
|
259 | 259 |
|
| 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 | + |
260 | 270 | QString QgsServerProjectParser::layerIdFromLegendLayer( const QDomElement& legendLayer ) const
|
261 | 271 | {
|
262 | 272 | if ( legendLayer.isNull() )
|
@@ -854,9 +864,9 @@ void QgsServerProjectParser::addLayerFromLegendLayer( const QDomElement& legendL
|
854 | 864 | QHash< QString, QDomElement >::const_iterator layerIt = mProjectLayerElementsById.find( id );
|
855 | 865 | if ( layerIt != mProjectLayerElementsById.constEnd() )
|
856 | 866 | {
|
857 |
| - //todo: fixme |
858 |
| - /*addJoinLayersForElement( layerIt.value(), useCache ); |
859 |
| - addValueRelationLayersForElement( layerIt.value(), useCache );*/ |
| 867 | + |
| 868 | + addJoinLayersForElement( layerIt.value(), useCache ); |
| 869 | + addValueRelationLayersForElement( layerIt.value(), useCache ); |
860 | 870 | QgsMapLayer* layer = createLayerFromElement( layerIt.value(), useCache );
|
861 | 871 | if ( layer )
|
862 | 872 | {
|
@@ -1060,3 +1070,57 @@ QStringList QgsServerProjectParser::wfsLayers() const
|
1060 | 1070 | }
|
1061 | 1071 | return wfsList;
|
1062 | 1072 | }
|
| 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 | +} |
0 commit comments