QGIS API Documentation  2.99.0-Master (19b062c)
qgsowsconnection.cpp
Go to the documentation of this file.
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 QgsOwsConnection::QgsOwsConnection( const QString &service, const QString &connName )
38  : mConnName( connName )
39  , mService( service )
40 {
41  QgsDebugMsg( "theConnName = " + connName );
42 
43  QgsSettings settings;
44 
45  QString key = "qgis/connections-" + mService.toLower() + '/' + mConnName;
46  QString credentialsKey = "qgis/" + mService + '/' + mConnName;
47 
48  mConnectionInfo = settings.value( key + "/url" ).toString();
49  mUri.setParam( QStringLiteral( "url" ), settings.value( key + "/url" ).toString() );
50 
51  // Check for credentials and prepend to the connection info
52  QString username = settings.value( credentialsKey + "/username" ).toString();
53  QString password = settings.value( credentialsKey + "/password" ).toString();
54  if ( !username.isEmpty() )
55  {
56  // check for a password, if none prompt to get it
57  mUri.setParam( QStringLiteral( "username" ), username );
58  mUri.setParam( QStringLiteral( "password" ), password );
59  }
60 
61  QString authcfg = settings.value( credentialsKey + "/authcfg" ).toString();
62  if ( !authcfg.isEmpty() )
63  {
64  mUri.setParam( QStringLiteral( "authcfg" ), authcfg );
65  }
66  mConnectionInfo.append( ",authcfg=" + authcfg );
67 
68  if ( mService.compare( QStringLiteral( "WMS" ), Qt::CaseInsensitive ) == 0
69  || mService.compare( QStringLiteral( "WCS" ), Qt::CaseInsensitive ) == 0 )
70  {
72  }
73  else if ( mService.compare( QStringLiteral( "WFS" ), Qt::CaseInsensitive ) == 0 )
74  {
76  }
77 
78  QgsDebugMsg( QString( "encoded uri: '%1'." ).arg( QString( mUri.encodedUri() ) ) );
79 }
80 
82 {
83  return mConnName;
84 }
85 
87 {
88  return mConnectionInfo;
89 }
90 
92 {
93  return mService;
94 }
95 
97 {
98  return mUri;
99 }
100 
102 {
103  addCommonConnectionSettings( uri, settingsKey );
104 
105  QgsSettings settings;
106  QString referer = settings.value( settingsKey + "/referer" ).toString();
107  if ( !referer.isEmpty() )
108  {
109  uri.setParam( QStringLiteral( "referer" ), referer );
110  }
111  if ( settings.value( settingsKey + QStringLiteral( "/ignoreGetMapURI" ), false ).toBool() )
112  {
113  uri.setParam( QStringLiteral( "IgnoreGetMapUrl" ), QStringLiteral( "1" ) );
114  }
115  if ( settings.value( settingsKey + QStringLiteral( "/ignoreGetFeatureInfoURI" ), false ).toBool() )
116  {
117  uri.setParam( QStringLiteral( "IgnoreGetFeatureInfoUrl" ), QStringLiteral( "1" ) );
118  }
119  if ( settings.value( settingsKey + QStringLiteral( "/smoothPixmapTransform" ), false ).toBool() )
120  {
121  uri.setParam( QStringLiteral( "SmoothPixmapTransform" ), QStringLiteral( "1" ) );
122  }
123  QString dpiMode = settings.value( settingsKey + QStringLiteral( "/dpiMode" ), QStringLiteral( "all" ) ).toString();
124  if ( !dpiMode.isEmpty() )
125  {
126  uri.setParam( QStringLiteral( "dpiMode" ), dpiMode );
127  }
128 
129  return uri;
130 }
131 
133 {
134  addCommonConnectionSettings( uri, settingsKey );
135 
136  QgsSettings settings;
137  QString version = settings.value( settingsKey + "/version" ).toString();
138  if ( !version.isEmpty() )
139  {
140  uri.setParam( QStringLiteral( "version" ), version );
141  }
142 
143  QString maxnumfeatures = settings.value( settingsKey + QStringLiteral( "/maxnumfeatures" ) ).toString();
144  if ( !maxnumfeatures.isEmpty() )
145  {
146  uri.setParam( QStringLiteral( "maxNumFeatures" ), maxnumfeatures );
147  }
148 
149  return uri;
150 }
151 
152 QStringList QgsOwsConnection::connectionList( const QString &service )
153 {
154  QgsSettings settings;
155  settings.beginGroup( "qgis/connections-" + service.toLower() );
156  return settings.childGroups();
157 }
158 
160 {
161  QgsSettings settings;
162  return settings.value( "qgis/connections-" + service.toLower() + "/selected" ).toString();
163 }
164 
165 void QgsOwsConnection::setSelectedConnection( const QString &service, const QString &name )
166 {
167  QgsSettings settings;
168  settings.setValue( "qgis/connections-" + service.toLower() + "/selected", name );
169 }
170 
171 void QgsOwsConnection::addCommonConnectionSettings( QgsDataSourceUri &uri, const QString &key )
172 {
173  QgsSettings settings;
174 
175  if ( settings.value( key + QStringLiteral( "/ignoreAxisOrientation" ), false ).toBool() )
176  {
177  uri.setParam( QStringLiteral( "IgnoreAxisOrientation" ), QStringLiteral( "1" ) );
178  }
179  if ( settings.value( key + QStringLiteral( "/invertAxisOrientation" ), false ).toBool() )
180  {
181  uri.setParam( QStringLiteral( "InvertAxisOrientation" ), QStringLiteral( "1" ) );
182  }
183 }
184 
185 void QgsOwsConnection::deleteConnection( const QString &service, const QString &name )
186 {
187  QgsSettings settings;
188  settings.remove( "qgis/connections-" + service.toLower() + '/' + name );
189  settings.remove( "qgis/" + service + '/' + name );
190 }
void remove(const QString &key, const QgsSettings::Section section=QgsSettings::NoSection)
Removes the setting key and any sub-settings of key in a section.
QStringList childGroups() const
Returns a list of all key top-level groups that contain keys that can be read using the QSettings obj...
static QgsDataSourceUri & addWmsWcsConnectionSettings(QgsDataSourceUri &uri, const QString &settingsKey)
Adds uri parameters relating to the settings for a WMS or WCS connection to a QgsDataSourceUri uri...
QString connectionName() const
Returns the connection name.
This class is a composition of two QSettings instances:
Definition: qgssettings.h:55
#define QgsDebugMsg(str)
Definition: qgslogger.h:37
QgsOwsConnection(const QString &service, const QString &connName)
Constructor.
static QStringList connectionList(const QString &service)
Returns the list of connections for the specified service.
void beginGroup(const QString &prefix, const QgsSettings::Section section=QgsSettings::NoSection)
Appends prefix to the current group.
Definition: qgssettings.cpp:86
QString connectionInfo() const
Returns connection info string.
void setValue(const QString &key, const QVariant &value, const QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
QString service() const
Returns a string representing the service type, e.g.
static void setSelectedConnection(const QString &service, const QString &name)
Marks the specified connection for the specified service as selected.
QgsDataSourceUri uri() const
Returns the connection uri.
void setParam(const QString &key, const QString &value)
Set generic param (generic mode)
QgsDataSourceUri mUri
static QgsDataSourceUri & addWfsConnectionSettings(QgsDataSourceUri &uri, const QString &settingsKey)
Adds uri parameters relating to the settings for a WFS connection to a QgsDataSourceUri uri...
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), const Section section=NoSection) const
Returns the value for setting key.
QByteArray encodedUri() const
return complete encoded uri (generic mode)
Class for storing the component parts of a PostgreSQL/RDBMS datasource URI.
static QString selectedConnection(const QString &service)
Retrieves the selected connection for the specified service.
static void deleteConnection(const QString &service, const QString &name)
Deletes the connection for the specified service with the specified name.