/** * Handler for codification data * $Id$ * $HeadURL$ * $Author$ * Created by hjl, SLSE, 2016-11-18 */ #include "handler_codification_data.h" #include "object_codification_data.h" using namespace CodificationManagement; HandlerCodificationData::HandlerCodificationData(const std::shared_ptr &ddsHandler, const std::shared_ptr &dbHandler) : Interface::Fts::CodificationDataModifyRequestHandler(ddsHandler->fts()) , Interface::Fts::CodificationDataRemoveRequestHandler(ddsHandler->fts()) , m_ddsHandler(ddsHandler) , m_dbHandler(dbHandler) , m_logger(getLogger("HandlerCodificationData")) { } // end of ctor() //----------------------------------------------------------------------------- HandlerCodificationData::~HandlerCodificationData() { qDeleteAll(m_codificationdataObjMap); } // end of dtor() //----------------------------------------------------------------------------- bool HandlerCodificationData::init() { QVector dataVec; // read all CodificationDatas from database if (!m_dbHandler->db()->select(dataVec)) { ERROR_LOG(m_logger) << "Error reading data from database!"; return true; } // create objects for (const Database::CodCodificationTable &data : qAsConst(dataVec)) { CodificationManagement::CodificationData ddsData = ObjectCodificationData::toDdsData(data); ObjectCodificationData *ifs(new ObjectCodificationData(m_ddsHandler, m_dbHandler)); Core::FunctionReplyObject ret = ifs->createObject(ddsData); if (ret.error()) { delete ifs; ERROR_LOG(m_logger) << ret(); return false; } m_codificationdataObjMap.insert(ifs->getId(), ifs); } DEBUG_LOG(m_logger) << "m_codificationdataObjMap.size() = " << m_codificationdataObjMap.size(); return true; } // end of init() //----------------------------------------------------------------------------- void HandlerCodificationData::onCodificationDataModifyRequest(const rti::core::SampleIdentity &cookie, const CodificationData &request) { DEBUG_LOG(m_logger) << "onCodificationDataModifyRequest: " << request; auto ret = request.id > 0 ? codificationDataModifyRequest(request) : codificationDataCreateRequest(request); if (ret.error()) WARNING_LOG(m_logger) << ret(); m_ddsHandler->fts()->codificationDataModifyReply(cookie, ret); } // end of onCodificationDataModifyRequest() //----------------------------------------------------------------------------- Core::FunctionReplyObject HandlerCodificationData::codificationDataCreateRequest(const CodificationData &request) { ObjectCodificationData *ifs(new ObjectCodificationData(m_ddsHandler, m_dbHandler)); Core::FunctionReplyObject ret = ifs->createObject(request); if (ret.error()) delete ifs; else m_codificationdataObjMap.insert(ifs->getId(), ifs); return ret; } // end of onCodificationDataCreateRequest() //----------------------------------------------------------------------------- Core::FunctionReplyObject HandlerCodificationData::codificationDataModifyRequest(const CodificationData &request) { ObjectCodificationData *ifs = m_codificationdataObjMap.value(request.id); if (ifs == nullptr) return Core::FunctionReplyObject(request.id, tr_lts("dds", "Codification table with id %1 not found")).arg(request.id); return ifs->updateObject(request); } // end of onCodificationDataModifyRequest() //----------------------------------------------------------------------------- void HandlerCodificationData::onCodificationDataRemoveRequest(const rti::core::SampleIdentity &cookie, const Core::RemoveElementRequest &request) { DEBUG_LOG(m_logger) << "onCodificationDataRemoveRequest: " << request; ObjectCodificationData *ifs = m_codificationdataObjMap.value(request.id); if (ifs == nullptr) { Core::FunctionReplyObject ret = Core::FunctionReplyObject(request.id, tr_lts("dds", "Codification table with id %1 not found")).arg(request.id); ERROR_LOG(m_logger) << ret(); m_ddsHandler->fts()->codificationDataRemoveReply(cookie, ret); return; } if (m_ddsHandler->topicLockMaster()->isLocked(ifs->getData(), m_ddsHandler->exerciseId())) { Core::FunctionReplyObject ret = Core::FunctionReplyObject(request.id, tr_lts("dds", "Codification '%1' is used by another user!")).arg(ifs->getData().identifier); m_ddsHandler->fts()->codificationDataRemoveReply(cookie, ret); return; } Core::FunctionReplyObject ret = ifs->removeObject(); if (ret.error()) ERROR_LOG(m_logger) << ret(); else { // delete codification object delete ifs; m_codificationdataObjMap.remove(request.id); } m_ddsHandler->fts()->codificationDataRemoveReply(cookie, ret); } // end of onCodificationDataRemoveRequest() //-----------------------------------------------------------------------------