19#include "qgsgdalcloudconnection.h"
26#include "qgsstacconnection.h"
36#include "moc_qgsmanageconnectionsdialog.cpp"
40 , mFileName( fileName )
42 , mConnectionType( type )
47 QPushButton *pb =
nullptr;
48 pb =
new QPushButton( tr(
"Select All" ) );
49 buttonBox->addButton( pb, QDialogButtonBox::ActionRole );
52 pb =
new QPushButton( tr(
"Clear Selection" ) );
53 buttonBox->addButton( pb, QDialogButtonBox::ActionRole );
56 if ( mDialogMode ==
Import )
58 label->setText( tr(
"Select connections to import" ) );
59 buttonBox->button( QDialogButtonBox::Ok )->setText( tr(
"Import" ) );
60 buttonBox->button( QDialogButtonBox::Ok )->setEnabled(
false );
65 buttonBox->button( QDialogButtonBox::Ok )->setText( tr(
"Export" ) );
66 buttonBox->button( QDialogButtonBox::Ok )->setEnabled(
false );
69 if ( !populateConnections() )
71 QApplication::postEvent(
this,
new QCloseEvent() );
75 disconnect( buttonBox, &QDialogButtonBox::accepted,
this, &QDialog::accept );
83 buttonBox->button( QDialogButtonBox::Ok )->setEnabled( !listConnections->selectedItems().isEmpty() );
88 const QList<QListWidgetItem *> selection = listConnections->selectedItems();
89 if ( selection.isEmpty() )
91 QMessageBox::warning(
this, tr(
"Export/Import Error" ), tr(
"You should select at least one connection from list." ) );
96 items.reserve( selection.size() );
97 for (
int i = 0; i < selection.size(); ++i )
99 items.append( selection.at( i )->text() );
102 if ( mDialogMode ==
Export )
104 QString fileName = QFileDialog::getSaveFileName(
this, tr(
"Save Connections" ), QDir::homePath(), tr(
"XML files (*.xml *.XML)" ) );
108 if ( fileName.isEmpty() )
114 if ( !fileName.endsWith( QLatin1String(
".xml" ), Qt::CaseInsensitive ) )
116 fileName += QLatin1String(
".xml" );
119 mFileName = fileName;
122 switch ( mConnectionType )
125 doc = saveOWSConnections( items, QStringLiteral(
"WMS" ) );
128 doc = saveWfsConnections( items );
131 doc = savePgConnections( items );
134 doc = saveMssqlConnections( items );
137 doc = saveOWSConnections( items, QStringLiteral(
"WCS" ) );
140 doc = saveOracleConnections( items );
143 doc = saveHanaConnections( items );
146 doc = saveXyzTilesConnections( items );
150 doc = saveArcgisConnections( items );
153 doc = saveVectorTileConnections( items );
156 doc = saveTiledSceneConnections( items );
159 doc = saveSensorThingsConnections( items );
162 doc = saveCloudStorageConnections( items );
165 doc = saveStacConnections( items );
169 QFile file( mFileName );
170 if ( !file.open( QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate ) )
172 QMessageBox::warning(
this, tr(
"Saving Connections" ), tr(
"Cannot write file %1:\n%2." ).arg( mFileName, file.errorString() ) );
176 QTextStream out( &file );
181 QFile file( mFileName );
182 if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
184 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Cannot read file %1:\n%2." ).arg( mFileName, file.errorString() ) );
193 if ( !doc.setContent( &file,
true, &errorStr, &errorLine, &errorColumn ) )
195 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Parse error at line %1, column %2:\n%3" ).arg( errorLine ).arg( errorColumn ).arg( errorStr ) );
199 switch ( mConnectionType )
202 loadOWSConnections( doc, items, QStringLiteral(
"WMS" ) );
205 loadWfsConnections( doc, items );
208 loadPgConnections( doc, items );
211 loadMssqlConnections( doc, items );
214 loadOWSConnections( doc, items, QStringLiteral(
"WCS" ) );
217 loadOracleConnections( doc, items );
220 loadHanaConnections( doc, items );
223 loadXyzTilesConnections( doc, items );
226 loadArcgisConnections( doc, items, QStringLiteral(
"ARCGISMAPSERVER" ) );
229 loadArcgisConnections( doc, items, QStringLiteral(
"ARCGISFEATURESERVER" ) );
232 loadVectorTileConnections( doc, items );
235 loadTiledSceneConnections( doc, items );
238 loadSensorThingsConnections( doc, items );
241 loadCloudStorageConnections( doc, items );
244 loadStacConnections( doc, items );
248 listConnections->clear();
255bool QgsManageConnectionsDialog::populateConnections()
258 if ( mDialogMode ==
Export )
260 QStringList connections;
262 switch ( mConnectionType )
274 settings.
beginGroup( QStringLiteral(
"/PostgreSQL/connections" ) );
278 settings.
beginGroup( QStringLiteral(
"/MSSQL/connections" ) );
282 settings.
beginGroup( QStringLiteral(
"/Oracle/connections" ) );
286 settings.
beginGroup( QStringLiteral(
"/HANA/connections" ) );
297 connections = QgsVectorTileProviderConnection::sTreeConnectionVectorTile->items();
300 connections = QgsTiledSceneProviderConnection::sTreeConnectionTiledScene->items();
303 connections = QgsSensorThingsProviderConnection::sTreeSensorThingsConnections->items();
306 connections = QgsGdalCloudProviderConnection::sTreeConnectionCloud->items();
309 connections = QgsStacConnection::sTreeConnectionStac->items();
312 for (
const QString &connection : std::as_const( connections ) )
314 QListWidgetItem *item =
new QListWidgetItem();
315 item->setText( connection );
316 listConnections->addItem( item );
322 QFile file( mFileName );
323 if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
325 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Cannot read file %1:\n%2." ).arg( mFileName, file.errorString() ) );
334 if ( !doc.setContent( &file,
true, &errorStr, &errorLine, &errorColumn ) )
336 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"Parse error at line %1, column %2:\n%3" ).arg( errorLine ).arg( errorColumn ).arg( errorStr ) );
340 const QDomElement root = doc.documentElement();
341 switch ( mConnectionType )
344 if ( root.tagName() != QLatin1String(
"qgsWMSConnections" ) )
346 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a WMS connections exchange file." ) );
352 if ( root.tagName() != QLatin1String(
"qgsWFSConnections" ) )
354 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a WFS connections exchange file." ) );
360 if ( root.tagName() != QLatin1String(
"qgsWCSConnections" ) )
362 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a WCS connections exchange file." ) );
368 if ( root.tagName() != QLatin1String(
"qgsPgConnections" ) )
370 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a PostGIS connections exchange file." ) );
376 if ( root.tagName() != QLatin1String(
"qgsMssqlConnections" ) )
378 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a MS SQL Server connections exchange file." ) );
383 if ( root.tagName() != QLatin1String(
"qgsOracleConnections" ) )
385 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not an Oracle connections exchange file." ) );
390 if ( root.tagName() != QLatin1String(
"qgsHanaConnections" ) )
392 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"The file is not a HANA connections exchange file." ) );
397 if ( root.tagName() != QLatin1String(
"qgsXYZTilesConnections" ) )
399 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a XYZ Tiles connections exchange file." ) );
404 if ( root.tagName() != QLatin1String(
"qgsARCGISMAPSERVERConnections" ) )
406 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a ArcGIS Map Service connections exchange file." ) );
411 if ( root.tagName() != QLatin1String(
"qgsARCGISFEATURESERVERConnections" ) )
413 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a ArcGIS Feature Service connections exchange file." ) );
418 if ( root.tagName() != QLatin1String(
"qgsVectorTileConnections" ) )
420 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a Vector Tile connections exchange file." ) );
425 if ( root.tagName() != QLatin1String(
"qgsTiledSceneConnections" ) )
427 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a tiled scene connections exchange file." ) );
432 if ( root.tagName() != QLatin1String(
"qgsSensorThingsConnections" ) )
434 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a SensorThings connections exchange file." ) );
439 if ( root.tagName() != QLatin1String(
"qgsCloudStorageConnections" ) )
441 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a cloud storage connections exchange file." ) );
446 if ( root.tagName() != QLatin1String(
"qgsStacConnections" ) )
448 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a STAC connections exchange file." ) );
454 QDomElement child = root.firstChildElement();
455 while ( !child.isNull() )
457 QListWidgetItem *item =
new QListWidgetItem();
458 item->setText( child.attribute( QStringLiteral(
"name" ) ) );
459 listConnections->addItem( item );
460 child = child.nextSiblingElement();
466static void addNamespaceDeclarations( QDomElement &root,
const QMap<QString, QString> &namespaceDeclarations )
468 for (
auto it = namespaceDeclarations.begin(); it != namespaceDeclarations.end(); ++it )
470 root.setAttribute( QStringLiteral(
"xmlns:" ) + it.key(), it.value() );
474QDomDocument QgsManageConnectionsDialog::saveOWSConnections(
const QStringList &connections,
const QString &service )
476 QDomDocument doc( QStringLiteral(
"connections" ) );
477 QDomElement root = doc.createElement(
"qgs" + service.toUpper() +
"Connections" );
478 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
479 doc.appendChild( root );
481 QMap<QString, QString> namespaceDeclarations;
482 for (
int i = 0; i < connections.count(); ++i )
484 QDomElement el = doc.createElement( service.toLower() );
485 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
488 if ( service == QLatin1String(
"WMS" ) )
498 httpHeader.updateDomElement( el, namespaceDeclarations );
503 root.appendChild( el );
506 addNamespaceDeclarations( root, namespaceDeclarations );
511QDomDocument QgsManageConnectionsDialog::saveWfsConnections(
const QStringList &connections )
513 QDomDocument doc( QStringLiteral(
"connections" ) );
514 QDomElement root = doc.createElement( QStringLiteral(
"qgsWFSConnections" ) );
515 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.1" ) );
516 doc.appendChild( root );
518 for (
int i = 0; i < connections.count(); ++i )
520 QDomElement el = doc.createElement( QStringLiteral(
"wfs" ) );
521 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
534 root.appendChild( el );
540QDomDocument QgsManageConnectionsDialog::savePgConnections(
const QStringList &connections )
542 QDomDocument doc( QStringLiteral(
"connections" ) );
543 QDomElement root = doc.createElement( QStringLiteral(
"qgsPgConnections" ) );
544 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
545 doc.appendChild( root );
547 const QgsSettings settings;
549 for (
int i = 0; i < connections.count(); ++i )
551 path =
"/PostgreSQL/connections/" + connections[i];
552 QDomElement el = doc.createElement( QStringLiteral(
"postgis" ) );
553 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
554 el.setAttribute( QStringLiteral(
"host" ), settings.
value( path +
"/host" ).toString() );
555 el.setAttribute( QStringLiteral(
"port" ), settings.
value( path +
"/port" ).toString() );
556 el.setAttribute( QStringLiteral(
"database" ), settings.
value( path +
"/database" ).toString() );
557 el.setAttribute( QStringLiteral(
"service" ), settings.
value( path +
"/service" ).toString() );
558 el.setAttribute( QStringLiteral(
"sslmode" ), settings.
value( path +
"/sslmode",
"1" ).toString() );
559 el.setAttribute( QStringLiteral(
"estimatedMetadata" ), settings.
value( path +
"/estimatedMetadata",
"0" ).toString() );
560 el.setAttribute( QStringLiteral(
"projectsInDatabase" ), settings.
value( path +
"/projectsInDatabase",
"0" ).toString() );
561 el.setAttribute( QStringLiteral(
"dontResolveType" ), settings.
value( path +
"/dontResolveType",
"0" ).toString() );
562 el.setAttribute( QStringLiteral(
"allowGeometrylessTables" ), settings.
value( path +
"/allowGeometrylessTables",
"0" ).toString() );
563 el.setAttribute( QStringLiteral(
"geometryColumnsOnly" ), settings.
value( path +
"/geometryColumnsOnly",
"0" ).toString() );
564 el.setAttribute( QStringLiteral(
"publicOnly" ), settings.
value( path +
"/publicOnly",
"0" ).toString() );
565 el.setAttribute( QStringLiteral(
"schema" ), settings.
value( path +
"/schema" ).toString() );
566 el.setAttribute( QStringLiteral(
"saveUsername" ), settings.
value( path +
"/saveUsername",
"false" ).toString() );
568 if ( settings.
value( path +
"/saveUsername",
"false" ).toString() == QLatin1String(
"true" ) )
570 el.setAttribute( QStringLiteral(
"username" ), settings.
value( path +
"/username" ).toString() );
573 el.setAttribute( QStringLiteral(
"savePassword" ), settings.
value( path +
"/savePassword",
"false" ).toString() );
575 if ( settings.
value( path +
"/savePassword",
"false" ).toString() == QLatin1String(
"true" ) )
577 el.setAttribute( QStringLiteral(
"password" ), settings.
value( path +
"/password" ).toString() );
580 root.appendChild( el );
586QDomDocument QgsManageConnectionsDialog::saveMssqlConnections(
const QStringList &connections )
588 QDomDocument doc( QStringLiteral(
"connections" ) );
589 QDomElement root = doc.createElement( QStringLiteral(
"qgsMssqlConnections" ) );
590 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
591 doc.appendChild( root );
593 const QgsSettings settings;
595 for (
int i = 0; i < connections.count(); ++i )
597 path =
"/MSSQL/connections/" + connections[i];
598 QDomElement el = doc.createElement( QStringLiteral(
"mssql" ) );
599 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
600 el.setAttribute( QStringLiteral(
"host" ), settings.
value( path +
"/host" ).toString() );
601 el.setAttribute( QStringLiteral(
"port" ), settings.
value( path +
"/port" ).toString() );
602 el.setAttribute( QStringLiteral(
"database" ), settings.
value( path +
"/database" ).toString() );
603 el.setAttribute( QStringLiteral(
"service" ), settings.
value( path +
"/service" ).toString() );
604 el.setAttribute( QStringLiteral(
"sslmode" ), settings.
value( path +
"/sslmode",
"1" ).toString() );
605 el.setAttribute( QStringLiteral(
"estimatedMetadata" ), settings.
value( path +
"/estimatedMetadata",
"0" ).toString() );
607 el.setAttribute( QStringLiteral(
"saveUsername" ), settings.
value( path +
"/saveUsername",
"false" ).toString() );
609 if ( settings.
value( path +
"/saveUsername",
"false" ).toString() == QLatin1String(
"true" ) )
611 el.setAttribute( QStringLiteral(
"username" ), settings.
value( path +
"/username" ).toString() );
614 el.setAttribute( QStringLiteral(
"savePassword" ), settings.
value( path +
"/savePassword",
"false" ).toString() );
616 if ( settings.
value( path +
"/savePassword",
"false" ).toString() == QLatin1String(
"true" ) )
618 el.setAttribute( QStringLiteral(
"password" ), settings.
value( path +
"/password" ).toString() );
621 root.appendChild( el );
627QDomDocument QgsManageConnectionsDialog::saveOracleConnections(
const QStringList &connections )
629 QDomDocument doc( QStringLiteral(
"connections" ) );
630 QDomElement root = doc.createElement( QStringLiteral(
"qgsOracleConnections" ) );
631 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
632 doc.appendChild( root );
634 const QgsSettings settings;
636 for (
int i = 0; i < connections.count(); ++i )
638 path =
"/Oracle/connections/" + connections[i];
639 QDomElement el = doc.createElement( QStringLiteral(
"oracle" ) );
640 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
641 el.setAttribute( QStringLiteral(
"host" ), settings.
value( path +
"/host" ).toString() );
642 el.setAttribute( QStringLiteral(
"port" ), settings.
value( path +
"/port" ).toString() );
643 el.setAttribute( QStringLiteral(
"database" ), settings.
value( path +
"/database" ).toString() );
644 el.setAttribute( QStringLiteral(
"dboptions" ), settings.
value( path +
"/dboptions" ).toString() );
645 el.setAttribute( QStringLiteral(
"dbworkspace" ), settings.
value( path +
"/dbworkspace" ).toString() );
646 el.setAttribute( QStringLiteral(
"schema" ), settings.
value( path +
"/schema" ).toString() );
647 el.setAttribute( QStringLiteral(
"estimatedMetadata" ), settings.
value( path +
"/estimatedMetadata",
"0" ).toString() );
648 el.setAttribute( QStringLiteral(
"userTablesOnly" ), settings.
value( path +
"/userTablesOnly",
"0" ).toString() );
649 el.setAttribute( QStringLiteral(
"geometryColumnsOnly" ), settings.
value( path +
"/geometryColumnsOnly",
"0" ).toString() );
650 el.setAttribute( QStringLiteral(
"allowGeometrylessTables" ), settings.
value( path +
"/allowGeometrylessTables",
"0" ).toString() );
652 el.setAttribute( QStringLiteral(
"saveUsername" ), settings.
value( path +
"/saveUsername",
"false" ).toString() );
654 if ( settings.
value( path +
"/saveUsername",
"false" ).toString() == QLatin1String(
"true" ) )
656 el.setAttribute( QStringLiteral(
"username" ), settings.
value( path +
"/username" ).toString() );
659 el.setAttribute( QStringLiteral(
"savePassword" ), settings.
value( path +
"/savePassword",
"false" ).toString() );
661 if ( settings.
value( path +
"/savePassword",
"false" ).toString() == QLatin1String(
"true" ) )
663 el.setAttribute( QStringLiteral(
"password" ), settings.
value( path +
"/password" ).toString() );
666 root.appendChild( el );
672QDomDocument QgsManageConnectionsDialog::saveHanaConnections(
const QStringList &connections )
674 QDomDocument doc( QStringLiteral(
"connections" ) );
675 QDomElement root = doc.createElement( QStringLiteral(
"qgsHanaConnections" ) );
676 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
677 doc.appendChild( root );
679 const QgsSettings settings;
681 for (
int i = 0; i < connections.count(); ++i )
683 path =
"/HANA/connections/" + connections[i];
684 QDomElement el = doc.createElement( QStringLiteral(
"hana" ) );
685 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
686 el.setAttribute( QStringLiteral(
"driver" ), settings.
value( path +
"/driver", QString() ).toString() );
687 el.setAttribute( QStringLiteral(
"host" ), settings.
value( path +
"/host", QString() ).toString() );
688 el.setAttribute( QStringLiteral(
"identifierType" ), settings.
value( path +
"/identifierType", QString() ).toString() );
689 el.setAttribute( QStringLiteral(
"identifier" ), settings.
value( path +
"/identifier", QString() ).toString() );
690 el.setAttribute( QStringLiteral(
"multitenant" ), settings.
value( path +
"/multitenant", QString() ).toString() );
691 el.setAttribute( QStringLiteral(
"database" ), settings.
value( path +
"/database", QString() ).toString() );
692 el.setAttribute( QStringLiteral(
"schema" ), settings.
value( path +
"/schema", QString() ).toString() );
693 el.setAttribute( QStringLiteral(
"userTablesOnly" ), settings.
value( path +
"/userTablesOnly", QStringLiteral(
"0" ) ).toString() );
694 el.setAttribute( QStringLiteral(
"allowGeometrylessTables" ), settings.
value( path +
"/allowGeometrylessTables", QStringLiteral(
"0" ) ).toString() );
696 el.setAttribute( QStringLiteral(
"saveUsername" ), settings.
value( path +
"/saveUsername", QStringLiteral(
"false" ) ).toString() );
697 if ( settings.
value( path +
"/saveUsername",
"false" ).toString() == QLatin1String(
"true" ) )
699 el.setAttribute( QStringLiteral(
"username" ), settings.
value( path +
"/username", QString() ).toString() );
702 el.setAttribute( QStringLiteral(
"savePassword" ), settings.
value( path +
"/savePassword", QStringLiteral(
"false" ) ).toString() );
703 if ( settings.
value( path +
"/savePassword",
"false" ).toString() == QLatin1String(
"true" ) )
705 el.setAttribute( QStringLiteral(
"password" ), settings.
value( path +
"/password", QString() ).toString() );
708 el.setAttribute( QStringLiteral(
"sslEnabled" ), settings.
value( path +
"/sslEnabled", QStringLiteral(
"false" ) ).toString() );
709 el.setAttribute( QStringLiteral(
"sslCryptoProvider" ), settings.
value( path +
"/sslCryptoProvider", QStringLiteral(
"openssl" ) ).toString() );
710 el.setAttribute( QStringLiteral(
"sslKeyStore" ), settings.
value( path +
"/sslKeyStore", QString() ).toString() );
711 el.setAttribute( QStringLiteral(
"sslTrustStore" ), settings.
value( path +
"/sslTrustStore", QString() ).toString() );
712 el.setAttribute( QStringLiteral(
"sslValidateCertificate" ), settings.
value( path +
"/sslValidateCertificate", QStringLiteral(
"false" ) ).toString() );
713 el.setAttribute( QStringLiteral(
"sslHostNameInCertificate" ), settings.
value( path +
"/sslHostNameInCertificate", QString() ).toString() );
715 root.appendChild( el );
721QDomDocument QgsManageConnectionsDialog::saveXyzTilesConnections(
const QStringList &connections )
723 QDomDocument doc( QStringLiteral(
"connections" ) );
724 QDomElement root = doc.createElement( QStringLiteral(
"qgsXYZTilesConnections" ) );
725 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
726 doc.appendChild( root );
728 QMap<QString, QString> namespaceDeclarations;
729 for (
int i = 0; i < connections.count(); ++i )
731 QDomElement el = doc.createElement( QStringLiteral(
"xyztiles" ) );
733 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
743 httpHeader.updateDomElement( el, namespaceDeclarations );
745 root.appendChild( el );
748 addNamespaceDeclarations( root, namespaceDeclarations );
753QDomDocument QgsManageConnectionsDialog::saveArcgisConnections(
const QStringList &connections )
755 QDomDocument doc( QStringLiteral(
"connections" ) );
756 QDomElement root = doc.createElement(
"qgsARCGISFEATURESERVERConnections" );
757 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
758 doc.appendChild( root );
760 QMap<QString, QString> namespaceDeclarations;
761 for (
const QString &connection : connections )
763 QDomElement el = doc.createElement( QStringLiteral(
"arcgisfeatureserver" ) );
764 el.setAttribute( QStringLiteral(
"name" ), connection );
768 httpHeader.updateDomElement( el, namespaceDeclarations );
774 root.appendChild( el );
777 addNamespaceDeclarations( root, namespaceDeclarations );
782QDomDocument QgsManageConnectionsDialog::saveVectorTileConnections(
const QStringList &connections )
784 QDomDocument doc( QStringLiteral(
"connections" ) );
785 QDomElement root = doc.createElement( QStringLiteral(
"qgsVectorTileConnections" ) );
786 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
787 doc.appendChild( root );
789 QMap<QString, QString> namespaceDeclarations;
790 for (
int i = 0; i < connections.count(); ++i )
792 QDomElement el = doc.createElement( QStringLiteral(
"vectortile" ) );
794 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
795 el.setAttribute( QStringLiteral(
"url" ), QgsVectorTileProviderConnection::settingsUrl->value( connections[i] ) );
796 el.setAttribute( QStringLiteral(
"zmin" ), QgsVectorTileProviderConnection::settingsZmin->value( connections[i] ) );
797 el.setAttribute( QStringLiteral(
"zmax" ), QgsVectorTileProviderConnection::settingsZmax->value( connections[i] ) );
798 el.setAttribute( QStringLiteral(
"serviceType" ), QgsVectorTileProviderConnection::settingsServiceType->value( connections[i] ) );
799 el.setAttribute( QStringLiteral(
"authcfg" ), QgsVectorTileProviderConnection::settingsAuthcfg->value( connections[i] ) );
800 el.setAttribute( QStringLiteral(
"username" ), QgsVectorTileProviderConnection::settingsUsername->value( connections[i] ) );
801 el.setAttribute( QStringLiteral(
"password" ), QgsVectorTileProviderConnection::settingsPassword->value( connections[i] ) );
802 el.setAttribute( QStringLiteral(
"styleUrl" ), QgsVectorTileProviderConnection::settingsStyleUrl->value( connections[i] ) );
804 QgsHttpHeaders httpHeader( QgsVectorTileProviderConnection::settingsHeaders->value( connections[i] ) );
805 httpHeader.updateDomElement( el, namespaceDeclarations );
807 root.appendChild( el );
810 addNamespaceDeclarations( root, namespaceDeclarations );
815QDomDocument QgsManageConnectionsDialog::saveTiledSceneConnections(
const QStringList &connections )
817 QDomDocument doc( QStringLiteral(
"connections" ) );
818 QDomElement root = doc.createElement( QStringLiteral(
"qgsTiledSceneConnections" ) );
819 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
820 doc.appendChild( root );
822 QMap<QString, QString> namespaceDeclarations;
823 for (
int i = 0; i < connections.count(); ++i )
825 QDomElement el = doc.createElement( QStringLiteral(
"tiledscene" ) );
827 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
828 el.setAttribute( QStringLiteral(
"provider" ), QgsTiledSceneProviderConnection::settingsProvider->value( connections[i] ) );
829 el.setAttribute( QStringLiteral(
"url" ), QgsTiledSceneProviderConnection::settingsUrl->value( connections[i] ) );
830 el.setAttribute( QStringLiteral(
"authcfg" ), QgsTiledSceneProviderConnection::settingsAuthcfg->value( connections[i] ) );
831 el.setAttribute( QStringLiteral(
"username" ), QgsTiledSceneProviderConnection::settingsUsername->value( connections[i] ) );
832 el.setAttribute( QStringLiteral(
"password" ), QgsTiledSceneProviderConnection::settingsPassword->value( connections[i] ) );
834 QgsHttpHeaders httpHeader( QgsTiledSceneProviderConnection::settingsHeaders->value( connections[i] ) );
835 httpHeader.updateDomElement( el, namespaceDeclarations );
837 root.appendChild( el );
840 addNamespaceDeclarations( root, namespaceDeclarations );
845QDomDocument QgsManageConnectionsDialog::saveSensorThingsConnections(
const QStringList &connections )
847 QDomDocument doc( QStringLiteral(
"connections" ) );
848 QDomElement root = doc.createElement( QStringLiteral(
"qgsSensorThingsConnections" ) );
849 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
850 doc.appendChild( root );
852 QMap<QString, QString> namespaceDeclarations;
853 for (
int i = 0; i < connections.count(); ++i )
855 QDomElement el = doc.createElement( QStringLiteral(
"sensorthings" ) );
857 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
858 el.setAttribute( QStringLiteral(
"url" ), QgsSensorThingsProviderConnection::settingsUrl->value( connections[i] ) );
859 el.setAttribute( QStringLiteral(
"authcfg" ), QgsSensorThingsProviderConnection::settingsAuthcfg->value( connections[i] ) );
860 el.setAttribute( QStringLiteral(
"username" ), QgsSensorThingsProviderConnection::settingsUsername->value( connections[i] ) );
861 el.setAttribute( QStringLiteral(
"password" ), QgsSensorThingsProviderConnection::settingsPassword->value( connections[i] ) );
863 QgsHttpHeaders httpHeader( QgsTiledSceneProviderConnection::settingsHeaders->value( connections[i] ) );
864 httpHeader.updateDomElement( el, namespaceDeclarations );
866 root.appendChild( el );
869 addNamespaceDeclarations( root, namespaceDeclarations );
875QDomDocument QgsManageConnectionsDialog::saveCloudStorageConnections(
const QStringList &connections )
877 QDomDocument doc( QStringLiteral(
"connections" ) );
878 QDomElement root = doc.createElement( QStringLiteral(
"qgsCloudStorageConnections" ) );
879 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
880 doc.appendChild( root );
882 for (
int i = 0; i < connections.count(); ++i )
884 QDomElement el = doc.createElement( QStringLiteral(
"cloudstorage" ) );
886 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
887 el.setAttribute( QStringLiteral(
"handler" ), QgsGdalCloudProviderConnection::settingsVsiHandler->value( connections[i] ) );
888 el.setAttribute( QStringLiteral(
"container" ), QgsGdalCloudProviderConnection::settingsContainer->value( connections[i] ) );
889 el.setAttribute( QStringLiteral(
"path" ), QgsGdalCloudProviderConnection::settingsPath->value( connections[i] ) );
891 const QVariantMap credentialOptions = QgsGdalCloudProviderConnection::settingsCredentialOptions->value( connections[i] );
892 QString credentialString;
893 for (
auto it = credentialOptions.constBegin(); it != credentialOptions.constEnd(); ++it )
895 if ( !it.value().toString().isEmpty() )
897 credentialString += QStringLiteral(
"|credential:%1=%2" ).arg( it.key(), it.value().toString() );
900 el.setAttribute( QStringLiteral(
"credentials" ), credentialString );
902 root.appendChild( el );
908QDomDocument QgsManageConnectionsDialog::saveStacConnections(
const QStringList &connections )
910 QDomDocument doc( QStringLiteral(
"connections" ) );
911 QDomElement root = doc.createElement( QStringLiteral(
"qgsStacConnections" ) );
912 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.0" ) );
913 doc.appendChild( root );
915 QMap<QString, QString> namespaceDeclarations;
916 for (
int i = 0; i < connections.count(); ++i )
918 QDomElement el = doc.createElement( QStringLiteral(
"stac" ) );
920 el.setAttribute( QStringLiteral(
"name" ), connections[i] );
921 el.setAttribute( QStringLiteral(
"url" ), QgsStacConnection::settingsUrl->value( connections[i] ) );
922 el.setAttribute( QStringLiteral(
"authcfg" ), QgsStacConnection::settingsAuthcfg->value( connections[i] ) );
923 el.setAttribute( QStringLiteral(
"username" ), QgsStacConnection::settingsUsername->value( connections[i] ) );
924 el.setAttribute( QStringLiteral(
"password" ), QgsStacConnection::settingsPassword->value( connections[i] ) );
926 QgsHttpHeaders httpHeader( QgsStacConnection::settingsHeaders->value( connections[i] ) );
927 httpHeader.updateDomElement( el, namespaceDeclarations );
929 root.appendChild( el );
932 addNamespaceDeclarations( root, namespaceDeclarations );
937void QgsManageConnectionsDialog::loadOWSConnections(
const QDomDocument &doc,
const QStringList &items,
const QString &service )
939 const QDomElement root = doc.documentElement();
940 if ( root.tagName() !=
"qgs" + service.toUpper() +
"Connections" )
942 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a %1 connections exchange file." ).arg( service ) );
946 QString connectionName;
948 QDomElement child = root.firstChildElement();
950 bool overwrite =
true;
952 while ( !child.isNull() )
954 connectionName = child.attribute( QStringLiteral(
"name" ) );
955 if ( !items.contains( connectionName ) )
957 child = child.nextSiblingElement();
964 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 );
968 case QMessageBox::Cancel:
970 case QMessageBox::No:
971 child = child.nextSiblingElement();
973 case QMessageBox::Yes:
976 case QMessageBox::YesToAll:
980 case QMessageBox::NoToAll:
989 child = child.nextSiblingElement();
1002 QgsHttpHeaders httpHeader( child );
1005 if ( !child.attribute( QStringLiteral(
"username" ) ).isEmpty() )
1010 child = child.nextSiblingElement();
1014void QgsManageConnectionsDialog::loadWfsConnections(
const QDomDocument &doc,
const QStringList &items )
1016 const QDomElement root = doc.documentElement();
1017 if ( root.tagName() != QLatin1String(
"qgsWFSConnections" ) )
1019 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a WFS connections exchange file." ) );
1023 QString connectionName;
1026 QDomElement child = root.firstChildElement();
1028 bool overwrite =
true;
1030 while ( !child.isNull() )
1032 connectionName = child.attribute( QStringLiteral(
"name" ) );
1033 if ( !items.contains( connectionName ) )
1035 child = child.nextSiblingElement();
1040 if ( keys.contains( connectionName ) && prompt )
1042 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 );
1046 case QMessageBox::Cancel:
1048 case QMessageBox::No:
1049 child = child.nextSiblingElement();
1051 case QMessageBox::Yes:
1054 case QMessageBox::YesToAll:
1058 case QMessageBox::NoToAll:
1065 if ( keys.contains( connectionName ) )
1069 child = child.nextSiblingElement();
1075 keys << connectionName;
1090 if ( !child.attribute( QStringLiteral(
"username" ) ).isEmpty() )
1095 child = child.nextSiblingElement();
1099void QgsManageConnectionsDialog::loadPgConnections(
const QDomDocument &doc,
const QStringList &items )
1101 const QDomElement root = doc.documentElement();
1102 if ( root.tagName() != QLatin1String(
"qgsPgConnections" ) )
1104 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a PostGIS connections exchange file." ) );
1108 QString connectionName;
1109 QgsSettings settings;
1110 settings.
beginGroup( QStringLiteral(
"/PostgreSQL/connections" ) );
1113 QDomElement child = root.firstChildElement();
1115 bool overwrite =
true;
1117 while ( !child.isNull() )
1119 connectionName = child.attribute( QStringLiteral(
"name" ) );
1120 if ( !items.contains( connectionName ) )
1122 child = child.nextSiblingElement();
1127 if ( keys.contains( connectionName ) && prompt )
1129 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 );
1132 case QMessageBox::Cancel:
1134 case QMessageBox::No:
1135 child = child.nextSiblingElement();
1137 case QMessageBox::Yes:
1140 case QMessageBox::YesToAll:
1144 case QMessageBox::NoToAll:
1151 if ( keys.contains( connectionName ) )
1155 child = child.nextSiblingElement();
1161 keys << connectionName;
1165 settings.
beginGroup(
"/PostgreSQL/connections/" + connectionName );
1167 settings.
setValue( QStringLiteral(
"/host" ), child.attribute( QStringLiteral(
"host" ) ) );
1168 settings.
setValue( QStringLiteral(
"/port" ), child.attribute( QStringLiteral(
"port" ) ) );
1169 settings.
setValue( QStringLiteral(
"/database" ), child.attribute( QStringLiteral(
"database" ) ) );
1170 if ( child.hasAttribute( QStringLiteral(
"service" ) ) )
1172 settings.
setValue( QStringLiteral(
"/service" ), child.attribute( QStringLiteral(
"service" ) ) );
1176 settings.
setValue( QStringLiteral(
"/service" ),
"" );
1178 settings.
setValue( QStringLiteral(
"/sslmode" ), child.attribute( QStringLiteral(
"sslmode" ) ) );
1179 settings.
setValue( QStringLiteral(
"/estimatedMetadata" ), child.attribute( QStringLiteral(
"estimatedMetadata" ) ) );
1180 settings.
setValue( QStringLiteral(
"/projectsInDatabase" ), child.attribute( QStringLiteral(
"projectsInDatabase" ), 0 ) );
1181 settings.
setValue( QStringLiteral(
"/dontResolveType" ), child.attribute( QStringLiteral(
"dontResolveType" ), 0 ) );
1182 settings.
setValue( QStringLiteral(
"/allowGeometrylessTables" ), child.attribute( QStringLiteral(
"allowGeometrylessTables" ), 0 ) );
1183 settings.
setValue( QStringLiteral(
"/geometryColumnsOnly" ), child.attribute( QStringLiteral(
"geometryColumnsOnly" ), 0 ) );
1184 settings.
setValue( QStringLiteral(
"/publicOnly" ), child.attribute( QStringLiteral(
"publicOnly" ), 0 ) );
1185 settings.
setValue( QStringLiteral(
"/saveUsername" ), child.attribute( QStringLiteral(
"saveUsername" ) ) );
1186 settings.
setValue( QStringLiteral(
"/username" ), child.attribute( QStringLiteral(
"username" ) ) );
1187 settings.
setValue( QStringLiteral(
"/savePassword" ), child.attribute( QStringLiteral(
"savePassword" ) ) );
1188 settings.
setValue( QStringLiteral(
"/password" ), child.attribute( QStringLiteral(
"password" ) ) );
1189 settings.
setValue( QStringLiteral(
"/schema" ), child.attribute( QStringLiteral(
"schema" ) ) );
1192 child = child.nextSiblingElement();
1196void QgsManageConnectionsDialog::loadMssqlConnections(
const QDomDocument &doc,
const QStringList &items )
1198 const QDomElement root = doc.documentElement();
1199 if ( root.tagName() != QLatin1String(
"qgsMssqlConnections" ) )
1201 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a MS SQL Server connections exchange file." ) );
1205 QString connectionName;
1206 QgsSettings settings;
1207 settings.
beginGroup( QStringLiteral(
"/MSSQL/connections" ) );
1210 QDomElement child = root.firstChildElement();
1212 bool overwrite =
true;
1214 while ( !child.isNull() )
1216 connectionName = child.attribute( QStringLiteral(
"name" ) );
1217 if ( !items.contains( connectionName ) )
1219 child = child.nextSiblingElement();
1224 if ( keys.contains( connectionName ) && prompt )
1226 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 );
1229 case QMessageBox::Cancel:
1231 case QMessageBox::No:
1232 child = child.nextSiblingElement();
1234 case QMessageBox::Yes:
1237 case QMessageBox::YesToAll:
1241 case QMessageBox::NoToAll:
1248 if ( keys.contains( connectionName ) )
1252 child = child.nextSiblingElement();
1258 keys << connectionName;
1262 settings.
beginGroup(
"/MSSQL/connections/" + connectionName );
1264 settings.
setValue( QStringLiteral(
"/host" ), child.attribute( QStringLiteral(
"host" ) ) );
1265 settings.
setValue( QStringLiteral(
"/port" ), child.attribute( QStringLiteral(
"port" ) ) );
1266 settings.
setValue( QStringLiteral(
"/database" ), child.attribute( QStringLiteral(
"database" ) ) );
1267 if ( child.hasAttribute( QStringLiteral(
"service" ) ) )
1269 settings.
setValue( QStringLiteral(
"/service" ), child.attribute( QStringLiteral(
"service" ) ) );
1273 settings.
setValue( QStringLiteral(
"/service" ),
"" );
1275 settings.
setValue( QStringLiteral(
"/sslmode" ), child.attribute( QStringLiteral(
"sslmode" ) ) );
1276 settings.
setValue( QStringLiteral(
"/estimatedMetadata" ), child.attribute( QStringLiteral(
"estimatedMetadata" ) ) );
1277 settings.
setValue( QStringLiteral(
"/saveUsername" ), child.attribute( QStringLiteral(
"saveUsername" ) ) );
1278 settings.
setValue( QStringLiteral(
"/username" ), child.attribute( QStringLiteral(
"username" ) ) );
1279 settings.
setValue( QStringLiteral(
"/savePassword" ), child.attribute( QStringLiteral(
"savePassword" ) ) );
1280 settings.
setValue( QStringLiteral(
"/password" ), child.attribute( QStringLiteral(
"password" ) ) );
1283 child = child.nextSiblingElement();
1287void QgsManageConnectionsDialog::loadOracleConnections(
const QDomDocument &doc,
const QStringList &items )
1289 const QDomElement root = doc.documentElement();
1290 if ( root.tagName() != QLatin1String(
"qgsOracleConnections" ) )
1292 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not an Oracle connections exchange file." ) );
1296 QString connectionName;
1297 QgsSettings settings;
1298 settings.
beginGroup( QStringLiteral(
"/Oracle/connections" ) );
1301 QDomElement child = root.firstChildElement();
1303 bool overwrite =
true;
1305 while ( !child.isNull() )
1307 connectionName = child.attribute( QStringLiteral(
"name" ) );
1308 if ( !items.contains( connectionName ) )
1310 child = child.nextSiblingElement();
1315 if ( keys.contains( connectionName ) && prompt )
1317 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 );
1320 case QMessageBox::Cancel:
1322 case QMessageBox::No:
1323 child = child.nextSiblingElement();
1325 case QMessageBox::Yes:
1328 case QMessageBox::YesToAll:
1332 case QMessageBox::NoToAll:
1339 if ( keys.contains( connectionName ) )
1343 child = child.nextSiblingElement();
1349 keys << connectionName;
1353 settings.
beginGroup(
"/Oracle/connections/" + connectionName );
1355 settings.
setValue( QStringLiteral(
"/host" ), child.attribute( QStringLiteral(
"host" ) ) );
1356 settings.
setValue( QStringLiteral(
"/port" ), child.attribute( QStringLiteral(
"port" ) ) );
1357 settings.
setValue( QStringLiteral(
"/database" ), child.attribute( QStringLiteral(
"database" ) ) );
1358 settings.
setValue( QStringLiteral(
"/dboptions" ), child.attribute( QStringLiteral(
"dboptions" ) ) );
1359 settings.
setValue( QStringLiteral(
"/dbworkspace" ), child.attribute( QStringLiteral(
"dbworkspace" ) ) );
1360 settings.
setValue( QStringLiteral(
"/schema" ), child.attribute( QStringLiteral(
"schema" ) ) );
1361 settings.
setValue( QStringLiteral(
"/estimatedMetadata" ), child.attribute( QStringLiteral(
"estimatedMetadata" ) ) );
1362 settings.
setValue( QStringLiteral(
"/userTablesOnly" ), child.attribute( QStringLiteral(
"userTablesOnly" ) ) );
1363 settings.
setValue( QStringLiteral(
"/geometryColumnsOnly" ), child.attribute( QStringLiteral(
"geometryColumnsOnly" ) ) );
1364 settings.
setValue( QStringLiteral(
"/allowGeometrylessTables" ), child.attribute( QStringLiteral(
"allowGeometrylessTables" ) ) );
1365 settings.
setValue( QStringLiteral(
"/saveUsername" ), child.attribute( QStringLiteral(
"saveUsername" ) ) );
1366 settings.
setValue( QStringLiteral(
"/username" ), child.attribute( QStringLiteral(
"username" ) ) );
1367 settings.
setValue( QStringLiteral(
"/savePassword" ), child.attribute( QStringLiteral(
"savePassword" ) ) );
1368 settings.
setValue( QStringLiteral(
"/password" ), child.attribute( QStringLiteral(
"password" ) ) );
1371 child = child.nextSiblingElement();
1375void QgsManageConnectionsDialog::loadHanaConnections(
const QDomDocument &doc,
const QStringList &items )
1377 QDomElement root = doc.documentElement();
1378 if ( root.tagName() != QLatin1String(
"qgsHanaConnections" ) )
1380 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"The file is not a HANA connections exchange file." ) );
1384 const QDomAttr version = root.attributeNode(
"version" );
1385 if ( version.value() != QLatin1String(
"1.0" ) )
1387 QMessageBox::warning(
this, tr(
"Loading Connections" ), tr(
"The HANA connections exchange file version '%1' is not supported." ).arg( version.value() ) );
1391 QgsSettings settings;
1392 settings.
beginGroup( QStringLiteral(
"/HANA/connections" ) );
1395 QDomElement child = root.firstChildElement();
1397 bool overwrite =
true;
1399 while ( !child.isNull() )
1401 const QString connectionName = child.attribute( QStringLiteral(
"name" ) );
1402 if ( !items.contains( connectionName ) )
1404 child = child.nextSiblingElement();
1409 if ( keys.contains( connectionName ) && prompt )
1411 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 );
1414 case QMessageBox::Cancel:
1416 case QMessageBox::No:
1417 child = child.nextSiblingElement();
1419 case QMessageBox::Yes:
1422 case QMessageBox::YesToAll:
1426 case QMessageBox::NoToAll:
1433 if ( keys.contains( connectionName ) )
1437 child = child.nextSiblingElement();
1443 keys << connectionName;
1447 settings.
beginGroup(
"/HANA/connections/" + connectionName );
1449 for (
const QString param :
1450 {
"driver",
"host",
"database",
"identifierType",
"identifier",
"multitenant",
"schema",
"userTablesOnly",
1451 "allowGeometrylessTables",
"saveUsername",
"username",
"savePassword",
"password",
"sslEnabled",
1452 "sslCryptoProvider",
"sslKeyStore",
"sslTrustStore",
"sslValidateCertificate",
"sslHostNameInCertificate"
1454 settings.
setValue( QStringLiteral(
"/" ) + param, child.attribute( param ) );
1458 child = child.nextSiblingElement();
1462void QgsManageConnectionsDialog::loadXyzTilesConnections(
const QDomDocument &doc,
const QStringList &items )
1464 const QDomElement root = doc.documentElement();
1465 if ( root.tagName() != QLatin1String(
"qgsXYZTilesConnections" ) )
1467 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a XYZ Tiles connections exchange file." ) );
1471 QString connectionName;
1473 QDomElement child = root.firstChildElement();
1475 bool overwrite =
true;
1477 while ( !child.isNull() )
1479 connectionName = child.attribute( QStringLiteral(
"name" ) );
1480 if ( !items.contains( connectionName ) )
1482 child = child.nextSiblingElement();
1487 if ( keys.contains( connectionName ) && prompt )
1489 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 );
1493 case QMessageBox::Cancel:
1495 case QMessageBox::No:
1496 child = child.nextSiblingElement();
1498 case QMessageBox::Yes:
1501 case QMessageBox::YesToAll:
1505 case QMessageBox::NoToAll:
1512 if ( keys.contains( connectionName ) )
1516 child = child.nextSiblingElement();
1522 keys << connectionName;
1534 QgsHttpHeaders httpHeader( child );
1537 child = child.nextSiblingElement();
1541void QgsManageConnectionsDialog::loadArcgisConnections(
const QDomDocument &doc,
const QStringList &items,
const QString &service )
1543 const QDomElement root = doc.documentElement();
1544 if ( root.tagName() !=
"qgs" + service.toUpper() +
"Connections" )
1546 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a %1 connections exchange file." ).arg( service ) );
1550 QString connectionName;
1552 QDomElement child = root.firstChildElement();
1554 bool overwrite =
true;
1556 while ( !child.isNull() )
1558 connectionName = child.attribute( QStringLiteral(
"name" ) );
1559 if ( !items.contains( connectionName ) )
1561 child = child.nextSiblingElement();
1566 if ( keys.contains( connectionName ) && prompt )
1568 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 );
1572 case QMessageBox::Cancel:
1574 case QMessageBox::No:
1575 child = child.nextSiblingElement();
1577 case QMessageBox::Yes:
1580 case QMessageBox::YesToAll:
1584 case QMessageBox::NoToAll:
1591 if ( keys.contains( connectionName ) )
1595 child = child.nextSiblingElement();
1601 keys << connectionName;
1614 child = child.nextSiblingElement();
1618void QgsManageConnectionsDialog::loadVectorTileConnections(
const QDomDocument &doc,
const QStringList &items )
1620 const QDomElement root = doc.documentElement();
1621 if ( root.tagName() != QLatin1String(
"qgsVectorTileConnections" ) )
1623 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a Vector Tile connections exchange file." ) );
1627 QString connectionName;
1628 QgsSettings settings;
1629 settings.
beginGroup( QStringLiteral(
"/qgis/connections-vector-tile" ) );
1632 QDomElement child = root.firstChildElement();
1634 bool overwrite =
true;
1636 while ( !child.isNull() )
1638 connectionName = child.attribute( QStringLiteral(
"name" ) );
1639 if ( !items.contains( connectionName ) )
1641 child = child.nextSiblingElement();
1646 if ( keys.contains( connectionName ) && prompt )
1648 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 );
1652 case QMessageBox::Cancel:
1654 case QMessageBox::No:
1655 child = child.nextSiblingElement();
1657 case QMessageBox::Yes:
1660 case QMessageBox::YesToAll:
1664 case QMessageBox::NoToAll:
1671 if ( keys.contains( connectionName ) )
1675 child = child.nextSiblingElement();
1681 keys << connectionName;
1684 QgsVectorTileProviderConnection::settingsUrl->setValue( child.attribute( QStringLiteral(
"url" ) ), connectionName );
1685 QgsVectorTileProviderConnection::settingsZmin->setValue( child.attribute( QStringLiteral(
"zmin" ) ).toInt(), connectionName );
1686 QgsVectorTileProviderConnection::settingsZmax->setValue( child.attribute( QStringLiteral(
"zmax" ) ).toInt(), connectionName );
1687 QgsVectorTileProviderConnection::settingsServiceType->setValue( child.attribute( QStringLiteral(
"serviceType" ) ), connectionName );
1688 QgsVectorTileProviderConnection::settingsAuthcfg->setValue( child.attribute( QStringLiteral(
"authcfg" ) ), connectionName );
1689 QgsVectorTileProviderConnection::settingsUsername->setValue( child.attribute( QStringLiteral(
"username" ) ), connectionName );
1690 QgsVectorTileProviderConnection::settingsPassword->setValue( child.attribute( QStringLiteral(
"password" ) ), connectionName );
1691 QgsVectorTileProviderConnection::settingsStyleUrl->setValue( child.attribute( QStringLiteral(
"styleUrl" ) ), connectionName );
1693 QgsHttpHeaders httpHeader( child );
1694 QgsVectorTileProviderConnection::settingsHeaders->setValue( httpHeader.headers(), connectionName );
1696 child = child.nextSiblingElement();
1700void QgsManageConnectionsDialog::loadTiledSceneConnections(
const QDomDocument &doc,
const QStringList &items )
1702 const QDomElement root = doc.documentElement();
1703 if ( root.tagName() != QLatin1String(
"qgsTiledSceneConnections" ) )
1705 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a tiled scene connections exchange file." ) );
1709 QString connectionName;
1710 QgsSettings settings;
1711 settings.
beginGroup( QStringLiteral(
"/qgis/connections-tiled-scene" ) );
1714 QDomElement child = root.firstChildElement();
1716 bool overwrite =
true;
1718 while ( !child.isNull() )
1720 connectionName = child.attribute( QStringLiteral(
"name" ) );
1721 if ( !items.contains( connectionName ) )
1723 child = child.nextSiblingElement();
1728 if ( keys.contains( connectionName ) && prompt )
1730 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 );
1734 case QMessageBox::Cancel:
1736 case QMessageBox::No:
1737 child = child.nextSiblingElement();
1739 case QMessageBox::Yes:
1742 case QMessageBox::YesToAll:
1746 case QMessageBox::NoToAll:
1753 if ( keys.contains( connectionName ) )
1757 child = child.nextSiblingElement();
1763 keys << connectionName;
1766 QgsTiledSceneProviderConnection::settingsProvider->setValue( child.attribute( QStringLiteral(
"provider" ) ), connectionName );
1767 QgsTiledSceneProviderConnection::settingsUrl->setValue( child.attribute( QStringLiteral(
"url" ) ), connectionName );
1768 QgsTiledSceneProviderConnection::settingsAuthcfg->setValue( child.attribute( QStringLiteral(
"authcfg" ) ), connectionName );
1769 QgsTiledSceneProviderConnection::settingsUsername->setValue( child.attribute( QStringLiteral(
"username" ) ), connectionName );
1770 QgsTiledSceneProviderConnection::settingsPassword->setValue( child.attribute( QStringLiteral(
"password" ) ), connectionName );
1772 QgsHttpHeaders httpHeader( child );
1773 QgsTiledSceneProviderConnection::settingsHeaders->setValue( httpHeader.headers(), connectionName );
1775 child = child.nextSiblingElement();
1779void QgsManageConnectionsDialog::loadSensorThingsConnections(
const QDomDocument &doc,
const QStringList &items )
1781 const QDomElement root = doc.documentElement();
1782 if ( root.tagName() != QLatin1String(
"qgsSensorThingsConnections" ) )
1784 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a SensorThings connections exchange file." ) );
1788 QString connectionName;
1789 QgsSettings settings;
1790 settings.
beginGroup( QStringLiteral(
"/connections/sensorthings/items" ) );
1793 QDomElement child = root.firstChildElement();
1795 bool overwrite =
true;
1797 while ( !child.isNull() )
1799 connectionName = child.attribute( QStringLiteral(
"name" ) );
1800 if ( !items.contains( connectionName ) )
1802 child = child.nextSiblingElement();
1807 if ( keys.contains( connectionName ) && prompt )
1809 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 );
1813 case QMessageBox::Cancel:
1815 case QMessageBox::No:
1816 child = child.nextSiblingElement();
1818 case QMessageBox::Yes:
1821 case QMessageBox::YesToAll:
1825 case QMessageBox::NoToAll:
1832 if ( keys.contains( connectionName ) )
1836 child = child.nextSiblingElement();
1842 keys << connectionName;
1845 QgsSensorThingsProviderConnection::settingsUrl->setValue( child.attribute( QStringLiteral(
"url" ) ), connectionName );
1846 QgsSensorThingsProviderConnection::settingsAuthcfg->setValue( child.attribute( QStringLiteral(
"authcfg" ) ), connectionName );
1847 QgsSensorThingsProviderConnection::settingsUsername->setValue( child.attribute( QStringLiteral(
"username" ) ), connectionName );
1848 QgsSensorThingsProviderConnection::settingsPassword->setValue( child.attribute( QStringLiteral(
"password" ) ), connectionName );
1850 QgsHttpHeaders httpHeader( child );
1851 QgsSensorThingsProviderConnection::settingsHeaders->setValue( httpHeader.headers(), connectionName );
1853 child = child.nextSiblingElement();
1857void QgsManageConnectionsDialog::loadCloudStorageConnections(
const QDomDocument &doc,
const QStringList &items )
1859 const QDomElement root = doc.documentElement();
1860 if ( root.tagName() != QLatin1String(
"qgsCloudStorageConnections" ) )
1862 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a cloud storage connections exchange file." ) );
1866 QString connectionName;
1867 QgsSettings settings;
1868 settings.
beginGroup( QStringLiteral(
"/connections/cloud/items" ) );
1871 QDomElement child = root.firstChildElement();
1873 bool overwrite =
true;
1875 while ( !child.isNull() )
1877 connectionName = child.attribute( QStringLiteral(
"name" ) );
1878 if ( !items.contains( connectionName ) )
1880 child = child.nextSiblingElement();
1885 if ( keys.contains( connectionName ) && prompt )
1887 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 );
1891 case QMessageBox::Cancel:
1893 case QMessageBox::No:
1894 child = child.nextSiblingElement();
1896 case QMessageBox::Yes:
1899 case QMessageBox::YesToAll:
1903 case QMessageBox::NoToAll:
1910 if ( keys.contains( connectionName ) )
1914 child = child.nextSiblingElement();
1920 keys << connectionName;
1923 QgsGdalCloudProviderConnection::settingsVsiHandler->setValue( child.attribute( QStringLiteral(
"handler" ) ), connectionName );
1924 QgsGdalCloudProviderConnection::settingsContainer->setValue( child.attribute( QStringLiteral(
"container" ) ), connectionName );
1925 QgsGdalCloudProviderConnection::settingsPath->setValue( child.attribute( QStringLiteral(
"path" ) ), connectionName );
1927 QString credentialString = child.attribute( QStringLiteral(
"credentials" ) );
1929 QVariantMap credentialOptions;
1932 const thread_local QRegularExpression credentialOptionRegex( QStringLiteral(
"\\|credential:([^|]*)" ) );
1933 const thread_local QRegularExpression credentialOptionKeyValueRegex( QStringLiteral(
"(.*?)=(.*)" ) );
1935 const QRegularExpressionMatch match = credentialOptionRegex.match( credentialString );
1936 if ( match.hasMatch() )
1938 const QRegularExpressionMatch keyValueMatch = credentialOptionKeyValueRegex.match( match.captured( 1 ) );
1939 if ( keyValueMatch.hasMatch() )
1941 credentialOptions.insert( keyValueMatch.captured( 1 ), keyValueMatch.captured( 2 ) );
1943 credentialString = credentialString.remove( match.capturedStart( 0 ), match.capturedLength( 0 ) );
1951 QgsGdalCloudProviderConnection::settingsCredentialOptions->setValue( credentialOptions, connectionName );
1953 child = child.nextSiblingElement();
1957void QgsManageConnectionsDialog::loadStacConnections(
const QDomDocument &doc,
const QStringList &items )
1959 const QDomElement root = doc.documentElement();
1960 if ( root.tagName() != QLatin1String(
"qgsStacConnections" ) )
1962 QMessageBox::information(
this, tr(
"Loading Connections" ), tr(
"The file is not a STAC connections exchange file." ) );
1966 QString connectionName;
1967 QgsSettings settings;
1968 settings.
beginGroup( QStringLiteral(
"/qgis/connections-stac" ) );
1971 QDomElement child = root.firstChildElement();
1973 bool overwrite =
true;
1975 while ( !child.isNull() )
1977 connectionName = child.attribute( QStringLiteral(
"name" ) );
1978 if ( !items.contains( connectionName ) )
1980 child = child.nextSiblingElement();
1985 if ( keys.contains( connectionName ) && prompt )
1987 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 );
1991 case QMessageBox::Cancel:
1993 case QMessageBox::No:
1994 child = child.nextSiblingElement();
1996 case QMessageBox::Yes:
1999 case QMessageBox::YesToAll:
2003 case QMessageBox::NoToAll:
2010 if ( keys.contains( connectionName ) )
2014 child = child.nextSiblingElement();
2020 keys << connectionName;
2023 QgsStacConnection::settingsUrl->setValue( child.attribute( QStringLiteral(
"url" ) ), connectionName );
2024 QgsStacConnection::settingsAuthcfg->setValue( child.attribute( QStringLiteral(
"authcfg" ) ), connectionName );
2025 QgsStacConnection::settingsUsername->setValue( child.attribute( QStringLiteral(
"username" ) ), connectionName );
2026 QgsStacConnection::settingsPassword->setValue( child.attribute( QStringLiteral(
"password" ) ), connectionName );
2028 QgsHttpHeaders httpHeader( child );
2029 QgsStacConnection::settingsHeaders->setValue( httpHeader.headers(), connectionName );
2031 child = child.nextSiblingElement();
2037 listConnections->selectAll();
2038 buttonBox->button( QDialogButtonBox::Ok )->setEnabled( !listConnections->selectedItems().isEmpty() );
2043 listConnections->clearSelection();
2044 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
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