Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+419
@@ -0,0 +1,419 @@
|
||||
/**
|
||||
* @RDE_HEADER@
|
||||
* Custom aes dtc functions (extends aes_dtc_impl.cpp/.h)
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
*/
|
||||
#include "aes_dtc_impl_custom.h"
|
||||
#include <DDS/DTC/generic_dtc.h>
|
||||
#include <DDS/Generic/generic_data_reader.h>
|
||||
#include <QElapsedTimer>
|
||||
#include <nglsettings/nglsettings_settings.h>
|
||||
#include <ngltools/ngltools_filesystem.h>
|
||||
|
||||
namespace AreaEffectSimulation
|
||||
{
|
||||
namespace Interface
|
||||
{
|
||||
bool DtcImplCustom::aesItemViewFromEntityId(int entityId, AesType aesType, AesItemView &aesItemView)
|
||||
{
|
||||
if (!m_dtcAesItemView)
|
||||
return false;
|
||||
|
||||
if (!isAesItemViewEnabled())
|
||||
{
|
||||
enableAesItemView();
|
||||
waitForHistoricalDataAesItemView(2000);
|
||||
}
|
||||
for (const auto &sample : m_dtcAesItemView->readAlive())
|
||||
{
|
||||
if ( (sample.data().aesItemId() == entityId) &&
|
||||
( (sample.data().aesTypeId() == aesType) || (aesType==AesType_def::AtUnknown) )
|
||||
)
|
||||
{
|
||||
aesItemView = sample.data();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DtcImplCustom::aesItemFromId(int aesId, AesItem &aesItem)
|
||||
{
|
||||
aesItem = nContamination(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = bCContamination(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = explosionArea(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = explosionCluster(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = explosionSingle(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = mineArea(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = dangerArea(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = functionalArea(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = mineCorridor(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = borderline(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = technicalArea(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = airSupportImpact(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = gasPipe(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = boobyTrap(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = dusSingleMine(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = offRouteMine(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
aesItem = effectCluster(aesId);
|
||||
if (aesItem.id() > 0)
|
||||
return true;
|
||||
|
||||
DEBUG_LOG(m_logger) << "No aesItem for aesId=" << aesId << " found";
|
||||
return false;
|
||||
}
|
||||
|
||||
AreaEffectSimulation::AesType DtcImplCustom::aesItemIdFromExternalId(long long externalId, int &aesItemId)
|
||||
{
|
||||
// Only regard the last 2 Bytes of the EIS:
|
||||
// externalId = externalId & 0xffff;
|
||||
|
||||
QMap<qint32, AreaEffectSimulation::BCContamination> bcConts = bCContaminations();
|
||||
aesItemId = 0;
|
||||
for (const AreaEffectSimulation::BCContamination &bcCont : qAsConst(bcConts))
|
||||
{
|
||||
if (bcCont.externalId() == externalId)
|
||||
{
|
||||
if (bcCont.id() > aesItemId)
|
||||
aesItemId = bcCont.id();
|
||||
}
|
||||
}
|
||||
if (aesItemId > 0)
|
||||
return AreaEffectSimulation::AesType_def::AtBCContamination;
|
||||
|
||||
QMap<qint32, AreaEffectSimulation::NContamination> nConts = nContaminations();
|
||||
for (const AreaEffectSimulation::NContamination &nCont: qAsConst(nConts))
|
||||
{
|
||||
if (nCont.externalId() == externalId)
|
||||
{
|
||||
if (nCont.id() > aesItemId)
|
||||
aesItemId = nCont.id();
|
||||
}
|
||||
}
|
||||
if (aesItemId > 0)
|
||||
return AreaEffectSimulation::AesType_def::AtNContamination;
|
||||
|
||||
QMap<qint32, AreaEffectSimulation::ExplosionArea> explAreas = explosionAreas();
|
||||
for (const AreaEffectSimulation::ExplosionArea &explArea : qAsConst(explAreas))
|
||||
{
|
||||
if (explArea.externalId() == externalId)
|
||||
{
|
||||
if (explArea.id() > aesItemId)
|
||||
aesItemId = explArea.id();
|
||||
}
|
||||
}
|
||||
if (aesItemId > 0)
|
||||
return AreaEffectSimulation::AesType_def::AtExplosionArea;
|
||||
|
||||
QMap<qint32, AreaEffectSimulation::ExplosionSingle> explSingles = explosionSingles();
|
||||
for (const AreaEffectSimulation::ExplosionSingle &explSingle : qAsConst(explSingles))
|
||||
{
|
||||
if (explSingle.externalId() == externalId)
|
||||
{
|
||||
if (explSingle.id() > aesItemId)
|
||||
aesItemId = explSingle.id();
|
||||
}
|
||||
}
|
||||
if (aesItemId > 0)
|
||||
return AreaEffectSimulation::AesType_def::AtExplosionSingle;
|
||||
|
||||
QMap<qint32, AreaEffectSimulation::MineArea> mAreas = mineAreas();
|
||||
for(const AreaEffectSimulation::MineArea &mArea : qAsConst(mAreas))
|
||||
{
|
||||
if (mArea.externalId() == externalId)
|
||||
{
|
||||
if (mArea.id() > aesItemId)
|
||||
aesItemId = mArea.id();
|
||||
}
|
||||
}
|
||||
if (aesItemId > 0)
|
||||
return AreaEffectSimulation::AesType_def::AtMineArea;
|
||||
|
||||
QMap<qint32, AreaEffectSimulation::MineCorridor> mCorridors = mineCorridors();
|
||||
for (const AreaEffectSimulation::MineCorridor &mCorridor : qAsConst(mCorridors))
|
||||
{
|
||||
if (mCorridor.externalId() == externalId)
|
||||
{
|
||||
if (mCorridor.id() > aesItemId)
|
||||
aesItemId = mCorridor.id();
|
||||
}
|
||||
}
|
||||
if (aesItemId > 0)
|
||||
return AreaEffectSimulation::AesType_def::AtMineCorridor;
|
||||
|
||||
return AreaEffectSimulation::AesType_def::AtUnknown;
|
||||
}
|
||||
|
||||
bool DtcImplCustom::triggeredImpactsFromEntityId(int entityId, AesType aesType, TriggeredImpacts &triggeredImpacts)
|
||||
{
|
||||
if (!m_dtcAesItemView)
|
||||
return false;
|
||||
|
||||
if (!isTriggeredImpactsEnabled())
|
||||
{
|
||||
enableTriggeredImpacts();
|
||||
waitForHistoricalDataTriggeredImpacts(2000);
|
||||
}
|
||||
for (const auto &sample : m_dtcTriggeredImpacts->readAlive())
|
||||
{
|
||||
if ( (sample.data().aesItemId() == entityId) &&
|
||||
( (sample.data().aesTypeId() == aesType) || (aesType==AesType_def::AtUnknown) )
|
||||
)
|
||||
{
|
||||
triggeredImpacts = sample.data();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool DtcImplCustom::effectsFromEntityId(int entityId, AesType aesType, Effects &effects)
|
||||
{
|
||||
if (!m_dtcEffects)
|
||||
return false;
|
||||
|
||||
if (!isEffectsEnabled())
|
||||
{
|
||||
enableEffects();
|
||||
waitForHistoricalDataEffects(2000);
|
||||
}
|
||||
for (const auto &sample : m_dtcEffects->readAlive())
|
||||
{
|
||||
if ( (sample.data().aesItemId() == entityId) &&
|
||||
( (sample.data().aesTypeId() == aesType) || (aesType==AesType_def::AtUnknown) )
|
||||
)
|
||||
{
|
||||
effects = sample.data();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int DtcImplCustom::partyForDusMine(int dusMineId) const
|
||||
{
|
||||
for (const auto &dms : m_dusMineStateCont)
|
||||
{
|
||||
for (const DusMine &dm : dms.mines())
|
||||
{
|
||||
if (dm.eqId() == dusMineId)
|
||||
{
|
||||
auto it = m_mineAreaCont.find(dms.id());
|
||||
if (it == m_mineAreaCont.end())
|
||||
return 1;
|
||||
return it.value().partyId().is_set() ? it.value().partyId().get() : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
QString DtcImplCustom::aesItemNameFromEntityId(int entityId)
|
||||
{
|
||||
AreaEffectSimulation::AesItem aesItem;
|
||||
aesItemFromId(entityId, aesItem);
|
||||
if (!aesItem.name().empty())
|
||||
return QString::fromStdString(aesItem.name());
|
||||
//else use DAO
|
||||
|
||||
if (!m_dao)
|
||||
initDAO();
|
||||
|
||||
for (const auto &item : m_explosionClusters)
|
||||
{
|
||||
if (item.id == entityId)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &item : m_bcContaminations)
|
||||
{
|
||||
|
||||
if (item.id == entityId)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &item : m_nContaminations)
|
||||
{
|
||||
if (item.id == entityId)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &item : m_boobyTraps)
|
||||
{
|
||||
if (item.id == entityId)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &item : m_dangerAreas)
|
||||
{
|
||||
if (item.id == entityId)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const auto &item : m_mineAreas)
|
||||
{
|
||||
if (item.id == entityId)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &item : m_offRouteMines)
|
||||
{
|
||||
if (item.id == entityId)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &item : m_technicalAreas)
|
||||
{
|
||||
if (item.id == entityId)
|
||||
return item.name;
|
||||
}
|
||||
|
||||
for (const auto &item : m_functionalAreas)
|
||||
{
|
||||
if (item.id == entityId)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
ERROR_LOG(m_logger) << " aesItem for aesId=" << entityId << "NOT found in in DAO or DDS";
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
QVector<TrajectoryTimeAware> DtcImplCustom::trajectoriesTimeAwareFromOriginatorIdAndType(int originatorId, ProjectDataManagement::StateChangeOriginator originatorTypeId)
|
||||
{
|
||||
QVector<TrajectoryTimeAware> foundTrajectories;
|
||||
|
||||
const QMap<qint32, AreaEffectSimulation::TrajectoryTimeAware> &trajectoryTimeAwareMap = trajectoryTimeAwares();
|
||||
|
||||
for (const AreaEffectSimulation::TrajectoryTimeAware &trajectoryTimeAware : qAsConst(trajectoryTimeAwareMap))
|
||||
{
|
||||
// be aware of: [E01562-259] use originatorId, originatorTypeId (instead of aesItemId, aesTypeId)
|
||||
if ((trajectoryTimeAware.originatorId() == originatorId) &&
|
||||
(trajectoryTimeAware.originatorTypeId() == originatorTypeId))
|
||||
foundTrajectories.append(trajectoryTimeAware);
|
||||
}
|
||||
return foundTrajectories;
|
||||
}
|
||||
|
||||
void DtcImplCustom::initDAO()
|
||||
{
|
||||
DEBUG_LOG(m_logger) << "INIT DAO " << m_ddsConnector->getExerciseId();
|
||||
NGL::Settings *s = new NGL::Settings(NGL::findProjectConfigFile());
|
||||
|
||||
QElapsedTimer timer;
|
||||
timer.start();
|
||||
m_dao = new Dao(m_ddsConnector->getExerciseId());
|
||||
if(!m_dao->init(QStringLiteral("postgres"),
|
||||
QStringLiteral("postgres"),
|
||||
s->databaseDriver(),
|
||||
s->databaseHostname(),
|
||||
s->databaseName()))
|
||||
{
|
||||
ERROR_LOG(m_logger) << "ERROR INIT DAO AFTER: " << timer.elapsed();
|
||||
return;
|
||||
}
|
||||
m_dao->select(m_explosionClusters);
|
||||
m_dao->select(m_offRouteMines);
|
||||
m_dao->select(m_boobyTraps);
|
||||
m_dao->select(m_technicalAreas);
|
||||
m_dao->select(m_functionalAreas);
|
||||
m_dao->select(m_dangerAreas);
|
||||
m_dao->select(m_mineAreas);
|
||||
m_dao->select(m_bcContaminations);
|
||||
m_dao->select(m_nContaminations);
|
||||
DEBUG_LOG(m_logger) << "TOOK: " << timer.elapsed();
|
||||
|
||||
}
|
||||
|
||||
//QVector<TrajectoryTimeAware> DtcImplCustom::trajectoryTimeAwaresFromAesId(int aesId)
|
||||
//{
|
||||
// const QMap<qint32, AreaEffectSimulation::TrajectoryTimeAware> &trajectoryTimeAwareMap = trajectoryTimeAwares();
|
||||
|
||||
// QVector<TrajectoryTimeAware> trajectoriesFromAesIdVec;
|
||||
|
||||
// // We don´t realy know, how many to reserve:
|
||||
// trajectoriesFromAesIdVec.reserve(120); // 2024-09 N.Thoden: 120 ist maximum per area
|
||||
|
||||
// for (const AreaEffectSimulation::TrajectoryTimeAware &trajectoryTimeAware : qAsConst(trajectoryTimeAwareMap))
|
||||
// {
|
||||
// if (trajectoryTimeAware.aesItemId() == aesId)
|
||||
// trajectoriesFromAesIdVec.push_back(trajectoryTimeAware);
|
||||
// }
|
||||
|
||||
// // free unused memory:
|
||||
// trajectoriesFromAesIdVec.squeeze();
|
||||
|
||||
// return trajectoriesFromAesIdVec;
|
||||
//}
|
||||
|
||||
}//Interface
|
||||
}//namespace AreaEffectSimulation
|
||||
|
||||
|
||||
Reference in new issue
Block a user