refs #787, support of header loading in reader config

This commit is contained in:
Klaus Basan
2016-11-27 00:59:17 +01:00
parent f839421bdd
commit 9edac68bdb
2 changed files with 123 additions and 30 deletions

View File

@@ -42,6 +42,14 @@ namespace BlackCore
return static_cast<CEntityFlags::Entity>(this->m_entities);
}
bool CDatabaseReaderConfig::supportsEntities(CEntityFlags::Entity entities) const
{
const int myEntities = static_cast<int>(this->getEntities());
const int testEnties = static_cast<int>(entities);
const int common = myEntities & testEnties;
return (common == testEnties) || (common == myEntities);
}
CDbFlags::DataRetrievalMode CDatabaseReaderConfig::getRetrievalMode() const
{
return static_cast<CDbFlags::DataRetrievalMode>(this->m_retrievalFlags);
@@ -63,7 +71,28 @@ namespace BlackCore
{
if (!this->isValid()) { return false; }
if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) { return false; }
return (this->getRetrievalMode().testFlag(CDbFlags::DbDirect) || this->getRetrievalMode().testFlag(CDbFlags::Shared));
return (this->getRetrievalMode().testFlag(CDbFlags::DbReading));
}
bool CDatabaseReaderConfig::needsSharedHeader() const
{
if (!this->isValid()) { return false; }
if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) { return false; }
return (this->getRetrievalMode().testFlag(CDbFlags::Shared) || this->getRetrievalMode().testFlag(CDbFlags::SharedHeadersOnly));
}
bool CDatabaseReaderConfig::needsSharedHeaderLoaded() const
{
if (!this->isValid()) { return false; }
if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) { return false; }
return (this->getRetrievalMode().testFlag(CDbFlags::Shared));
}
bool CDatabaseReaderConfig::possiblyWritesToSwiftDb() const
{
if (!this->isValid()) { return false; }
if (!CEntityFlags::anySwiftDbEntity(this->getEntities())) { return false; }
return (this->getRetrievalMode().testFlag(CDbFlags::DbWriting));
}
bool CDatabaseReaderConfig::possiblyReadsFromCache() const
@@ -124,6 +153,35 @@ namespace BlackCore
return false;
}
bool CDatabaseReaderConfigList::possiblyWritesToSwiftDb() const
{
for (const CDatabaseReaderConfig &config : *this)
{
if (config.possiblyWritesToSwiftDb()) { return true; }
}
return false;
}
bool CDatabaseReaderConfigList::needsSharedHeaders(CEntityFlags::Entity entities) const
{
for (const CDatabaseReaderConfig &config : *this)
{
if (!config.supportsEntities(entities)) { continue; }
if (config.needsSharedHeader()) { return true; }
}
return false;
}
bool CDatabaseReaderConfigList::needsSharedHeadersLoaded(CEntityFlags::Entity entities) const
{
for (const CDatabaseReaderConfig &config : *this)
{
if (!config.supportsEntities(entities)) { continue; }
if (config.needsSharedHeaderLoaded()) { return true; }
}
return false;
}
CEntityFlags::Entity CDatabaseReaderConfigList::getEntitesCachedOrReadFromDB() const
{
CEntityFlags::Entity entities = CEntityFlags::NoEntity;
@@ -139,51 +197,65 @@ namespace BlackCore
CDatabaseReaderConfigList CDatabaseReaderConfigList::forMappingTool()
{
const CTime timeout(5.0, CTimeUnit::min());
const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenDb;
const CTime cacheLifetime(5.0, CTimeUnit::min());
CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenDb;
retrievalFlags |= CDbFlags::DbWriting;
CDatabaseReaderConfigList l;
l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, CDbFlags::Ignore, timeout)); // not needed in mapping tool
l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, CDbFlags::Ignore, cacheLifetime)); // not needed in mapping tool
l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime));
return l;
}
CDatabaseReaderConfigList CDatabaseReaderConfigList::forPilotClient()
{
const CTime timeout(24.0, CTimeUnit::h());
const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenDb;
const CTime cacheLifetime(30.0, CTimeUnit::d());
const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheAndSharedHeaders;
CDbFlags::DataRetrievalMode retrievalFlagsWriting = retrievalFlags;
retrievalFlagsWriting |= CDbFlags::DbWriting;
CDatabaseReaderConfigList l;
l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlagsWriting, cacheLifetime)); // for wizard
l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime));
return l;
}
CDatabaseReaderConfigList CDatabaseReaderConfigList::forLauncher()
{
return forPilotClient();
const CTime cacheLifetime(30.0, CTimeUnit::d());
const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::CacheThenShared;
CDatabaseReaderConfigList l;
l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, CDbFlags::Ignore, cacheLifetime)); // not needed in mapping tool
l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime));
return l;
}
CDatabaseReaderConfigList CDatabaseReaderConfigList::allDirectDbAccess()
{
const CTime timeout(0.0, CTimeUnit::min());
const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::DbDirect;
const CTime cacheLifetime(0.0, CTimeUnit::min());
const CDbFlags::DataRetrievalMode retrievalFlags = CDbFlags::DbReading;
CDatabaseReaderConfigList l;
l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, timeout));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AircraftIcaoEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirlineIcaoEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::AirportEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::DistributorEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::ModelEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::LiveryEntity, retrievalFlags, cacheLifetime));
l.push_back(CDatabaseReaderConfig(CEntityFlags::CountryEntity, retrievalFlags, cacheLifetime));
return l;
}
} // ns

View File

@@ -50,6 +50,9 @@ namespace BlackCore
//! Supported entities
BlackMisc::Network::CEntityFlags::Entity getEntities() const;
//! Supports given entites?
bool supportsEntities(BlackMisc::Network::CEntityFlags::Entity entities) const;
//! Supported modes
BlackMisc::Db::CDbFlags::DataRetrievalMode getRetrievalMode() const;
@@ -62,6 +65,15 @@ namespace BlackCore
//! Will read from swift DB
bool possiblyReadsFromSwiftDb() const;
//! Needs the shared header
bool needsSharedHeader() const;
//! Needs the shared header loaded before it can be continued
bool needsSharedHeaderLoaded() const;
//! Will write to swift DB
bool possiblyWritesToSwiftDb() const;
//! Will read from cache
bool possiblyReadsFromCache() const;
@@ -70,7 +82,7 @@ namespace BlackCore
private:
int m_entities = BlackMisc::Network::CEntityFlags::NoEntity; //!< BlackMisc::Network::CEntityFlags::Entity
int m_retrievalFlags = BlackMisc::Db::CDbFlags::DbDirect; //!< BlackMisc::Db::CDbFlags::DataRetrievalMode
int m_retrievalFlags = BlackMisc::Db::CDbFlags::DbReading; //!< BlackMisc::Db::CDbFlags::DataRetrievalMode
BlackMisc::PhysicalQuantities::CTime m_cacheLifetime;
BLACK_METACLASS(
@@ -106,6 +118,15 @@ namespace BlackCore
//! Will read from swift DB
bool possiblyReadsFromSwiftDb() const;
//! Will write to swift DB
bool possiblyWritesToSwiftDb() const;
//! Needs any shared header
bool needsSharedHeaders(BlackMisc::Network::CEntityFlags::Entity entities) const;
//! Needs any shared header loaded before continued
bool needsSharedHeadersLoaded(BlackMisc::Network::CEntityFlags::Entity entities) const;
//! Entities which will use cache or DB, so no canceled or ignored ones
BlackMisc::Network::CEntityFlags::Entity getEntitesCachedOrReadFromDB() const;