/** * Handler ShootbackTargets (L400) * $Id$ * $HeadURL$ * $Author$ * Created by N. Thoden, NLE, 06.04.2020 */ #include "object_shootback_target.h" #include "main_handler.h" //------------------------------------------------------------------------------ namespace TargetManagement { ObjectShootbackTarget::ObjectShootbackTarget(MainHandler *mainHandler) : m_mainHandler(mainHandler) , m_logger(getLogger("ObjectShootbackTarget")) { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; TRACE_LOG(m_logger) << LOGFUNCTION << " END"; } //------------------------------------------------------------------------------ ObjectShootbackTarget::~ObjectShootbackTarget() { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; if (isValid()) m_mainHandler->dds()->dtsTgt()->removeShootbackTargetByKey(m_data.id()); TRACE_LOG(m_logger) << LOGFUNCTION << " END"; } //------------------------------------------------------------------------------ bool ObjectShootbackTarget::isValid() const { return m_data.id() > 0; } //------------------------------------------------------------------------------ bool ObjectShootbackTarget::isUsed() const { return m_data.isUsed(); } //------------------------------------------------------------------------------ Core::FunctionReplyObject ObjectShootbackTarget::createObject(const ShootbackTarget &data) { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; m_data = data; if (m_data.id() <= 0) { m_data.isUsed(false); Database::TgtShootbackTarget dbData(toDbData(data)); if (!m_mainHandler->db()->insert(dbData)) return Core::FunctionReplyObject(0, tr_lts("dds", "Error inserting ShootbackTarget-data into database")); m_data.id(dbData.id); DEBUG_LOG(m_logger) << "New TgtShootbackTarget: " << m_data.id(); } // Publish Data via DTS onPublishData(); TRACE_LOG(m_logger) << LOGFUNCTION << " END"; return Core::FunctionReplyObject(m_data.id()); } //------------------------------------------------------------------------------ Core::FunctionReplyObject ObjectShootbackTarget::updateObject(const ShootbackTarget &data) { TRACE_LOG(m_logger) << LOGFUNCTION << " START, id=" << data.id() << " size =" << data.visibleParticipants().size(); if (!isValid()) return Core::FunctionReplyObject(data.id(), tr_lts("dds", "Object not valid/blocked")); Database::TgtShootbackTarget dbData; dbData = toDbData(data); if (isDifferent(dbData)) { if (!m_mainHandler->db()->update(dbData)) return Core::FunctionReplyObject(data.id(), tr_lts("dds", "Error updating ShootbackTarget-data into database")); } m_data = data; DEBUG_LOG(m_logger) << "Data changed for ShootbackTargetId: " << m_data.id(); // Publish Data via DTS onPublishData(); TRACE_LOG(m_logger) << LOGFUNCTION << " END, id=" << data.id() << " size =" << data.visibleParticipants().size(); return Core::FunctionReplyObject(m_data.id()); } //------------------------------------------------------------------------------ Core::FunctionReplyObject ObjectShootbackTarget::setUsed(bool isUsed) { if (!isValid()) return Core::FunctionReplyObject(m_data.id(), tr_lts("dds", "Trying to update an already removed ShootbackTarget object")); m_data.isUsed(isUsed); // Publish Data via DTS onPublishData(); return Core::FunctionReplyObject(m_data.id()); } //------------------------------------------------------------------------------ Core::FunctionReplyObject ObjectShootbackTarget::removeObject() { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; if (isUsed()) return Core::FunctionReplyObject(m_data.id(), tr_lts("dds", "ShootbackTarget still in use")); if (!m_mainHandler->db()->removeTgtShootbackTarget(m_data.id())) return Core::FunctionReplyObject(m_data.id(), tr_lts("dds", "ShootbackTarget with id %1 can not be removed from DB")).arg(m_data.id()); if (!m_mainHandler->dds()->dtsTgt()->removeShootbackTargetByKey(m_data.id())) return Core::FunctionReplyObject(m_data.id(), tr_lts("dds", "ShootbackTarget with id %1 can not be removed from DDS")).arg(m_data.id()); TRACE_LOG(m_logger) << LOGFUNCTION << " END"; return Core::FunctionReplyObject(m_data.id()); } void ObjectShootbackTarget::updateVolatileData(const std::vector &visibleParticipant) { m_data.visibleParticipants(visibleParticipant); // Publish Data via DTS onPublishData(); } void ObjectShootbackTarget::updateVolatileData(const Core::GeoPosition &position) { m_data.position(position); // Publish Data via DTS onPublishData(); } //------------------------------------------------------------------------------ void ObjectShootbackTarget::onPublishData() { TRACE_LOG(m_logger) << "Publish ShootbackTarget-data to dds (" << m_data.id() << ") ..."; if (!m_mainHandler->dds()->dtsTgt()->publish(m_data)) ERROR_LOG(m_logger) << "Error publishing ShootbackTarget-data to dds"; } // ------------------------------------------------------------------------------------------------------- // convert methods // ------------------------------------------------------------------------------------------------------- // TargetManagement::ShootbackTarget => Database::TgtShootbackTarget Database::TgtShootbackTarget ObjectShootbackTarget::toDbData(const ShootbackTarget &ddsData) { Database::TgtShootbackTarget dbData; dbData.id = ddsData.id(); dbData.targetParticipantId = ddsData.targetParticipantId(); dbData.name = QString::fromStdString(ddsData.name()); dbData.activateLaserDesignation = ddsData.activateLaserDesignation(); dbData.activateLights = ddsData.activateLights(); dbData.activatePopupAutomatic = ddsData.activatePopupAutomatic(); dbData.hitsToKill = ddsData.hitsToKill(); dbData.permanentInstalledTarget = ddsData.permanentInstalledTarget(); return dbData; } // ------------------------------------------------------------------------------------------------------- // Database::TgtShootbackTarget => TargetManagement::ShootbackTarget ShootbackTarget ObjectShootbackTarget::toDdsData(const Database::TgtShootbackTarget &dbData) { ShootbackTarget ddsData; ddsData.id(dbData.id); ddsData.targetParticipantId(dbData.targetParticipantId); ddsData.name(dbData.name.toStdString()); ddsData.activateLaserDesignation(dbData.activateLaserDesignation); ddsData.activateLights(dbData.activateLights); ddsData.activatePopupAutomatic(dbData.activatePopupAutomatic); ddsData.hitsToKill(dbData.hitsToKill); ddsData.permanentInstalledTarget(dbData.permanentInstalledTarget); // init data not in db ddsData.isDeleted(false); ddsData.isUsed(false); return ddsData; } bool ObjectShootbackTarget::isDifferent(const Database::TgtShootbackTarget &dbData) { return ( dbData.id != m_data.id() || dbData.targetParticipantId != m_data.targetParticipantId() || dbData.name.toStdString() != m_data.name() || dbData.activateLaserDesignation != m_data.activateLaserDesignation() || dbData.activateLights != m_data.activateLights() || dbData.activatePopupAutomatic != m_data.activatePopupAutomatic() || dbData.hitsToKill != m_data.hitsToKill() || dbData.permanentInstalledTarget != m_data.permanentInstalledTarget() ); } // ------------------------------------------------------------------------------------------------------- } // Namespace TargetManagement