9 #include <QStringBuilder>
12 using namespace swift::misc::db;
13 using namespace swift::misc::network;
14 using namespace swift::misc::physical_quantities;
21 CDatabaseReaderConfig::CDatabaseReaderConfig(CEntityFlags::Entity entities,
22 CDbFlags::DataRetrievalMode retrievalFlags,
const CTime &cacheLifetime)
23 : m_entities(entities), m_retrievalMode(retrievalFlags), m_cacheLifetime(cacheLifetime)
28 QString CDatabaseReaderConfig::convertToQString(
bool i18n)
const
30 return CDbFlags::flagToString(this->getRetrievalMode()) % u
' ' %
31 CEntityFlags::entitiesToString(this->getEntities()) % u
' ' % m_cacheLifetime.toQString(i18n);
34 CEntityFlags::Entity CDatabaseReaderConfig::getEntities()
const
36 return static_cast<CEntityFlags::Entity
>(m_entities);
39 bool CDatabaseReaderConfig::supportsEntities(CEntityFlags::Entity entities)
const
41 const int myEntities =
static_cast<int>(this->getEntities());
42 const int testEnties =
static_cast<int>(entities);
43 const int common = myEntities & testEnties;
44 return (common == testEnties) || (common == myEntities);
47 CDbFlags::DataRetrievalMode CDatabaseReaderConfig::getRetrievalMode()
const
49 return static_cast<CDbFlags::DataRetrievalMode
>(m_retrievalMode);
52 void CDatabaseReaderConfig::markAsDbDown()
54 CDbFlags::DataRetrievalMode m = this->getRetrievalMode();
55 m = CDbFlags::adjustWhenDbIsDown(m);
56 m_retrievalMode =
static_cast<int>(m);
59 void CDatabaseReaderConfig::setCacheLifetime(
const CTime &time) { m_cacheLifetime = time; }
61 bool CDatabaseReaderConfig::possiblyReadsFromSwiftDb()
const
63 if (!this->isValid()) {
return false; }
64 if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) {
return false; }
65 return (this->getRetrievalMode().testFlag(CDbFlags::DbReading));
68 bool CDatabaseReaderConfig::needsSharedInfoFile()
const
70 if (!this->isValid()) {
return false; }
71 if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) {
return false; }
72 return (this->getRetrievalMode().testFlag(CDbFlags::Shared) ||
73 this->getRetrievalMode().testFlag(CDbFlags::SharedInfoOnly));
76 bool CDatabaseReaderConfig::possiblyWritesToSwiftDb()
const
78 if (!this->isValid()) {
return false; }
79 if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) {
return false; }
80 return (this->getRetrievalMode().testFlag(CDbFlags::DbWriting));
83 bool CDatabaseReaderConfig::possiblyReadsFromCache()
const
85 if (!this->isValid()) {
return false; }
86 return (this->getRetrievalMode().testFlag(CDbFlags::Cached) ||
87 this->getRetrievalMode().testFlag(CDbFlags::CacheThenDb) ||
88 this->getRetrievalMode().testFlag(CDbFlags::CacheThenShared));
91 bool CDatabaseReaderConfig::isValid()
const {
return m_entities != CEntityFlags::NoEntity; }
98 CDatabaseReaderConfigList::findFirstOrDefaultForEntity(
const CEntityFlags::Entity entities)
const
100 const bool single = CEntityFlags::isSingleEntity(entities);
102 for (
const CDatabaseReaderConfig &config : *
this)
106 if (config.getEntities().testFlag(testFlag)) {
return config; }
110 if (config.getEntities() == entities) {
return config; }
113 return CDatabaseReaderConfig();
116 void CDatabaseReaderConfigList::markAsDbDown()
118 for (CDatabaseReaderConfig &config : *
this) { config.markAsDbDown(); }
121 void CDatabaseReaderConfigList::setCacheLifetimes(
const CTime &time)
123 for (CDatabaseReaderConfig &config : *
this) { config.setCacheLifetime(time); }
126 bool CDatabaseReaderConfigList::possiblyReadsFromSwiftDb()
const
128 for (
const CDatabaseReaderConfig &config : *
this)
130 if (config.possiblyReadsFromSwiftDb()) {
return true; }
135 bool CDatabaseReaderConfigList::possiblyWritesToSwiftDb()
const
137 for (
const CDatabaseReaderConfig &config : *
this)
139 if (config.possiblyWritesToSwiftDb()) {
return true; }
144 bool CDatabaseReaderConfigList::needsSharedInfoObjects(CEntityFlags::Entity entities)
const
146 for (
const CDatabaseReaderConfig &config : *
this)
148 if (!config.supportsEntities(entities)) {
continue; }
149 if (config.needsSharedInfoFile()) {
return true; }
154 bool CDatabaseReaderConfigList::needsSharedInfoFile(CEntityFlags::Entity entities)
const
156 for (
const CDatabaseReaderConfig &config : *
this)
158 if (!config.supportsEntities(entities)) {
continue; }
159 if (config.needsSharedInfoFile()) {
return true; }
164 bool CDatabaseReaderConfigList::needsSharedInfoObjectsIfCachesEmpty(CEntityFlags::Entity entities,
165 CEntityFlags::Entity cachedEntities)
const
167 for (
const CDatabaseReaderConfig &config : *
this)
169 if (!config.supportsEntities(entities)) {
continue; }
170 if (!config.needsSharedInfoFile()) {
continue; }
171 if (!config.getRetrievalMode().testFlag(CDbFlags::Cached)) {
return true; }
173 const CEntityFlags::Entity configEntities = config.getEntities();
174 const CEntityFlags::Entity configEntitiesNotCached = configEntities & ~cachedEntities;
175 if (configEntitiesNotCached != CEntityFlags::NoEntity) {
return true; }
180 CEntityFlags::Entity CDatabaseReaderConfigList::getEntitesCachedOrReadFromDB()
const
182 CEntityFlags::Entity entities = CEntityFlags::NoEntity;
183 for (
const CDatabaseReaderConfig &config : *
this)
185 if (config.possiblyReadsFromSwiftDb() || config.possiblyReadsFromCache())
187 entities |= config.getEntities();
193 CDatabaseReaderConfigList CDatabaseReaderConfigList::forMappingTool()
195 const CTime cacheLifetime(5.0, CTimeUnit::min());
196 CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenDb;
197 retrievalFlags |= CDbFlags::DbWriting;
198 CDatabaseReaderConfigList l;
199 l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime));
200 l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime));
201 l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, CDbFlags::Ignore,
203 l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime));
204 l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime));
205 l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime));
206 l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime));
207 l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftCategoryEntity, retrievalFlags, cacheLifetime));
211 CDatabaseReaderConfigList CDatabaseReaderConfigList::forPilotClient()
213 const CTime cacheLifetime(30.0, CTimeUnit::d());
214 const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheAndSharedInfo;
215 CDbFlags::DataRetrievalMode retrievalFlagsWriting = retrievalFlags;
216 retrievalFlagsWriting |= CDbFlags::DbWriting;
218 CDatabaseReaderConfigList l;
219 l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime));
220 l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime));
221 l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, cacheLifetime));
222 l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime));
224 CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlagsWriting, cacheLifetime));
225 l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime));
226 l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime));
227 l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftCategoryEntity, retrievalFlags, cacheLifetime));
231 CDatabaseReaderConfigList CDatabaseReaderConfigList::forLauncher()
233 const CTime cacheLifetime(30.0, CTimeUnit::d());
234 const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenShared;
235 CDatabaseReaderConfigList l;
236 l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime));
237 l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime));
238 l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, CDbFlags::Ignore,
240 l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime));
241 l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime));
242 l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime));
243 l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime));
244 l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftCategoryEntity, retrievalFlags, cacheLifetime));
248 CDatabaseReaderConfigList CDatabaseReaderConfigList::allDirectDbAccess()
250 const CTime cacheLifetime(0.0, CTimeUnit::min());
251 const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::DbReading;
252 CDatabaseReaderConfigList l;
253 l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime));
254 l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime));
255 l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, cacheLifetime));
256 l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime));
257 l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime));
258 l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime));
259 l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime));
260 l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftCategoryEntity, retrievalFlags, cacheLifetime));
EntityFlag
Which data to read, requires corresponding readers.
Classes interacting with the swift database (aka "datastore").
Free functions in swift::misc.
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.