/** * Handler ShootbackAreas (L400) * $Id$ * $HeadURL$ * $Author$ * Created by N. Thoden, NLE, 06.04.2020 */ #include "main_handler.h" #include "handler_target_area_assignment.h" #include "object_target_area_assignment.h" using namespace TargetManagement; //-------------------------------------------------------------------------- HandlerTargetAreaAssignment::HandlerTargetAreaAssignment(MainHandler *mainHandler) : QObject(mainHandler) , TargetAreaAssignmentModifyRequestHandler(mainHandler->dds()->ftsTgt()) , TargetAreaAssignmentRemoveRequestHandler(mainHandler->dds()->ftsTgt()) , m_mainHandler(mainHandler) , m_dtsTgt(m_mainHandler->dds()->dtsTgt()) , m_logger(getLogger("HandlerTargetAreaAssignment")) { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; TRACE_LOG(m_logger) << LOGFUNCTION << " END"; } //-------------------------------------------------------------------------- HandlerTargetAreaAssignment::~HandlerTargetAreaAssignment() { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; TRACE_LOG(m_logger) << LOGFUNCTION << " END"; } //-------------------------------------------------------------------------- bool HandlerTargetAreaAssignment::init() { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; // connect(m_dtcTab.get(), &TrainingAreaBase::Interface::Dtc::targetDataChanged, // this, &HandlerTargetAreaAssignment::onTargetDataChanged); bool bRet = true; // create objects auto cb = [this, &bRet](const Database::TgtTargetAreaAssignment & data) { DEBUG_LOG(m_logger) << "Reading from DB TargetAreaAssignment with id = " << data.id; ObjectTargetAreaAssignment *ifs(new ObjectTargetAreaAssignment(m_mainHandler)); Core::FunctionReplyObject ret = ifs->createObject(ObjectTargetAreaAssignment::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 HandlerTargetAreaAssignment::isAreaIdUsedInAny(int areaId) { for (const ObjectTargetAreaAssignment *sample : qAsConst(m_objectMap)) if (sample && (sample->getData().areaId() == areaId)) return true; return false; } bool HandlerTargetAreaAssignment::isTargetDataIdUsedInAny(int targetDataId) { for (const ObjectTargetAreaAssignment *sample : qAsConst(m_objectMap)) if (sample && (sample->getData().targetParticipantId() == targetDataId)) return true; return false; } //-------------------------------------------------------------------------- void HandlerTargetAreaAssignment::onTargetAreaAssignmentModifyRequest(const rti::core::SampleIdentity &cookie, const TargetAreaAssignment &request) { const auto ret = TargetAreaAssignmentModifyRequest(request); if (ret.error()) WARNING_LOG(m_logger) << ret(); else emit objectChanged(ret.id(), false); // For ShootbackController m_mainHandler->dds()->ftsTgt()->targetAreaAssignmentModifyReply(cookie, ret); } //-------------------------------------------------------------------------- Core::FunctionReplyObject HandlerTargetAreaAssignment::TargetAreaAssignmentModifyRequest(const TargetAreaAssignment &request) { TRACE_LOG(m_logger) << LOGFUNCTION << " START"; // modify if (request.id() > 0) { ObjectTargetAreaAssignment *ifs = m_objectMap.value(request.id()); if (!ifs) return Core::FunctionReplyObject(request.id(), tr_lts("dds", "TargetAreaAssignment with id %1 not found")).arg(request.id()); return ifs->updateObject(request); } // create ObjectTargetAreaAssignment *ifs(new ObjectTargetAreaAssignment(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 HandlerTargetAreaAssignment::onTargetAreaAssignmentRemoveRequest(const rti::core::SampleIdentity &cookie, const Core::RemoveElementRequest &request) { TRACE_LOG(m_logger) << LOGFUNCTION << " request=" << request; Core::FunctionReplyObject ret; ObjectTargetAreaAssignment *ifs = m_objectMap.value(request.id()); if (ifs == nullptr) { ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "TargetAreaAssignment with id %1 not found")).arg(request.id()); m_mainHandler->dds()->ftsTgt()->targetAreaAssignmentRemoveReply(cookie, ret); return; } // if (m_mainHandler->dds()->topicLockMaster()->isLocked(ifs->getData(), m_mainHandler->exerciseId())) // { // ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "TargetAreaAssignment '%1' is used by another user!")).arg(ifs->getName()); // m_mainHandler->dds()->ftsTgt()->TargetAreaAssignmentRemoveReply(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()->targetAreaAssignmentRemoveReply(cookie, ret); // For ShootbackController if (!ret.error()) emit objectChanged(request.id(), true); return; }