refs #23, anticipating aircraft ICAO code from VATSIM data file

* helper methods
* renamed methods
This commit is contained in:
Klaus Basan
2014-05-31 01:31:16 +02:00
parent c7108a51f8
commit 9c5726dc13
9 changed files with 93 additions and 21 deletions

View File

@@ -87,6 +87,9 @@ namespace BlackMisc
//! Has valid id?
bool hasValidId() const { return this->m_pilot.hasValidId(); }
//! Valid designators?
bool hasValidAircraftAndAirlineDesignator() const { return this->m_icao.hasAircraftAndAirlineDesignator(); }
/*!
* Calculcate distance to plane, set it, and also return it
* \param position calculated from this postion to my own aircraft

View File

@@ -1,6 +1,8 @@
#include "avaircrafticao.h"
#include "blackmisc/blackmiscfreefunctions.h"
#include <tuple>
#include <QRegularExpression>
namespace BlackMisc
{
@@ -12,7 +14,7 @@ namespace BlackMisc
QString CAircraftIcao::convertToQString(bool /** i18n **/) const
{
QString s(this->m_aircraftDesignator);
s.append(" ").append(this->m_aircraftCombinedType);
if (this->hasAircraftCombinedType()) s.append(" ").append(this->m_aircraftCombinedType);
if (this->hasAirlineDesignator()) s.append(" ").append(this->m_airlineDesignator);
if (this->hasLivery()) s.append(" ").append(this->m_livery);
if (this->hasAircraftColor()) s.append(" ").append(this->m_aircraftColor);
@@ -62,7 +64,7 @@ namespace BlackMisc
}
/*
* As string?
* As string
*/
QString CAircraftIcao::asString() const
{
@@ -163,6 +165,16 @@ namespace BlackMisc
}
}
/*
* Valid designator?
*/
bool CAircraftIcao::isValidDesignator(const QString &designator)
{
static QRegularExpression regexp("^[A-Z]+[A-Z0-9]*$");
if (designator.length() < 2 || designator.length() > 5) return false;
return (regexp.match(designator).hasMatch());
}
/*
* Register metadata
*/

View File

@@ -25,6 +25,9 @@ namespace BlackMisc
//! Default constructor.
CAircraftIcao() {}
//! Default constructor.
explicit CAircraftIcao(const QString &icao) : m_aircraftDesignator(icao.trimmed().toUpper()) {}
/*!
* Constructor.
* \param icao "B737"
@@ -62,7 +65,7 @@ namespace BlackMisc
bool hasAirlineDesignator() const { return !this->m_airlineDesignator.isEmpty(); }
//! Airline and Aircraft designator?
bool hasAircraftAndAirlineDsignator() const { return this->hasAirlineDesignator() && this->hasAircraftDesignator(); }
bool hasAircraftAndAirlineDesignator() const { return this->hasAirlineDesignator() && this->hasAircraftDesignator(); }
//! Get livery
const QString &getLivery() const { return this->m_livery; }
@@ -149,6 +152,9 @@ namespace BlackMisc
//! \copydoc CValueObject::setPropertyByIndex(variant, index)
virtual void setPropertyByIndex(const QVariant &variant, int index) override;
//! Valid designator?
static bool isValidDesignator(const QString &designator);
protected:
//! \copydoc CValueObject::convertToQString
virtual QString convertToQString(bool i18n = false) const override;

View File

@@ -47,6 +47,16 @@ namespace BlackMisc
return this->findBy(&CAircraft::getCallsign, callsign);
}
/*
* Find by callsign
*/
CAircraft CAircraftList::findFirstByCallsign(const CCallsign &callsign, const CAircraft &ifNotFound) const
{
CAircraftList aircrafts = this->findByCallsign(callsign);
if (aircrafts.isEmpty()) return ifNotFound;
return aircrafts.front();
}
/*
* All pilots
*/
@@ -75,27 +85,26 @@ namespace BlackMisc
/*
* Merge with aircraft
*/
int CAircraftList::updateFromVatsimDataFileAircraft(CAircraft &aircraftToBeUpdated) const
bool CAircraftList::updateFromVatsimDataFileAircraft(CAircraft &aircraftToBeUpdated) const
{
if (this->isEmpty()) return 0;
if (aircraftToBeUpdated.hasValidRealName() && aircraftToBeUpdated.hasValidId()) return 0;
if (this->isEmpty()) return false;
if (aircraftToBeUpdated.hasValidRealName() && aircraftToBeUpdated.hasValidId() && aircraftToBeUpdated.hasValidAircraftAndAirlineDesignator()) return false;
int c = 0;
for (auto i = this->begin(); i != this->end(); ++i)
{
CAircraft currentDataFileAircraft = *i;
if (currentDataFileAircraft.getCallsign() != aircraftToBeUpdated.getCallsign()) continue;
CAircraft currentDataFileAircraft = this->findFirstByCallsign(aircraftToBeUpdated.getCallsign());
if (currentDataFileAircraft.getCallsign().isEmpty()) return false;
CUser user = aircraftToBeUpdated.getPilot();
if (!aircraftToBeUpdated.hasValidRealName()) user.setRealName(currentDataFileAircraft.getPilotRealname());
if (!aircraftToBeUpdated.hasValidId()) user.setId(currentDataFileAircraft.getPilotId());
aircraftToBeUpdated.setPilot(user);
c++;
}
CUser user = aircraftToBeUpdated.getPilot();
if (!aircraftToBeUpdated.hasValidRealName()) user.setRealName(currentDataFileAircraft.getPilotRealname());
if (!aircraftToBeUpdated.hasValidId()) user.setId(currentDataFileAircraft.getPilotId());
aircraftToBeUpdated.setPilot(user);
// normally 1 expected, as I should find
// only one online station for this booking
return c;
CAircraftIcao icao = aircraftToBeUpdated.getIcaoInfo();
CAircraftIcao dataFileIcao = currentDataFileAircraft.getIcaoInfo();
if (!icao.hasAircraftDesignator()) icao.setAircraftDesignator(dataFileIcao.getAircraftDesignator());
if (!icao.hasAirlineDesignator()) icao.setAirlineDesignator(dataFileIcao.getAirlineDesignator());
if (!icao.hasAircraftCombinedType()) icao.setAircraftCombinedType(dataFileIcao.getAircraftCombinedType());
aircraftToBeUpdated.setIcaoInfo(icao);
return true;
}
} // namespace
} // namespace

View File

@@ -43,6 +43,9 @@ namespace BlackMisc
//! Find 0..n stations by callsign
CAircraftList findByCallsign(const CCallsign &callsign) const;
//! Find the first aircraft by callsign, if none return given one
CAircraft findFirstByCallsign(const CCallsign &callsign, const CAircraft &ifNotFound = CAircraft()) const;
//! All pilots (with valid data)
BlackMisc::Network::CUserList getPilots() const;
@@ -59,7 +62,7 @@ namespace BlackMisc
//! \brief Update aircraft with data from VATSIM data file
//! \remarks The list used needs to contain the VATSIM data file objects
int updateFromVatsimDataFileAircraft(CAircraft &aircraftToBeUpdated) const;
bool updateFromVatsimDataFileAircraft(CAircraft &aircraftToBeUpdated) const;
};
} //namespace