Ref T298, improved matching log messages

This commit is contained in:
Klaus Basan
2018-08-17 01:43:07 +02:00
parent 418769ccf8
commit dc534fc88c
4 changed files with 49 additions and 47 deletions

View File

@@ -107,11 +107,14 @@ namespace BlackCore
static const QString m2("Input model: '%1' '%2'"); static const QString m2("Input model: '%1' '%2'");
static const QString m3("Matching uses model set of %1 models\n%2"); static const QString m3("Matching uses model set of %1 models\n%2");
static const QString m4("Setup %1"); static const QString m4("Setup %1");
static const QString summary = QStringLiteral("\n-----------------------------------------\n") % static const QString summary =
QStringLiteral("- Combined: %1 -> %2\n") % QStringLiteral("\n") %
QStringLiteral("- Aircraft: %3 -> %4\n") % QStringLiteral("-----------------------------------------\n") %
QStringLiteral("- Airline: %5 -> %6\n") % QStringLiteral("- Combined: %1 -> %2\n") %
QStringLiteral("-----------------------------------------\n"); QStringLiteral("- Aircraft: %3 -> %4\n") %
QStringLiteral("- Airline: %5 -> %6\n") %
QStringLiteral("- Livery: %7 -> %8\n") %
QStringLiteral("-----------------------------------------\n");
const QDateTime startTime = QDateTime::currentDateTimeUtc(); const QDateTime startTime = QDateTime::currentDateTimeUtc();
if (log) { log->clear(); } if (log) { log->clear(); }
@@ -214,7 +217,8 @@ namespace BlackCore
summary.arg( summary.arg(
remoteAircraft.getAircraftIcaoCode().getCombinedType(), matchedModel.getAircraftIcaoCode().getCombinedType(), remoteAircraft.getAircraftIcaoCode().getCombinedType(), matchedModel.getAircraftIcaoCode().getCombinedType(),
remoteAircraft.getAircraftIcaoCode().getDesignatorDbKey(), matchedModel.getAircraftIcaoCode().getDesignatorDbKey(), remoteAircraft.getAircraftIcaoCode().getDesignatorDbKey(), matchedModel.getAircraftIcaoCode().getDesignatorDbKey(),
remoteAircraft.getAirlineIcaoCode().getVDesignatorDbKey(), matchedModel.getAirlineIcaoCode().getVDesignatorDbKey() remoteAircraft.getAirlineIcaoCode().getVDesignatorDbKey(), matchedModel.getAirlineIcaoCode().getVDesignatorDbKey(),
remoteAircraft.getLivery().getCombinedCodePlusInfoAndId(), matchedModel.getLivery().getCombinedCodePlusInfoAndId()
)); ));
} }
} }
@@ -668,7 +672,8 @@ namespace BlackCore
// family only because aircraft ICAO is not used // family only because aircraft ICAO is not used
if (mode.testFlag(CAircraftMatcherSetup::ByFamily)) if (mode.testFlag(CAircraftMatcherSetup::ByFamily))
{ {
matchedModels = ifPossibleReduceByFamily(remoteAircraft, matchedModels, reduced, log); QString usedFamily;
matchedModels = ifPossibleReduceByFamily(remoteAircraft, matchedModels, reduced, usedFamily, log);
if (reduced) { break; } if (reduced) { break; }
} }
else if (log) else if (log)
@@ -849,18 +854,17 @@ namespace BlackCore
if (log) { CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("No exact ICAO match of '") % remoteAircraft.getAirlineAndAircraftIcaoCodeDesignators() % QStringLiteral("', will try family combination"), getLogCategories()); } if (log) { CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("No exact ICAO match of '") % remoteAircraft.getAirlineAndAircraftIcaoCodeDesignators() % QStringLiteral("', will try family combination"), getLogCategories()); }
bool r3 = false; bool r3 = false;
CAircraftModelList models2nd = ifPossibleReduceByFamily(remoteAircraft, inList, r3, log); QString usedFamily;
CAircraftModelList models2nd = ifPossibleReduceByFamily(remoteAircraft, inList, r3, usedFamily, log);
models2nd = ifPossibleReduceByAirline(remoteAircraft, models2nd, "Reduce family by airline second.", r3, log); models2nd = ifPossibleReduceByAirline(remoteAircraft, models2nd, "Reduce family by airline second.", r3, log);
if (r3) if (r3)
{ {
// we found family / airline combination // we found family / airline combination
if (log) { CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Found aircraft family/airline '") % QStringLiteral("'combination"), getLogCategories()); } if (log) { CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Found aircraft family/airline '") % QStringLiteral("' combination"), getLogCategories()); }
return models; return models;
} }
} }
if (log) { CMatchingUtils::addLogDetailsToList(log, remoteAircraft, QStringLiteral("Found aircraft family/airline '") % remoteAircraft.getAircraftIcaoCode().getFamily() % QStringLiteral("/") % remoteAircraft.getAirlineIcaoCodeDesignator() % QStringLiteral("'combination"), getLogCategories()); }
reduced = r1 || r2; reduced = r1 || r2;
if (reduced) if (reduced)
{ {
@@ -873,16 +877,19 @@ namespace BlackCore
return inList; return inList;
} }
CAircraftModelList CAircraftMatcher::ifPossibleReduceByFamily(const CSimulatedAircraft &remoteAircraft, const CAircraftModelList &inList, bool &reduced, CStatusMessageList *log) CAircraftModelList CAircraftMatcher::ifPossibleReduceByFamily(const CSimulatedAircraft &remoteAircraft, const CAircraftModelList &inList, bool &reduced, QString &usedFamily, CStatusMessageList *log)
{ {
reduced = false; reduced = false;
QString family = remoteAircraft.getAircraftIcaoCode().getFamily(); usedFamily = remoteAircraft.getAircraftIcaoCode().getFamily();
CAircraftModelList matchedModels = ifPossibleReduceByFamily(remoteAircraft, family, inList, "real family", reduced, log); if (!usedFamily.isEmpty())
if (reduced) { return matchedModels; } {
CAircraftModelList matchedModels = ifPossibleReduceByFamily(remoteAircraft, usedFamily, inList, "real family", reduced, log);
if (reduced) { return matchedModels; }
}
// scenario: the ICAO actually is the family // scenario: the ICAO actually is the family
family = remoteAircraft.getAircraftIcaoCodeDesignator(); usedFamily = remoteAircraft.getAircraftIcaoCodeDesignator();
return ifPossibleReduceByFamily(remoteAircraft, family, inList, "ICAO treated as family", reduced, log); return ifPossibleReduceByFamily(remoteAircraft, usedFamily, inList, "ICAO treated as family", reduced, log);
} }
CAircraftModelList CAircraftMatcher::ifPossibleReduceByFamily(const CSimulatedAircraft &remoteAircraft, const QString &family, const CAircraftModelList &inList, const QString &hint, bool &reduced, CStatusMessageList *log) CAircraftModelList CAircraftMatcher::ifPossibleReduceByFamily(const CSimulatedAircraft &remoteAircraft, const QString &family, const CAircraftModelList &inList, const QString &hint, bool &reduced, CStatusMessageList *log)
@@ -1000,7 +1007,8 @@ namespace BlackCore
reduced = false; reduced = false;
const CAircraftModelList outList = ifPossibleReduceByAircraft(remoteAircraft, inList, info, reduced, log); const CAircraftModelList outList = ifPossibleReduceByAircraft(remoteAircraft, inList, info, reduced, log);
if (reduced || !setup.getMatchingMode().testFlag(CAircraftMatcherSetup::ByFamily)) { return outList; } if (reduced || !setup.getMatchingMode().testFlag(CAircraftMatcherSetup::ByFamily)) { return outList; }
return ifPossibleReduceByFamily(remoteAircraft, inList, reduced, log); QString family;
return ifPossibleReduceByFamily(remoteAircraft, inList, reduced, family, log);
} }
CAircraftModelList CAircraftMatcher::ifPossibleReduceByAirline(const CSimulatedAircraft &remoteAircraft, const CAircraftModelList &inList, const QString &info, bool &reduced, CStatusMessageList *log) CAircraftModelList CAircraftMatcher::ifPossibleReduceByAirline(const CSimulatedAircraft &remoteAircraft, const CAircraftModelList &inList, const QString &info, bool &reduced, CStatusMessageList *log)

View File

@@ -201,7 +201,7 @@ namespace BlackCore
//! Find model by aircraft family //! Find model by aircraft family
//! \threadsafe //! \threadsafe
static BlackMisc::Simulation::CAircraftModelList ifPossibleReduceByFamily(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, const BlackMisc::Simulation::CAircraftModelList &inList, bool &reduced, BlackMisc::CStatusMessageList *log); static BlackMisc::Simulation::CAircraftModelList ifPossibleReduceByFamily(const BlackMisc::Simulation::CSimulatedAircraft &remoteAircraft, const BlackMisc::Simulation::CAircraftModelList &inList, bool &reduced, QString &usedFamily, BlackMisc::CStatusMessageList *log);
//! Find model by aircraft family //! Find model by aircraft family
//! \threadsafe //! \threadsafe

View File

@@ -69,20 +69,17 @@ namespace BlackMisc
QString CLivery::getCombinedCodePlusInfo() const QString CLivery::getCombinedCodePlusInfo() const
{ {
QString s = this->getCombinedCode(); return this->getCombinedCode() % (
if (!this->getDescription().isEmpty()) this->getDescription().isEmpty() ?
{ QStringLiteral("") :
s += " "; (QStringLiteral(" ") % this->getDescription())
s += this->getDescription(); );
}
return s;
} }
QString CLivery::getCombinedCodePlusInfoAndId() const QString CLivery::getCombinedCodePlusInfoAndId() const
{ {
QString s = this->getCombinedCodePlusInfo(); return this->getCombinedCodePlusInfo() %
s += this->getDbKeyAsStringInParentheses(" "); this->getDbKeyAsStringInParentheses(" ");
return s;
} }
bool CLivery::isContainedInSimplifiedAirlineName(const QString &candidate) const bool CLivery::isContainedInSimplifiedAirlineName(const QString &candidate) const

View File

@@ -14,6 +14,7 @@
#include <QDateTime> #include <QDateTime>
#include <QtGlobal> #include <QtGlobal>
#include <QStringBuilder>
namespace BlackMisc namespace BlackMisc
{ {
@@ -21,14 +22,14 @@ namespace BlackMisc
{ {
QString IDatastoreObjectWithIntegerKey::getDbKeyAsString() const QString IDatastoreObjectWithIntegerKey::getDbKeyAsString() const
{ {
if (m_dbKey < 0) { return ""; } if (m_dbKey < 0) { return QStringLiteral(""); }
return QString::number(m_dbKey); return QString::number(m_dbKey);
} }
QString IDatastoreObjectWithIntegerKey::getDbKeyAsStringInParentheses(const QString &prefix) const QString IDatastoreObjectWithIntegerKey::getDbKeyAsStringInParentheses(const QString &prefix) const
{ {
if (m_dbKey < 0) { return ""; } if (m_dbKey < 0) { return QStringLiteral(""); }
return prefix + "(" + QString::number(m_dbKey) + ")"; return prefix % QStringLiteral("(") % QString::number(m_dbKey) % QStringLiteral(")");
} }
void IDatastoreObjectWithIntegerKey::setDbKey(const QString &key) void IDatastoreObjectWithIntegerKey::setDbKey(const QString &key)
@@ -74,19 +75,19 @@ namespace BlackMisc
void IDatastoreObjectWithIntegerKey::setKeyAndTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix) void IDatastoreObjectWithIntegerKey::setKeyAndTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix)
{ {
const int dbKey = json.value(prefix + "id").toInt(-1); const int dbKey = json.value(prefix % QStringLiteral("id")).toInt(-1);
this->setDbKey(dbKey); this->setDbKey(dbKey);
// we check 2 formats, the DB format and the backend object format // we check 2 formats, the DB format and the backend object format
QString timestampString(json.value(prefix + "lastupdated").toString()); QString timestampString(json.value(prefix % QStringLiteral("lastupdated")).toString());
if (timestampString.isEmpty()) { timestampString = json.value(prefix + "tsLastUpdated").toString(); } if (timestampString.isEmpty()) { timestampString = json.value(prefix % QStringLiteral("tsLastUpdated")).toString(); }
const QDateTime ts(CDatastoreUtility::parseTimestamp(timestampString)); const QDateTime ts(CDatastoreUtility::parseTimestamp(timestampString));
this->setUtcTimestamp(ts); this->setUtcTimestamp(ts);
} }
bool IDatastoreObjectWithIntegerKey::existsKey(const QJsonObject &json, const QString &prefix) bool IDatastoreObjectWithIntegerKey::existsKey(const QJsonObject &json, const QString &prefix)
{ {
const QJsonValue jv(json.value(prefix + "id")); const QJsonValue jv(json.value(prefix % QStringLiteral("id")));
return !(jv.isNull() || jv.isUndefined()); return !(jv.isNull() || jv.isUndefined());
} }
@@ -111,13 +112,9 @@ namespace BlackMisc
const ColumnIndex i = index.frontCasted<ColumnIndex>(); const ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i) switch (i)
{ {
case IndexDbIntegerKey: case IndexDbIntegerKey: m_dbKey = variant.toInt(); break;
m_dbKey = variant.toInt(); case IndexDbKeyAsString: m_dbKey = stringToDbKey(variant.toQString()); break;
break; default: break;
case IndexDbKeyAsString:
m_dbKey = stringToDbKey(variant.toQString());
default:
break;
} }
} }
@@ -138,7 +135,7 @@ namespace BlackMisc
bool IDatastoreObjectWithIntegerKey::canHandleIndex(const BlackMisc::CPropertyIndex &index) bool IDatastoreObjectWithIntegerKey::canHandleIndex(const BlackMisc::CPropertyIndex &index)
{ {
if (ITimestampBased::canHandleIndex(index)) { return true;} if (ITimestampBased::canHandleIndex(index)) { return true; }
const int i = index.frontCasted<int>(); const int i = index.frontCasted<int>();
return (i >= static_cast<int>(IndexDbIntegerKey)) && (i <= static_cast<int>(IndexDatabaseIcon)); return (i >= static_cast<int>(IndexDbIntegerKey)) && (i <= static_cast<int>(IndexDatabaseIcon));
} }
@@ -153,7 +150,7 @@ namespace BlackMisc
QString IDatastoreObjectWithStringKey::getDbKeyAsStringInParentheses(const QString &prefix) const QString IDatastoreObjectWithStringKey::getDbKeyAsStringInParentheses(const QString &prefix) const
{ {
if (m_dbKey.isEmpty()) { return ""; } if (m_dbKey.isEmpty()) { return ""; }
return prefix + "(" + m_dbKey + ")"; return prefix % QStringLiteral("(") % m_dbKey % QStringLiteral(")");
} }
bool IDatastoreObjectWithStringKey::matchesDbKeyState(Db::DbKeyStateFilter filter) const bool IDatastoreObjectWithStringKey::matchesDbKeyState(Db::DbKeyStateFilter filter) const
@@ -171,7 +168,7 @@ namespace BlackMisc
void IDatastoreObjectWithStringKey::setKeyAndTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix) void IDatastoreObjectWithStringKey::setKeyAndTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix)
{ {
QString dbKey = json.value(prefix + "id").toString(); QString dbKey = json.value(prefix % QStringLiteral("id")).toString();
QDateTime ts(CDatastoreUtility::parseTimestamp(json.value(prefix + "lastupdated").toString())); QDateTime ts(CDatastoreUtility::parseTimestamp(json.value(prefix + "lastupdated").toString()));
this->setDbKey(dbKey); this->setDbKey(dbKey);
this->setUtcTimestamp(ts); this->setUtcTimestamp(ts);
@@ -179,7 +176,7 @@ namespace BlackMisc
bool IDatastoreObjectWithStringKey::existsKey(const QJsonObject &json, const QString &prefix) bool IDatastoreObjectWithStringKey::existsKey(const QJsonObject &json, const QString &prefix)
{ {
const QJsonValue jv(json.value(prefix + "id")); const QJsonValue jv(json.value(prefix % QStringLiteral("id")));
return !(jv.isNull() || jv.isUndefined()); return !(jv.isNull() || jv.isUndefined());
} }