/* Copyright (C) 2017 * swift project Community / Contributors * * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level * directory of this distribution. No part of swift project, including this file, may be copied, modified, propagated, * or distributed except according to the terms contained in the LICENSE file. */ #include "matchingstatisticsentry.h" #include "blackmisc/comparefunctions.h" #include "blackmisc/icon.h" namespace BlackMisc { namespace Simulation { CMatchingStatisticsEntry::CMatchingStatisticsEntry() { } CMatchingStatisticsEntry::CMatchingStatisticsEntry(EntryType type, const QString &sessionId, const QString &modelSetId, const QString &description, const QString &aircraftDesignator, const QString &airlineDesignator) : m_sessionId(sessionId.trimmed()), m_modelSetId(modelSetId.trimmed()), m_description(description), m_aircraftDesignator(aircraftDesignator.trimmed().toUpper()), m_airlineDesignator(airlineDesignator.trimmed().toUpper()), m_entryType(type) { this->setCurrentUtcTime(); } CMatchingStatisticsEntry::EntryType CMatchingStatisticsEntry::getEntryType() const { return static_cast(m_entryType); } bool CMatchingStatisticsEntry::isMissing() const { return this->getEntryType() == Missing; } void CMatchingStatisticsEntry::setEntryType(CMatchingStatisticsEntry::EntryType type) { m_entryType = static_cast(type); } int CMatchingStatisticsEntry::getCount() const { return m_count; } void CMatchingStatisticsEntry::increaseCount() { m_count++; } bool CMatchingStatisticsEntry::matches(CMatchingStatisticsEntry::EntryType type, const QString &sessionId, const QString &aircraftDesignator, const QString &airlineDesignator) const { return this->getEntryType() == type && sessionId == this->getSessionId() && aircraftDesignator == this->getAircraftDesignator() && airlineDesignator == this->getAirlineDesignator(); } bool CMatchingStatisticsEntry::hasAircraftAirlineCombination() const { return !m_aircraftDesignator.isEmpty() && !m_airlineDesignator.isEmpty(); } const CIcon &CMatchingStatisticsEntry::entryTypeToIcon(CMatchingStatisticsEntry::EntryType type) { switch (type) { case Found: return CIcon::iconByIndex(CIcons::StandardIconTick16); case Missing: return CIcon::iconByIndex(CIcons::StandardIconCross16); default: qFatal("Wrong Type"); return CIcon::iconByIndex(CIcons::StandardIconUnknown16); } } const QString &CMatchingStatisticsEntry::entryTypeToString(CMatchingStatisticsEntry::EntryType type) { static const QString f("found"); static const QString m("missing"); static const QString x("ups"); switch (type) { case Found: return f; case Missing: return m; default: qFatal("Wrong Type"); return x; } } CVariant CMatchingStatisticsEntry::propertyByIndex(const CPropertyIndex &index) const { if (index.isMyself()) { return CVariant::from(*this); } if (ITimestampBased::canHandleIndex(index)) { return ITimestampBased::propertyByIndex(index); } const ColumnIndex i = index.frontCasted(); switch (i) { case IndexSessionId: return CVariant::from(m_sessionId); case IndexModelSetId: return CVariant::from(m_modelSetId); case IndexCount: return CVariant::from(m_count); case IndexEntryType: return CVariant::from(m_entryType); case IndexEntryTypeAsString: return CVariant::from(entryTypeToString(this->getEntryType())); case IndexEntryTypeAsIcon: return CVariant::from(entryTypeToIcon(this->getEntryType())); case IndexAircraftDesignator: return CVariant::from(m_aircraftDesignator); case IndexAirlineDesignator: return CVariant::from(m_airlineDesignator); case IndexDescription: return CVariant::from(m_description); case IndexHasAircraftAirlineCombination: return CVariant::from(this->hasAircraftAirlineCombination()); default: return CValueObject::propertyByIndex(index); } } void CMatchingStatisticsEntry::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) { if (index.isMyself()) { (*this) = variant.to(); return; } if (ITimestampBased::canHandleIndex(index)) { ITimestampBased::setPropertyByIndex(index, variant); return; } const ColumnIndex i = index.frontCasted(); switch (i) { case IndexSessionId: this->setSessionId(variant.value()); break; case IndexModelSetId: this->setModelSetId(variant.value()); break; case IndexAircraftDesignator: m_aircraftDesignator = variant.value(); break; case IndexEntryType: this->setEntryType(static_cast(variant.toInt())); break; case IndexCount: m_count = variant.toInt(); break; case IndexAirlineDesignator: m_airlineDesignator = variant.value(); break; case IndexDescription: m_description = variant.value(); break; default: CValueObject::setPropertyByIndex(index, variant); break; } } int CMatchingStatisticsEntry::comparePropertyByIndex(const CPropertyIndex &index, const CMatchingStatisticsEntry &compareValue) const { if (ITimestampBased::canHandleIndex(index)) { return ITimestampBased::comparePropertyByIndex(index, compareValue); } const ColumnIndex i = index.frontCasted(); switch (i) { case IndexSessionId: return m_sessionId.compare(compareValue.m_sessionId, Qt::CaseInsensitive); case IndexModelSetId: return m_modelSetId.compare(compareValue.getModelSetId(), Qt::CaseInsensitive); case IndexEntryTypeAsIcon: case IndexEntryTypeAsString: case IndexEntryType: return Compare::compare(m_entryType, compareValue.m_entryType); case IndexDescription: return m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive); case IndexCount: return Compare::compare(m_count, compareValue.m_count); case IndexAircraftDesignator: return m_aircraftDesignator.compare(compareValue.m_aircraftDesignator, Qt::CaseInsensitive); case IndexAirlineDesignator: return m_airlineDesignator.compare(compareValue.m_airlineDesignator, Qt::CaseInsensitive); case IndexHasAircraftAirlineCombination: return Compare::compare(this->hasAircraftAirlineCombination(), compareValue.hasAircraftAirlineCombination()); default: return CValueObject::comparePropertyByIndex(index, compareValue); } Q_ASSERT_X(false, Q_FUNC_INFO, "Compare failed"); return 0; } QString CMatchingStatisticsEntry::convertToQString(bool i18n) const { Q_UNUSED(i18n); static const QString s("%1 Session: '%2' model set: '%3' aircraft: '%4' airline: '%5' description: '%6'"); return s.arg(entryTypeToString(getEntryType()), m_sessionId, m_modelSetId, m_aircraftDesignator, m_airlineDesignator, m_description); } } // namespace } // namespace