Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsvectorlayerserverproperties.cpp 3 : : ------------------ 4 : : begin : August 23, 2019 5 : : copyright : (C) 2019 by René-Luc D'Hont 6 : : email : rldhont at 3liz dot com 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #include "qgsvectorlayerserverproperties.h" 19 : : #include "qgsvectorlayer.h" 20 : : 21 : : #include <QDomNode> 22 : : 23 : 78 : QgsVectorLayerServerProperties::QgsVectorLayerServerProperties( QgsVectorLayer *layer ) 24 : 78 : : mLayer( layer ) 25 : : { 26 : 78 : } 27 : : 28 : 0 : QMap<int, QString> QgsVectorLayerServerProperties::wmsDimensionDefaultDisplayLabels() 29 : : { 30 : 0 : QMap<int, QString> labels; 31 : 0 : labels[QgsVectorLayerServerProperties::WmsDimensionInfo::AllValues] = QObject::tr( "All values" ); 32 : 0 : labels[QgsVectorLayerServerProperties::WmsDimensionInfo::MinValue] = QObject::tr( "Min value" ); 33 : 0 : labels[QgsVectorLayerServerProperties::WmsDimensionInfo::MaxValue] = QObject::tr( "Max value" ); 34 : 0 : labels[QgsVectorLayerServerProperties::WmsDimensionInfo::ReferenceValue] = QObject::tr( "Reference value" ); 35 : 0 : return labels; 36 : 0 : } 37 : : 38 : 0 : bool QgsVectorLayerServerProperties::addWmsDimension( const QgsVectorLayerServerProperties::WmsDimensionInfo &wmsDimInfo ) 39 : : { 40 : 0 : for ( const QgsVectorLayerServerProperties::WmsDimensionInfo &dim : mWmsDimensions ) 41 : : { 42 : 0 : if ( dim.name == wmsDimInfo.name ) 43 : : { 44 : 0 : return false; 45 : : } 46 : : } 47 : 0 : mWmsDimensions.append( wmsDimInfo ); 48 : 0 : return true; 49 : 0 : } 50 : : 51 : 0 : bool QgsVectorLayerServerProperties::removeWmsDimension( const QString &wmsDimName ) 52 : : { 53 : 0 : for ( int i = 0; i < mWmsDimensions.size(); ++i ) 54 : : { 55 : 0 : if ( mWmsDimensions[ i ].name == wmsDimName ) 56 : : { 57 : 0 : mWmsDimensions.removeAt( i ); 58 : 0 : return true; 59 : : } 60 : 0 : } 61 : 0 : return false; 62 : 0 : } 63 : : 64 : 0 : const QList< QgsVectorLayerServerProperties::WmsDimensionInfo > QgsVectorLayerServerProperties::wmsDimensions() const 65 : : { 66 : 0 : return mWmsDimensions; 67 : : } 68 : : 69 : 0 : void QgsVectorLayerServerProperties::readXml( const QDomNode &layer_node ) 70 : : { 71 : 0 : const QgsFields fields = mLayer->fields(); 72 : : // QGIS Server WMS Dimensions 73 : 0 : const QDomNode wmsDimsNode = layer_node.namedItem( QStringLiteral( "wmsDimensions" ) ); 74 : 0 : if ( !wmsDimsNode.isNull() ) 75 : : { 76 : 0 : const QDomElement wmsDimsElem = wmsDimsNode.toElement(); 77 : 0 : QDomNodeList wmsDimsList = wmsDimsElem.elementsByTagName( QStringLiteral( "dimension" ) ); 78 : 0 : for ( int i = 0; i < wmsDimsList.size(); ++i ) 79 : : { 80 : 0 : QDomElement dimElem = wmsDimsList.at( i ).toElement(); 81 : 0 : QString dimName = dimElem.attribute( QStringLiteral( "name" ) ); 82 : 0 : QString dimFieldName = dimElem.attribute( QStringLiteral( "fieldName" ) ); 83 : : // check field name 84 : 0 : int dimFieldNameIndex = fields.indexOf( dimFieldName ); 85 : 0 : if ( dimFieldNameIndex == -1 ) 86 : : { 87 : 0 : continue; 88 : : } 89 : 0 : QVariant dimRefValue; 90 : 0 : int dimDefaultDisplayType = dimElem.attribute( QStringLiteral( "defaultDisplayType" ) ).toInt(); 91 : 0 : if ( dimDefaultDisplayType == QgsVectorLayerServerProperties::WmsDimensionInfo::AllValues ) 92 : : { 93 : 0 : QString dimRefValueStr = dimElem.attribute( QStringLiteral( "referenceValue" ) ); 94 : 0 : if ( !dimRefValueStr.isEmpty() ) 95 : : { 96 : 0 : QgsField dimField = fields.at( dimFieldNameIndex ); 97 : 0 : dimRefValue = QVariant( dimRefValueStr ); 98 : 0 : if ( !dimField.convertCompatible( dimRefValue ) ) 99 : : { 100 : 0 : continue; 101 : : } 102 : 0 : } 103 : 0 : } 104 : 0 : QgsVectorLayerServerProperties::WmsDimensionInfo dim( dimName, dimFieldName, 105 : 0 : dimElem.attribute( QStringLiteral( "endFieldName" ) ), 106 : 0 : dimElem.attribute( QStringLiteral( "units" ) ), 107 : 0 : dimElem.attribute( QStringLiteral( "unitSymbol" ) ), 108 : : dimDefaultDisplayType, dimRefValue ); 109 : 0 : addWmsDimension( dim ); 110 : 0 : } 111 : 0 : } 112 : 0 : } 113 : : 114 : 0 : void QgsVectorLayerServerProperties::writeXml( QDomNode &layer_node, QDomDocument &document ) const 115 : : { 116 : : // save QGIS Server WMS Dimension definitions 117 : 0 : if ( mWmsDimensions.size() > 0 ) 118 : : { 119 : 0 : QDomElement wmsDimsElem = document.createElement( QStringLiteral( "wmsDimensions" ) ); 120 : 0 : for ( const QgsVectorLayerServerProperties::WmsDimensionInfo &dim : mWmsDimensions ) 121 : : { 122 : 0 : QDomElement dimElem = document.createElement( QStringLiteral( "dimension" ) ); 123 : 0 : dimElem.setAttribute( QStringLiteral( "name" ), dim.name ); 124 : 0 : dimElem.setAttribute( QStringLiteral( "fieldName" ), dim.fieldName ); 125 : 0 : dimElem.setAttribute( QStringLiteral( "endFieldName" ), dim.endFieldName ); 126 : 0 : dimElem.setAttribute( QStringLiteral( "units" ), dim.units ); 127 : 0 : dimElem.setAttribute( QStringLiteral( "unitSymbol" ), dim.unitSymbol ); 128 : 0 : dimElem.setAttribute( QStringLiteral( "defaultDisplayType" ), dim.defaultDisplayType ); 129 : 0 : dimElem.setAttribute( QStringLiteral( "referenceValue" ), dim.referenceValue.toString() ); 130 : 0 : wmsDimsElem.appendChild( dimElem ); 131 : 0 : } 132 : 0 : layer_node.appendChild( wmsDimsElem ); 133 : 0 : } 134 : 0 : }