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 
15  const QString &modelSetId, const QString &description,
16  const QString &aircraftDesignator,
17  const QString &airlineDesignator)
18  : m_sessionId(sessionId.trimmed()), m_modelSetId(modelSetId.trimmed()), m_description(description),
19  m_aircraftDesignator(aircraftDesignator.trimmed().toUpper()),
20  m_airlineDesignator(airlineDesignator.trimmed().toUpper()), m_entryType(type)
21  {
22  this->setCurrentUtcTime();
23  }
24 
26  {
27  return static_cast<CMatchingStatisticsEntry::EntryType>(m_entryType);
28  }
29 
30  bool CMatchingStatisticsEntry::isMissing() const { return this->getEntryType() == Missing; }
31 
33  {
34  m_entryType = static_cast<int>(type);
35  }
36 
37  int CMatchingStatisticsEntry::getCount() const { return m_count; }
38 
40 
42  const QString &aircraftDesignator, const QString &airlineDesignator) const
43  {
44  return this->getEntryType() == type && sessionId == this->getSessionId() &&
45  aircraftDesignator == this->getAircraftDesignator() && airlineDesignator == this->getAirlineDesignator();
46  }
47 
49  {
50  return !m_aircraftDesignator.isEmpty() && !m_airlineDesignator.isEmpty();
51  }
52 
54  {
55  switch (type)
56  {
57  case Found: return CIcon::iconByIndex(CIcons::StandardIconTick16);
58  case Missing: return CIcon::iconByIndex(CIcons::StandardIconCross16);
59  default: qFatal("Wrong Type"); return CIcon::iconByIndex(CIcons::StandardIconUnknown16);
60  }
61  }
62 
64  {
65  static const QString f("found");
66  static const QString m("missing");
67  static const QString x("ups");
68 
69  switch (type)
70  {
71  case Found: return f;
72  case Missing: return m;
73  default: qFatal("Wrong Type"); return x;
74  }
75  }
76 
78  {
79  if (index.isMyself()) { return QVariant::fromValue(*this); }
81 
82  const ColumnIndex i = index.frontCasted<ColumnIndex>();
83  switch (i)
84  {
85  case IndexSessionId: return QVariant::fromValue(m_sessionId);
86  case IndexModelSetId: return QVariant::fromValue(m_modelSetId);
87  case IndexCount: return QVariant::fromValue(m_count);
88  case IndexEntryType: return QVariant::fromValue(m_entryType);
89  case IndexEntryTypeAsString: return QVariant::fromValue(entryTypeToString(this->getEntryType()));
90  case IndexEntryTypeAsIcon: return QVariant::fromValue(entryTypeToIcon(this->getEntryType()));
91  case IndexAircraftDesignator: return QVariant::fromValue(m_aircraftDesignator);
92  case IndexAirlineDesignator: return QVariant::fromValue(m_airlineDesignator);
93  case IndexDescription: return QVariant::fromValue(m_description);
94  case IndexHasAircraftAirlineCombination: return QVariant::fromValue(this->hasAircraftAirlineCombination());
95  default: return CValueObject::propertyByIndex(index);
96  }
97  }
98 
100  {
101  if (index.isMyself())
102  {
103  (*this) = variant.value<CMatchingStatisticsEntry>();
104  return;
105  }
107  {
108  ITimestampBased::setPropertyByIndex(index, variant);
109  return;
110  }
111 
112  const ColumnIndex i = index.frontCasted<ColumnIndex>();
113  switch (i)
114  {
115  case IndexSessionId: this->setSessionId(variant.value<QString>()); break;
116  case IndexModelSetId: this->setModelSetId(variant.value<QString>()); break;
117  case IndexAircraftDesignator: m_aircraftDesignator = variant.value<QString>(); break;
118  case IndexEntryType: this->setEntryType(static_cast<EntryType>(variant.toInt())); break;
119  case IndexCount: m_count = variant.toInt(); break;
120  case IndexAirlineDesignator: m_airlineDesignator = variant.value<QString>(); break;
121  case IndexDescription: m_description = variant.value<QString>(); break;
122  default: CValueObject::setPropertyByIndex(index, variant); break;
123  }
124  }
125 
127  const CMatchingStatisticsEntry &compareValue) const
128  {
130  {
131  return ITimestampBased::comparePropertyByIndex(index, compareValue);
132  }
133  const ColumnIndex i = index.frontCasted<ColumnIndex>();
134  switch (i)
135  {
136  case IndexSessionId: return m_sessionId.compare(compareValue.m_sessionId, Qt::CaseInsensitive);
137  case IndexModelSetId: return m_modelSetId.compare(compareValue.getModelSetId(), Qt::CaseInsensitive);
138  case IndexEntryTypeAsIcon:
139  case IndexEntryTypeAsString:
140  case IndexEntryType: return Compare::compare(m_entryType, compareValue.m_entryType);
141  case IndexDescription: return m_description.compare(compareValue.getDescription(), Qt::CaseInsensitive);
142  case IndexCount: return Compare::compare(m_count, compareValue.m_count);
143  case IndexAircraftDesignator:
144  return m_aircraftDesignator.compare(compareValue.m_aircraftDesignator, Qt::CaseInsensitive);
145  case IndexAirlineDesignator:
146  return m_airlineDesignator.compare(compareValue.m_airlineDesignator, Qt::CaseInsensitive);
147  case IndexHasAircraftAirlineCombination:
148  return Compare::compare(this->hasAircraftAirlineCombination(),
149  compareValue.hasAircraftAirlineCombination());
150  default: return CValueObject::comparePropertyByIndex(index, compareValue);
151  }
152  Q_ASSERT_X(false, Q_FUNC_INFO, "Compare failed");
153  return 0;
154  }
155 
157  {
158  Q_UNUSED(i18n);
159  static const QString s("%1 Session: '%2' model set: '%3' aircraft: '%4' airline: '%5' description: '%6'");
160  return s.arg(entryTypeToString(getEntryType()), m_sessionId, m_modelSetId, m_aircraftDesignator,
161  m_airlineDesignator, m_description);
162  }
163 } // 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:187
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
Definition: mixinindex.h:160
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
Definition: mixinindex.h:167
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.
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.
CMatchingStatisticsEntry()
Default constructor.
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.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
Definition: valueobject.h:67