refs #748 Support database format in CAirportDataReader

* CAirport is now database object
* CAirportList is now datastore object list
* CAirportDataReader adjustments
This commit is contained in:
Michał Garapich
2016-09-16 01:36:07 +02:00
committed by Mathew Sutcliffe
parent a4b5b28cc1
commit cf3e9f1f67
11 changed files with 98 additions and 83 deletions

View File

@@ -74,6 +74,24 @@ namespace BlackMisc
setPosition(pos);
}
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);
airport.setPosition(pos);
if (json.value("alpha3").isString() && json.value("country").isString())
{
CCountry country(json.value("alpha3").toString(), json.value("country").toString());
airport.setCountry(country);
}
airport.setKeyAndTimestampFromDatabaseJson(json, prefix);
return airport;
}
CVariant CAirport::propertyByIndex(const BlackMisc::CPropertyIndex &index) const
{
if (index.isMyself()) { return CVariant::from(*this); }

View File

@@ -14,6 +14,7 @@
#include "blackmisc/aviation/airporticaocode.h"
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/db/datastore.h"
#include "blackmisc/geo/coordinategeodetic.h"
#include "blackmisc/geo/latitude.h"
#include "blackmisc/geo/longitude.h"
@@ -34,7 +35,10 @@ namespace BlackMisc
namespace Aviation
{
//! Value object encapsulating information about an airpot.
class BLACKMISC_EXPORT CAirport : public CValueObject<CAirport>, public Geo::ICoordinateWithRelativePosition
class BLACKMISC_EXPORT CAirport :
public CValueObject<CAirport>,
public BlackMisc::Db::IDatastoreObjectWithIntegerKey,
public Geo::ICoordinateWithRelativePosition
{
public:
//! Properties by index
@@ -134,6 +138,9 @@ namespace BlackMisc
//! \copydoc BlackMisc::CValueObject::convertFromJson
void convertFromDatabaseJson(const QJsonObject &json);
//! Object from JSON
static CAirport fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString("apt_"));
private:
CAirportIcaoCode m_icao;
QString m_descriptiveName;

View File

@@ -16,6 +16,7 @@
#include "blackmisc/aviation/airporticaocode.h"
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/collection.h"
#include "blackmisc/db/datastoreobjectlist.h"
#include "blackmisc/geo/geoobjectlist.h"
#include "blackmisc/sequence.h"
#include "blackmisc/variant.h"
@@ -29,6 +30,7 @@ namespace BlackMisc
//! Value object for a list of airports.
class BLACKMISC_EXPORT CAirportList :
public CSequence<CAirport>,
public BlackMisc::Db::IDatastoreObjectList<CAirport, CAirportList, int>,
public BlackMisc::Geo::IGeoObjectWithRelativePositionList<CAirport, CAirportList>,
public BlackMisc::Mixin::MetaType<CAirportList>
{