mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
282 lines
15 KiB
C++
282 lines
15 KiB
C++
/***************************************************************************
|
|
qgslayermetadataformatter.cpp
|
|
---------------------
|
|
begin : September 2017
|
|
copyright : (C) 2017 by Etienne Trimaille
|
|
email : etienne.trimaille at gmail dot com
|
|
***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
#include <QStringBuilder>
|
|
|
|
#include "qgslayermetadataformatter.h"
|
|
#include "qgslayermetadata.h"
|
|
|
|
|
|
QgsLayerMetadataFormatter::QgsLayerMetadataFormatter( const QgsLayerMetadata &metadata )
|
|
: mMetadata( metadata )
|
|
{
|
|
}
|
|
|
|
QString QgsLayerMetadataFormatter::accessSectionHtml() const
|
|
{
|
|
QString myMetadata = QStringLiteral( "<table class=\"list-view\">\n" );
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Fees" ) + QStringLiteral( "</td><td>" ) + mMetadata.fees() + QStringLiteral( "</td></tr>\n" );
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Licenses" ) + QStringLiteral( "</td><td>" ) + mMetadata.licenses().join( QStringLiteral( "<br />" ) ) + QStringLiteral( "</td></tr>\n" );
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Rights" ) + QStringLiteral( "</td><td>" ) + mMetadata.rights().join( QStringLiteral( "<br />" ) ) + QStringLiteral( "</td></tr>\n" );
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Constraints" ) + QStringLiteral( "</td><td>" );
|
|
const QList<QgsLayerMetadata::Constraint> &constraints = mMetadata.constraints();
|
|
bool notFirstRow = false;
|
|
for ( const QgsLayerMetadata::Constraint &constraint : constraints )
|
|
{
|
|
if ( notFirstRow )
|
|
{
|
|
myMetadata += QLatin1String( "<br />" );
|
|
}
|
|
myMetadata += QStringLiteral( "<strong>" ) + constraint.type + QStringLiteral( ": </strong>" ) + constraint.constraint;
|
|
notFirstRow = true;
|
|
}
|
|
myMetadata += QLatin1String( "</td></tr>\n" );
|
|
mMetadata.rights().join( QStringLiteral( "<br />" ) ) + QStringLiteral( "</td></tr>\n" );
|
|
myMetadata += QLatin1String( "</table>\n" );
|
|
return myMetadata;
|
|
}
|
|
|
|
QString QgsLayerMetadataFormatter::contactsSectionHtml() const
|
|
{
|
|
const QList<QgsAbstractMetadataBase::Contact> &contacts = mMetadata.contacts();
|
|
QString myMetadata;
|
|
if ( contacts.isEmpty() )
|
|
{
|
|
myMetadata += QStringLiteral( "<p>" ) + QObject::tr( "No contact yet." ) + QStringLiteral( "</p>" );
|
|
}
|
|
else
|
|
{
|
|
myMetadata += QStringLiteral( "<table width=\"100%\" class=\"tabular-view\">\n" );
|
|
myMetadata += QLatin1String( "<tr><th>" ) + QObject::tr( "ID" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Name" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Position" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Organization" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Role" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Email" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Voice" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Fax" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Addresses" ) + QLatin1String( "</th></tr>\n" );
|
|
int i = 1;
|
|
for ( const QgsAbstractMetadataBase::Contact &contact : contacts )
|
|
{
|
|
QString rowClass;
|
|
if ( i % 2 )
|
|
rowClass = QStringLiteral( "class=\"odd-row\"" );
|
|
myMetadata += QLatin1String( "<tr " ) + rowClass + QLatin1String( "><td>" ) + QString::number( i ) + QLatin1String( "</td><td>" ) + contact.name + QLatin1String( "</td><td>" ) + contact.position + QLatin1String( "</td><td>" ) + contact.organization + QLatin1String( "</td><td>" ) + contact.role + QLatin1String( "</td><td>" ) + contact.email + QLatin1String( "</td><td>" ) + contact.voice + QLatin1String( "</td><td>" ) + contact.fax + QLatin1String( "</td><td>" );
|
|
bool notFirstRow = false;
|
|
for ( const QgsAbstractMetadataBase::Address &oneAddress : contact.addresses )
|
|
{
|
|
if ( notFirstRow )
|
|
{
|
|
myMetadata += QLatin1String( "<br />\n" );
|
|
}
|
|
if ( ! oneAddress.type.isEmpty() )
|
|
{
|
|
myMetadata += oneAddress.type + QStringLiteral( "<br />" );
|
|
}
|
|
if ( ! oneAddress.address.isEmpty() )
|
|
{
|
|
myMetadata += oneAddress.address + QStringLiteral( "<br />" );
|
|
}
|
|
if ( ! oneAddress.postalCode.isEmpty() )
|
|
{
|
|
myMetadata += oneAddress.postalCode + QStringLiteral( "<br />" );
|
|
}
|
|
if ( ! oneAddress.city.isEmpty() )
|
|
{
|
|
myMetadata += oneAddress.city + QStringLiteral( "<br />" );
|
|
}
|
|
if ( ! oneAddress.administrativeArea.isEmpty() )
|
|
{
|
|
myMetadata += oneAddress.administrativeArea + QStringLiteral( "<br />" );
|
|
}
|
|
if ( ! oneAddress.country.isEmpty() )
|
|
{
|
|
myMetadata += oneAddress.country;
|
|
}
|
|
notFirstRow = true;
|
|
}
|
|
myMetadata += QLatin1String( "</td></tr>\n" );
|
|
i++;
|
|
}
|
|
myMetadata += QLatin1String( "</table>\n" );
|
|
}
|
|
return myMetadata;
|
|
}
|
|
|
|
QString QgsLayerMetadataFormatter::extentSectionHtml( const bool showSpatialExtent ) const
|
|
{
|
|
const QgsLayerMetadata::Extent extent = mMetadata.extent();
|
|
bool notFirstRow = false;
|
|
QString myMetadata = QStringLiteral( "<table class=\"list-view\">\n" );
|
|
if ( showSpatialExtent )
|
|
{
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "CRS" ) + QStringLiteral( "</td><td>" );
|
|
if ( mMetadata.crs().isValid() )
|
|
{
|
|
myMetadata += mMetadata.crs().authid() + QStringLiteral( " - " );
|
|
myMetadata += mMetadata.crs().description() + QStringLiteral( " - " );
|
|
if ( mMetadata.crs().isGeographic() )
|
|
myMetadata += QObject::tr( "Geographic" );
|
|
else
|
|
myMetadata += QObject::tr( "Projected" );
|
|
}
|
|
myMetadata += QLatin1String( "</td></tr>\n" );
|
|
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Spatial Extent" ) + QStringLiteral( "</td><td>" );
|
|
const QList< QgsLayerMetadata::SpatialExtent > spatialExtents = extent.spatialExtents();
|
|
for ( const QgsLayerMetadata::SpatialExtent &spatialExtent : spatialExtents )
|
|
{
|
|
if ( notFirstRow )
|
|
{
|
|
myMetadata += QLatin1String( "<br />\n" );
|
|
}
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "CRS" ) + QStringLiteral( ": </strong>" ) + spatialExtent.extentCrs.authid() + QStringLiteral( " - " );
|
|
myMetadata += spatialExtent.extentCrs.description() + QStringLiteral( " - " );
|
|
if ( spatialExtent.extentCrs.isGeographic() )
|
|
myMetadata += QObject::tr( "Geographic" );
|
|
else
|
|
myMetadata += QObject::tr( "Projected" );
|
|
myMetadata += QStringLiteral( "<br />" );
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "X Minimum" ) + QStringLiteral( ": </strong>" ) + qgsDoubleToString( spatialExtent.bounds.xMinimum() ) + QStringLiteral( "<br />" );
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "Y Minimum" ) + QStringLiteral( ": </strong>" ) + qgsDoubleToString( spatialExtent.bounds.yMinimum() ) + QStringLiteral( "<br />" );
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "X Maximum" ) + QStringLiteral( ": </strong>" ) + qgsDoubleToString( spatialExtent.bounds.xMaximum() ) + QStringLiteral( "<br />" );
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "Y Maximum" ) + QStringLiteral( ": </strong>" ) + qgsDoubleToString( spatialExtent.bounds.yMaximum() ) + QStringLiteral( "<br />" );
|
|
if ( spatialExtent.bounds.zMinimum() || spatialExtent.bounds.zMaximum() )
|
|
{
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "Z Minimum" ) + QStringLiteral( ": </strong>" ) + qgsDoubleToString( spatialExtent.bounds.zMinimum() ) + QStringLiteral( "<br />" );
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "Z Maximum" ) + QStringLiteral( ": </strong>" ) + qgsDoubleToString( spatialExtent.bounds.zMaximum() );
|
|
}
|
|
notFirstRow = true;
|
|
}
|
|
myMetadata += QLatin1String( "</td></tr>\n" );
|
|
}
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Temporal Extent" ) + QStringLiteral( "</td><td>" );
|
|
const QList< QgsDateTimeRange > temporalExtents = extent.temporalExtents();
|
|
notFirstRow = false;
|
|
for ( const QgsDateTimeRange &temporalExtent : temporalExtents )
|
|
{
|
|
if ( notFirstRow )
|
|
{
|
|
myMetadata += QLatin1String( "<br />\n" );
|
|
}
|
|
if ( temporalExtent.isInstant() )
|
|
{
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "Instant" ) + QStringLiteral( ": </strong>" ) + temporalExtent.begin().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODate );
|
|
}
|
|
else
|
|
{
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "Start" ) + QStringLiteral( ": </strong>" ) + temporalExtent.begin().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODate ) + QStringLiteral( "<br />\n" );
|
|
myMetadata += QStringLiteral( "<strong>" ) + QObject::tr( "End" ) + QStringLiteral( ": </strong>" ) + temporalExtent.end().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODate );
|
|
}
|
|
notFirstRow = true;
|
|
}
|
|
myMetadata += QLatin1String( "</td></tr>\n" );
|
|
myMetadata += QLatin1String( "</table>\n" );
|
|
return myMetadata;
|
|
}
|
|
|
|
QString QgsLayerMetadataFormatter::identificationSectionHtml() const
|
|
{
|
|
QString myMetadata = QStringLiteral( "<table class=\"list-view\">\n" );
|
|
|
|
// Identifier
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Identifier" ) + QStringLiteral( "</td><td>" ) + mMetadata.identifier() + QStringLiteral( "</td></tr>\n" );
|
|
|
|
// Parent Identifier
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Parent Identifier" ) + QStringLiteral( "</td><td>" ) + mMetadata.parentIdentifier() + QStringLiteral( "</td></tr>\n" );
|
|
|
|
// Title
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Title" ) + QStringLiteral( "</td><td>" ) + mMetadata.title() + QStringLiteral( "</td></tr>\n" );
|
|
|
|
// Type
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Type" ) + QStringLiteral( "</td><td>" ) + mMetadata.type() + QStringLiteral( "</td></tr>\n" );
|
|
|
|
// Language
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Language" ) + QStringLiteral( "</td><td>" ) + mMetadata.language() + QStringLiteral( "</td></tr>\n" );
|
|
|
|
// Abstract
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Abstract" ) + QStringLiteral( "</td><td>" ) + mMetadata.abstract() + QStringLiteral( "</td></tr>\n" );
|
|
|
|
// Categories
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Categories" ) + QStringLiteral( "</td><td>" ) + mMetadata.categories().join( QStringLiteral( ", " ) ) + QStringLiteral( "</td></tr>\n" );
|
|
|
|
// Keywords
|
|
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + QObject::tr( "Keywords" ) + QStringLiteral( "</td><td>\n" );
|
|
QMapIterator<QString, QStringList> i( mMetadata.keywords() );
|
|
if ( i.hasNext() )
|
|
{
|
|
myMetadata += QStringLiteral( "<table width=\"100%\" class=\"tabular-view\">\n" );
|
|
myMetadata += QLatin1String( "<tr><th>" ) + QObject::tr( "Vocabulary" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Items" ) + QLatin1String( "</th></tr>\n" );
|
|
int j = 1;
|
|
while ( i.hasNext() )
|
|
{
|
|
i.next();
|
|
QString rowClass;
|
|
if ( j % 2 )
|
|
rowClass = QStringLiteral( "class=\"odd-row\"" );
|
|
myMetadata += QLatin1String( "<tr " ) + rowClass + QLatin1String( "><td>" ) + i.key() + QLatin1String( "</td><td>" ) + i.value().join( QStringLiteral( ", " ) ) + QLatin1String( "</td></tr>\n" );
|
|
j++;
|
|
}
|
|
myMetadata += QLatin1String( "</table>\n" ); // End keywords table
|
|
}
|
|
myMetadata += QLatin1String( "</td></tr>\n" ); // End of keywords row
|
|
myMetadata += QLatin1String( "</table>\n" ); // End identification table
|
|
return myMetadata;
|
|
}
|
|
|
|
QString QgsLayerMetadataFormatter::historySectionHtml() const
|
|
{
|
|
QString myMetadata;
|
|
const QStringList historyItems = mMetadata.history();
|
|
if ( historyItems.isEmpty() )
|
|
{
|
|
myMetadata += QStringLiteral( "<p>" ) + QObject::tr( "No history yet." ) + QStringLiteral( "</p>\n" );
|
|
}
|
|
else
|
|
{
|
|
myMetadata += QStringLiteral( "<table width=\"100%\" class=\"tabular-view\">\n" );
|
|
myMetadata += QLatin1String( "<tr><th>" ) + QObject::tr( "ID" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Action" ) + QLatin1String( "</th></tr>\n" );
|
|
int i = 1;
|
|
for ( const QString &history : historyItems )
|
|
{
|
|
QString rowClass;
|
|
if ( i % 2 )
|
|
rowClass = QStringLiteral( "class=\"odd-row\"" );
|
|
myMetadata += QLatin1String( "<tr " ) + rowClass + QLatin1String( "><td width=\"5%\">" ) + QString::number( i ) + QLatin1String( "</td><td>" ) + history + QLatin1String( "</td></tr>\n" );
|
|
i++;
|
|
}
|
|
myMetadata += QLatin1String( "</table>\n" );
|
|
}
|
|
return myMetadata;
|
|
}
|
|
|
|
QString QgsLayerMetadataFormatter::linksSectionHtml() const
|
|
{
|
|
QString myMetadata;
|
|
const QList<QgsAbstractMetadataBase::Link> &links = mMetadata.links();
|
|
if ( links.isEmpty() )
|
|
{
|
|
myMetadata += QStringLiteral( "<p>" ) + QObject::tr( "No links yet." ) + QStringLiteral( "</p>\n" );
|
|
}
|
|
else
|
|
{
|
|
myMetadata += QStringLiteral( "<table width=\"100%\" class=\"tabular-view\">\n" );
|
|
myMetadata += QLatin1String( "<tr><th>" ) + QObject::tr( "ID" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Name" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Type" ) + QLatin1String( "</th><th>" ) + QObject::tr( "URL" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Description" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Format" ) + QLatin1String( "</th><th>" ) + QObject::tr( "MIME Type" ) + QLatin1String( "</th><th>" ) + QObject::tr( "Size" ) + QLatin1String( "</th></tr>\n" );
|
|
int i = 1;
|
|
for ( const QgsAbstractMetadataBase::Link &link : links )
|
|
{
|
|
QString rowClass;
|
|
if ( i % 2 )
|
|
rowClass = QStringLiteral( "class=\"odd-row\"" );
|
|
myMetadata += QLatin1String( "<tr " ) + rowClass + QLatin1String( "><td>" ) + QString::number( i ) + QLatin1String( "</td><td>" ) + link.name + QLatin1String( "</td><td>" ) + link.type + QLatin1String( "</td><td>" ) + link.url + QLatin1String( "</td><td>" ) + link.description + QLatin1String( "</td><td>" ) + link.format + QLatin1String( "</td><td>" ) + link.mimeType + QLatin1String( "</td><td>" ) + link.size + QLatin1String( "</td></tr>\n" );
|
|
i++;
|
|
}
|
|
myMetadata += QLatin1String( "</table>\n" );
|
|
}
|
|
return myMetadata;
|
|
}
|