swift
matchingstatisticsentry.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
7 
8 SWIFT_DEFINE_VALUEOBJECT_MIXINS(swift::misc::simulation, CMatchingStatisticsEntry)
9 
10 namespace swift::misc::simulation
11 {
13  const QString &modelSetId, const QString &description,
14  const QString &aircraftDesignator,
15  const QString &airlineDesignator)
16  : m_sessionId(sessionId.trimmed()), m_modelSetId(modelSetId.trimmed()), m_description(description),
17  m_aircraftDesignator(aircraftDesignator.trimmed().toUpper()),
18  m_airlineDesignator(airlineDesignator.trimmed().toUpper()), m_entryType(type)
19  {
20  this->setCurrentUtcTime();
21  }
22 
24  {
25  return static_cast<CMatchingStatisticsEntry::EntryType>(m_entryType);
26  }
27 
28  bool CMatchingStatisticsEntry::isMissing() const { return this->getEntryType() == Missing; }
29 
31  {
32  m_entryType = static_cast<int>(type);
33  }
34 
35  int CMatchingStatisticsEntry::getCount() const { return m_count; }
36 
38 
40  const QString &aircraftDesignator, const QString &airlineDesignator) const
41  {
42  return this->getEntryType() == type && sessionId == this->getSessionId() &&
43  aircraftDesignator == this->getAircraftDesignator() && airlineDesignator == this->getAirlineDesignator();
44  }
45 
47  {
48  return !m_aircraftDesignator.isEmpty() && !m_airlineDesignator.isEmpty();
49  }
50 
52  {
53  switch (type)
54  {
55  case Found: return CIcon::iconByIndex(CIcons::StandardIconTick16);
56  case Missing: return CIcon::iconByIndex(CIcons::StandardIconCross16);
57  default: qFatal("Wrong Type"); return CIcon::iconByIndex(CIcons::StandardIconUnknown16);
58  }
59  }
60 
62  {
63  static const QString f("found");
64  static const QString m("missing");
65  static const QString x("ups");
66 
67  switch (type)
68  {
69  case Found: return f;
70  case Missing: return m;
71  default: qFatal("Wrong Type"); return x;
72  }
73  }
74 
76  {
77  if (index.isMyself()) { return QVariant::fromValue(*this); }
79 
80  const auto i = index.frontCasted<ColumnIndex>();
81  switch (i)
82  {
83  case IndexSessionId: return QVariant::fromValue(m_sessionId);
84  case IndexModelSetId: return QVariant::fromValue(m_modelSetId);
85  case IndexCount: return QVariant::fromValue(m_count);
86  case IndexEntryType: return QVariant::fromValue(m_entryType);
87  case IndexEntryTypeAsString: return QVariant::fromValue(entryTypeToString(this->getEntryType()));
88  case IndexEntryTypeAsIcon: return QVariant::fromValue(entryTypeToIcon(this->getEntryType()));
89  case IndexAircraftDesignator: return QVariant::fromValue(m_aircraftDesignator);
90  case IndexAirlineDesignator: return QVariant::fromValue(m_airlineDesignator);
91  case IndexDescription: return QVariant::fromValue(m_description);
92  case IndexHasAircraftAirlineCombination: return QVariant::fromValue(this->hasAircraftAirlineCombination());
93  default: return CValueObject::propertyByIndex(index);
94  }
95  }
96 
98  {
99  if (index.isMyself())
100  {
101  (*this) = variant.value<CMatchingStatisticsEntry>();
102  return;
103  }
105  {
106  ITimestampBased::setPropertyByIndex(index, variant);
107  return;
108  }
109 
110  const auto i = index.frontCasted<ColumnIndex>();
111  switch (i)
112  {
113  case IndexSessionId: this->setSessionId(variant.value<QString>()); break;
114  case IndexModelSetId: this->setModelSetId(variant.value<QString>()); break;
115  case IndexAircraftDesignator: m_aircraftDesignator = variant.value<QString>(); break;
116  case IndexEntryType: this->setEntryType(static_cast<EntryType>(variant.toInt())); break;
117  case IndexCount: m_count = variant.toInt(); break;
118  case IndexAirlineDesignator: m_airlineDesignator = variant.value<QString>(); break;
119  case IndexDescription: m_description = variant.value<QString>(); break;
120  default: CValueObject::setPropertyByIndex(index, variant); break;
121  }
122  }
123 
125  const CMatchingStatisticsEntry &compareValue) const
126  {
128  {
129  return ITimestampBased::comparePropertyByIndex(index, compareValue);
130  }
131  const auto i = index.frontCasted<ColumnIndex>();
132  switch (i)
133  {
134  case IndexSessionId: return m_sessionId.compare(compareValue.m_sessionId, Qt::CaseInsensitive);
135  case IndexModelSetId: return m_modelSetId.compare(compareValue.getModelSetId(), Qt::CaseInsensitive);
136  case IndexEntryTypeAsIcon:
137  case IndexEntryTypeAsString:
138  case IndexEntryType: return Compare::compare(m_entryType, compareValue.m_entryType);
139  case IndexDescription: return m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive);
140  case IndexCount: return Compare::compare(m_count, compareValue.m_count);
141  case IndexAircraftDesignator:
142  return m_aircraftDesignator.compare(compareValue.m_aircraftDesignator, Qt::CaseInsensitive);
143  case IndexAirlineDesignator:
144  return m_airlineDesignator.compare(compareValue.m_airlineDesignator, Qt::CaseInsensitive);
145  case IndexHasAircraftAirlineCombination:
146  return Compare::compare(this->hasAircraftAirlineCombination(),
147  compareValue.hasAircraftAirlineCombination());
148  default: return CValueObject::comparePropertyByIndex(index, compareValue);
149  }
150  Q_ASSERT_X(false, Q_FUNC_INFO, "Compare failed");
151  return 0;
152  }
153 
155  {
156  Q_UNUSED(i18n);
157  static const QString s("%1 Session: '%2' model set: '%3' aircraft: '%4' airline: '%5' description: '%6'");
158  return s.arg(entryTypeToString(getEntryType()), m_sessionId, m_modelSetId, m_aircraftDesignator,
159  m_airlineDesignator, m_description);
160  }
161 } // namespace swift::misc::simulation
Value object for icons. An icon is stored in the global icon repository and identified by its index....
Definition: icon.h:39
static const CIcon & iconByIndex(CIcons::IconIndex index)
Icon for given index.
Definition: icon.cpp:54
Non-owning reference to a CPropertyIndex with a subset of its features.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
int comparePropertyByIndex(CPropertyIndexRef index, const ITimestampBased &compareValue) const
Compare for index.
static bool canHandleIndex(CPropertyIndexRef index)
Can given index be handled.
void setCurrentUtcTime()
Set the current time as timestamp.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
ColumnIndex
Base class enums.
Definition: mixinindex.h:44
int comparePropertyByIndex(CPropertyIndexRef index, const Derived &compareValue) const
Compare for index.
Definition: mixinindex.h:185
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
Definition: mixinindex.h:158
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
Definition: mixinindex.h:165
Value object for a matching statistics entry.
void setSessionId(const QString &sessionId)
Set session id.
const QString & getModelSetId() const
Get model set id.
const QString & getDescription() const
Get description.
bool matches(EntryType type, const QString &sessionId, const QString &aircraftDesignator, const QString &airlineDesignator) const
Matches given value?
int comparePropertyByIndex(CPropertyIndexRef index, const CMatchingStatisticsEntry &compareValue) const
Compare by index.
const QString & getSessionId() const
Session id.
bool isMissing() const
Missing entry?
static const QString & entryTypeToString(EntryType type)
Convert entry type.
const QString & getAirlineDesignator() const
Get missing airline designator.
EntryType
Represents type of entry.
CMatchingStatisticsEntry()=default
Default constructor.
static const swift::misc::CIcon & entryTypeToIcon(EntryType type)
Convert entry type.
QVariant propertyByIndex(swift::misc::CPropertyIndexRef index) const
Property by index.
void setEntryType(EntryType type)
Set the entry type.
bool hasAircraftAirlineCombination() const
Missing aircraft/airline combination?
const QString & getAircraftDesignator() const
Get missing aircraft designator.
EntryType getEntryType() const
Type of entry.
QString convertToQString(bool i18n=false) const
Cast as QString.
void setModelSetId(const QString &modelSetId)
Set model set id.
void setPropertyByIndex(swift::misc::CPropertyIndexRef index, const QVariant &variant)
Set property by index.
void increaseCount()
Count increased by one.
int getCount() const
Current count.
QString arg(Args &&... args) const const
int compare(QLatin1StringView s1, const QString &s2, Qt::CaseSensitivity cs)
bool isEmpty() const const
CaseInsensitive
QVariant fromValue(T &&value)
int toInt(bool *ok) const const
T value() const &const
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67