/** * Handler HandlerShootbackArea (L400) * $Id$ * $HeadURL$ * $Author$ * Created by N. Thoden, NLE, 06.04.2020 */ #include "main_handler.h" #include "handler_target_area_assignment.h" #include "handler_shootback_area.h" #include "object_shootback_area.h" using namespace TargetManagement; //-------------------------------------------------------------------------- HandlerShootbackArea::HandlerShootbackArea(MainHandler *mainHandler) : QObject(mainHandler) , ShootbackAreaModifyRequestHandler(mainHandler->dds()->ftsTgt()) , ShootbackAreaRemoveRequestHandler(mainHandler->dds()->ftsTgt()) , m_mainHandler(mainHandler) , m_dtsTgt(m_mainHandler->dds()->dtsTgt()) , m_logger(getLogger("HandlerShootbackArea")) { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; TRACE_LOG(m_logger) << LOGFUNCTION << " END"; } //-------------------------------------------------------------------------- HandlerShootbackArea::~HandlerShootbackArea() { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; TRACE_LOG(m_logger) << LOGFUNCTION << " END"; } //-------------------------------------------------------------------------- bool HandlerShootbackArea::init() { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; // connect(m_dtcTab.get(), &TrainingAreaBase::Interface::Dtc::targetDataChanged, // this, &HandlerShootbackArea::onTargetDataChanged); bool bRet = true; // create objects auto cb = [this, &bRet](const Database::TgtShootbackArea & data) { DEBUG_LOG(m_logger) << "Reading from DB ShootbackArea with id = " << data.id; ObjectShootbackArea *ifs(new ObjectShootbackArea(m_mainHandler)); Core::FunctionReplyObject ret = ifs->createObject(ObjectShootbackArea::toDdsData(data)); if (ret.error()) { delete ifs; ERROR_LOG(m_logger) << ret(); bRet = false; return; } m_objectMap.insert(ifs->getId(), ifs); }; if (!m_mainHandler->db()->select(cb) || !bRet) { ERROR_LOG(m_logger) << "Error reading data from database!"; return false; } DEBUG_LOG(m_logger) << "m_objectMap.size() = " << m_objectMap.size(); return true; } bool HandlerShootbackArea::objectShootbackAreas(const std::function &cb) const { for (const auto &sample : m_objectMap) if (sample) cb(*sample); return true; } //-------------------------------------------------------------------------- void HandlerShootbackArea::onShootbackAreaModifyRequest(const rti::core::SampleIdentity &cookie, const ShootbackArea &request) { const auto ret = shootbackAreaModifyRequest(request); if (ret.error()) WARNING_LOG(m_logger) << ret(); // For ShootbackController emit objectChanged(ret.id(), false); m_mainHandler->dds()->ftsTgt()->shootbackAreaModifyReply(cookie, ret); } //-------------------------------------------------------------------------- Core::FunctionReplyObject HandlerShootbackArea::shootbackAreaModifyRequest(const ShootbackArea &request) { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; // modify if (request.id() > 0) { ObjectShootbackArea *ifs = m_objectMap.value(request.id()); if (!ifs) return Core::FunctionReplyObject(request.id(), tr_lts("dds", "ShootbackArea with id %1 not found")).arg(request.id()); return ifs->updateObject(request); } // create ObjectShootbackArea *ifs(new ObjectShootbackArea(m_mainHandler)); auto ret = ifs->createObject(request); if (ret.error()) { delete ifs; ifs = nullptr; } else m_objectMap.insert(ifs->getId(), ifs); TRACE_LOG(m_logger) << LOGFUNCTION << " END"; return ret; } //-------------------------------------------------------------------------- void HandlerShootbackArea::onShootbackAreaRemoveRequest(const rti::core::SampleIdentity &cookie, const Core::RemoveElementRequest &request) { TRACE_LOG(m_logger) << LOGFUNCTION << " request=" << request; Core::FunctionReplyObject ret; ObjectShootbackArea *ifs = m_objectMap.value(request.id()); if (ifs == nullptr) { ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "ShootbackArea with id %1 not found")).arg(request.id()); m_mainHandler->dds()->ftsTgt()->shootbackAreaRemoveReply(cookie, ret); return; } // // referenced by an assignment? // if (m_mainHandler->handlerTargetAreaAssignment() && // m_mainHandler->handlerTargetAreaAssignment()->isAreaIdUsedInAny(request.id())) // { // ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "ShootbackArea with id %1 is used.")).arg(request.id()); // m_mainHandler->dds()->ftsTgt()->shootbackAreaRemoveReply(cookie, ret); // return; // } // if (m_mainHandler->dds()->topicLockMaster()->isLocked(ifs->getData(), m_mainHandler->exerciseId())) // { // ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "ShootbackArea '%1' is used by another user!")).arg(ifs->getName()); // m_mainHandler->dds()->ftsTgt()->shootbackAreaRemoveReply(cookie, ret); // return; // } ret = ifs->removeObject(); if (ret.error()) ERROR_LOG(m_logger) << ret(); else { // delete Object delete ifs; m_objectMap.remove(request.id()); } m_mainHandler->dds()->ftsTgt()->shootbackAreaRemoveReply(cookie, ret); // For ShootbackController if (!ret.error()) emit objectChanged(request.id(), true); return; }