/** * @RDE_HEADER@ * ISM Object Main Structure Element * $Id$ * $HeadURL$ * $Author$ * Created by Iuliana Ojog, SLSE, 2016-11-26 */ #include "object_presentation.h" #include "initialization.h" #include "dds_handler.h" #include namespace PresentationManagement { //---------------------------------------------------------------------------------------------------- ObjectPresentation::ObjectPresentation(Initialization *mainHandler) : m_mainHandler(mainHandler) , m_logger(getLogger("ObjectPresentation")) { } ObjectPresentation::ObjectPresentation(const Presentation &data, Initialization *mainHandler) : m_mainHandler(mainHandler) , m_data(data) , m_logger(getLogger("ObjectPresentation")) { } //------------------------------------------------------------------------------------------------------------ ObjectPresentation::~ObjectPresentation() { } //------------------------------------------------------------------------------------------------------------ bool ObjectPresentation::isValid() const { return m_data.id() > 0; } void ObjectPresentation::addPresentationContent(PresentationContent &&data) { m_content.push_back(std::move(data)); } //------------------------------------------------------------------------------------------------------------ Core::FunctionReplyObject ObjectPresentation::createObject(const PresentationModifyRequest &request) { m_data = Presentation(); m_content.clear(); m_data.name(request.name()); m_data.description(request.description()); m_data.operatorId(request.operatorId()); m_data.lastModified(request.lastModified()); m_content = request.content(); //for(auto it = request.content().begin(); it != request.content().end(); ++it) // m_content.append(*it); DBTransaction trans(m_mainHandler->db()->database()); // Insert Presentation Database::PrePresentation dbData(toDbData(m_data)); if (!m_mainHandler->db()->insert(dbData)) return Core::FunctionReplyObject(0, tr_lts("dds", "Error inserting Presentation-data into database")); m_data.id(dbData.id); // Insert PresentationContent for (PresentationContent &conData : m_content) { conData.presentationId(m_data.id()); Database::PrePresentationContent conDbData = toDbData(conData); conDbData.id = 0; conDbData.presentationId = m_data.id(); if (!m_mainHandler->db()->insert(conDbData)) return Core::FunctionReplyObject(0, tr_lts("dds", "Error inserting PresentationContent-data into database")); else { DEBUG_LOG(m_logger) << "New presentation content id : " << conDbData.id; conData.id(conDbData.id); } } DEBUG_LOG(m_logger) << "New Id: " << m_data.id(); trans.commit(); onPublishData(); return Core::FunctionReplyObject(m_data.id()); } //------------------------------------------------------------------------------------------------------------ Core::FunctionReplyObject ObjectPresentation::updateObject(const PresentationModifyRequest &request) { if (!isValid()) return Core::FunctionReplyObject(request.id(), tr_lts("dds", "Object not valid/blocked")); m_data.id(request.id()); m_data.name(request.name()); m_data.description(request.description()); m_data.operatorId(request.operatorId()); m_data.lastModified(request.lastModified()); m_data.fileStatus(request.fileStatus()); DBTransaction trans(m_mainHandler->db()->database()); Database::PrePresentation dbData(toDbData(m_data)); if (!m_mainHandler->db()->update(dbData)) return Core::FunctionReplyObject(m_data.id(), tr_lts("dds", "Error updating Presentation-data into database")); for (const auto &content : qAsConst(m_content)) { if (m_mainHandler->db()->removePrePresentationContent(content.id())) DEBUG_LOG(m_logger) << "Removed presentation content id " << content.id(); else ERROR_LOG(m_logger) << "Failed to remove presentation content id " << content.id(); } m_content = request.content(); for (PresentationContent &conData : m_content) { conData.presentationId(m_data.id()); Database::PrePresentationContent conDbData = toDbData(conData); conDbData.presentationId = m_data.id(); conDbData.id = 0; if (!m_mainHandler->db()->insert(conDbData)) return Core::FunctionReplyObject(0, tr_lts("dds", "Error inserting PresentationContent-data into database")); else { DEBUG_LOG(m_logger) << "New presentation content id : " << conDbData.id; conData.id(conDbData.id); } } trans.commit(); onPublishData(); return Core::FunctionReplyObject(m_data.id()); } //------------------------------------------------------------------------------------------------------------ Core::FunctionReplyObject ObjectPresentation::removeObject() { // remove also presentationContent data via foreign key if (!m_mainHandler->db()->removePrePresentation(m_data.id())) return Core::FunctionReplyObject(m_data.id(), tr_lts("dds", "Presentation with id %1 can not be removed from DB")).arg(m_data.id()); int id = m_data.id(); m_content.clear(); m_data = Presentation(); return Core::FunctionReplyObject(id); } //------------------------------------------------------------------------------------------------------------ Core::FunctionReplyObject ObjectPresentation::changeStatus(const PresentationChangeStatusRequest &request) { if (!isValid()) return Core::FunctionReplyObject(m_data.id(), tr_lts("dds", "Trying to update an already removed Presentation object")); m_data.fileStatus(request.fileStatus()); m_data.operatorId(request.operatorId()); m_data.lastModified(request.lastModified()); Database::PrePresentation dbData(toDbData(m_data)); if (!m_mainHandler->db()->update(dbData)) return Core::FunctionReplyObject(m_data.id(), tr_lts("dds", "Error updating Presentation-data into database")); // Publish Data via DTS onPublishData(); return Core::FunctionReplyObject(m_data.id()); } //------------------------------------------------------------------------------------------------------------ void ObjectPresentation::onPublishData() { INFO_LOG(m_logger) << "Publish Presentation-data to dds (" << m_data.id() << ") ..."; m_mainHandler->dds()->dts()->publish(m_data); } // ------------------------------------------------------------------------------------------------------- // convert methods // ------------------------------------------------------------------------------------------------------- // PresentationManagement::Presentation => Database::PrePresentation Database::PrePresentation ObjectPresentation::toDbData(const Presentation &ddsData) { Database::PrePresentation dbData; dbData.id = ddsData.id(); dbData.name = QString::fromStdString(ddsData.name()); dbData.description = QString::fromStdString(ddsData.description()); dbData.lastModified = ddsData.lastModified(); dbData.operatorId = ddsData.operatorId(); dbData.fileStatusId = ddsData.fileStatus(); return dbData; } // ------------------------------------------------------------------------------------------------------- // Database::PrePresentation => PresentationManagement::Presentation Presentation ObjectPresentation::toDdsData(const Database::PrePresentation &dbData) { Presentation ddsData; ddsData.id(dbData.id); ddsData.name(dbData.name.toStdString()); ddsData.description(dbData.description.toStdString()); ddsData.operatorId(dbData.operatorId); ddsData.lastModified(dbData.lastModified); ddsData.fileStatus(dbData.fileStatusId); // init data not in db ddsData.isDeleted(false); ddsData.isUsed(false); return ddsData; } Database::PrePresentationContent ObjectPresentation::toDbData(const PresentationContent &ddsData) { Database::PrePresentationContent dbData; dbData.id = ddsData.id(); dbData.presentationId = ddsData.presentationId(); dbData.presentationTopicType = QString::fromStdString(ddsData.presentationTopicType()); dbData.channel = QString::fromStdString(ddsData.channel()); dbData.description = QString::fromStdString(ddsData.description()); dbData.duration = ddsData.duration(); dbData.startTime = ddsData.startTime(); dbData.attributes = QString::fromStdString(ddsData.attributes()); dbData.x = ddsData.x(); dbData.y = ddsData.y(); dbData.width = ddsData.width(); dbData.height = ddsData.height(); dbData.index = ddsData.index(); return dbData; } PresentationContent ObjectPresentation::toDdsData(const Database::PrePresentationContent &dbData) { PresentationContent ddsData; ddsData.id(dbData.id); ddsData.presentationId(dbData.presentationId); ddsData.presentationTopicType(dbData.presentationTopicType.toStdString()); ddsData.channel(dbData.channel.toStdString()); ddsData.description(dbData.description.toStdString()); ddsData.startTime(dbData.startTime); ddsData.attributes(dbData.attributes.toStdString()); ddsData.duration(dbData.duration); ddsData.x(dbData.x); ddsData.y(dbData.y); ddsData.width(dbData.width); ddsData.height(dbData.height); ddsData.index(dbData.index); return ddsData; } } // namespace PresentationManagement