Skip to content

Commit

Permalink
Auto migrate mapserver connections to ArcGIS REST connections
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Dec 23, 2020
1 parent c196a94 commit ac16246
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/providers/arcgisrest/qgsarcgisrestdataitems.cpp
Expand Up @@ -48,6 +48,7 @@ QVector<QgsDataItem *> QgsArcGisRestRootItem::createChildren()
const QString path = QStringLiteral( "afs:/" ) + connName;
connections.append( new QgsArcGisRestConnectionItem( this, connName, path, connName ) );
}

return connections;
}

Expand Down Expand Up @@ -605,6 +606,42 @@ bool QgsArcGisRestParentLayerItem::equal( const QgsDataItem *other )
// QgsAfsDataItemProvider
//

QgsArcGisRestDataItemProvider::QgsArcGisRestDataItemProvider()
{
// migrate legacy map services by moving them to feature server group

QgsSettings settings;
settings.beginGroup( "qgis/connections-arcgismapserver" );
const QStringList legacyServices = settings.childGroups();
settings.endGroup();
settings.beginGroup( "qgis/connections-arcgisfeatureserver" );
QStringList existingServices = settings.childGroups();
settings.endGroup();
for ( const QString &legacyService : legacyServices )
{
QString newName = legacyService;
int i = 1;
while ( existingServices.contains( newName ) )
{
i ++;
newName = QStringLiteral( "%1 (%2)" ).arg( legacyService ).arg( i );
}

settings.beginGroup( QStringLiteral( "qgis/connections-arcgismapserver/%1" ).arg( legacyService ) );
const QStringList keys = settings.childKeys();
settings.endGroup();
for ( const QString &key : keys )
{
QString oldKey = QStringLiteral( "qgis/connections-arcgismapserver/%1/%2" ).arg( legacyService, key );
QString newKey = QStringLiteral( "qgis/connections-arcgisfeatureserver/%1/%2" ).arg( newName, key );
settings.setValue( newKey, settings.value( oldKey ) );
}

settings.remove( QStringLiteral( "qgis/connections-arcgismapserver/%1" ).arg( legacyService ) );
existingServices.append( newName );
}
}

QString QgsArcGisRestDataItemProvider::name()
{
return QStringLiteral( "AFS" );
Expand Down
3 changes: 3 additions & 0 deletions src/providers/arcgisrest/qgsarcgisrestdataitems.h
Expand Up @@ -256,6 +256,9 @@ class QgsArcGisMapServiceLayerItem : public QgsLayerItem
class QgsArcGisRestDataItemProvider : public QgsDataItemProvider
{
public:

QgsArcGisRestDataItemProvider();

QString name() override;

int capabilities() const override;
Expand Down

0 comments on commit ac16246

Please sign in to comment.