/** * $Id$ * $HeadURL$ * $Author$ * Created by Philipp Last, NLSE, 2018-01-11 */ #include "handler_comment.h" #include "object_comment.h" #include "settings.h" namespace Evaluations { HandlerComment::HandlerComment(const std::shared_ptr &ddsHandler, const std::shared_ptr &db) : Interface::Fts::EvlCommentModifyRequestHandler(ddsHandler->fts()) , Interface::Fts::EvlSchemaModifyRequestHandler(ddsHandler->fts()) , m_ddsHandler(ddsHandler) , m_db(db) , m_logger(getLogger("HandlerComment")) {} HandlerComment::~HandlerComment() { qDeleteAll(m_mapObjectSchema); qDeleteAll(m_mapObjectComment); } bool HandlerComment::init() { bool bRet = true; // Comment auto cbComment = [this, &bRet] (const Database::EvlComment &data) { ObjectComment *ifs(new ObjectComment(m_ddsHandler, m_db)); Core::FunctionReplyObject ret = ifs->createObject(data); if (ret.error()) { delete ifs; ERROR_LOG(m_logger) << ret(); bRet = false; return; } m_mapObjectComment.insert(ifs->getId(), ifs); }; if (!m_db->select(cbComment) || !bRet) { ERROR_LOG(m_logger) << "Error reading data from database!"; return false; } // Schema auto cbSchema = [this, &bRet] (const Database::EvlSchema &data) { ObjectSchema *ifs(new ObjectSchema(m_ddsHandler, m_db)); Core::FunctionReplyObject ret = ifs->createObject(data); if (ret.error()) { delete ifs; ERROR_LOG(m_logger) << ret(); bRet = false; return; } m_mapObjectSchema.insert(ifs->getId(), ifs); }; if (!m_db->select(cbSchema) || !bRet) { ERROR_LOG(m_logger) << "Error reading data from database!"; return false; } if (m_mapObjectSchema.isEmpty()) createDefaultSchema(); return true; } void HandlerComment::createDefaultSchema() { rti::core::SampleIdentity cookie; EvlSchemaModifyRequest request; request.id(0); request.schemadata() = Evaluations::Settings::defaultSchema().toStdString(); request.sendToTa(false); onEvlSchemaModifyRequest(cookie, request); } void HandlerComment::onEvlCommentModifyRequest(const rti::core::SampleIdentity &cookie, const EvlCommentModifyRequest &request) { Database::EvlComment data; data.id = request.id(); data.ts = QDateTime::fromMSecsSinceEpoch(request.ts()); data.senderOperatorId = request.senderOperatorId(); if (request.receiverOperatorId().is_set()) data.receiverOperatorId = request.receiverOperatorId().get(); data.text = QString::fromStdString(request.text()); data.hierarchy = QString::fromStdString(request.hierarchy()); data.schemaId = request.schemaId(); data.elementId = request.elementId(); Core::FunctionReplyObject ret; if (request.id() <= 0) { ObjectComment *ifs(new ObjectComment(m_ddsHandler, m_db)); ret = ifs->createObject(data); if (ret.error()) { delete ifs; ifs = nullptr; ERROR_LOG(m_logger) << ret(); } else m_mapObjectComment.insert(ifs->getId(), ifs); } else { data.id = request.id(); ObjectComment *ifs = m_mapObjectComment.value(data.id); ret = ifs->updateObject(data); } m_ddsHandler->fts()->evlCommentModifyReply(cookie, ret); } void HandlerComment::onEvlSchemaModifyRequest(const rti::core::SampleIdentity &cookie, const EvlSchemaModifyRequest &request) { Database::EvlSchema data; data.id = request.id(); data.schemadata = QString::fromStdString(request.schemadata()); data.sendToTa = request.sendToTa(); Core::FunctionReplyObject ret; if (request.id() <= 0 && !m_mapObjectSchema.contains(std::abs(request.id()))) { ObjectSchema *ifs(new ObjectSchema(m_ddsHandler, m_db)); ret = ifs->createObject(data); if (ret.error()) { delete ifs; ifs = nullptr; ERROR_LOG(m_logger) << ret(); } else m_mapObjectSchema.insert(ifs->getId(), ifs); } else { ObjectSchema *ifs = m_mapObjectSchema.value(std::abs(data.id)); ret = ifs->updateObject(data); } m_ddsHandler->fts()->evlSchemaModifyReply(cookie, ret); } } // Namespace Evaluations