Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsowsconnection.cpp - selector for WMS servers, etc. 3 : : ------------------- 4 : : begin : 3 April 2005 5 : : copyright : 6 : : original : (C) 2005 by Brendan Morley email : morb at ozemail dot com dot au 7 : : wms search : (C) 2009 Mathias Walker <mwa at sourcepole.ch>, Sourcepole AG 8 : : wms-c support : (C) 2010 Juergen E. Fischer < jef at norbit dot de >, norBIT GmbH 9 : : generalized : (C) 2012 Radim Blazek, based on qgswmsconnection.cpp 10 : : 11 : : ***************************************************************************/ 12 : : 13 : : /*************************************************************************** 14 : : * * 15 : : * This program is free software; you can redistribute it and/or modify * 16 : : * it under the terms of the GNU General Public License as published by * 17 : : * the Free Software Foundation; either version 2 of the License, or * 18 : : * (at your option) any later version. * 19 : : * * 20 : : ***************************************************************************/ 21 : : 22 : : #include "qgis.h" // GEO_EPSG_CRS_ID 23 : : #include "qgsdatasourceuri.h" 24 : : #include "qgslogger.h" 25 : : #include "qgsproject.h" 26 : : #include "qgsproviderregistry.h" 27 : : #include "qgsowsconnection.h" 28 : : #include "qgssettings.h" 29 : : 30 : : #include <QInputDialog> 31 : : #include <QMessageBox> 32 : : #include <QPicture> 33 : : #include <QUrl> 34 : : #include <QNetworkRequest> 35 : : #include <QNetworkReply> 36 : : 37 : 0 : QgsOwsConnection::QgsOwsConnection( const QString &service, const QString &connName ) 38 : 0 : : mConnName( connName ) 39 : 0 : , mService( service ) 40 : 0 : { 41 : 0 : QgsDebugMsgLevel( "theConnName = " + connName, 4 ); 42 : : 43 : 0 : QgsSettings settings; 44 : : 45 : 0 : QString key = "qgis/connections-" + mService.toLower() + '/' + mConnName; 46 : 0 : QString credentialsKey = "qgis/" + mService + '/' + mConnName; 47 : : 48 : 0 : mConnectionInfo = settings.value( key + "/url" ).toString(); 49 : 0 : mUri.setParam( QStringLiteral( "url" ), settings.value( key + "/url" ).toString() ); 50 : : 51 : : // Check for credentials and prepend to the connection info 52 : 0 : QString username = settings.value( credentialsKey + "/username" ).toString(); 53 : 0 : QString password = settings.value( credentialsKey + "/password" ).toString(); 54 : 0 : if ( !username.isEmpty() ) 55 : : { 56 : : // check for a password, if none prompt to get it 57 : 0 : mUri.setUsername( username ); 58 : 0 : mUri.setPassword( password ); 59 : 0 : } 60 : : 61 : 0 : QString authcfg = settings.value( credentialsKey + "/authcfg" ).toString(); 62 : 0 : if ( !authcfg.isEmpty() ) 63 : : { 64 : 0 : mUri.setAuthConfigId( authcfg ); 65 : 0 : } 66 : 0 : mConnectionInfo.append( ",authcfg=" + authcfg ); 67 : : 68 : 0 : const QString referer = settings.value( key + "/referer" ).toString(); 69 : 0 : if ( !referer.isEmpty() ) 70 : : { 71 : 0 : mUri.setParam( QStringLiteral( "referer" ), referer ); 72 : 0 : mConnectionInfo.append( ",referer=" + referer ); 73 : 0 : } 74 : : 75 : 0 : if ( mService.compare( QLatin1String( "WMS" ), Qt::CaseInsensitive ) == 0 76 : 0 : || mService.compare( QLatin1String( "WCS" ), Qt::CaseInsensitive ) == 0 ) 77 : : { 78 : 0 : addWmsWcsConnectionSettings( mUri, key ); 79 : 0 : } 80 : 0 : else if ( mService.compare( QLatin1String( "WFS" ), Qt::CaseInsensitive ) == 0 ) 81 : : { 82 : 0 : addWfsConnectionSettings( mUri, key ); 83 : 0 : } 84 : : 85 : 0 : QgsDebugMsgLevel( QStringLiteral( "encoded uri: '%1'." ).arg( QString( mUri.encodedUri() ) ), 4 ); 86 : 0 : } 87 : : 88 : 0 : QString QgsOwsConnection::connectionName() const 89 : : { 90 : 0 : return mConnName; 91 : : } 92 : : 93 : 0 : QString QgsOwsConnection::connectionInfo() const 94 : : { 95 : 0 : return mConnectionInfo; 96 : : } 97 : : 98 : 0 : QString QgsOwsConnection::service() const 99 : : { 100 : 0 : return mService; 101 : : } 102 : : 103 : 0 : QgsDataSourceUri QgsOwsConnection::uri() const 104 : : { 105 : 0 : return mUri; 106 : : } 107 : : 108 : 0 : QgsDataSourceUri &QgsOwsConnection::addWmsWcsConnectionSettings( QgsDataSourceUri &uri, const QString &settingsKey ) 109 : : { 110 : 0 : addCommonConnectionSettings( uri, settingsKey ); 111 : : 112 : 0 : QgsSettings settings; 113 : 0 : QString referer = settings.value( settingsKey + "/referer" ).toString(); 114 : 0 : if ( !referer.isEmpty() ) 115 : : { 116 : 0 : uri.setParam( QStringLiteral( "referer" ), referer ); 117 : 0 : } 118 : 0 : if ( settings.value( settingsKey + QStringLiteral( "/ignoreGetMapURI" ), false ).toBool() ) 119 : : { 120 : 0 : uri.setParam( QStringLiteral( "IgnoreGetMapUrl" ), QStringLiteral( "1" ) ); 121 : 0 : } 122 : 0 : if ( settings.value( settingsKey + QStringLiteral( "/ignoreGetFeatureInfoURI" ), false ).toBool() ) 123 : : { 124 : 0 : uri.setParam( QStringLiteral( "IgnoreGetFeatureInfoUrl" ), QStringLiteral( "1" ) ); 125 : 0 : } 126 : 0 : if ( settings.value( settingsKey + QStringLiteral( "/smoothPixmapTransform" ), false ).toBool() ) 127 : : { 128 : 0 : uri.setParam( QStringLiteral( "SmoothPixmapTransform" ), QStringLiteral( "1" ) ); 129 : 0 : } 130 : 0 : if ( settings.value( settingsKey + QStringLiteral( "/ignoreReportedLayerExtents" ), false ).toBool() ) 131 : : { 132 : 0 : uri.setParam( QStringLiteral( "IgnoreReportedLayerExtents" ), QStringLiteral( "1" ) ); 133 : 0 : } 134 : 0 : QString dpiMode = settings.value( settingsKey + QStringLiteral( "/dpiMode" ), QStringLiteral( "all" ) ).toString(); 135 : 0 : if ( !dpiMode.isEmpty() ) 136 : : { 137 : 0 : uri.setParam( QStringLiteral( "dpiMode" ), dpiMode ); 138 : 0 : } 139 : : 140 : 0 : return uri; 141 : 0 : } 142 : : 143 : 0 : QgsDataSourceUri &QgsOwsConnection::addWfsConnectionSettings( QgsDataSourceUri &uri, const QString &settingsKey ) 144 : : { 145 : 0 : addCommonConnectionSettings( uri, settingsKey ); 146 : : 147 : 0 : QgsSettings settings; 148 : 0 : QString version = settings.value( settingsKey + "/version" ).toString(); 149 : 0 : if ( !version.isEmpty() ) 150 : : { 151 : 0 : uri.setParam( QStringLiteral( "version" ), version ); 152 : 0 : } 153 : : 154 : 0 : QString maxnumfeatures = settings.value( settingsKey + QStringLiteral( "/maxnumfeatures" ) ).toString(); 155 : 0 : if ( !maxnumfeatures.isEmpty() ) 156 : : { 157 : 0 : uri.setParam( QStringLiteral( "maxNumFeatures" ), maxnumfeatures ); 158 : 0 : } 159 : : 160 : 0 : return uri; 161 : 0 : } 162 : : 163 : 0 : QStringList QgsOwsConnection::connectionList( const QString &service ) 164 : : { 165 : 0 : QgsSettings settings; 166 : 0 : settings.beginGroup( "qgis/connections-" + service.toLower() ); 167 : 0 : return settings.childGroups(); 168 : 0 : } 169 : : 170 : 0 : QString QgsOwsConnection::selectedConnection( const QString &service ) 171 : : { 172 : 0 : QgsSettings settings; 173 : 0 : return settings.value( "qgis/connections-" + service.toLower() + "/selected" ).toString(); 174 : 0 : } 175 : : 176 : 0 : void QgsOwsConnection::setSelectedConnection( const QString &service, const QString &name ) 177 : : { 178 : 0 : QgsSettings settings; 179 : 0 : settings.setValue( "qgis/connections-" + service.toLower() + "/selected", name ); 180 : 0 : } 181 : : 182 : 0 : void QgsOwsConnection::addCommonConnectionSettings( QgsDataSourceUri &uri, const QString &key ) 183 : : { 184 : 0 : QgsSettings settings; 185 : : 186 : 0 : if ( settings.value( key + QStringLiteral( "/ignoreAxisOrientation" ), false ).toBool() ) 187 : : { 188 : 0 : uri.setParam( QStringLiteral( "IgnoreAxisOrientation" ), QStringLiteral( "1" ) ); 189 : 0 : } 190 : 0 : if ( settings.value( key + QStringLiteral( "/invertAxisOrientation" ), false ).toBool() ) 191 : : { 192 : 0 : uri.setParam( QStringLiteral( "InvertAxisOrientation" ), QStringLiteral( "1" ) ); 193 : 0 : } 194 : 0 : } 195 : : 196 : 0 : void QgsOwsConnection::deleteConnection( const QString &service, const QString &name ) 197 : : { 198 : 0 : QgsSettings settings; 199 : 0 : settings.remove( "qgis/connections-" + service.toLower() + '/' + name ); 200 : 0 : settings.remove( "qgis/" + service + '/' + name ); 201 : 0 : }