/** * Handler for all assets * $Id$ * $HeadURL$ * $Author$ * Created by Iuliana Ojog, SLSE, 2017-09-20 */ #include "handler_relay_info.h" #include "object_relay_info.h" #include "main_handler.h" namespace AssetManagement { HandlerRelayInfo::HandlerRelayInfo(MainHandler *mainHandler, QObject *parent) : QObject(parent) , Interface::Fts::RelayInfoModifyRequestHandler(mainHandler->dds()->fts()) , Interface::Fts::RelayInfoRemoveRequestHandler(mainHandler->dds()->fts()) , m_mainHandler(mainHandler) , m_logger(getLogger("HandlerRelayInfo")) { } //--------------------------------------------------- HandlerRelayInfo::~HandlerRelayInfo() { qDeleteAll(m_objectRelayInfoMap); } //--------------------------------------------------- bool HandlerRelayInfo::init() { bool bRet = true; // create objects auto cb = [this, &bRet] (const Database::AsmEgcuRelayInfo &data) { ObjectRelayInfo *ifs(new ObjectRelayInfo(m_mainHandler)); Core::FunctionReplyObject ret = ifs->createObject(ObjectRelayInfo::toDdsData(data)); if (ret.error()) { delete ifs; ERROR_LOG(m_logger) << ret(); bRet = false; return; } m_objectRelayInfoMap.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_objectRelayInfoMap.size() = " << m_objectRelayInfoMap.size(); return true; } //--------------------------------------------------- void HandlerRelayInfo::onRelayInfoModifyRequest(const rti::core::SampleIdentity &cookie, const RelayInfo &request) { const auto ret = relayInfoModifyRequest(request); if (ret.error()) WARNING_LOG(m_logger) << ret(); m_mainHandler->dds()->fts()->relayInfoModifyReply(cookie, ret); } Core::FunctionReplyObject HandlerRelayInfo::relayInfoModifyRequest(const RelayInfo &request) { // modify if (request.id() > 0) { ObjectRelayInfo *ifs = m_objectRelayInfoMap.value(request.id()); if (!ifs) return Core::FunctionReplyObject(request.id(), tr_lts("dds", "RelayInfo with id %1 not found")).arg(request.id()); return ifs->updateObject(request); } // create ObjectRelayInfo *ifs(new ObjectRelayInfo(m_mainHandler)); auto ret = ifs->createObject(request); if (ret.error()) { delete ifs; ifs = nullptr; } else m_objectRelayInfoMap.insert(ifs->getId(), ifs); return ret; } //--------------------------------------------------- void HandlerRelayInfo::onRelayInfoRemoveRequest(const rti::core::SampleIdentity &cookie, const Core::RemoveElementRequest &request) { Core::FunctionReplyObject ret; ObjectRelayInfo *ifs = m_objectRelayInfoMap.value(request.id()); if (ifs == nullptr) { ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "RelayInfo with id %1 not found")).arg(request.id()); m_mainHandler->dds()->fts()->relayInfoRemoveReply(cookie, ret); return; } if (m_mainHandler->dds()->topicLockMaster()->isLocked(ifs->getData(), m_mainHandler->exerciseId())) { ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "RelayInfo '%1' is used by another user!")).arg(ifs->getName()); m_mainHandler->dds()->fts()->relayInfoRemoveReply(cookie, ret); return; } ret = ifs->removeObject(); if (ret.error()) ERROR_LOG(m_logger) << ret(); else { // delete ObjectRelayInfo delete ifs; m_objectRelayInfoMap.remove(request.id()); } m_mainHandler->dds()->fts()->relayInfoRemoveReply(cookie, ret); return; } } // Namespace AssetManagement