mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-11 00:04:27 -04:00
Re-enable vector joins and value relations
This commit is contained in:
parent
3bd2537587
commit
3df34a8ba5
@ -20,6 +20,7 @@
|
|||||||
#include "qgsconfigparserutils.h"
|
#include "qgsconfigparserutils.h"
|
||||||
#include "qgscrscache.h"
|
#include "qgscrscache.h"
|
||||||
#include "qgsdatasourceuri.h"
|
#include "qgsdatasourceuri.h"
|
||||||
|
#include "qgsmaplayerregistry.h"
|
||||||
#include "qgsmslayercache.h"
|
#include "qgsmslayercache.h"
|
||||||
#include "qgsrasterlayer.h"
|
#include "qgsrasterlayer.h"
|
||||||
|
|
||||||
@ -76,9 +77,8 @@ void QgsServerProjectParser::projectLayerMap( QMap<QString, QgsMapLayer*>& layer
|
|||||||
QList<QDomElement>::const_iterator layerElemIt = mProjectLayerElements.constBegin();
|
QList<QDomElement>::const_iterator layerElemIt = mProjectLayerElements.constBegin();
|
||||||
for ( ; layerElemIt != mProjectLayerElements.constEnd(); ++layerElemIt )
|
for ( ; layerElemIt != mProjectLayerElements.constEnd(); ++layerElemIt )
|
||||||
{
|
{
|
||||||
//todo: fixme
|
addJoinLayersForElement( *layerElemIt );
|
||||||
//addJoinLayersForElement( *layerElemIt );
|
addValueRelationLayersForElement( *layerElemIt );
|
||||||
//addValueRelationLayersForElement( *layerElemIt );
|
|
||||||
QgsMapLayer *layer = createLayerFromElement( *layerElemIt );
|
QgsMapLayer *layer = createLayerFromElement( *layerElemIt );
|
||||||
if ( layer )
|
if ( layer )
|
||||||
{
|
{
|
||||||
@ -257,6 +257,16 @@ QgsMapLayer* QgsServerProjectParser::createLayerFromElement( const QDomElement&
|
|||||||
return layer;
|
return layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QgsMapLayer* QgsServerProjectParser::mapLayerFromLayerId( const QString& lId, bool useCache ) const
|
||||||
|
{
|
||||||
|
QHash< QString, QDomElement >::const_iterator layerIt = mProjectLayerElementsById.find( lId );
|
||||||
|
if ( layerIt != mProjectLayerElementsById.constEnd() )
|
||||||
|
{
|
||||||
|
return createLayerFromElement( layerIt.value(), useCache );
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
QString QgsServerProjectParser::layerIdFromLegendLayer( const QDomElement& legendLayer ) const
|
QString QgsServerProjectParser::layerIdFromLegendLayer( const QDomElement& legendLayer ) const
|
||||||
{
|
{
|
||||||
if ( legendLayer.isNull() )
|
if ( legendLayer.isNull() )
|
||||||
@ -854,9 +864,9 @@ void QgsServerProjectParser::addLayerFromLegendLayer( const QDomElement& legendL
|
|||||||
QHash< QString, QDomElement >::const_iterator layerIt = mProjectLayerElementsById.find( id );
|
QHash< QString, QDomElement >::const_iterator layerIt = mProjectLayerElementsById.find( id );
|
||||||
if ( layerIt != mProjectLayerElementsById.constEnd() )
|
if ( layerIt != mProjectLayerElementsById.constEnd() )
|
||||||
{
|
{
|
||||||
//todo: fixme
|
|
||||||
/*addJoinLayersForElement( layerIt.value(), useCache );
|
addJoinLayersForElement( layerIt.value(), useCache );
|
||||||
addValueRelationLayersForElement( layerIt.value(), useCache );*/
|
addValueRelationLayersForElement( layerIt.value(), useCache );
|
||||||
QgsMapLayer* layer = createLayerFromElement( layerIt.value(), useCache );
|
QgsMapLayer* layer = createLayerFromElement( layerIt.value(), useCache );
|
||||||
if ( layer )
|
if ( layer )
|
||||||
{
|
{
|
||||||
@ -1060,3 +1070,57 @@ QStringList QgsServerProjectParser::wfsLayers() const
|
|||||||
}
|
}
|
||||||
return wfsList;
|
return wfsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgsServerProjectParser::addJoinLayersForElement( const QDomElement& layerElem, bool useCache ) const
|
||||||
|
{
|
||||||
|
QDomElement vectorJoinsElem = layerElem.firstChildElement( "vectorjoins" );
|
||||||
|
if ( vectorJoinsElem.isNull() )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDomNodeList joinNodeList = vectorJoinsElem.elementsByTagName( "join" );
|
||||||
|
if ( joinNodeList.size() > 1 )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( int i = 0; i < joinNodeList.size(); ++i )
|
||||||
|
{
|
||||||
|
QString id = joinNodeList.at( i ).toElement().attribute( "joinLayerId" );
|
||||||
|
QgsMapLayer* layer = mapLayerFromLayerId( id, useCache );
|
||||||
|
if ( layer )
|
||||||
|
{
|
||||||
|
QgsMapLayerRegistry::instance()->addMapLayer( layer, false, false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QgsServerProjectParser::addValueRelationLayersForElement( const QDomElement& layerElem, bool useCache ) const
|
||||||
|
{
|
||||||
|
QDomElement editTypesElem = layerElem.firstChildElement( "edittypes" );
|
||||||
|
if ( editTypesElem.isNull() )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDomNodeList editTypeNodeList = editTypesElem.elementsByTagName( "edittype" );
|
||||||
|
for ( int i = 0; i < editTypeNodeList.size(); ++i )
|
||||||
|
{
|
||||||
|
QDomElement editTypeElem = editTypeNodeList.at( i ).toElement();
|
||||||
|
int type = editTypeElem.attribute( "type" ).toInt();
|
||||||
|
if ( type == QgsVectorLayer::ValueRelation )
|
||||||
|
{
|
||||||
|
QString layerId = editTypeElem.attribute( "layer" );
|
||||||
|
/*QString keyAttribute = editTypeEleml.attribute( "id" ); //relation attribute in other layer
|
||||||
|
QString valueAttribute = editTypeElem.attribute( "value" ); //value attribute in other layer
|
||||||
|
QString relationAttribute = editTypeElem.attribute( "name" );*/
|
||||||
|
|
||||||
|
QgsMapLayer* layer = mapLayerFromLayerId( layerId, useCache );
|
||||||
|
if ( layer )
|
||||||
|
{
|
||||||
|
QgsMapLayerRegistry::instance()->addMapLayer( layer, false, false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -50,6 +50,8 @@ class QgsServerProjectParser
|
|||||||
@return the maplayer or 0 in case of error*/
|
@return the maplayer or 0 in case of error*/
|
||||||
QgsMapLayer* createLayerFromElement( const QDomElement& elem, bool useCache = true ) const;
|
QgsMapLayer* createLayerFromElement( const QDomElement& elem, bool useCache = true ) const;
|
||||||
|
|
||||||
|
QgsMapLayer* mapLayerFromLayerId( const QString& lId, bool useCache = true ) const;
|
||||||
|
|
||||||
/**Returns the layer id under a <legendlayer> tag in the QGIS projectfile*/
|
/**Returns the layer id under a <legendlayer> tag in the QGIS projectfile*/
|
||||||
QString layerIdFromLegendLayer( const QDomElement& legendLayer ) const;
|
QString layerIdFromLegendLayer( const QDomElement& legendLayer ) const;
|
||||||
|
|
||||||
@ -105,6 +107,10 @@ class QgsServerProjectParser
|
|||||||
|
|
||||||
QStringList wfsLayers() const;
|
QStringList wfsLayers() const;
|
||||||
|
|
||||||
|
void addJoinLayersForElement( const QDomElement& layerElem, bool useCache = true ) const;
|
||||||
|
|
||||||
|
void addValueRelationLayersForElement( const QDomElement& layerElem, bool useCache = true ) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/**Content of project file*/
|
/**Content of project file*/
|
||||||
|
@ -172,7 +172,7 @@ void QgsWFSProjectParser::featureTypeList( QDomElement& parentElement, QDomDocum
|
|||||||
QString type = elem.attribute( "type" );
|
QString type = elem.attribute( "type" );
|
||||||
if ( type == "vector" )
|
if ( type == "vector" )
|
||||||
{
|
{
|
||||||
//addJoinLayersForElement( elem ); //todo: fixme
|
mProjectParser.addJoinLayersForElement( elem );
|
||||||
QgsMapLayer *layer = mProjectParser.createLayerFromElement( elem );
|
QgsMapLayer *layer = mProjectParser.createLayerFromElement( elem );
|
||||||
if ( layer && wfsLayersId.contains( layer->id() ) )
|
if ( layer && wfsLayersId.contains( layer->id() ) )
|
||||||
{
|
{
|
||||||
@ -421,7 +421,7 @@ void QgsWFSProjectParser::describeFeatureType( const QString& aTypeName, QDomEle
|
|||||||
QString type = elem.attribute( "type" );
|
QString type = elem.attribute( "type" );
|
||||||
if ( type == "vector" )
|
if ( type == "vector" )
|
||||||
{
|
{
|
||||||
//addJoinLayersForElement( elem ); //todo: fixme
|
mProjectParser.addJoinLayersForElement( elem );
|
||||||
QgsMapLayer *mLayer = mProjectParser.createLayerFromElement( elem );
|
QgsMapLayer *mLayer = mProjectParser.createLayerFromElement( elem );
|
||||||
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
|
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
|
||||||
if ( !layer )
|
if ( !layer )
|
||||||
@ -580,7 +580,7 @@ QList<QgsMapLayer*> QgsWFSProjectParser::mapLayerFromTypeName( const QString& aT
|
|||||||
QString type = elem.attribute( "type" );
|
QString type = elem.attribute( "type" );
|
||||||
if ( type == "vector" )
|
if ( type == "vector" )
|
||||||
{
|
{
|
||||||
//addJoinLayersForElement( elem, useCache ); //todo: fixme
|
mProjectParser.addJoinLayersForElement( elem, useCache );
|
||||||
QgsMapLayer *mLayer = mProjectParser.createLayerFromElement( elem );
|
QgsMapLayer *mLayer = mProjectParser.createLayerFromElement( elem );
|
||||||
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
|
QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( mLayer );
|
||||||
if ( !layer )
|
if ( !layer )
|
||||||
|
@ -101,11 +101,8 @@ QList<QgsMapLayer*> QgsWMSProjectParser::mapLayerFromStyle( const QString& lName
|
|||||||
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElementsByName.find( lName );
|
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElementsByName.find( lName );
|
||||||
if ( layerElemIt != projectLayerElementsByName.constEnd() )
|
if ( layerElemIt != projectLayerElementsByName.constEnd() )
|
||||||
{
|
{
|
||||||
//todo: fixme
|
mProjectParser.addJoinLayersForElement( layerElemIt.value(), useCache );
|
||||||
/*
|
mProjectParser.addValueRelationLayersForElement( layerElemIt.value(), useCache );
|
||||||
addJoinLayersForElement( layerElemIt.value(), useCache );
|
|
||||||
addValueRelationLayersForElement( layerElemIt.value(), useCache );
|
|
||||||
*/
|
|
||||||
QgsMapLayer* layer = mProjectParser.createLayerFromElement( layerElemIt.value(), useCache );
|
QgsMapLayer* layer = mProjectParser.createLayerFromElement( layerElemIt.value(), useCache );
|
||||||
if ( layer )
|
if ( layer )
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user