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

@@ -51,45 +51,17 @@ namespace BlackMisc
(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 airport(json.value("icao").toString());
airport.setDescriptiveName(json.value("name").toString());
airport.setElevation(CLength(json.value("altitude").toInt(), CLengthUnit::ft()));
CCoordinateGeodetic pos(json.value("latitude").toDouble(), json.value("longitude").toDouble(), 0);
CAirport airport(json.value(prefix + "icao").toString());
airport.setDescriptiveName(json.value(prefix + "name").toString());
airport.setElevation(CLength(json.value(prefix + "altitude").toInt(), CLengthUnit::ft()));
const CCoordinateGeodetic pos(json.value(prefix + "latitude").toDouble(), json.value(prefix + "longitude").toDouble(), 0);
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())
{
CCountry country(json.value("alpha3").toString(), json.value("country").toString());
airport.setCountry(country);
}
const CCountry country = CCountry::fromDatabaseJson(json, "ctry_");
airport.setCountry(country);
airport.setKeyAndTimestampFromDatabaseJson(json, prefix);
return airport;

View File

@@ -36,9 +36,9 @@ namespace BlackMisc
{
//! Value object encapsulating information about an airpot.
class BLACKMISC_EXPORT CAirport :
public CValueObject<CAirport>,
public BlackMisc::Db::IDatastoreObjectWithIntegerKey,
public Geo::ICoordinateWithRelativePosition
public CValueObject<CAirport>,
public BlackMisc::Db::IDatastoreObjectWithIntegerKey,
public Geo::ICoordinateWithRelativePosition
{
public:
//! Properties by index
@@ -142,11 +142,8 @@ namespace BlackMisc
//! \copydoc BlackMisc::Mixin::String::toQString
QString convertToQString(bool i18n = false) const;
//! \copydoc BlackMisc::CValueObject::convertFromJson
void convertFromDatabaseJson(const QJsonObject &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:
CAirportIcaoCode m_icao;
@@ -157,6 +154,8 @@ namespace BlackMisc
BLACK_METACLASS(
CAirport,
BLACK_METAMEMBER(dbKey),
BLACK_METAMEMBER(timestampMSecsSinceEpoch),
BLACK_METAMEMBER(icao),
BLACK_METAMEMBER(descriptiveName),
BLACK_METAMEMBER(position),

View File

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

View File

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

View File

@@ -46,12 +46,12 @@ namespace BlackMisc
VatsimStatusFile = 1 << 10, //!< the VATSIM status file (URLs for data files etc.)
AirportEntity = 1 << 11, //!< airports
AllEntities = ((1 << 12) - 1), //!< everything
AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes
AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries
DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded
AllDbEntities = AllIcaoAndCountries | DistributorLiveryModel | InfoObjectEntity | AirportEntity, //!< All DB stuff
AllDbEntitiesNoInfoObjects = AllIcaoAndCountries | DistributorLiveryModel | AirportEntity, //!< All DB entities, no info objects
AllDbEntitiesNoInfoObjectsNoAirports = AllIcaoAndCountries | DistributorLiveryModel //!< All DB entities, no info objects and airports
AllIcaoEntities = AircraftIcaoEntity | AirlineIcaoEntity, //!< all ICAO codes
AllIcaoAndCountries = AircraftIcaoEntity | AirlineIcaoEntity | CountryEntity, //!< all ICAO codes and countries
DistributorLiveryModel = DistributorEntity | LiveryEntity | ModelEntity, //!< Combinded
AllDbEntities = AllIcaoAndCountries | DistributorLiveryModel | InfoObjectEntity | AirportEntity, //!< All DB stuff
AllDbEntitiesNoInfoObjects = AllIcaoAndCountries | DistributorLiveryModel | AirportEntity, //!< All DB entities, no info objects
AllDbEntitiesNoInfoObjectsNoAirports = AllIcaoAndCountries | DistributorLiveryModel //!< All DB entities, no info objects and airports
};
Q_DECLARE_FLAGS(Entity, EntityFlag)