refs #748, fixed airport JSON bugs and removed workaround

* removed workaround in web data services
* removed convertFromDatabaseJson functions, not needed
* changed to use the correct static fromDatabaseJson functions
* fixed prefixes
* load correct Country object by loading it as nested object
* key and timestamp was missing in CAirport tuple metadata
This commit is contained in:
Klaus Basan
2016-10-18 04:35:24 +02:00
parent 34d74904ff
commit b8d323226f
8 changed files with 39 additions and 73 deletions

View File

@@ -65,7 +65,7 @@ namespace BlackCore
void CAirportDataReader::ps_parseAirportData(QNetworkReply *nwReply) void CAirportDataReader::ps_parseAirportData(QNetworkReply *nwReply)
{ {
CDatabaseReader::JsonDatastoreResponse res = this->setStatusAndTransformReplyIntoDatastoreResponse(nwReply); const CDatabaseReader::JsonDatastoreResponse res = this->setStatusAndTransformReplyIntoDatastoreResponse(nwReply);
if (res.hasErrorMessage()) if (res.hasErrorMessage())
{ {
CLogMessage::preformatted(res.lastWarningOrAbove()); CLogMessage::preformatted(res.lastWarningOrAbove());
@@ -74,29 +74,26 @@ namespace BlackCore
} }
CAirportList airports; CAirportList airports;
if (res.isRestricted()) if (res.isRestricted())
{ {
airports = this->getAirports(); airports = this->getAirports();
CAirportList updates; CAirportList updates(CAirportList::fromDatabaseJson(res));
updates.convertFromDatabaseJson(res);
airports.replaceOrAddObjectsByKey(updates); airports.replaceOrAddObjectsByKey(updates);
} }
else else
{ {
airports.convertFromDatabaseJson(res); airports = CAirportList::fromDatabaseJson(res);
} }
int size = airports.size(); const int size = airports.size();
qint64 timestamp = lastModifiedMsSinceEpoch(nwReply); qint64 latestTimestamp = airports.latestTimestampMsecsSinceEpoch();
if (size > 0 && timestamp < 0) if (size > 0 && latestTimestamp < 0)
{ {
CLogMessage(this).error("No timestamp in airport list, setting to last modified value"); CLogMessage(this).error("No timestamp in airport list, setting to last modified value");
timestamp = lastModifiedMsSinceEpoch(nwReply); latestTimestamp = lastModifiedMsSinceEpoch(nwReply);
} }
m_airportCache.set(airports, timestamp); m_airportCache.set(airports, latestTimestamp);
emit dataRead(CEntityFlags::AirportEntity, CEntityFlags::ReadFinished, airports.size()); emit dataRead(CEntityFlags::AirportEntity, CEntityFlags::ReadFinished, airports.size());
} }

View File

@@ -45,11 +45,11 @@ namespace BlackCore
//! \copydoc BlackCore::Db::CDatabaseReader::getCacheTimestamp() //! \copydoc BlackCore::Db::CDatabaseReader::getCacheTimestamp()
QDateTime getCacheTimestamp(BlackMisc::Network::CEntityFlags::Entity entities) const override; QDateTime getCacheTimestamp(BlackMisc::Network::CEntityFlags::Entity entities) const override;
//! \copydoc BlackCore::Db::CDatabaseReader:;getCacheCount() //! \copydoc BlackCore::Db::CDatabaseReader::getCacheCount()
int getCacheCount(BlackMisc::Network::CEntityFlags::Entity entity) const override; int getCacheCount(BlackMisc::Network::CEntityFlags::Entity entity) const override;
protected: protected:
//! \copydoc BlackCore::Db::CDatabaseReader::syncronizeCaches() //! \copydoc BlackCore::Db::CDatabaseReader::synchronizeCaches()
void synchronizeCaches(BlackMisc::Network::CEntityFlags::Entity entities) override; void synchronizeCaches(BlackMisc::Network::CEntityFlags::Entity entities) override;
//! \copydoc BlackCore::Db::CDatabaseReader::invalidateCaches() //! \copydoc BlackCore::Db::CDatabaseReader::invalidateCaches()

View File

@@ -756,9 +756,8 @@ namespace BlackCore
CLogMessage(cats).info("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state); CLogMessage(cats).info("Read data %1 entries: %2 state: %3") << CEntityFlags::flagToString(entity) << number << CEntityFlags::flagToString(state);
} }
//! \todo adjust value when airports are ready
this->m_swiftDbEntitiesRead |= entity; this->m_swiftDbEntitiesRead |= entity;
if (((static_cast<int>(this->m_swiftDbEntitiesRead)) & static_cast<int>(CEntityFlags::AllDbEntitiesNoInfoObjectsNoAirports)) > 0) if (((static_cast<int>(this->m_swiftDbEntitiesRead)) & static_cast<int>(CEntityFlags::AllDbEntities)) > 0)
{ {
emit allSwiftDbDataRead(); emit allSwiftDbDataRead();
} }

View File

@@ -51,45 +51,17 @@ namespace BlackMisc
(void)QT_TRANSLATE_NOOP("Aviation", "Airport"); (void)QT_TRANSLATE_NOOP("Aviation", "Airport");
} }
void CAirport::convertFromDatabaseJson(const QJsonObject &json)
{
Q_ASSERT(json.value("icao").isString());
setIcao(json.value("icao").toString());
if (json.value("alpha3").isString() && json.value("country").isString())
{
CCountry country(json.value("alpha3").toString(), json.value("country").toString());
setCountry(country);
}
Q_ASSERT(json.value("name").isString());
setDescriptiveName(json.value("name").toString());
Q_ASSERT(json.value("altitude").isDouble());
setElevation(CLength(json.value("altitude").toInt(), CLengthUnit::ft()));
Q_ASSERT(json.value("latitude").isDouble());
Q_ASSERT(json.value("longitude").isDouble());
CCoordinateGeodetic pos(json.value("latitude").toDouble(), json.value("longitude").toDouble(), 0);
setPosition(pos);
setOperating(json.value("operating").toString() == QStringLiteral("Y"));
}
CAirport CAirport::fromDatabaseJson(const QJsonObject &json, const QString &prefix) CAirport CAirport::fromDatabaseJson(const QJsonObject &json, const QString &prefix)
{ {
CAirport airport(json.value("icao").toString()); CAirport airport(json.value(prefix + "icao").toString());
airport.setDescriptiveName(json.value("name").toString()); airport.setDescriptiveName(json.value(prefix + "name").toString());
airport.setElevation(CLength(json.value("altitude").toInt(), CLengthUnit::ft())); airport.setElevation(CLength(json.value(prefix + "altitude").toInt(), CLengthUnit::ft()));
CCoordinateGeodetic pos(json.value("latitude").toDouble(), json.value("longitude").toDouble(), 0); const CCoordinateGeodetic pos(json.value(prefix + "latitude").toDouble(), json.value(prefix + "longitude").toDouble(), 0);
airport.setPosition(pos); airport.setPosition(pos);
airport.setOperating(json.value("operating").toString() == QStringLiteral("Y")); airport.setOperating(json.value(prefix + "operating").toString() == QStringLiteral("Y"));
if (json.value("alpha3").isString() && json.value("country").isString()) const CCountry country = CCountry::fromDatabaseJson(json, "ctry_");
{
CCountry country(json.value("alpha3").toString(), json.value("country").toString());
airport.setCountry(country); airport.setCountry(country);
}
airport.setKeyAndTimestampFromDatabaseJson(json, prefix); airport.setKeyAndTimestampFromDatabaseJson(json, prefix);
return airport; return airport;

View File

@@ -142,11 +142,8 @@ namespace BlackMisc
//! \copydoc BlackMisc::Mixin::String::toQString //! \copydoc BlackMisc::Mixin::String::toQString
QString convertToQString(bool i18n = false) const; QString convertToQString(bool i18n = false) const;
//! \copydoc BlackMisc::CValueObject::convertFromJson
void convertFromDatabaseJson(const QJsonObject &json);
//! Object from JSON //! Object from JSON
static CAirport fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString("apt_")); static CAirport fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString());
private: private:
CAirportIcaoCode m_icao; CAirportIcaoCode m_icao;
@@ -157,6 +154,8 @@ namespace BlackMisc
BLACK_METACLASS( BLACK_METACLASS(
CAirport, CAirport,
BLACK_METAMEMBER(dbKey),
BLACK_METAMEMBER(timestampMSecsSinceEpoch),
BLACK_METAMEMBER(icao), BLACK_METAMEMBER(icao),
BLACK_METAMEMBER(descriptiveName), BLACK_METAMEMBER(descriptiveName),
BLACK_METAMEMBER(position), BLACK_METAMEMBER(position),

View File

@@ -60,16 +60,15 @@ namespace BlackMisc
return icaos; return icaos;
} }
void CAirportList::convertFromDatabaseJson(const QJsonArray &json) CAirportList CAirportList::fromDatabaseJson(const QJsonArray &array)
{ {
clear(); CAirportList airports;
for (const QJsonValue &value : json) for (const QJsonValue &value : array)
{ {
QJsonObject object = value.toObject(); const CAirport airport(CAirport::fromDatabaseJson(value.toObject()));
CAirport airport; airports.push_back(airport);
airport.convertFromDatabaseJson(object);
push_back(airport);
} }
return airports;
} }
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -55,8 +55,8 @@ namespace BlackMisc
//! All ICAO codes //! All ICAO codes
QStringList allIcaoCodes(bool sorted) const; QStringList allIcaoCodes(bool sorted) const;
//! Reads the airport list from database JSON //! From our DB JSON
void convertFromDatabaseJson(const QJsonArray& json); static CAirportList fromDatabaseJson(const QJsonArray &array);
}; };
} //namespace } //namespace
} // namespace } // namespace