269 lines
9.0 KiB
C++
Executable File
269 lines
9.0 KiB
C++
Executable File
/**
|
|
* @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 <ngldb/dbtransaction.h>
|
|
|
|
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
|