Skip to content

Commit

Permalink
Merge pull request #51582 from 3nids/settings-migrate-arcgis
Browse files Browse the repository at this point in the history
migrate arcgis settings
  • Loading branch information
3nids committed Jan 27, 2023
2 parents 3e657ae + 231c5a6 commit 0b59017
Show file tree
Hide file tree
Showing 13 changed files with 155 additions and 155 deletions.
4 changes: 4 additions & 0 deletions python/core/auto_generated/qgsowsconnection.sip.in
Expand Up @@ -12,6 +12,10 @@







class QgsOwsConnection : QObject
{
%Docstring(signature="appended")
Expand Down
9 changes: 9 additions & 0 deletions src/core/qgsowsconnection.cpp
Expand Up @@ -44,6 +44,15 @@ const QgsSettingsEntryString *QgsXyzConnectionSettings::settingsPassword = new Q
const QgsSettingsEntryString *QgsXyzConnectionSettings::settingsAuthcfg = new QgsSettingsEntryString( QStringLiteral( "authcfg" ), sTreeXyzConnections ) ;


const QgsSettingsEntryString *QgsArcGisConnectionSettings::settingsUrl = new QgsSettingsEntryString( QStringLiteral( "url" ), sTreeConnectionArcgis );
const QgsSettingsEntryString *QgsArcGisConnectionSettings::settingsAuthcfg = new QgsSettingsEntryString( QStringLiteral( "authcfg" ), sTreeConnectionArcgis );
const QgsSettingsEntryString *QgsArcGisConnectionSettings::settingsUsername = new QgsSettingsEntryString( QStringLiteral( "username" ), sTreeConnectionArcgis );
const QgsSettingsEntryString *QgsArcGisConnectionSettings::settingsPassword = new QgsSettingsEntryString( QStringLiteral( "password" ), sTreeConnectionArcgis );
const QgsSettingsEntryVariantMap *QgsArcGisConnectionSettings::settingsHeaders = new QgsSettingsEntryVariantMap( QStringLiteral( "http-header" ), sTreeConnectionArcgis );
const QgsSettingsEntryString *QgsArcGisConnectionSettings::settingsContentEndpoint = new QgsSettingsEntryString( QStringLiteral( "content-endpoint" ), sTreeConnectionArcgis );
const QgsSettingsEntryString *QgsArcGisConnectionSettings::settingsCommunityEndpoint = new QgsSettingsEntryString( QStringLiteral( "community-endpoint" ), sTreeConnectionArcgis );


const QgsSettingsEntryString *QgsOwsConnection::settingsUrl = new QgsSettingsEntryString( QStringLiteral( "url" ), sTreeOwsConnections, QString() ) ;
const QgsSettingsEntryVariantMap *QgsOwsConnection::settingsHeaders = new QgsSettingsEntryVariantMap( QStringLiteral( "http-header" ), sTreeOwsConnections ) ;
const QgsSettingsEntryString *QgsOwsConnection::settingsVersion = new QgsSettingsEntryString( QStringLiteral( "version" ), sTreeOwsConnections, QString() ) ;
Expand Down
22 changes: 22 additions & 0 deletions src/core/qgsowsconnection.h
Expand Up @@ -30,6 +30,8 @@
#include <QStringList>
#include <QPushButton>



/**
* \ingroup core
* \brief Connections settingss for XYZ
Expand All @@ -54,6 +56,26 @@ class CORE_EXPORT QgsXyzConnectionSettings SIP_SKIP
};


/**
* \ingroup core
* \brief Connections settingss for Arcgis
* \since QGIS 3.30
*/
class CORE_EXPORT QgsArcGisConnectionSettings SIP_SKIP
{
public:
static inline QgsSettingsTreeNamedListNode *sTreeConnectionArcgis = QgsSettings::sTreeConnections->createNamedListElement( QStringLiteral( "arcgisfeatureserver" ), QgsSettingsTreeNamedListNode::Option::NamedListSelectedItemSetting );

static const QgsSettingsEntryString *settingsUrl;
static const QgsSettingsEntryString *settingsAuthcfg;
static const QgsSettingsEntryString *settingsUsername;
static const QgsSettingsEntryString *settingsPassword;
static const QgsSettingsEntryVariantMap *settingsHeaders;
static const QgsSettingsEntryString *settingsContentEndpoint;
static const QgsSettingsEntryString *settingsCommunityEndpoint;
};


/**
* \ingroup core
* \brief Connections management
Expand Down
51 changes: 51 additions & 0 deletions src/core/settings/qgssettingsregistrycore.cpp
Expand Up @@ -241,6 +241,33 @@ void QgsSettingsRegistryCore::migrateOldSettings()
}
}

// arcgis - added in 3.30
{
// arcgismapserver entries are not used anymore (even in 3.28, only arcgisfeature server is used)
const QStringList serviceKeys = {QStringLiteral( "qgis/connections-arcgisfeatureserver" ), QStringLiteral( "qgis/connections-arcgismapserver" )};
QgsSettings settings;
for ( const QString &serviceKey : serviceKeys )
{
settings.beginGroup( serviceKey );
const QStringList connections = settings.childGroups();
for ( const QString &connection : connections )
{
QgsArcGisConnectionSettings::settingsUrl->copyValueFromKey( QStringLiteral( "qgis/connections-arcgisfeatureserver/%1/url" ), {connection}, true );
QgsArcGisConnectionSettings::settingsAuthcfg->copyValueFromKey( QStringLiteral( "qgis/ARCGISFEATURESERVER/%1/authcfg" ), {connection}, true );
QgsArcGisConnectionSettings::settingsUsername->copyValueFromKey( QStringLiteral( "qgis/ARCGISFEATURESERVER/%1/username" ), {connection}, true );
QgsArcGisConnectionSettings::settingsPassword->copyValueFromKey( QStringLiteral( "qgis/ARCGISFEATURESERVER/%1/password" ), {connection}, true );
QgsArcGisConnectionSettings::settingsContentEndpoint->copyValueFromKey( QStringLiteral( "qgis/connections-arcgisfeatureserver/%1/content_endpoint" ), {connection}, true );
QgsArcGisConnectionSettings::settingsCommunityEndpoint->copyValueFromKey( QStringLiteral( "qgis/connections-arcgisfeatureserver/%1/community_endpoint" ), {connection}, true );
Q_NOWARN_DEPRECATED_PUSH
settings.beginGroup( connection );
QgsArcGisConnectionSettings::settingsHeaders->setValue( QgsHttpHeaders( settings ).headers(), connection );
settings.endGroup();
Q_NOWARN_DEPRECATED_POP
}
settings.remove( serviceKey );
}
}

// babel devices settings - added in 3.30
{
if ( QgsBabelFormatRegistry::sTreeBabelDevices->items().count() == 0 )
Expand Down Expand Up @@ -394,6 +421,30 @@ void QgsSettingsRegistryCore::backwardCompatibility()
}
}

// Arcgis - added in 3.30
{
QgsSettings settings;
settings.beginGroup( QStringLiteral( "qgis/connections-arcgisfeatureserver" ) );

const QStringList connections = QgsArcGisConnectionSettings::sTreeConnectionArcgis->items();
for ( const QString &connection : connections )
{
// do not overwrite already set setting
QgsArcGisConnectionSettings::settingsUrl->copyValueToKey( QStringLiteral( "qgis/connections-arcgisfeatureserver/%1/url" ), {connection} );
QgsArcGisConnectionSettings::settingsAuthcfg->copyValueToKey( QStringLiteral( "qgis/ARCGISFEATURESERVER/%1/authcfg" ), {connection} );
QgsArcGisConnectionSettings::settingsUsername->copyValueToKey( QStringLiteral( "qgis/ARCGISFEATURESERVER/%1/username" ), {connection} );
QgsArcGisConnectionSettings::settingsPassword->copyValueToKey( QStringLiteral( "qgis/ARCGISFEATURESERVER/%1/password" ), {connection} );
QgsArcGisConnectionSettings::settingsContentEndpoint->copyValueToKey( QStringLiteral( "qgis/connections-arcgisfeatureserver/%1/content_endpoint" ), {connection} );
QgsArcGisConnectionSettings::settingsCommunityEndpoint->copyValueToKey( QStringLiteral( "qgis/connections-arcgisfeatureserver/%1/community_endpoint" ), {connection} );
Q_NOWARN_DEPRECATED_PUSH
settings.beginGroup( connection );
if ( QgsArcGisConnectionSettings::settingsHeaders->exists( connection ) )
QgsHttpHeaders( QgsArcGisConnectionSettings::settingsHeaders->value( connection ) ).updateSettings( settings );
settings.endGroup();
Q_NOWARN_DEPRECATED_POP
}
}

// babel devices settings - added in 3.30
{
const QStringList devices = QgsBabelFormatRegistry::sTreeBabelDevices->items();
Expand Down
55 changes: 19 additions & 36 deletions src/gui/qgsmanageconnectionsdialog.cpp
Expand Up @@ -137,10 +137,8 @@ void QgsManageConnectionsDialog::doExportImport()
doc = saveXyzTilesConnections( items );
break;
case ArcgisMapServer:
doc = saveArcgisConnections( items, QStringLiteral( "ARCGISMAPSERVER" ) );
break;
case ArcgisFeatureServer:
doc = saveArcgisConnections( items, QStringLiteral( "ARCGISFEATURESERVER" ) );
doc = saveArcgisConnections( items );
break;
case VectorTile:
doc = saveVectorTileConnections( items );
Expand Down Expand Up @@ -265,10 +263,8 @@ bool QgsManageConnectionsDialog::populateConnections()
connections = QgsXyzConnectionSettings::sTreeXyzConnections->items();
break;
case ArcgisMapServer:
settings.beginGroup( QStringLiteral( "/qgis/connections-arcgismapserver" ) );
break;
case ArcgisFeatureServer:
settings.beginGroup( QStringLiteral( "/qgis/connections-arcgisfeatureserver" ) );
connections = QgsArcGisConnectionSettings::sTreeConnectionArcgis->items();
break;
case VectorTile:
connections = QgsVectorTileProviderConnection::sTreeConnectionVectorTile->items();
Expand Down Expand Up @@ -697,29 +693,26 @@ QDomDocument QgsManageConnectionsDialog::saveXyzTilesConnections( const QStringL
return doc;
}

QDomDocument QgsManageConnectionsDialog::saveArcgisConnections( const QStringList &connections, const QString &service )
QDomDocument QgsManageConnectionsDialog::saveArcgisConnections( const QStringList &connections )
{
QDomDocument doc( QStringLiteral( "connections" ) );
QDomElement root = doc.createElement( "qgs" + service.toUpper() + "Connections" );
QDomElement root = doc.createElement( "qgsARCGISFEATURESERVERConnections" );
root.setAttribute( QStringLiteral( "version" ), QStringLiteral( "1.0" ) );
doc.appendChild( root );

const QgsSettings settings;
QString path;
for ( int i = 0; i < connections.count(); ++i )
for ( const QString &connection : connections )
{
path = "/qgis/connections-" + service.toLower() + '/';
QDomElement el = doc.createElement( service.toLower() );
el.setAttribute( QStringLiteral( "name" ), connections[ i ] );
el.setAttribute( QStringLiteral( "url" ), settings.value( path + connections[ i ] + "/url" ).toString() );
QDomElement el = doc.createElement( QStringLiteral( "arcgisfeatureserver" ) );
el.setAttribute( QStringLiteral( "name" ), connection );
el.setAttribute( QStringLiteral( "url" ), QgsArcGisConnectionSettings::settingsUrl->value( connection ) );

QgsHttpHeaders httpHeader( path + connections[ i ] );
QgsHttpHeaders httpHeader( QgsArcGisConnectionSettings::settingsHeaders->value( connection ) );
httpHeader.updateDomElement( el );

path = "/qgis/" + service.toUpper() + '/';
el.setAttribute( QStringLiteral( "username" ), settings.value( path + connections[ i ] + "/username" ).toString() );
el.setAttribute( QStringLiteral( "password" ), settings.value( path + connections[ i ] + "/password" ).toString() );
el.setAttribute( QStringLiteral( "authcfg" ), settings.value( path + connections[ i ] + "/authcfg" ).toString() );
el.setAttribute( QStringLiteral( "username" ), QgsArcGisConnectionSettings::settingsUsername->value( connection ) );
el.setAttribute( QStringLiteral( "password" ), QgsArcGisConnectionSettings::settingsPassword->value( connection ) );
el.setAttribute( QStringLiteral( "authcfg" ), QgsArcGisConnectionSettings::settingsAuthcfg->value( connection ) );

root.appendChild( el );
}

Expand Down Expand Up @@ -1409,10 +1402,7 @@ void QgsManageConnectionsDialog::loadArcgisConnections( const QDomDocument &doc,
}

QString connectionName;
QgsSettings settings;
settings.beginGroup( "/qgis/connections-" + service.toLower() );
QStringList keys = settings.childGroups();
settings.endGroup();
QStringList keys = QgsArcGisConnectionSettings::sTreeConnectionArcgis->items();
QDomElement child = root.firstChildElement();
bool prompt = true;
bool overwrite = true;
Expand Down Expand Up @@ -1470,21 +1460,14 @@ void QgsManageConnectionsDialog::loadArcgisConnections( const QDomDocument &doc,
}

// no dups detected or overwrite is allowed
settings.beginGroup( "/qgis/connections-" + service.toLower() );
settings.setValue( QString( '/' + connectionName + "/url" ), child.attribute( QStringLiteral( "url" ) ) );
QgsArcGisConnectionSettings::settingsUrl->setValue( child.attribute( QStringLiteral( "url" ) ), connectionName );

QgsHttpHeaders httpHeader( child );
Q_NOWARN_DEPRECATED_PUSH
httpHeader.updateSettings( settings, QString( '/' + connectionName ) );
Q_NOWARN_DEPRECATED_POP
QgsArcGisConnectionSettings::settingsHeaders->setValue( QgsHttpHeaders( child ).headers(), connectionName );

settings.endGroup();

settings.beginGroup( "/qgis/" + service.toUpper() + '/' + connectionName );
settings.setValue( QStringLiteral( "/username" ), child.attribute( QStringLiteral( "username" ) ) );
settings.setValue( QStringLiteral( "/password" ), child.attribute( QStringLiteral( "password" ) ) );
settings.setValue( QStringLiteral( "/authcfg" ), child.attribute( QStringLiteral( "authcfg" ) ) );
settings.endGroup();
QgsArcGisConnectionSettings::settingsUsername->setValue( child.attribute( QStringLiteral( "username" ) ), connectionName );
QgsArcGisConnectionSettings::settingsPassword->setValue( child.attribute( QStringLiteral( "password" ) ), connectionName );
QgsArcGisConnectionSettings::settingsAuthcfg->setValue( child.attribute( QStringLiteral( "authcfg" ) ), connectionName );

child = child.nextSiblingElement();
}
Expand Down
4 changes: 2 additions & 2 deletions src/gui/qgsmanageconnectionsdialog.h
Expand Up @@ -49,7 +49,7 @@ class GUI_EXPORT QgsManageConnectionsDialog : public QDialog, private Ui::QgsMan
Oracle,
HANA,
XyzTiles,
ArcgisMapServer,
ArcgisMapServer, // TODO QGIS 4: remove
ArcgisFeatureServer,
VectorTile
};
Expand All @@ -75,7 +75,7 @@ class GUI_EXPORT QgsManageConnectionsDialog : public QDialog, private Ui::QgsMan
QDomDocument saveOracleConnections( const QStringList &connections );
QDomDocument saveHanaConnections( const QStringList &connections );
QDomDocument saveXyzTilesConnections( const QStringList &connections );
QDomDocument saveArcgisConnections( const QStringList &connections, const QString &service );
QDomDocument saveArcgisConnections( const QStringList &connections );
QDomDocument saveVectorTileConnections( const QStringList &connections );

void loadOWSConnections( const QDomDocument &doc, const QStringList &items, const QString &service );
Expand Down
3 changes: 0 additions & 3 deletions src/providers/arcgisrest/qgsafsprovider.cpp
Expand Up @@ -29,9 +29,6 @@
#include "qgsreadwritelocker.h"
#include "qgsvariantutils.h"

const QString QgsAfsProvider::AFS_PROVIDER_KEY = QStringLiteral( "arcgisfeatureserver" );
const QString QgsAfsProvider::AFS_PROVIDER_DESCRIPTION = QStringLiteral( "ArcGIS Feature Service data provider" );


QgsAfsProvider::QgsAfsProvider( const QString &uri, const ProviderOptions &options, QgsDataProvider::ReadFlags flags )
: QgsVectorDataProvider( uri, options, flags )
Expand Down
7 changes: 4 additions & 3 deletions src/providers/arcgisrest/qgsafsprovider.h
Expand Up @@ -20,12 +20,13 @@

#include <memory>
#include "qgsvectordataprovider.h"
#include "qgsdatasourceuri.h"
#include "qgsafsshareddata.h"
#include "qgscoordinatereferencesystem.h"
#include "geometry/qgswkbtypes.h"
#include "qgsfields.h"
#include "qgslayermetadata.h"
#include "qgssettings.h"
#include "qgssettingsentryimpl.h"

#include "qgsprovidermetadata.h"
#include "qgshttpheaders.h"
Expand All @@ -39,8 +40,8 @@ class QgsAfsProvider : public QgsVectorDataProvider

public:

static const QString AFS_PROVIDER_KEY;
static const QString AFS_PROVIDER_DESCRIPTION;
static const inline QString AFS_PROVIDER_KEY = QStringLiteral( "arcgisfeatureserver" );
static const inline QString AFS_PROVIDER_DESCRIPTION = QStringLiteral( "ArcGIS Feature Service data provider" );

QgsAfsProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );

Expand Down
4 changes: 2 additions & 2 deletions src/providers/arcgisrest/qgsarcgisrestdataitemguiprovider.cpp
Expand Up @@ -139,7 +139,7 @@ void QgsArcGisRestDataItemGuiProvider::populateContextMenu( QgsDataItem *item, Q

void QgsArcGisRestDataItemGuiProvider::newConnection( QgsDataItem *item )
{
QgsNewArcGisRestConnectionDialog nc( nullptr, QStringLiteral( "qgis/connections-arcgisfeatureserver/" ), QString() );
QgsNewArcGisRestConnectionDialog nc( nullptr, QString() );
nc.setWindowTitle( tr( "Create a New ArcGIS REST Server Connection" ) );

if ( nc.exec() )
Expand All @@ -150,7 +150,7 @@ void QgsArcGisRestDataItemGuiProvider::newConnection( QgsDataItem *item )

void QgsArcGisRestDataItemGuiProvider::editConnection( QgsDataItem *item )
{
QgsNewArcGisRestConnectionDialog nc( nullptr, QStringLiteral( "qgis/connections-arcgisfeatureserver/" ), item->name() );
QgsNewArcGisRestConnectionDialog nc( nullptr, item->name() );
nc.setWindowTitle( tr( "Modify ArcGIS REST Server Connection" ) );

if ( nc.exec() )
Expand Down

0 comments on commit 0b59017

Please sign in to comment.