mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
Last Redo [BUGFIX][QGIS Server] Joins was not reloaded if the layer is in cache
Add an accessor to QgsVectorLayer join buffer, to not duplicate QgsVectorLayerJoinBuffer::readXml code
This commit is contained in:
parent
898addfa33
commit
726bac5291
@ -419,6 +419,11 @@ class QgsVectorLayer : QgsMapLayer
|
||||
@returns true if join was found and successfully removed */
|
||||
bool removeJoin( const QString& joinLayerId );
|
||||
|
||||
/**
|
||||
* Acccessor to the join buffer object
|
||||
* @note added 2.14.7
|
||||
*/
|
||||
QgsVectorLayerJoinBuffer* joinBuffer();
|
||||
const QList<QgsVectorJoinInfo> vectorJoins() const;
|
||||
|
||||
/**
|
||||
|
@ -512,6 +512,11 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
|
||||
@returns true if join was found and successfully removed */
|
||||
bool removeJoin( const QString& joinLayerId );
|
||||
|
||||
/**
|
||||
* Acccessor to the join buffer object
|
||||
* @note added 2.14.7
|
||||
*/
|
||||
QgsVectorLayerJoinBuffer* joinBuffer() { return mJoinBuffer; }
|
||||
const QList<QgsVectorJoinInfo> vectorJoins() const;
|
||||
|
||||
/**
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "qgsmaplayerregistry.h"
|
||||
#include "qgsmslayercache.h"
|
||||
#include "qgsrasterlayer.h"
|
||||
#include "qgsvectorlayerjoinbuffer.h"
|
||||
#include "qgseditorwidgetregistry.h"
|
||||
#include "qgslayertreegroup.h"
|
||||
#include "qgslogger.h"
|
||||
@ -237,7 +238,8 @@ QgsMapLayer* QgsServerProjectParser::createLayerFromElement( const QDomElement&
|
||||
{
|
||||
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer *>( layer );
|
||||
addValueRelationLayersForLayer( vlayer );
|
||||
addJoinsToLayer( const_cast<QDomElement&>( elem ), vlayer );
|
||||
QgsVectorLayerJoinBuffer* joinBuffer = vlayer->joinBuffer();
|
||||
joinBuffer->readXml( const_cast<QDomElement&>( elem ) );
|
||||
}
|
||||
|
||||
return layer;
|
||||
@ -1552,50 +1554,6 @@ void QgsServerProjectParser::addJoinLayersForElement( const QDomElement& layerEl
|
||||
}
|
||||
}
|
||||
|
||||
// Based on QgsVectorLayerJoinBuffer::readXml
|
||||
void QgsServerProjectParser::addJoinsToLayer( const QDomElement& layerElem, QgsVectorLayer *vl ) const
|
||||
{
|
||||
if ( !vl )
|
||||
return;
|
||||
|
||||
QDomElement vectorJoinsElem = layerElem.firstChildElement( "vectorjoins" );
|
||||
if ( vectorJoinsElem.isNull() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
QDomNodeList joinList = vectorJoinsElem.elementsByTagName( "join" );
|
||||
for ( int i = 0; i < joinList.size(); ++i )
|
||||
{
|
||||
QDomElement infoElem = joinList.at( i ).toElement();
|
||||
QgsVectorJoinInfo info;
|
||||
info.joinFieldName = infoElem.attribute( "joinFieldName" );
|
||||
info.joinLayerId = infoElem.attribute( "joinLayerId" );
|
||||
info.targetFieldName = infoElem.attribute( "targetFieldName" );
|
||||
info.memoryCache = infoElem.attribute( "memoryCache" ).toInt();
|
||||
|
||||
info.joinFieldIndex = infoElem.attribute( "joinField" ).toInt(); //for compatibility with 1.x
|
||||
info.targetFieldIndex = infoElem.attribute( "targetField" ).toInt(); //for compatibility with 1.x
|
||||
|
||||
QDomElement subsetElem = infoElem.firstChildElement( "joinFieldsSubset" );
|
||||
if ( !subsetElem.isNull() )
|
||||
{
|
||||
QStringList* fieldNames = new QStringList;
|
||||
QDomNodeList fieldNodes = infoElem.elementsByTagName( "field" );
|
||||
for ( int i = 0; i < fieldNodes.count(); ++i )
|
||||
*fieldNames << fieldNodes.at( i ).toElement().attribute( "name" );
|
||||
info.setJoinFieldNamesSubset( fieldNames );
|
||||
}
|
||||
|
||||
if ( infoElem.attribute( "hasCustomPrefix" ).toInt() )
|
||||
info.prefix = infoElem.attribute( "customPrefix" );
|
||||
else
|
||||
info.prefix = QString::null;
|
||||
|
||||
vl->addJoin( info );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsServerProjectParser::addValueRelationLayersForLayer( const QgsVectorLayer *vl ) const
|
||||
{
|
||||
if ( !vl )
|
||||
|
@ -114,8 +114,6 @@ class SERVER_EXPORT QgsServerProjectParser
|
||||
|
||||
/** Add layers for vector joins */
|
||||
void addJoinLayersForElement( const QDomElement& layerElem ) const;
|
||||
/** Update vector joins to layer, based on QgsVectorLayerJoinBuffer::readXml */
|
||||
void addJoinsToLayer( const QDomElement& layerElem, QgsVectorLayer *vl ) const;
|
||||
|
||||
void addValueRelationLayersForLayer( const QgsVectorLayer *vl ) const;
|
||||
/** Add layers which are necessary for the evaluation of the expression function 'getFeature( layer, attributField, value)'*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user