diff --git a/python/core/qgsvectorlayer.sip b/python/core/qgsvectorlayer.sip index 2d815b78997..8f26c1eebcb 100644 --- a/python/core/qgsvectorlayer.sip +++ b/python/core/qgsvectorlayer.sip @@ -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 vectorJoins() const; /** diff --git a/src/core/qgsvectorlayer.h b/src/core/qgsvectorlayer.h index bd4c329e3d4..450f837c9b6 100644 --- a/src/core/qgsvectorlayer.h +++ b/src/core/qgsvectorlayer.h @@ -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 vectorJoins() const; /** diff --git a/src/server/qgsserverprojectparser.cpp b/src/server/qgsserverprojectparser.cpp index 3f885124f0d..2b28d34cca5 100644 --- a/src/server/qgsserverprojectparser.cpp +++ b/src/server/qgsserverprojectparser.cpp @@ -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( layer ); addValueRelationLayersForLayer( vlayer ); - addJoinsToLayer( const_cast( elem ), vlayer ); + QgsVectorLayerJoinBuffer* joinBuffer = vlayer->joinBuffer(); + joinBuffer->readXml( const_cast( 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 ) diff --git a/src/server/qgsserverprojectparser.h b/src/server/qgsserverprojectparser.h index 8a067c16032..3744739e82b 100644 --- a/src/server/qgsserverprojectparser.h +++ b/src/server/qgsserverprojectparser.h @@ -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)'*/