/** * Handler for all exercise objects * $Id$ * $HeadURL$ * $Author$ * Created by Hanna E. Rathje, SLSE, 2015-09-03 */ #include "handler_criterium.h" #include "object_criterium.h" #include "object_evaluation_element.h" namespace Evaluations { HandlerCriterium::HandlerCriterium(const std::shared_ptr &ddsHandler, const std::shared_ptr &db) : Interface::Fts::EvlCriteriumModifyRequestHandler(ddsHandler->fts()) , Interface::Fts::EvlCriteriumRemoveRequestHandler(ddsHandler->fts()) , Interface::Fts::EvlElementModifyRequestHandler(ddsHandler->fts()) , Interface::Fts::EvlElementRemoveRequestHandler(ddsHandler->fts()) , m_ddsHandler(ddsHandler) , m_db(db) , m_logger(getLogger("HandlerCriterium")) {} HandlerCriterium::~HandlerCriterium() { qDeleteAll(m_criteriumObjMap); } bool HandlerCriterium::init() { bool bRet = true; // create criterium objects auto cbCriterim = [this, &bRet](const Database::EvlCriterium & data) { ObjectCriterium *ifs(new ObjectCriterium(m_ddsHandler, m_db)); Core::FunctionReplyObject ret = ifs->createObject(data); if (ret.error()) { delete ifs; ERROR_LOG(m_logger) << ret(); bRet = false; return; } m_criteriumObjMap.insert(ifs->getId(), ifs); }; if (!m_db->select(cbCriterim) || !bRet) { ERROR_LOG(m_logger) << "Error reading data from database!"; return false; } DEBUG_LOG(m_logger) << "m_criteriumObjMap.size() = " << m_criteriumObjMap.size(); auto cbElement = [this, &bRet](const Database::EvlElement & data) { ObjectCriterium *ifs = m_criteriumObjMap.value(data.criteriumId); if (!ifs) return; ObjectEvaluationElement *oee = new ObjectEvaluationElement(m_ddsHandler, m_db); Core::FunctionReplyObject ret = oee->createObject(data); if (ret.error()) { delete oee; ERROR_LOG(m_logger) << ret(); bRet = false; return; } ifs->addElement(oee); }; if (!m_db->select(cbElement) || !bRet) { ERROR_LOG(m_logger) << "Error reading data from database!"; return false; } return true; } void HandlerCriterium::onEvlCriteriumModifyRequest(const rti::core::SampleIdentity &cookie, const EvlCriteriumModifyRequest &request) { Database::EvlCriterium data; data.name = QString::fromStdString(request.name()); data.description = QString::fromStdString(request.description()); data.operatorId = request.operatorId(); Core::FunctionReplyObject ret; if (request.id() <= 0) { ObjectCriterium *ifs = new ObjectCriterium(m_ddsHandler, m_db); ret = ifs->createObject(data); if (ret.error()) { delete ifs; ifs = nullptr; ERROR_LOG(m_logger) << ret(); } else m_criteriumObjMap.insert(ifs->getId(), ifs); } else { data.id = request.id(); ObjectCriterium *ifs = m_criteriumObjMap.value(data.id); ret = ifs->updateObject(data); } m_ddsHandler->fts()->evlCriteriumModifyReply(cookie, ret); } void HandlerCriterium::onEvlCriteriumRemoveRequest(const rti::core::SampleIdentity &cookie, const Core::RemoveElementRequest &request) { DEBUG_LOG(m_logger) << "onEvlCriteriumRemoveRequest: " << request; ObjectCriterium *ifs = m_criteriumObjMap.value(request.id()); Core::FunctionReplyObject ret; if (!ifs) { ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "No EvlCriterium with id %1 found")).arg(request.id()); m_ddsHandler->fts()->evlCriteriumRemoveReply(cookie, ret); return; } ret = ifs->removeObject(); m_ddsHandler->fts()->evlCriteriumRemoveReply(cookie, ret); } void HandlerCriterium::onEvlElementModifyRequest(const rti::core::SampleIdentity &cookie, const EvlElementModifyRequest &request) { ObjectCriterium *ifs = m_criteriumObjMap.value(request.criteriumId()); Core::FunctionReplyObject ret; if (!ifs) { ret = Core::FunctionReplyObject(request.criteriumId(), tr_lts("dds", "No EvlCriterium with id %1 found")).arg(request.criteriumId()); m_ddsHandler->fts()->evlElementModifyReply(cookie, ret); return; } Database::EvlElement data; data.criteriumId = request.criteriumId(); data.id = request.id(); data.duration = request.duration(); data.note = QString::fromStdString(request.note()); data.phaseId = request.phaseId(); data.rating = request.rating(); data.time = request.timestamp(); if (request.audioContent().is_set()) data.audioContent = QString::fromStdString(request.audioContent().get()); if (request.videoContent().is_set()) data.videoContent = QString::fromStdString(request.videoContent().get()); if (request.situationContent().is_set()) data.situationContent = QString::fromStdString(request.situationContent().get()); if (data.id <= 0) { data.id = 0; ObjectEvaluationElement *oee = new ObjectEvaluationElement(m_ddsHandler, m_db); ret = oee->createObject(data); if (!ret.error()) ifs->addElement(oee); } else { ObjectEvaluationElement *oee = ifs->getElement(data.id); if (!oee) ret = Core::FunctionReplyObject(data.id, tr_lts("dds", "No EvaluationElement with id %1 found")).arg(data.id); else { ret = oee->updateObject(data); if (!ret.error()) ifs->addElement(oee); } } m_ddsHandler->fts()->evlElementModifyReply(cookie, ret); } void HandlerCriterium::onEvlElementRemoveRequest(const rti::core::SampleIdentity &cookie, const EvlElementRemoveRequest &request) { ObjectCriterium *ifs = m_criteriumObjMap.value(request.criteriumId()); Core::FunctionReplyObject ret; if (!ifs) { ret = Core::FunctionReplyObject(request.criteriumId(), tr_lts("dds", "No EvlCriterium with id %1 found")).arg(request.criteriumId()); m_ddsHandler->fts()->evlElementModifyReply(cookie, ret); return; } ObjectEvaluationElement *oee = ifs->getElement(request.id()); if (!oee) ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "No EvaluationElement with id %1 found")).arg(request.id()); else { ret = oee->removeObject(); ifs->removeElement(request.id()); } m_ddsHandler->fts()->evlElementRemoveReply(cookie, ret); } } // namespace Evaluations