diff --git a/src/core/providers/sensorthings/qgssensorthingsdataitems.cpp b/src/core/providers/sensorthings/qgssensorthingsdataitems.cpp index 807bc9f83d1..2c9cfe15239 100644 --- a/src/core/providers/sensorthings/qgssensorthingsdataitems.cpp +++ b/src/core/providers/sensorthings/qgssensorthingsdataitems.cpp @@ -96,18 +96,16 @@ QVector QgsSensorThingsConnectionItem::createChildren() children.append( new QgsSensorThingsEntityContainerItem( this, QgsSensorThingsUtils::displayString( entity, true ), mPath + '/' + qgsEnumValueToKey( entity ), - QgsProviderRegistry::instance()->encodeUri( - QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, entityUriParts ) ) ); + entityUriParts, entity, mConnName ) ); } else { children.append( new QgsSensorThingsLayerEntityItem( this, QgsSensorThingsUtils::displayString( entity, true ), mPath + '/' + qgsEnumValueToKey( entity ), - QgsProviderRegistry::instance()->encodeUri( - QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, entityUriParts ), + entityUriParts, QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, - Qgis::BrowserLayerType::TableLayer ) ); + Qgis::BrowserLayerType::TableLayer, entity, mConnName ) ); } } @@ -119,9 +117,11 @@ QVector QgsSensorThingsConnectionItem::createChildren() // QgsSensorThingsEntityContainerItem // -QgsSensorThingsEntityContainerItem::QgsSensorThingsEntityContainerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &entityUri ) +QgsSensorThingsEntityContainerItem::QgsSensorThingsEntityContainerItem( QgsDataItem *parent, const QString &name, const QString &path, const QVariantMap &entityUriParts, Qgis::SensorThingsEntity entityType, const QString &connectionName ) : QgsDataCollectionItem( parent, name, path, QStringLiteral( "sensorthings" ) ) - , mEntityUri( entityUri ) + , mEntityUriParts( entityUriParts ) + , mEntityType( entityType ) + , mConnectionName( connectionName ) { mCapabilities |= Qgis::BrowserItemCapability::Collapse | Qgis::BrowserItemCapability::Fast; populate(); @@ -137,9 +137,6 @@ QVector QgsSensorThingsEntityContainerItem::createChildren() { QVector children; - const QVariantMap entityUriParts = QgsProviderRegistry::instance()->decodeUri( - QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, mEntityUri ); - int sortKey = 1; for ( const Qgis::WkbType wkbType : { @@ -149,7 +146,7 @@ QVector QgsSensorThingsEntityContainerItem::createChildren() Qgis::WkbType::MultiPolygon } ) { - QVariantMap geometryUriParts = entityUriParts; + QVariantMap geometryUriParts = mEntityUriParts; QString name; Qgis::BrowserLayerType layerType = Qgis::BrowserLayerType::TableLayer; switch ( wkbType ) @@ -180,10 +177,9 @@ QVector QgsSensorThingsEntityContainerItem::createChildren() children.append( new QgsSensorThingsLayerEntityItem( this, name, mPath + '/' + name, - QgsProviderRegistry::instance()->encodeUri( - QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, geometryUriParts ), + geometryUriParts, QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, - layerType ) ); + layerType, mEntityType, mConnectionName ) ); children.last()->setSortKey( sortKey++ ); } @@ -194,12 +190,60 @@ QVector QgsSensorThingsEntityContainerItem::createChildren() // QgsSensorThingsLayerEntityItem // -QgsSensorThingsLayerEntityItem::QgsSensorThingsLayerEntityItem( QgsDataItem *parent, QString name, QString path, const QString &encodedUri, const QString &provider, Qgis::BrowserLayerType type ) - : QgsLayerItem( parent, name, path, encodedUri, type, provider ) +QgsSensorThingsLayerEntityItem::QgsSensorThingsLayerEntityItem( QgsDataItem *parent, const QString &name, const QString &path, + const QVariantMap &uriParts, const QString &provider, Qgis::BrowserLayerType type, Qgis::SensorThingsEntity entityType, const QString &connectionName ) + : QgsLayerItem( parent, name, path, + QgsProviderRegistry::instance()->encodeUri( QgsSensorThingsProvider::SENSORTHINGS_PROVIDER_KEY, uriParts ), + type, provider ) + , mUriParts( uriParts ) + , mEntityType( entityType ) + , mConnectionName( connectionName ) { setState( Qgis::BrowserItemState::Populated ); } +QString QgsSensorThingsLayerEntityItem::layerName() const +{ + QString baseName; + if ( QgsSensorThingsUtils::entityTypeHasGeometry( mEntityType ) ) + { + const QString geometryType = mUriParts.value( QStringLiteral( "geometryType" ) ).toString(); + QString geometryNamePart; + if ( geometryType.compare( QLatin1String( "point" ), Qt::CaseInsensitive ) == 0 || + geometryType.compare( QLatin1String( "multipoint" ), Qt::CaseInsensitive ) == 0 ) + { + geometryNamePart = tr( "Points" ); + } + else if ( geometryType.compare( QLatin1String( "line" ), Qt::CaseInsensitive ) == 0 ) + { + geometryNamePart = tr( "Lines" ); + } + else if ( geometryType.compare( QLatin1String( "polygon" ), Qt::CaseInsensitive ) == 0 ) + { + geometryNamePart = tr( "Polygons" ); + } + + if ( !geometryNamePart.isEmpty() ) + { + baseName = QStringLiteral( "%1 - %2 (%3)" ).arg( mConnectionName, + QgsSensorThingsUtils::displayString( mEntityType, true ), + geometryNamePart ); + } + else + { + baseName = QStringLiteral( "%1 - %2" ).arg( mConnectionName, + QgsSensorThingsUtils::displayString( mEntityType, true ) ); + } + } + else + { + baseName = QStringLiteral( "%1 - %2" ).arg( mConnectionName, + QgsSensorThingsUtils::displayString( mEntityType, true ) ); + } + + return baseName; +} + // // QgsSensorThingsDataItemProvider // diff --git a/src/core/providers/sensorthings/qgssensorthingsdataitems.h b/src/core/providers/sensorthings/qgssensorthingsdataitems.h index 62dfdb34f7a..fd4db697d75 100644 --- a/src/core/providers/sensorthings/qgssensorthingsdataitems.h +++ b/src/core/providers/sensorthings/qgssensorthingsdataitems.h @@ -52,11 +52,14 @@ class CORE_EXPORT QgsSensorThingsEntityContainerItem : public QgsDataCollectionI { Q_OBJECT public: - QgsSensorThingsEntityContainerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &entityUri ); + QgsSensorThingsEntityContainerItem( QgsDataItem *parent, const QString &name, const QString &path, const QVariantMap &entityUriParts, + Qgis::SensorThingsEntity entityType, const QString &connectionName ); bool equal( const QgsDataItem *other ) override; QVector createChildren() override; private: - QString mEntityUri; + QVariantMap mEntityUriParts; + Qgis::SensorThingsEntity mEntityType = Qgis::SensorThingsEntity::Invalid; + QString mConnectionName; }; @@ -64,8 +67,14 @@ class CORE_EXPORT QgsSensorThingsLayerEntityItem : public QgsLayerItem { Q_OBJECT public: - QgsSensorThingsLayerEntityItem( QgsDataItem *parent, QString name, QString path, const QString &encodedUri, const QString &provider, Qgis::BrowserLayerType type ); - + QgsSensorThingsLayerEntityItem( QgsDataItem *parent, const QString &name, const QString &path, + const QVariantMap &uriParts, const QString &provider, Qgis::BrowserLayerType type, + Qgis::SensorThingsEntity entityType, const QString &connectionName ); + QString layerName() const final; + private: + QVariantMap mUriParts; + Qgis::SensorThingsEntity mEntityType = Qgis::SensorThingsEntity::Invalid; + QString mConnectionName; }; //! Provider for sensor things root data item