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