Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

+298
View File
@@ -0,0 +1,298 @@
/**
* Handler for the HMI language
* $Id$
* $HeadURL$
* $Author$
*/
#include "object_effect_show.h"
#include "initialization.h"
#include <LtsCoordTrans/lts_coord_trans.h>
namespace EffectShowManagement
{
//=============================================================================
ObjectEffectShow::ObjectEffectShow(Initialization *mainHandler, QObject *parent)
: QObject(parent)
, m_mainHandler(mainHandler)
, m_logger(getLogger("ObjectEffectShow"))
{
} // end of ctor()
//=============================================================================
ObjectEffectShow::~ObjectEffectShow()
{
if (m_bRemoveFromDdsOnDestruction && m_data.id > 0)
m_mainHandler->dds()->dts()->removeEffectShowByKey(m_data.id);
} // end of dtor()
//=============================================================================
Core::FunctionReplyObject ObjectEffectShow::createObject(const Database::EsmEffectShow &data, bool bForceUpdateDb)
{
m_data = data;
if (m_data.id <= 0)
{
if (!m_mainHandler->db()->insert(m_data))
return Core::FunctionReplyObject(0, tr_lts("dds", "Error inserting Effect Show into database."));
}
else
{
if (bForceUpdateDb && !m_mainHandler->db()->update(m_data))
return Core::FunctionReplyObject(m_data.id, tr_lts("dds", "Error updating EffectShow into database"));
}
DEBUG_LOG(m_logger) << "createObject(db) complete ->"
<< "\n id " << m_data.id
<< "\n centerPosition " << LtsCoordTrans::mgrsFromGeographic(m_data.centerPosition.x(), m_data.centerPosition.y())
<< "\n idAreaEffectSimulation " << m_data.idAreaEffectSimulation
<< "\n esmParticipantId " << m_data.esmParticipantId
<< "\n numOfVolley " << m_data.numOfVolley
<< "\n shotsPerVolley " << m_data.shotsPerVolley
<< "\n orderConfirmation " << m_data.orderConfirmation
<< "\n answerText " << m_data.answerText
<< "\n startTime " << m_data.startTime
<< "\n duration " << m_data.duration
<< "\n lowerLeftPosition " << LtsCoordTrans::mgrsFromGeographic(m_data.lowerLeftPosition.x(), m_data.lowerLeftPosition.y())
<< "\n areaWidth " << m_data.areaWidth
<< "\n areaDepth " << m_data.areaDepth
<< "\n areaRotation " << m_data.areaRotation
<< "\n typeOfAmmunition " << (int)m_data.typeOfAmmunition;
// Publish Data via DTS
onPublishData();
return Core::FunctionReplyObject(m_data.id);
} // end of createObject()
//=============================================================================
Core::FunctionReplyObject ObjectEffectShow::removeObject()
{
if (!m_mainHandler->db()->removeEsmEffectShow(m_data.id))
return Core::FunctionReplyObject(m_data.id, tr_lts("dds", "EffectShow %1 can not be removed")).arg(m_data.id);
return Core::FunctionReplyObject(m_data.id);
} // end of removeObject()
//=============================================================================
Core::FunctionReplyObject ObjectEffectShow::updateObject(const EffectShowManagement::EffectShow &data)
{
if (data.id() <= 0)
return Core::FunctionReplyObject(data.id(), tr_lts("dds", "Object not valid/blocked"));
if (m_data.orderConfirmation == EffectShowManagement::OrderConfirmation_e_def::Execution)
return Core::FunctionReplyObject(data.id(), tr_lts("dds", "Changes rejected due to Effect Show in execution."));
DEBUG_LOG(m_logger) << "updateObject(data topic) complete ->"
<< "\n id " << m_data.id << " new: " << data.id()
<< "\n centerPosition x " << m_data.centerPosition.x() << " new: " << data.position().lon()
<< "\n centerPosition y " << m_data.centerPosition.y() << " new: " << data.position().lat()
<< "\n idAreaEffectSimulation " << m_data.idAreaEffectSimulation << " new: " << data.idAreaEffectSimulation()
<< "\n esmParticipantId " << m_data.esmParticipantId << " new: " << data.esmParticipantId()
<< "\n numOfVolley " << m_data.numOfVolley << " new: " << data.numOfVolley()
<< "\n shotsPerVolley " << m_data.shotsPerVolley << " new: " << data.shotsPerVolley()
<< "\n orderConfirmation " << m_data.orderConfirmation << " new: " << data.orderConfirmation().underlying()
<< "\n answerText " << m_data.answerText << " new: " << QString::fromStdString((data.answerText()))
<< "\n startTime " << m_data.startTime
<< "\n duration " << m_data.duration
<< "\n lowerLeftPosition x " << m_data.lowerLeftPosition.x()
<< "\n lowerLeftPosition y " << m_data.lowerLeftPosition.y()
<< "\n areaWidth " << m_data.areaWidth
<< "\n areaDepth " << m_data.areaDepth
<< "\n areaRotation " << m_data.areaRotation
<< "\n typeOfAmmunition " << m_data.typeOfAmmunition;
m_data.id = data.id();
m_data.name = QString::fromStdString(data.name());
m_data.startTime = data.startTime().is_set() ? data.startTime().get() : 0;
m_data.duration = data.duration();
m_data.idAreaEffectSimulation = data.idAreaEffectSimulation();
m_data.nameAreaEfffectSimulation = QString::fromStdString(data.nameAreaEffectSimulation());
m_data.esmParticipantId = data.esmParticipantId();
m_data.centerPosition.setX(data.position().lon());
m_data.centerPosition.setY(data.position().lat());
m_data.numOfVolley = data.numOfVolley();
m_data.shotsPerVolley = data.shotsPerVolley();
m_data.lowerLeftPosition.setX(data.lowerLeftPosition().lon());
m_data.lowerLeftPosition.setY(data.lowerLeftPosition().lat());
m_data.areaDepth = data.areaDepth();
m_data.areaWidth = data.areaWidth();
m_data.areaRotation = data.areaRotation();
m_data.orderConfirmation = data.orderConfirmation().underlying();
m_data.answerText = QString::fromStdString((data.answerText()));
if (!m_mainHandler->db()->update(m_data))
return Core::FunctionReplyObject(m_data.id, tr_lts("dds", "Error updating EffectShow into database"));
DEBUG_LOG(m_logger) << "Data changed for EffectShow Id: " << m_data.id;
// Publish Data via DTS
onPublishData();
return Core::FunctionReplyObject(m_data.id);
} // end of updateObject()
//=============================================================================
bool ObjectEffectShow::updateObject(const ConvertFromTab::OrderConfirmation_t &data)
{
DEBUG_LOG(m_logger) << "updateObject() partly ->"
<< "\n orderConfirmation " << m_data.orderConfirmation << " new: " << data.confirmation.underlying()
<< "\n answerText " << m_data.answerText << " new: " << data.answerText;
m_data.orderConfirmation = data.confirmation.underlying();
m_data.answerText = data.answerText;
if (!m_mainHandler->db()->update(m_data))
{
ERROR_LOG(m_logger) << "Effect Show Order Confirmation can_t be updated Id: " << m_data.id;
return false;
}
// Publish Data via DTS
onPublishData();
return true;
} // end of updateObject()
//=============================================================================
bool ObjectEffectShow::updateObject(const Database::EsmEffectShow &data)
{
DEBUG_LOG(m_logger) << "updateObject(db) complete ->"
<< "\n id " << m_data.id << " new: " << data.id
<< "\n centerPosition x " << m_data.centerPosition.x() << " new: " << data.centerPosition.x()
<< "\n centerPosition y " << m_data.centerPosition.y() << " new: " << data.centerPosition.y()
<< "\n idAreaEffectSimulation " << m_data.idAreaEffectSimulation << " new: " << data.idAreaEffectSimulation
<< "\n esmParticipantId " << m_data.esmParticipantId << " new: " << data.esmParticipantId
<< "\n numOfVolley " << m_data.numOfVolley << " new: " << data.numOfVolley
<< "\n shotsPerVolley " << m_data.shotsPerVolley << " new: " << data.shotsPerVolley
<< "\n orderConfirmation " << m_data.orderConfirmation << " new: " << data.orderConfirmation
<< "\n answerText " << m_data.answerText << " new: " << data.answerText
<< "\n startTime " << m_data.startTime << " new: " << data.startTime
<< "\n duration " << m_data.duration << " new: " << data.duration
<< "\n lowerLeftPosition x " << m_data.lowerLeftPosition.x() << " new: " << data.lowerLeftPosition.x()
<< "\n lowerLeftPosition y " << m_data.lowerLeftPosition.y() << " new: " << data.lowerLeftPosition.y()
<< "\n areaWidth " << m_data.areaWidth << " new: " << data.areaWidth
<< "\n areaDepth " << m_data.areaDepth << " new: " << data.areaDepth
<< "\n areaRotation " << m_data.areaRotation << " new: " << data.areaRotation
<< "\n typeOfAmmunition " << m_data.typeOfAmmunition << " new: " << data.typeOfAmmunition;
qint64 id = m_data.id; // ID must be unchanged
m_data = data;
m_data.id = id;
if (!m_mainHandler->db()->update(m_data))
{
ERROR_LOG(m_logger) << "Failed effect Show updated Id: " << m_data.id;
return false;
}
// Publish Data via DTS
onPublishData();
return true;
} // end of updateObject()
//=============================================================================
bool ObjectEffectShow::resetOrderConfirmation()
{
m_data.orderConfirmation = EffectShowManagement::OrderConfirmation_e_def::WaitingForAcceptance;
m_data.answerText.clear();
if (!m_mainHandler->db()->update(m_data))
{
ERROR_LOG(m_logger) << "Effect Show Order Confirmation can_t be updated Id: " << m_data.id;
return false;
}
// Publish Data via DTS
onPublishData();
return true;
} // end of resetOrderConfirmation()
//=============================================================================
ConvertToTab::EffectShowOrder_t ObjectEffectShow::getEffectShowOrder() const
{
ConvertToTab::EffectShowOrder_t order;
order.idEffectShow = m_data.id;
order.areaDepth = m_data.areaDepth;
order.areaWidth = m_data.areaWidth;
order.centerPosition = Core::GeoPosition2D(m_data.centerPosition.x(), m_data.centerPosition.y());
order.duration = m_data.duration / 1000; // [ms] -> [s]
order.lowerLeftPosition = Core::GeoPosition2D(m_data.lowerLeftPosition.x(), m_data.lowerLeftPosition.y());
order.numOfVolley = m_data.numOfVolley;
order.shotsPerVolley = m_data.shotsPerVolley;
order.rotation = m_data.areaRotation;
order.startTime = m_data.startTime / 1000; // [ms] -> [s]
order.typeOfAmmunition = m_data.typeOfAmmunition;
order.name = m_data.nameAreaEfffectSimulation;
DEBUG_LOG(m_logger) << "getEffectShowOrder():"
<< "\n idEffectShow " << order.idEffectShow
<< "\n areaDepth " << order.areaDepth
<< "\n areaWidth " << order.areaWidth
<< "\n centerPosition " << order.centerPosition
<< "\n duration " << (int)order.duration
<< "\n lowerLeftPosition " << order.lowerLeftPosition
<< "\n numOfVolley " << (int)order.numOfVolley
<< "\n shotsPerVolely " << (int)order.shotsPerVolley
<< "\n rotation " << order.rotation
<< "\n startTime " << (int)order.startTime
<< "\n typeOfAmmunition " << order.typeOfAmmunition;
return order;
}
//=============================================================================
ConvertToTab::RetractOrder_t ObjectEffectShow::getRetractOrder() const
{
ConvertToTab::RetractOrder_t order;
order.id = m_data.id;
order.orderType = 1;
DEBUG_LOG(m_logger) << "getRetractOrder():"
<< "\n id " << order.id
<< "\n orderType " << (int)order.orderType;
return order;
}
//=============================================================================
ConvertToTab::EffectShowContinue_t ObjectEffectShow::getContinueOrder() const
{
ConvertToTab::EffectShowContinue_t order;
order.idEffectShow = m_data.id;
order.executionTime = m_data.startTime / 1000; // [ms] -> [s]
DEBUG_LOG(m_logger) << "getContinueOrder():"
<< "\n id " << order.idEffectShow
<< "\n orderType " << order.executionTime;
return order;
}
//=============================================================================
void ObjectEffectShow::onPublishData()
{
EffectShowManagement::EffectShow ddsData;
ddsData.id(m_data.id);
ddsData.name(m_data.name.toStdString());
ddsData.startTime(m_data.startTime);
ddsData.duration(m_data.duration);
ddsData.idAreaEffectSimulation(m_data.idAreaEffectSimulation);
ddsData.nameAreaEffectSimulation(m_data.nameAreaEfffectSimulation.toStdString());
ddsData.esmParticipantId(m_data.esmParticipantId);
ddsData.position() = Core::GeoPosition2D(m_data.centerPosition.x(), m_data.centerPosition.y());
ddsData.numOfVolley(m_data.numOfVolley);
ddsData.shotsPerVolley(m_data.shotsPerVolley);
//we need this for the smoke type
ddsData.lowerLeftPosition() = Core::GeoPosition2D(m_data.lowerLeftPosition.x(), m_data.lowerLeftPosition.y());
ddsData.areaDepth(m_data.areaDepth);
ddsData.areaWidth(m_data.areaWidth);
ddsData.areaRotation(m_data.areaRotation);
ddsData.typeOfAmmunition(m_data.typeOfAmmunition);
ddsData.orderConfirmation(EffectShowManagement::OrderConfirmation_e::inner_enum(m_data.orderConfirmation));
ddsData.answerText(m_data.answerText.toStdString());
ddsData.isDeleted(false);
ddsData.isUsed(false);
INFO_LOG(m_logger) << "Publish EsmEffectShow-data to dds (" << m_data.id << ") ...";
if (!m_mainHandler->dds()->dts()->publish(ddsData))
ERROR_LOG(m_logger) << "Error publishing EsmEffectShow-data to dds";
} // end of onPublishData()
//-----------------------------------------------------------------------------
} // Namespace EffectShowManagement