25#include "moc_qgsmanageconnectionsdialog.cpp"
33#include "qgsgdalcloudconnection.h"
34#include "qgsstacconnection.h"
38 , mFileName( fileName )
40 , mConnectionType( type )
45 QPushButton *pb =
nullptr;
46 pb =
new QPushButton( tr(
"Select All" ) );
47 buttonBox->addButton( pb, QDialogButtonBox::ActionRole );
50 pb =
new QPushButton( tr(
"Clear Selection" ) );
51 buttonBox->addButton( pb, QDialogButtonBox::ActionRole );
54 if ( mDialogMode ==
Import )
56 label->setText( tr(
"Select connections to import" ) );
57 buttonBox->button( QDialogButtonBox::Ok )->setText( tr(
"Import" ) );
58 buttonBox->button( QDialogButtonBox::Ok )->setEnabled(
false );
63 buttonBox->button( QDialogButtonBox::Ok )->setText( tr(
"Export" ) );
64 buttonBox->button( QDialogButtonBox::Ok )->setEnabled(
false );
67 if ( !populateConnections() )
69 QApplication::postEvent(
this,
new QCloseEvent() );
73 disconnect( buttonBox, &QDialogButtonBox::accepted,
this, &QDialog::accept );
81 buttonBox->button( QDialogButtonBox::Ok )->setEnabled( !listConnections->selectedItems().isEmpty() );
86 const QList<QListWidgetItem *> selection = listConnections->selectedItems();
87 if ( selection.isEmpty() )
89 QMessageBox::warning(
this, tr(
"Export/Import Error" ), tr(
"You should select at least one connection from list." ) );
94 items.reserve( selection.size() );
95 for (
int i = 0; i < selection.size(); ++i )
97 items.append( selection.at( i )->text() );
100 if ( mDialogMode ==
Export )
102 QString fileName = QFileDialog::getSaveFileName(
this, tr(
"Save Connections" ), QDir::homePath(), tr(
"XML files (*.xml *.XML)" ) );
106 if ( fileName.isEmpty() )
112 if ( !fileName.endsWith( QLatin1String(
".xml" ), Qt::CaseInsensitive ) )
114 fileName += QLatin1String(
".xml" );
117 mFileName = fileName;
120 switch ( mConnectionType )
123 doc = saveOWSConnections( items, QStringLiteral(
"WMS" ) );
126 doc = saveWfsConnections( items );
129 doc = savePgConnections( items );
132 doc = saveMssqlConnections( items );
135 doc = saveOWSConnections( items, QStringLiteral(
"WCS" ) );
138 doc = saveOracleConnections( items );
141 doc = saveHanaConnections( items );
144 doc = saveXyzTilesConnections( items );
148 doc = saveArcgisConnections( items );
151 doc = saveVectorTileConnections( items );
154 doc = saveTiledSceneConnections( items );
157 doc = saveSensorThingsConnections( items );
160 doc = saveCloudStorageConnections( items );
163 doc = saveStacConnections( items );
167 QFile file( mFileName );
168 if ( !file.open( QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate ) )
170 QMessageBox::warning(
this, tr(
"Saving Connections" ), tr(
"Cannot write file %1:\n%2." ).arg( mFileName, file.errorString() ) );
174 QTextStream out( &file );
179 QFile file( mFileName );
180 if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
182 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Cannot read file %1:\n%2." ).arg( mFileName, file.errorString() ) );
191 if ( !doc.setContent( &file,
true, &errorStr, &errorLine, &errorColumn ) )
193 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Parse error at line %1, column %2:\n%3" ).arg( errorLine ).arg( errorColumn ).arg( errorStr ) );
197 switch ( mConnectionType )
200 loadOWSConnections( doc, items, QStringLiteral(
"WMS" ) );
203 loadWfsConnections( doc, items );
206 loadPgConnections( doc, items );
209 loadMssqlConnections( doc, items );
212 loadOWSConnections( doc, items, QStringLiteral(
"WCS" ) );
215 loadOracleConnections( doc, items );
218 loadHanaConnections( doc, items );
221 loadXyzTilesConnections( doc, items );
224 loadArcgisConnections( doc, items, QStringLiteral(
"ARCGISMAPSERVER" ) );
227 loadArcgisConnections( doc, items, QStringLiteral(
"ARCGISFEATURESERVER" ) );
230 loadVectorTileConnections( doc, items );
233 loadTiledSceneConnections( doc, items );
236 loadSensorThingsConnections( doc, items );
239 loadCloudStorageConnections( doc, items );
242 loadStacConnections( doc, items );
246 listConnections->clear();
253bool QgsManageConnectionsDialog::populateConnections()
256 if ( mDialogMode ==
Export )
258 QStringList connections;
260 switch ( mConnectionType )
272 settings.
beginGroup( QStringLiteral(
"/PostgreSQL/connections" ) );
276 settings.
beginGroup( QStringLiteral(
"/MSSQL/connections" ) );
280 settings.
beginGroup( QStringLiteral(
"/Oracle/connections" ) );
284 settings.
beginGroup( QStringLiteral(
"/HANA/connections" ) );
295 connections = QgsVectorTileProviderConnection::sTreeConnectionVectorTile->items();
298 connections = QgsTiledSceneProviderConnection::sTreeConnectionTiledScene->items();
301 connections = QgsSensorThingsProviderConnection::sTreeSensorThingsConnections->items();
304 connections = QgsGdalCloudProviderConnection::sTreeConnectionCloud->items();
307 connections = QgsStacConnection::sTreeConnectionStac->items();
310 for (
const QString &connection : std::as_const( connections ) )
312 QListWidgetItem *item =
new QListWidgetItem();
313 item->setText( connection );
314 listConnections->addItem( item );
320 QFile file( mFileName );
321 if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
323 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Cannot read file %1:\n%2." ).arg( mFileName, file.errorString() ) );
332 if ( !doc.setContent( &file,
true, &errorStr, &errorLine, &errorColumn ) )
334 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Parse error at line %1, column %2:\n%3" ).arg( errorLine ).arg( errorColumn ).arg( errorStr ) );
338 const QDomElement root = doc.documentElement();
339 switch ( mConnectionType )
342 if ( root.tagName() != QLatin1String(
"qgsWMSConnections" ) )
344 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a WMS connections exchange file." ) );
350 if ( root.tagName() != QLatin1String(
"qgsWFSConnections" ) )
352 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a WFS connections exchange file." ) );
358 if ( root.tagName() != QLatin1String(
"qgsWCSConnections" ) )
360 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a WCS connections exchange file." ) );
366 if ( root.tagName() != QLatin1String(
"qgsPgConnections" ) )
368 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a PostGIS connections exchange file." ) );
374 if ( root.tagName() != QLatin1String(
"qgsMssqlConnections" ) )
376 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a MS SQL Server connections exchange file." ) );
381 if ( root.tagName() != QLatin1String(
"qgsOracleConnections" ) )
383 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not an Oracle connections exchange file." ) );
388 if ( root.tagName() != QLatin1String(
"qgsHanaConnections" ) )
390 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"The file is not a HANA connections exchange file." ) );
395 if ( root.tagName() != QLatin1String(
"qgsXYZTilesConnections" ) )
397 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a XYZ Tiles connections exchange file." ) );
402 if ( root.tagName() != QLatin1String(
"qgsARCGISMAPSERVERConnections" ) )
404 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a ArcGIS Map Service connections exchange file." ) );
409 if ( root.tagName() != QLatin1String(
"qgsARCGISFEATURESERVERConnections" ) )
411 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a ArcGIS Feature Service connections exchange file." ) );
416 if ( root.tagName() != QLatin1String(
"qgsVectorTileConnections" ) )
418 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a Vector Tile connections exchange file." ) );
423 if ( root.tagName() != QLatin1String(
"qgsTiledSceneConnections" ) )
425 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a tiled scene connections exchange file." ) );
430 if ( root.tagName() != QLatin1String(
"qgsSensorThingsConnections" ) )
432 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a SensorThings connections exchange file." ) );
437 if ( root.tagName() != QLatin1String(
"qgsCloudStorageConnections" ) )
439 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a cloud storage connections exchange file." ) );
444 if ( root.tagName() != QLatin1String(
"qgsStacConnections" ) )
446 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a STAC connections exchange file." ) );
452 QDomElement child = root.firstChildElement();
453 while ( !child.isNull() )
455 QListWidgetItem *item =
new QListWidgetItem();
456 item->setText( child.attribute( QStringLiteral(
"name" ) ) );
457 listConnections->addItem( item );
458 child = child.nextSiblingElement();
464static void addNamespaceDeclarations( QDomElement &root,
const QMap<QString, QString> &namespaceDeclarations )
466 for (
auto it = namespaceDeclarations.begin(); it != namespaceDeclarations.end(); ++it )
468 root.setAttribute( QStringLiteral(
"xmlns:" ) + it.key(), it.value() );
472QDomDocument QgsManageConnectionsDialog::saveOWSConnections(
const QStringList &connections,
const QString &service )
474 QDomDocument doc( QStringLiteral(
"connections" ) );
475 QDomElement root = doc.createElement(
"qgs" + service.toUpper() +
"Connections" );
476 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
477 doc.appendChild( root );
479 QMap<QString, QString> namespaceDeclarations;
480 for (
int i = 0; i < connections.count(); ++i )
482 QDomElement el = doc.createElement( service.toLower() );
483 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
486 if ( service == QLatin1String(
"WMS" ) )
496 httpHeader.updateDomElement( el, namespaceDeclarations );
501 root.appendChild( el );
504 addNamespaceDeclarations( root, namespaceDeclarations );
509QDomDocument QgsManageConnectionsDialog::saveWfsConnections(
const QStringList &connections )
511 QDomDocument doc( QStringLiteral(
"connections" ) );
512 QDomElement root = doc.createElement( QStringLiteral(
"qgsWFSConnections" ) );
513 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.1" ) );
514 doc.appendChild( root );
516 for (
int i = 0; i < connections.count(); ++i )
518 QDomElement el = doc.createElement( QStringLiteral(
"wfs" ) );
519 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
532 root.appendChild( el );
538QDomDocument QgsManageConnectionsDialog::savePgConnections(
const QStringList &connections )
540 QDomDocument doc( QStringLiteral(
"connections" ) );
541 QDomElement root = doc.createElement( QStringLiteral(
"qgsPgConnections" ) );
542 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
543 doc.appendChild( root );
547 for (
int i = 0; i < connections.count(); ++i )
549 path =
"/PostgreSQL/connections/" + connections[i];
550 QDomElement el = doc.createElement( QStringLiteral(
"postgis" ) );
551 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
552 el.setAttribute( QStringLiteral(
"host" ), settings.
value( path +
"/host" ).toString() );
553 el.setAttribute( QStringLiteral(
"port" ), settings.
value( path +
"/port" ).toString() );
554 el.setAttribute( QStringLiteral(
"database" ), settings.
value( path +
"/database" ).toString() );
555 el.setAttribute( QStringLiteral(
"service" ), settings.
value( path +
"/service" ).toString() );
556 el.setAttribute( QStringLiteral(
"sslmode" ), settings.
value( path +
"/sslmode",
"1" ).toString() );
557 el.setAttribute( QStringLiteral(
"estimatedMetadata" ), settings.
value( path +
"/estimatedMetadata",
"0" ).toString() );
558 el.setAttribute( QStringLiteral(
"projectsInDatabase" ), settings.
value( path +
"/projectsInDatabase",
"0" ).toString() );
559 el.setAttribute( QStringLiteral(
"dontResolveType" ), settings.
value( path +
"/dontResolveType",
"0" ).toString() );
560 el.setAttribute( QStringLiteral(
"allowGeometrylessTables" ), settings.
value( path +
"/allowGeometrylessTables",
"0" ).toString() );
561 el.setAttribute( QStringLiteral(
"geometryColumnsOnly" ), settings.
value( path +
"/geometryColumnsOnly",
"0" ).toString() );
562 el.setAttribute( QStringLiteral(
"publicOnly" ), settings.
value( path +
"/publicOnly",
"0" ).toString() );
563 el.setAttribute( QStringLiteral(
"schema" ), settings.
value( path +
"/schema" ).toString() );
564 el.setAttribute( QStringLiteral(
"saveUsername" ), settings.
value( path +
"/saveUsername",
"false" ).toString() );
566 if ( settings.
value( path +
"/saveUsername",
"false" ).toString() == QLatin1String(
"true" ) )
568 el.setAttribute( QStringLiteral(
"username" ), settings.
value( path +
"/username" ).toString() );
571 el.setAttribute( QStringLiteral(
"savePassword" ), settings.
value( path +
"/savePassword",
"false" ).toString() );
573 if ( settings.
value( path +
"/savePassword",
"false" ).toString() == QLatin1String(
"true" ) )
575 el.setAttribute( QStringLiteral(
"password" ), settings.
value( path +
"/password" ).toString() );
578 root.appendChild( el );
584QDomDocument QgsManageConnectionsDialog::saveMssqlConnections(
const QStringList &connections )
586 QDomDocument doc( QStringLiteral(
"connections" ) );
587 QDomElement root = doc.createElement( QStringLiteral(
"qgsMssqlConnections" ) );
588 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
589 doc.appendChild( root );
593 for (
int i = 0; i < connections.count(); ++i )
595 path =
"/MSSQL/connections/" + connections[i];
596 QDomElement el = doc.createElement( QStringLiteral(
"mssql" ) );
597 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
598 el.setAttribute( QStringLiteral(
"host" ), settings.
value( path +
"/host" ).toString() );
599 el.setAttribute( QStringLiteral(
"port" ), settings.
value( path +
"/port" ).toString() );
600 el.setAttribute( QStringLiteral(
"database" ), settings.
value( path +
"/database" ).toString() );
601 el.setAttribute( QStringLiteral(
"service" ), settings.
value( path +
"/service" ).toString() );
602 el.setAttribute( QStringLiteral(
"sslmode" ), settings.
value( path +
"/sslmode",
"1" ).toString() );
603 el.setAttribute( QStringLiteral(
"estimatedMetadata" ), settings.
value( path +
"/estimatedMetadata",
"0" ).toString() );
605 el.setAttribute( QStringLiteral(
"saveUsername" ), settings.
value( path +
"/saveUsername",
"false" ).toString() );
607 if ( settings.
value( path +
"/saveUsername",
"false" ).toString() == QLatin1String(
"true" ) )
609 el.setAttribute( QStringLiteral(
"username" ), settings.
value( path +
"/username" ).toString() );
612 el.setAttribute( QStringLiteral(
"savePassword" ), settings.
value( path +
"/savePassword",
"false" ).toString() );
614 if ( settings.
value( path +
"/savePassword",
"false" ).toString() == QLatin1String(
"true" ) )
616 el.setAttribute( QStringLiteral(
"password" ), settings.
value( path +
"/password" ).toString() );
619 root.appendChild( el );
625QDomDocument QgsManageConnectionsDialog::saveOracleConnections(
const QStringList &connections )
627 QDomDocument doc( QStringLiteral(
"connections" ) );
628 QDomElement root = doc.createElement( QStringLiteral(
"qgsOracleConnections" ) );
629 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
630 doc.appendChild( root );
634 for (
int i = 0; i < connections.count(); ++i )
636 path =
"/Oracle/connections/" + connections[i];
637 QDomElement el = doc.createElement( QStringLiteral(
"oracle" ) );
638 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
639 el.setAttribute( QStringLiteral(
"host" ), settings.
value( path +
"/host" ).toString() );
640 el.setAttribute( QStringLiteral(
"port" ), settings.
value( path +
"/port" ).toString() );
641 el.setAttribute( QStringLiteral(
"database" ), settings.
value( path +
"/database" ).toString() );
642 el.setAttribute( QStringLiteral(
"dboptions" ), settings.
value( path +
"/dboptions" ).toString() );
643 el.setAttribute( QStringLiteral(
"dbworkspace" ), settings.
value( path +
"/dbworkspace" ).toString() );
644 el.setAttribute( QStringLiteral(
"schema" ), settings.
value( path +
"/schema" ).toString() );
645 el.setAttribute( QStringLiteral(
"estimatedMetadata" ), settings.
value( path +
"/estimatedMetadata",
"0" ).toString() );
646 el.setAttribute( QStringLiteral(
"userTablesOnly" ), settings.
value( path +
"/userTablesOnly",
"0" ).toString() );
647 el.setAttribute( QStringLiteral(
"geometryColumnsOnly" ), settings.
value( path +
"/geometryColumnsOnly",
"0" ).toString() );
648 el.setAttribute( QStringLiteral(
"allowGeometrylessTables" ), settings.
value( path +
"/allowGeometrylessTables",
"0" ).toString() );
650 el.setAttribute( QStringLiteral(
"saveUsername" ), settings.
value( path +
"/saveUsername",
"false" ).toString() );
652 if ( settings.
value( path +
"/saveUsername",
"false" ).toString() == QLatin1String(
"true" ) )
654 el.setAttribute( QStringLiteral(
"username" ), settings.
value( path +
"/username" ).toString() );
657 el.setAttribute( QStringLiteral(
"savePassword" ), settings.
value( path +
"/savePassword",
"false" ).toString() );
659 if ( settings.
value( path +
"/savePassword",
"false" ).toString() == QLatin1String(
"true" ) )
661 el.setAttribute( QStringLiteral(
"password" ), settings.
value( path +
"/password" ).toString() );
664 root.appendChild( el );
670QDomDocument QgsManageConnectionsDialog::saveHanaConnections(
const QStringList &connections )
672 QDomDocument doc( QStringLiteral(
"connections" ) );
673 QDomElement root = doc.createElement( QStringLiteral(
"qgsHanaConnections" ) );
674 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
675 doc.appendChild( root );
679 for (
int i = 0; i < connections.count(); ++i )
681 path =
"/HANA/connections/" + connections[i];
682 QDomElement el = doc.createElement( QStringLiteral(
"hana" ) );
683 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
684 el.setAttribute( QStringLiteral(
"driver" ), settings.
value( path +
"/driver", QString() ).toString() );
685 el.setAttribute( QStringLiteral(
"host" ), settings.
value( path +
"/host", QString() ).toString() );
686 el.setAttribute( QStringLiteral(
"identifierType" ), settings.
value( path +
"/identifierType", QString() ).toString() );
687 el.setAttribute( QStringLiteral(
"identifier" ), settings.
value( path +
"/identifier", QString() ).toString() );
688 el.setAttribute( QStringLiteral(
"multitenant" ), settings.
value( path +
"/multitenant", QString() ).toString() );
689 el.setAttribute( QStringLiteral(
"database" ), settings.
value( path +
"/database", QString() ).toString() );
690 el.setAttribute( QStringLiteral(
"schema" ), settings.
value( path +
"/schema", QString() ).toString() );
691 el.setAttribute( QStringLiteral(
"userTablesOnly" ), settings.
value( path +
"/userTablesOnly", QStringLiteral(
"0" ) ).toString() );
692 el.setAttribute( QStringLiteral(
"allowGeometrylessTables" ), settings.
value( path +
"/allowGeometrylessTables", QStringLiteral(
"0" ) ).toString() );
694 el.setAttribute( QStringLiteral(
"saveUsername" ), settings.
value( path +
"/saveUsername", QStringLiteral(
"false" ) ).toString() );
695 if ( settings.
value( path +
"/saveUsername",
"false" ).toString() == QLatin1String(
"true" ) )
697 el.setAttribute( QStringLiteral(
"username" ), settings.
value( path +
"/username", QString() ).toString() );
700 el.setAttribute( QStringLiteral(
"savePassword" ), settings.
value( path +
"/savePassword", QStringLiteral(
"false" ) ).toString() );
701 if ( settings.
value( path +
"/savePassword",
"false" ).toString() == QLatin1String(
"true" ) )
703 el.setAttribute( QStringLiteral(
"password" ), settings.
value( path +
"/password", QString() ).toString() );
706 el.setAttribute( QStringLiteral(
"sslEnabled" ), settings.
value( path +
"/sslEnabled", QStringLiteral(
"false" ) ).toString() );
707 el.setAttribute( QStringLiteral(
"sslCryptoProvider" ), settings.
value( path +
"/sslCryptoProvider", QStringLiteral(
"openssl" ) ).toString() );
708 el.setAttribute( QStringLiteral(
"sslKeyStore" ), settings.
value( path +
"/sslKeyStore", QString() ).toString() );
709 el.setAttribute( QStringLiteral(
"sslTrustStore" ), settings.
value( path +
"/sslTrustStore", QString() ).toString() );
710 el.setAttribute( QStringLiteral(
"sslValidateCertificate" ), settings.
value( path +
"/sslValidateCertificate", QStringLiteral(
"false" ) ).toString() );
711 el.setAttribute( QStringLiteral(
"sslHostNameInCertificate" ), settings.
value( path +
"/sslHostNameInCertificate", QString() ).toString() );
713 root.appendChild( el );
719QDomDocument QgsManageConnectionsDialog::saveXyzTilesConnections(
const QStringList &connections )
721 QDomDocument doc( QStringLiteral(
"connections" ) );
722 QDomElement root = doc.createElement( QStringLiteral(
"qgsXYZTilesConnections" ) );
723 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
724 doc.appendChild( root );
726 QMap<QString, QString> namespaceDeclarations;
727 for (
int i = 0; i < connections.count(); ++i )
729 QDomElement el = doc.createElement( QStringLiteral(
"xyztiles" ) );
731 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
741 httpHeader.updateDomElement( el, namespaceDeclarations );
743 root.appendChild( el );
746 addNamespaceDeclarations( root, namespaceDeclarations );
751QDomDocument QgsManageConnectionsDialog::saveArcgisConnections(
const QStringList &connections )
753 QDomDocument doc( QStringLiteral(
"connections" ) );
754 QDomElement root = doc.createElement(
"qgsARCGISFEATURESERVERConnections" );
755 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
756 doc.appendChild( root );
758 QMap<QString, QString> namespaceDeclarations;
759 for (
const QString &connection : connections )
761 QDomElement el = doc.createElement( QStringLiteral(
"arcgisfeatureserver" ) );
762 el.setAttribute( QStringLiteral(
"name" ), connection );
766 httpHeader.updateDomElement( el, namespaceDeclarations );
772 root.appendChild( el );
775 addNamespaceDeclarations( root, namespaceDeclarations );
780QDomDocument QgsManageConnectionsDialog::saveVectorTileConnections(
const QStringList &connections )
782 QDomDocument doc( QStringLiteral(
"connections" ) );
783 QDomElement root = doc.createElement( QStringLiteral(
"qgsVectorTileConnections" ) );
784 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
785 doc.appendChild( root );
787 QMap<QString, QString> namespaceDeclarations;
788 for (
int i = 0; i < connections.count(); ++i )
790 QDomElement el = doc.createElement( QStringLiteral(
"vectortile" ) );
792 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
793 el.setAttribute( QStringLiteral(
"url" ), QgsVectorTileProviderConnection::settingsUrl->value( connections[i] ) );
794 el.setAttribute( QStringLiteral(
"zmin" ), QgsVectorTileProviderConnection::settingsZmin->value( connections[i] ) );
795 el.setAttribute( QStringLiteral(
"zmax" ), QgsVectorTileProviderConnection::settingsZmax->value( connections[i] ) );
796 el.setAttribute( QStringLiteral(
"serviceType" ), QgsVectorTileProviderConnection::settingsServiceType->value( connections[i] ) );
797 el.setAttribute( QStringLiteral(
"authcfg" ), QgsVectorTileProviderConnection::settingsAuthcfg->value( connections[i] ) );
798 el.setAttribute( QStringLiteral(
"username" ), QgsVectorTileProviderConnection::settingsUsername->value( connections[i] ) );
799 el.setAttribute( QStringLiteral(
"password" ), QgsVectorTileProviderConnection::settingsPassword->value( connections[i] ) );
800 el.setAttribute( QStringLiteral(
"styleUrl" ), QgsVectorTileProviderConnection::settingsStyleUrl->value( connections[i] ) );
802 QgsHttpHeaders httpHeader( QgsVectorTileProviderConnection::settingsHeaders->value( connections[i] ) );
803 httpHeader.updateDomElement( el, namespaceDeclarations );
805 root.appendChild( el );
808 addNamespaceDeclarations( root, namespaceDeclarations );
813QDomDocument QgsManageConnectionsDialog::saveTiledSceneConnections(
const QStringList &connections )
815 QDomDocument doc( QStringLiteral(
"connections" ) );
816 QDomElement root = doc.createElement( QStringLiteral(
"qgsTiledSceneConnections" ) );
817 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
818 doc.appendChild( root );
820 QMap<QString, QString> namespaceDeclarations;
821 for (
int i = 0; i < connections.count(); ++i )
823 QDomElement el = doc.createElement( QStringLiteral(
"tiledscene" ) );
825 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
826 el.setAttribute( QStringLiteral(
"provider" ), QgsTiledSceneProviderConnection::settingsProvider->value( connections[i] ) );
827 el.setAttribute( QStringLiteral(
"url" ), QgsTiledSceneProviderConnection::settingsUrl->value( connections[i] ) );
828 el.setAttribute( QStringLiteral(
"authcfg" ), QgsTiledSceneProviderConnection::settingsAuthcfg->value( connections[i] ) );
829 el.setAttribute( QStringLiteral(
"username" ), QgsTiledSceneProviderConnection::settingsUsername->value( connections[i] ) );
830 el.setAttribute( QStringLiteral(
"password" ), QgsTiledSceneProviderConnection::settingsPassword->value( connections[i] ) );
832 QgsHttpHeaders httpHeader( QgsTiledSceneProviderConnection::settingsHeaders->value( connections[i] ) );
833 httpHeader.updateDomElement( el, namespaceDeclarations );
835 root.appendChild( el );
838 addNamespaceDeclarations( root, namespaceDeclarations );
843QDomDocument QgsManageConnectionsDialog::saveSensorThingsConnections(
const QStringList &connections )
845 QDomDocument doc( QStringLiteral(
"connections" ) );
846 QDomElement root = doc.createElement( QStringLiteral(
"qgsSensorThingsConnections" ) );
847 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
848 doc.appendChild( root );
850 QMap<QString, QString> namespaceDeclarations;
851 for (
int i = 0; i < connections.count(); ++i )
853 QDomElement el = doc.createElement( QStringLiteral(
"sensorthings" ) );
855 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
856 el.setAttribute( QStringLiteral(
"url" ), QgsSensorThingsProviderConnection::settingsUrl->value( connections[i] ) );
857 el.setAttribute( QStringLiteral(
"authcfg" ), QgsSensorThingsProviderConnection::settingsAuthcfg->value( connections[i] ) );
858 el.setAttribute( QStringLiteral(
"username" ), QgsSensorThingsProviderConnection::settingsUsername->value( connections[i] ) );
859 el.setAttribute( QStringLiteral(
"password" ), QgsSensorThingsProviderConnection::settingsPassword->value( connections[i] ) );
861 QgsHttpHeaders httpHeader( QgsTiledSceneProviderConnection::settingsHeaders->value( connections[i] ) );
862 httpHeader.updateDomElement( el, namespaceDeclarations );
864 root.appendChild( el );
867 addNamespaceDeclarations( root, namespaceDeclarations );
873QDomDocument QgsManageConnectionsDialog::saveCloudStorageConnections(
const QStringList &connections )
875 QDomDocument doc( QStringLiteral(
"connections" ) );
876 QDomElement root = doc.createElement( QStringLiteral(
"qgsCloudStorageConnections" ) );
877 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
878 doc.appendChild( root );
880 for (
int i = 0; i < connections.count(); ++i )
882 QDomElement el = doc.createElement( QStringLiteral(
"cloudstorage" ) );
884 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
885 el.setAttribute( QStringLiteral(
"handler" ), QgsGdalCloudProviderConnection::settingsVsiHandler->value( connections[i] ) );
886 el.setAttribute( QStringLiteral(
"container" ), QgsGdalCloudProviderConnection::settingsContainer->value( connections[i] ) );
887 el.setAttribute( QStringLiteral(
"path" ), QgsGdalCloudProviderConnection::settingsPath->value( connections[i] ) );
889 const QVariantMap credentialOptions = QgsGdalCloudProviderConnection::settingsCredentialOptions->value( connections[i] );
890 QString credentialString;
891 for (
auto it = credentialOptions.constBegin(); it != credentialOptions.constEnd(); ++it )
893 if ( !it.value().toString().isEmpty() )
895 credentialString += QStringLiteral(
"|credential:%1=%2" ).arg( it.key(), it.value().toString() );
898 el.setAttribute( QStringLiteral(
"credentials" ), credentialString );
900 root.appendChild( el );
906QDomDocument QgsManageConnectionsDialog::saveStacConnections(
const QStringList &connections )
908 QDomDocument doc( QStringLiteral(
"connections" ) );
909 QDomElement root = doc.createElement( QStringLiteral(
"qgsStacConnections" ) );
910 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
911 doc.appendChild( root );
913 QMap<QString, QString> namespaceDeclarations;
914 for (
int i = 0; i < connections.count(); ++i )
916 QDomElement el = doc.createElement( QStringLiteral(
"stac" ) );
918 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
919 el.setAttribute( QStringLiteral(
"url" ), QgsStacConnection::settingsUrl->value( connections[i] ) );
920 el.setAttribute( QStringLiteral(
"authcfg" ), QgsStacConnection::settingsAuthcfg->value( connections[i] ) );
921 el.setAttribute( QStringLiteral(
"username" ), QgsStacConnection::settingsUsername->value( connections[i] ) );
922 el.setAttribute( QStringLiteral(
"password" ), QgsStacConnection::settingsPassword->value( connections[i] ) );
924 QgsHttpHeaders httpHeader( QgsStacConnection::settingsHeaders->value( connections[i] ) );
925 httpHeader.updateDomElement( el, namespaceDeclarations );
927 root.appendChild( el );
930 addNamespaceDeclarations( root, namespaceDeclarations );
935void QgsManageConnectionsDialog::loadOWSConnections(
const QDomDocument &doc,
const QStringList &items,
const QString &service )
937 const QDomElement root = doc.documentElement();
938 if ( root.tagName() !=
"qgs" + service.toUpper() +
"Connections" )
940 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a %1 connections exchange file." ).arg( service ) );
944 QString connectionName;
946 QDomElement child = root.firstChildElement();
948 bool overwrite =
true;
950 while ( !child.isNull() )
952 connectionName = child.attribute( QStringLiteral(
"name" ) );
953 if ( !items.contains( connectionName ) )
955 child = child.nextSiblingElement();
962 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
966 case QMessageBox::Cancel:
968 case QMessageBox::No:
969 child = child.nextSiblingElement();
971 case QMessageBox::Yes:
974 case QMessageBox::YesToAll:
978 case QMessageBox::NoToAll:
987 child = child.nextSiblingElement();
1003 if ( !child.attribute( QStringLiteral(
"username" ) ).isEmpty() )
1008 child = child.nextSiblingElement();
1012void QgsManageConnectionsDialog::loadWfsConnections(
const QDomDocument &doc,
const QStringList &items )
1014 const QDomElement root = doc.documentElement();
1015 if ( root.tagName() != QLatin1String(
"qgsWFSConnections" ) )
1017 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a WFS connections exchange file." ) );
1021 QString connectionName;
1024 QDomElement child = root.firstChildElement();
1026 bool overwrite =
true;
1028 while ( !child.isNull() )
1030 connectionName = child.attribute( QStringLiteral(
"name" ) );
1031 if ( !items.contains( connectionName ) )
1033 child = child.nextSiblingElement();
1038 if ( keys.contains( connectionName ) && prompt )
1040 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1044 case QMessageBox::Cancel:
1046 case QMessageBox::No:
1047 child = child.nextSiblingElement();
1049 case QMessageBox::Yes:
1052 case QMessageBox::YesToAll:
1056 case QMessageBox::NoToAll:
1063 if ( keys.contains( connectionName ) )
1067 child = child.nextSiblingElement();
1073 keys << connectionName;
1088 if ( !child.attribute( QStringLiteral(
"username" ) ).isEmpty() )
1093 child = child.nextSiblingElement();
1097void QgsManageConnectionsDialog::loadPgConnections(
const QDomDocument &doc,
const QStringList &items )
1099 const QDomElement root = doc.documentElement();
1100 if ( root.tagName() != QLatin1String(
"qgsPgConnections" ) )
1102 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a PostGIS connections exchange file." ) );
1106 QString connectionName;
1108 settings.
beginGroup( QStringLiteral(
"/PostgreSQL/connections" ) );
1111 QDomElement child = root.firstChildElement();
1113 bool overwrite =
true;
1115 while ( !child.isNull() )
1117 connectionName = child.attribute( QStringLiteral(
"name" ) );
1118 if ( !items.contains( connectionName ) )
1120 child = child.nextSiblingElement();
1125 if ( keys.contains( connectionName ) && prompt )
1127 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1130 case QMessageBox::Cancel:
1132 case QMessageBox::No:
1133 child = child.nextSiblingElement();
1135 case QMessageBox::Yes:
1138 case QMessageBox::YesToAll:
1142 case QMessageBox::NoToAll:
1149 if ( keys.contains( connectionName ) )
1153 child = child.nextSiblingElement();
1159 keys << connectionName;
1163 settings.
beginGroup(
"/PostgreSQL/connections/" + connectionName );
1165 settings.
setValue( QStringLiteral(
"/host" ), child.attribute( QStringLiteral(
"host" ) ) );
1166 settings.
setValue( QStringLiteral(
"/port" ), child.attribute( QStringLiteral(
"port" ) ) );
1167 settings.
setValue( QStringLiteral(
"/database" ), child.attribute( QStringLiteral(
"database" ) ) );
1168 if ( child.hasAttribute( QStringLiteral(
"service" ) ) )
1170 settings.
setValue( QStringLiteral(
"/service" ), child.attribute( QStringLiteral(
"service" ) ) );
1174 settings.
setValue( QStringLiteral(
"/service" ),
"" );
1176 settings.
setValue( QStringLiteral(
"/sslmode" ), child.attribute( QStringLiteral(
"sslmode" ) ) );
1177 settings.
setValue( QStringLiteral(
"/estimatedMetadata" ), child.attribute( QStringLiteral(
"estimatedMetadata" ) ) );
1178 settings.
setValue( QStringLiteral(
"/projectsInDatabase" ), child.attribute( QStringLiteral(
"projectsInDatabase" ), 0 ) );
1179 settings.
setValue( QStringLiteral(
"/dontResolveType" ), child.attribute( QStringLiteral(
"dontResolveType" ), 0 ) );
1180 settings.
setValue( QStringLiteral(
"/allowGeometrylessTables" ), child.attribute( QStringLiteral(
"allowGeometrylessTables" ), 0 ) );
1181 settings.
setValue( QStringLiteral(
"/geometryColumnsOnly" ), child.attribute( QStringLiteral(
"geometryColumnsOnly" ), 0 ) );
1182 settings.
setValue( QStringLiteral(
"/publicOnly" ), child.attribute( QStringLiteral(
"publicOnly" ), 0 ) );
1183 settings.
setValue( QStringLiteral(
"/saveUsername" ), child.attribute( QStringLiteral(
"saveUsername" ) ) );
1184 settings.
setValue( QStringLiteral(
"/username" ), child.attribute( QStringLiteral(
"username" ) ) );
1185 settings.
setValue( QStringLiteral(
"/savePassword" ), child.attribute( QStringLiteral(
"savePassword" ) ) );
1186 settings.
setValue( QStringLiteral(
"/password" ), child.attribute( QStringLiteral(
"password" ) ) );
1187 settings.
setValue( QStringLiteral(
"/schema" ), child.attribute( QStringLiteral(
"schema" ) ) );
1190 child = child.nextSiblingElement();
1194void QgsManageConnectionsDialog::loadMssqlConnections(
const QDomDocument &doc,
const QStringList &items )
1196 const QDomElement root = doc.documentElement();
1197 if ( root.tagName() != QLatin1String(
"qgsMssqlConnections" ) )
1199 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a MS SQL Server connections exchange file." ) );
1203 QString connectionName;
1205 settings.
beginGroup( QStringLiteral(
"/MSSQL/connections" ) );
1208 QDomElement child = root.firstChildElement();
1210 bool overwrite =
true;
1212 while ( !child.isNull() )
1214 connectionName = child.attribute( QStringLiteral(
"name" ) );
1215 if ( !items.contains( connectionName ) )
1217 child = child.nextSiblingElement();
1222 if ( keys.contains( connectionName ) && prompt )
1224 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1227 case QMessageBox::Cancel:
1229 case QMessageBox::No:
1230 child = child.nextSiblingElement();
1232 case QMessageBox::Yes:
1235 case QMessageBox::YesToAll:
1239 case QMessageBox::NoToAll:
1246 if ( keys.contains( connectionName ) )
1250 child = child.nextSiblingElement();
1256 keys << connectionName;
1260 settings.
beginGroup(
"/MSSQL/connections/" + connectionName );
1262 settings.
setValue( QStringLiteral(
"/host" ), child.attribute( QStringLiteral(
"host" ) ) );
1263 settings.
setValue( QStringLiteral(
"/port" ), child.attribute( QStringLiteral(
"port" ) ) );
1264 settings.
setValue( QStringLiteral(
"/database" ), child.attribute( QStringLiteral(
"database" ) ) );
1265 if ( child.hasAttribute( QStringLiteral(
"service" ) ) )
1267 settings.
setValue( QStringLiteral(
"/service" ), child.attribute( QStringLiteral(
"service" ) ) );
1271 settings.
setValue( QStringLiteral(
"/service" ),
"" );
1273 settings.
setValue( QStringLiteral(
"/sslmode" ), child.attribute( QStringLiteral(
"sslmode" ) ) );
1274 settings.
setValue( QStringLiteral(
"/estimatedMetadata" ), child.attribute( QStringLiteral(
"estimatedMetadata" ) ) );
1275 settings.
setValue( QStringLiteral(
"/saveUsername" ), child.attribute( QStringLiteral(
"saveUsername" ) ) );
1276 settings.
setValue( QStringLiteral(
"/username" ), child.attribute( QStringLiteral(
"username" ) ) );
1277 settings.
setValue( QStringLiteral(
"/savePassword" ), child.attribute( QStringLiteral(
"savePassword" ) ) );
1278 settings.
setValue( QStringLiteral(
"/password" ), child.attribute( QStringLiteral(
"password" ) ) );
1281 child = child.nextSiblingElement();
1285void QgsManageConnectionsDialog::loadOracleConnections(
const QDomDocument &doc,
const QStringList &items )
1287 const QDomElement root = doc.documentElement();
1288 if ( root.tagName() != QLatin1String(
"qgsOracleConnections" ) )
1290 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not an Oracle connections exchange file." ) );
1294 QString connectionName;
1296 settings.
beginGroup( QStringLiteral(
"/Oracle/connections" ) );
1299 QDomElement child = root.firstChildElement();
1301 bool overwrite =
true;
1303 while ( !child.isNull() )
1305 connectionName = child.attribute( QStringLiteral(
"name" ) );
1306 if ( !items.contains( connectionName ) )
1308 child = child.nextSiblingElement();
1313 if ( keys.contains( connectionName ) && prompt )
1315 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1318 case QMessageBox::Cancel:
1320 case QMessageBox::No:
1321 child = child.nextSiblingElement();
1323 case QMessageBox::Yes:
1326 case QMessageBox::YesToAll:
1330 case QMessageBox::NoToAll:
1337 if ( keys.contains( connectionName ) )
1341 child = child.nextSiblingElement();
1347 keys << connectionName;
1351 settings.
beginGroup(
"/Oracle/connections/" + connectionName );
1353 settings.
setValue( QStringLiteral(
"/host" ), child.attribute( QStringLiteral(
"host" ) ) );
1354 settings.
setValue( QStringLiteral(
"/port" ), child.attribute( QStringLiteral(
"port" ) ) );
1355 settings.
setValue( QStringLiteral(
"/database" ), child.attribute( QStringLiteral(
"database" ) ) );
1356 settings.
setValue( QStringLiteral(
"/dboptions" ), child.attribute( QStringLiteral(
"dboptions" ) ) );
1357 settings.
setValue( QStringLiteral(
"/dbworkspace" ), child.attribute( QStringLiteral(
"dbworkspace" ) ) );
1358 settings.
setValue( QStringLiteral(
"/schema" ), child.attribute( QStringLiteral(
"schema" ) ) );
1359 settings.
setValue( QStringLiteral(
"/estimatedMetadata" ), child.attribute( QStringLiteral(
"estimatedMetadata" ) ) );
1360 settings.
setValue( QStringLiteral(
"/userTablesOnly" ), child.attribute( QStringLiteral(
"userTablesOnly" ) ) );
1361 settings.
setValue( QStringLiteral(
"/geometryColumnsOnly" ), child.attribute( QStringLiteral(
"geometryColumnsOnly" ) ) );
1362 settings.
setValue( QStringLiteral(
"/allowGeometrylessTables" ), child.attribute( QStringLiteral(
"allowGeometrylessTables" ) ) );
1363 settings.
setValue( QStringLiteral(
"/saveUsername" ), child.attribute( QStringLiteral(
"saveUsername" ) ) );
1364 settings.
setValue( QStringLiteral(
"/username" ), child.attribute( QStringLiteral(
"username" ) ) );
1365 settings.
setValue( QStringLiteral(
"/savePassword" ), child.attribute( QStringLiteral(
"savePassword" ) ) );
1366 settings.
setValue( QStringLiteral(
"/password" ), child.attribute( QStringLiteral(
"password" ) ) );
1369 child = child.nextSiblingElement();
1373void QgsManageConnectionsDialog::loadHanaConnections(
const QDomDocument &doc,
const QStringList &items )
1375 QDomElement root = doc.documentElement();
1376 if ( root.tagName() != QLatin1String(
"qgsHanaConnections" ) )
1378 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"The file is not a HANA connections exchange file." ) );
1382 const QDomAttr version = root.attributeNode(
"version" );
1383 if ( version.value() != QLatin1String(
"1.0" ) )
1385 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"The HANA connections exchange file version '%1' is not supported." ).arg( version.value() ) );
1390 settings.
beginGroup( QStringLiteral(
"/HANA/connections" ) );
1393 QDomElement child = root.firstChildElement();
1395 bool overwrite =
true;
1397 while ( !child.isNull() )
1399 const QString connectionName = child.attribute( QStringLiteral(
"name" ) );
1400 if ( !items.contains( connectionName ) )
1402 child = child.nextSiblingElement();
1407 if ( keys.contains( connectionName ) && prompt )
1409 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1412 case QMessageBox::Cancel:
1414 case QMessageBox::No:
1415 child = child.nextSiblingElement();
1417 case QMessageBox::Yes:
1420 case QMessageBox::YesToAll:
1424 case QMessageBox::NoToAll:
1431 if ( keys.contains( connectionName ) )
1435 child = child.nextSiblingElement();
1441 keys << connectionName;
1445 settings.
beginGroup(
"/HANA/connections/" + connectionName );
1447 for (
const QString param :
1448 {
"driver",
"host",
"database",
"identifierType",
"identifier",
"multitenant",
"schema",
"userTablesOnly",
1449 "allowGeometrylessTables",
"saveUsername",
"username",
"savePassword",
"password",
"sslEnabled",
1450 "sslCryptoProvider",
"sslKeyStore",
"sslTrustStore",
"sslValidateCertificate",
"sslHostNameInCertificate"
1452 settings.
setValue( QStringLiteral(
"/" ) + param, child.attribute( param ) );
1456 child = child.nextSiblingElement();
1460void QgsManageConnectionsDialog::loadXyzTilesConnections(
const QDomDocument &doc,
const QStringList &items )
1462 const QDomElement root = doc.documentElement();
1463 if ( root.tagName() != QLatin1String(
"qgsXYZTilesConnections" ) )
1465 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a XYZ Tiles connections exchange file." ) );
1469 QString connectionName;
1471 QDomElement child = root.firstChildElement();
1473 bool overwrite =
true;
1475 while ( !child.isNull() )
1477 connectionName = child.attribute( QStringLiteral(
"name" ) );
1478 if ( !items.contains( connectionName ) )
1480 child = child.nextSiblingElement();
1485 if ( keys.contains( connectionName ) && prompt )
1487 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1491 case QMessageBox::Cancel:
1493 case QMessageBox::No:
1494 child = child.nextSiblingElement();
1496 case QMessageBox::Yes:
1499 case QMessageBox::YesToAll:
1503 case QMessageBox::NoToAll:
1510 if ( keys.contains( connectionName ) )
1514 child = child.nextSiblingElement();
1520 keys << connectionName;
1535 child = child.nextSiblingElement();
1539void QgsManageConnectionsDialog::loadArcgisConnections(
const QDomDocument &doc,
const QStringList &items,
const QString &service )
1541 const QDomElement root = doc.documentElement();
1542 if ( root.tagName() !=
"qgs" + service.toUpper() +
"Connections" )
1544 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a %1 connections exchange file." ).arg( service ) );
1548 QString connectionName;
1550 QDomElement child = root.firstChildElement();
1552 bool overwrite =
true;
1554 while ( !child.isNull() )
1556 connectionName = child.attribute( QStringLiteral(
"name" ) );
1557 if ( !items.contains( connectionName ) )
1559 child = child.nextSiblingElement();
1564 if ( keys.contains( connectionName ) && prompt )
1566 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1570 case QMessageBox::Cancel:
1572 case QMessageBox::No:
1573 child = child.nextSiblingElement();
1575 case QMessageBox::Yes:
1578 case QMessageBox::YesToAll:
1582 case QMessageBox::NoToAll:
1589 if ( keys.contains( connectionName ) )
1593 child = child.nextSiblingElement();
1599 keys << connectionName;
1612 child = child.nextSiblingElement();
1616void QgsManageConnectionsDialog::loadVectorTileConnections(
const QDomDocument &doc,
const QStringList &items )
1618 const QDomElement root = doc.documentElement();
1619 if ( root.tagName() != QLatin1String(
"qgsVectorTileConnections" ) )
1621 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a Vector Tile connections exchange file." ) );
1625 QString connectionName;
1627 settings.
beginGroup( QStringLiteral(
"/qgis/connections-vector-tile" ) );
1630 QDomElement child = root.firstChildElement();
1632 bool overwrite =
true;
1634 while ( !child.isNull() )
1636 connectionName = child.attribute( QStringLiteral(
"name" ) );
1637 if ( !items.contains( connectionName ) )
1639 child = child.nextSiblingElement();
1644 if ( keys.contains( connectionName ) && prompt )
1646 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1650 case QMessageBox::Cancel:
1652 case QMessageBox::No:
1653 child = child.nextSiblingElement();
1655 case QMessageBox::Yes:
1658 case QMessageBox::YesToAll:
1662 case QMessageBox::NoToAll:
1669 if ( keys.contains( connectionName ) )
1673 child = child.nextSiblingElement();
1679 keys << connectionName;
1682 QgsVectorTileProviderConnection::settingsUrl->setValue( child.attribute( QStringLiteral(
"url" ) ), connectionName );
1683 QgsVectorTileProviderConnection::settingsZmin->setValue( child.attribute( QStringLiteral(
"zmin" ) ).toInt(), connectionName );
1684 QgsVectorTileProviderConnection::settingsZmax->setValue( child.attribute( QStringLiteral(
"zmax" ) ).toInt(), connectionName );
1685 QgsVectorTileProviderConnection::settingsServiceType->setValue( child.attribute( QStringLiteral(
"serviceType" ) ), connectionName );
1686 QgsVectorTileProviderConnection::settingsAuthcfg->setValue( child.attribute( QStringLiteral(
"authcfg" ) ), connectionName );
1687 QgsVectorTileProviderConnection::settingsUsername->setValue( child.attribute( QStringLiteral(
"username" ) ), connectionName );
1688 QgsVectorTileProviderConnection::settingsPassword->setValue( child.attribute( QStringLiteral(
"password" ) ), connectionName );
1689 QgsVectorTileProviderConnection::settingsStyleUrl->setValue( child.attribute( QStringLiteral(
"styleUrl" ) ), connectionName );
1692 QgsVectorTileProviderConnection::settingsHeaders->setValue( httpHeader.headers(), connectionName );
1694 child = child.nextSiblingElement();
1698void QgsManageConnectionsDialog::loadTiledSceneConnections(
const QDomDocument &doc,
const QStringList &items )
1700 const QDomElement root = doc.documentElement();
1701 if ( root.tagName() != QLatin1String(
"qgsTiledSceneConnections" ) )
1703 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a tiled scene connections exchange file." ) );
1707 QString connectionName;
1709 settings.
beginGroup( QStringLiteral(
"/qgis/connections-tiled-scene" ) );
1712 QDomElement child = root.firstChildElement();
1714 bool overwrite =
true;
1716 while ( !child.isNull() )
1718 connectionName = child.attribute( QStringLiteral(
"name" ) );
1719 if ( !items.contains( connectionName ) )
1721 child = child.nextSiblingElement();
1726 if ( keys.contains( connectionName ) && prompt )
1728 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1732 case QMessageBox::Cancel:
1734 case QMessageBox::No:
1735 child = child.nextSiblingElement();
1737 case QMessageBox::Yes:
1740 case QMessageBox::YesToAll:
1744 case QMessageBox::NoToAll:
1751 if ( keys.contains( connectionName ) )
1755 child = child.nextSiblingElement();
1761 keys << connectionName;
1764 QgsTiledSceneProviderConnection::settingsProvider->setValue( child.attribute( QStringLiteral(
"provider" ) ), connectionName );
1765 QgsTiledSceneProviderConnection::settingsUrl->setValue( child.attribute( QStringLiteral(
"url" ) ), connectionName );
1766 QgsTiledSceneProviderConnection::settingsAuthcfg->setValue( child.attribute( QStringLiteral(
"authcfg" ) ), connectionName );
1767 QgsTiledSceneProviderConnection::settingsUsername->setValue( child.attribute( QStringLiteral(
"username" ) ), connectionName );
1768 QgsTiledSceneProviderConnection::settingsPassword->setValue( child.attribute( QStringLiteral(
"password" ) ), connectionName );
1771 QgsTiledSceneProviderConnection::settingsHeaders->setValue( httpHeader.headers(), connectionName );
1773 child = child.nextSiblingElement();
1777void QgsManageConnectionsDialog::loadSensorThingsConnections(
const QDomDocument &doc,
const QStringList &items )
1779 const QDomElement root = doc.documentElement();
1780 if ( root.tagName() != QLatin1String(
"qgsSensorThingsConnections" ) )
1782 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a SensorThings connections exchange file." ) );
1786 QString connectionName;
1788 settings.
beginGroup( QStringLiteral(
"/connections/sensorthings/items" ) );
1791 QDomElement child = root.firstChildElement();
1793 bool overwrite =
true;
1795 while ( !child.isNull() )
1797 connectionName = child.attribute( QStringLiteral(
"name" ) );
1798 if ( !items.contains( connectionName ) )
1800 child = child.nextSiblingElement();
1805 if ( keys.contains( connectionName ) && prompt )
1807 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1811 case QMessageBox::Cancel:
1813 case QMessageBox::No:
1814 child = child.nextSiblingElement();
1816 case QMessageBox::Yes:
1819 case QMessageBox::YesToAll:
1823 case QMessageBox::NoToAll:
1830 if ( keys.contains( connectionName ) )
1834 child = child.nextSiblingElement();
1840 keys << connectionName;
1843 QgsSensorThingsProviderConnection::settingsUrl->setValue( child.attribute( QStringLiteral(
"url" ) ), connectionName );
1844 QgsSensorThingsProviderConnection::settingsAuthcfg->setValue( child.attribute( QStringLiteral(
"authcfg" ) ), connectionName );
1845 QgsSensorThingsProviderConnection::settingsUsername->setValue( child.attribute( QStringLiteral(
"username" ) ), connectionName );
1846 QgsSensorThingsProviderConnection::settingsPassword->setValue( child.attribute( QStringLiteral(
"password" ) ), connectionName );
1849 QgsSensorThingsProviderConnection::settingsHeaders->setValue( httpHeader.headers(), connectionName );
1851 child = child.nextSiblingElement();
1855void QgsManageConnectionsDialog::loadCloudStorageConnections(
const QDomDocument &doc,
const QStringList &items )
1857 const QDomElement root = doc.documentElement();
1858 if ( root.tagName() != QLatin1String(
"qgsCloudStorageConnections" ) )
1860 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a cloud storage connections exchange file." ) );
1864 QString connectionName;
1866 settings.
beginGroup( QStringLiteral(
"/connections/cloud/items" ) );
1869 QDomElement child = root.firstChildElement();
1871 bool overwrite =
true;
1873 while ( !child.isNull() )
1875 connectionName = child.attribute( QStringLiteral(
"name" ) );
1876 if ( !items.contains( connectionName ) )
1878 child = child.nextSiblingElement();
1883 if ( keys.contains( connectionName ) && prompt )
1885 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1889 case QMessageBox::Cancel:
1891 case QMessageBox::No:
1892 child = child.nextSiblingElement();
1894 case QMessageBox::Yes:
1897 case QMessageBox::YesToAll:
1901 case QMessageBox::NoToAll:
1908 if ( keys.contains( connectionName ) )
1912 child = child.nextSiblingElement();
1918 keys << connectionName;
1921 QgsGdalCloudProviderConnection::settingsVsiHandler->setValue( child.attribute( QStringLiteral(
"handler" ) ), connectionName );
1922 QgsGdalCloudProviderConnection::settingsContainer->setValue( child.attribute( QStringLiteral(
"container" ) ), connectionName );
1923 QgsGdalCloudProviderConnection::settingsPath->setValue( child.attribute( QStringLiteral(
"path" ) ), connectionName );
1925 QString credentialString = child.attribute( QStringLiteral(
"credentials" ) );
1927 QVariantMap credentialOptions;
1930 const thread_local QRegularExpression credentialOptionRegex( QStringLiteral(
"\\|credential:([^|]*)" ) );
1931 const thread_local QRegularExpression credentialOptionKeyValueRegex( QStringLiteral(
"(.*?)=(.*)" ) );
1933 const QRegularExpressionMatch match = credentialOptionRegex.match( credentialString );
1934 if ( match.hasMatch() )
1936 const QRegularExpressionMatch keyValueMatch = credentialOptionKeyValueRegex.match( match.captured( 1 ) );
1937 if ( keyValueMatch.hasMatch() )
1939 credentialOptions.insert( keyValueMatch.captured( 1 ), keyValueMatch.captured( 2 ) );
1941 credentialString = credentialString.remove( match.capturedStart( 0 ), match.capturedLength( 0 ) );
1949 QgsGdalCloudProviderConnection::settingsCredentialOptions->setValue( credentialOptions, connectionName );
1951 child = child.nextSiblingElement();
1955void QgsManageConnectionsDialog::loadStacConnections(
const QDomDocument &doc,
const QStringList &items )
1957 const QDomElement root = doc.documentElement();
1958 if ( root.tagName() != QLatin1String(
"qgsStacConnections" ) )
1960 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a STAC connections exchange file." ) );
1964 QString connectionName;
1966 settings.
beginGroup( QStringLiteral(
"/qgis/connections-stac" ) );
1969 QDomElement child = root.firstChildElement();
1971 bool overwrite =
true;
1973 while ( !child.isNull() )
1975 connectionName = child.attribute( QStringLiteral(
"name" ) );
1976 if ( !items.contains( connectionName ) )
1978 child = child.nextSiblingElement();
1983 if ( keys.contains( connectionName ) && prompt )
1985 const int res = QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Connection with name '%1' already exists. Overwrite?" ).arg( connectionName ), QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1989 case QMessageBox::Cancel:
1991 case QMessageBox::No:
1992 child = child.nextSiblingElement();
1994 case QMessageBox::Yes:
1997 case QMessageBox::YesToAll:
2001 case QMessageBox::NoToAll:
2008 if ( keys.contains( connectionName ) )
2012 child = child.nextSiblingElement();
2018 keys << connectionName;
2021 QgsStacConnection::settingsUrl->setValue( child.attribute( QStringLiteral(
"url" ) ), connectionName );
2022 QgsStacConnection::settingsAuthcfg->setValue( child.attribute( QStringLiteral(
"authcfg" ) ), connectionName );
2023 QgsStacConnection::settingsUsername->setValue( child.attribute( QStringLiteral(
"username" ) ), connectionName );
2024 QgsStacConnection::settingsPassword->setValue( child.attribute( QStringLiteral(
"password" ) ), connectionName );
2027 QgsStacConnection::settingsHeaders->setValue( httpHeader.headers(), connectionName );
2029 child = child.nextSiblingElement();
2035 listConnections->selectAll();
2036 buttonBox->button( QDialogButtonBox::Ok )->setEnabled( !listConnections->selectedItems().isEmpty() );
2041 listConnections->clearSelection();
2042 buttonBox->button( QDialogButtonBox::Ok )->setEnabled(
false );
static const QgsSettingsEntryString * settingsUsername
static const QgsSettingsEntryString * settingsUrl
static const QgsSettingsEntryString * settingsPassword
static const QgsSettingsEntryVariantMap * settingsHeaders
static QgsSettingsTreeNamedListNode * sTreeConnectionArcgis
static const QgsSettingsEntryString * settingsAuthcfg
QgsManageConnectionsDialog(QWidget *parent=nullptr, Mode mode=Export, Type type=WMS, const QString &fileName=QString())
Constructor for QgsManageConnectionsDialog.
@ STAC
SpatioTemporal Asset Catalog connections.
@ SensorThings
SensorThings connections.
@ TiledScene
Tiled scene connection.
@ CloudStorage
Cloud storage connections.
static const QgsSettingsEntryEnumFlag< Qgis::HttpMethod > * settingsPreferredHttpMethod
static const QgsSettingsEntryString * settingsPagingEnabled
static const QgsSettingsEntryString * settingsMaxNumFeatures
static QgsSettingsTreeNamedListNode * sTreeOwsConnections
static const QgsSettingsEntryBool * settingsIgnoreGetFeatureInfoURI
static const QgsSettingsEntryString * settingsPassword
static const QgsSettingsEntryString * settingsWfsFeatureMode
static const QgsSettingsEntryEnumFlag< Qgis::DpiMode > * settingsDpiMode
static const QgsSettingsEntryBool * settingsIgnoreAxisOrientation
static const QgsSettingsEntryBool * settingsInvertAxisOrientation
static const QgsSettingsEntryString * settingsVersion
static const QgsSettingsEntryString * settingsPagesize
static const QgsSettingsEntryVariantMap * settingsHeaders
static const QgsSettingsEntryString * settingsUsername
static const QgsSettingsEntryBool * settingsSmoothPixmapTransform
static const QgsSettingsEntryString * settingsUrl
static const QgsSettingsEntryBool * settingsIgnoreGetMapURI
T value(const QString &dynamicKeyPart=QString()) const
Returns settings value.
bool setValue(const T &value, const QString &dynamicKeyPart=QString()) const
Set settings value.
QStringList items(const QStringList &parentsNamedItems=QStringList()) const
Returns the list of items.
Stores settings for use within QGIS.
QStringList childGroups(Qgis::SettingsOrigin origin=Qgis::SettingsOrigin::Any) const
Returns a list of all key top-level groups that contain keys that can be read using the QSettings obj...
void endGroup()
Resets the group to what it was before the corresponding beginGroup() call.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void beginGroup(const QString &prefix, QgsSettings::Section section=QgsSettings::NoSection)
Appends prefix to the current group.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
static QgsSettingsTreeNamedListNode * sTreeXyzConnections
static const QgsSettingsEntryString * settingsPassword
static const QgsSettingsEntryDouble * settingsTilePixelRatio
static const QgsSettingsEntryString * settingsUsername
static const QgsSettingsEntryString * settingsAuthcfg
static const QgsSettingsEntryInteger * settingsZmin
static const QgsSettingsEntryInteger * settingsZmax
static const QgsSettingsEntryString * settingsUrl
static const QgsSettingsEntryVariantMap * settingsHeaders