Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

@@ -0,0 +1,242 @@
/**
* @RDE_HEADER@
* ISM Handler Mounting Point Schedule
* $Id$
* $HeadURL$
* $Author$
* Created by Iuliana Ojog, SLSE, 2016-11-26
*/
#include "handler_main_schedule.h"
#include "object_main_schedule.h"
#include "main_handler.h"
#include "convert_db_to_dds.h"
#include "handler_main_structure_element.h"
#include "object_structure_element.h"
#include <InfrastructureManagement/ism_db.h>
#include <NGLLogger/NGLLoggerBootstrap.h>
using namespace InfrastructureManagement;
//--------------------------------------------------------------------------------------------------------------------------------------------------
HandlerMainSchedule::HandlerMainSchedule(MainHandler *mainHandler)
: Base(mainHandler, getLogger("HandlerMainSchedule"))
, Interface::Fts::MainScheduleModifyRequestHandler(mainHandler->dds()->fts())
, Interface::Fts::MainScheduleCopyRequestHandler(mainHandler->dds()->fts())
, Interface::Fts::MainScheduleRemoveRequestHandler(mainHandler->dds()->fts())
, Interface::Fts::MountingPointPlanModifyRequestHandler(mainHandler->dds()->fts())
, m_mainHandler(mainHandler)
{
connect(db().get(), &DatabaseInterface::notifyInsertMainSchedule, this, &HandlerMainSchedule::onDbInsertedSchedule);
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
HandlerMainSchedule::~HandlerMainSchedule()
{
qDeleteAll(m_objectMainScheduleMap);
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
bool HandlerMainSchedule::init()
{
bool bRet = true;
auto cbMps = [this, &bRet] (const Database::IsmMountingPointSchedule &data)
{
InfrastructureManagement::MainSchedule ddsData = ObjectMainSchedule::toDdsData(data);
ObjectMainSchedule *ifs(new ObjectMainSchedule(m_mainHandler));
Core::FunctionReplyObject ret = ifs->createObject(ddsData);
if (ret.error())
{
delete ifs;
ERROR_LOG(m_logger) << ret();
bRet = false;
return;
}
m_objectMainScheduleMap.insert(ifs->getId(), ifs);
DEBUG_LOG(m_logger) << "MainSchedule Id = " << ifs->getId();
};
// create Mounting Point Schedule objects
if (!db()->select(cbMps) || !bRet)
{
ERROR_LOG(m_logger) << "Error reading data from database!";
return false;
}
for (ObjectMainSchedule * ifs : m_objectMainScheduleMap)
{
ifs->loadMountingPointPlans();
}
return true;
}
//--------------------------------------------------------------------------------------------------
void HandlerMainSchedule::onMainScheduleModifyRequest(const rti::core::SampleIdentity &cookie,
const MainScheduleModifyRequest &request)
{
DEBUG_LOG(m_logger) << "onMainScheduleModifyRequest: " << request;
const Core::FunctionReplyObject ret = request.id() > 0 ? mainScheduleModify(request) : mainScheduleCreate(request);
if (ret.error())
WARNING_LOG(m_logger) << ret();
m_mainHandler->dds()->fts()->mainScheduleModifyReply(cookie, ret);
}
//--------------------------------------------------------------------------------------------------
void HandlerMainSchedule::onMainScheduleCopyRequest(const rti::core::SampleIdentity &cookie,
const MainScheduleCopyRequest &request)
{
DEBUG_LOG(m_logger) << "onMainScheduleCopyRequest: " << request;
Core::FunctionReplyObject ret;
if (request.id() > 0)
{
ObjectMainSchedule ifs(m_mainHandler);
ret = ifs.copyObject(request.id());
onDbInsertedSchedule(ifs.getId()); // because notification is not emitted in this case
}
if (ret.error())
WARNING_LOG(m_logger) << ret();
m_mainHandler->dds()->fts()->mainScheduleCopyReply(cookie, ret);
}
//--------------------------------------------------------------------------------------------------
// ---- .elements() are explicitely NOT changed with this method ----
static MainSchedule convert(const MainScheduleModifyRequest &request)
{
MainSchedule ddsData;
ddsData.id(request.id());
ddsData.name(request.name());
ddsData.statusId(request.statusId());
ddsData.timeCreated(request.timeCreated());
ddsData.timeStart(request.timeStart());
ddsData.timeEnd(request.timeEnd());
ddsData.exerciseId(request.exerciseId());
ddsData.description(request.description());
return ddsData;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
// ---- .elements() are explicitely NOT changed with this method ----
Core::FunctionReplyObject HandlerMainSchedule::mainScheduleCreate(const InfrastructureManagement::MainScheduleModifyRequest &request)
{
ObjectMainSchedule *ifs(new ObjectMainSchedule(m_mainHandler));
Core::FunctionReplyObject ret = ifs->createObject(convert(request));
if (ret.error())
delete ifs;
else
{
ifs->loadMountingPointPlans();
m_objectMainScheduleMap.insert(ifs->getId(), ifs);
}
return ret;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
// ---- .elements() are explicitely NOT changed with this method ----
Core::FunctionReplyObject HandlerMainSchedule::mainScheduleModify(const InfrastructureManagement::MainScheduleModifyRequest &request)
{
ObjectMainSchedule *ifs = m_objectMainScheduleMap.value(request.id());
if (ifs == nullptr)
return Core::FunctionReplyObject(request.id(), tr_lts("dds", "MainSchedule with id %1 not found")).arg(request.id());
return ifs->updateObject(convert(request));;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
void HandlerMainSchedule::onMainScheduleRemoveRequest(const rti::core::SampleIdentity &cookie,
const Core::RemoveElementRequest &request)
{
Core::FunctionReplyObject ret;
ObjectMainSchedule *ifs = m_objectMainScheduleMap.value(request.id());
if (ifs == nullptr)
{
ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "MainSchedule with id %1 not found")).arg(request.id());
m_mainHandler->dds()->fts()->mainScheduleRemoveReply(cookie, ret);
return;
}
if (m_mainHandler->dds()->topicLockMaster()->isLocked(ifs->getData(), m_mainHandler->exerciseId()))
{
ret = Core::FunctionReplyObject(request.id(), tr_lts("dds", "MainSchedule '%1' is used by another user!")).arg(ifs->getName());
m_mainHandler->dds()->fts()->mainScheduleRemoveReply(cookie, ret);
return;
}
ret = ifs->removeObject();
if (ret.error())
ERROR_LOG(m_logger) << ret();
else
{
delete ifs;
m_objectMainScheduleMap.remove(request.id());
}
m_mainHandler->dds()->fts()->mainScheduleRemoveReply(cookie, ret);
}
//--------------------------------------------------------------------------------------------------------------------------------------
void HandlerMainSchedule::onMountingPointPlanModifyRequest(const rti::core::SampleIdentity &cookie,
const InfrastructureManagement::MountingPointPlanModifyRequest &request)
{
DEBUG_LOG(m_logger) << "onMountingPointPlanModifyRequest: " << request;
const Core::FunctionReplyObject ret = mountingPointPlanModify(request);
if (ret.error())
WARNING_LOG(m_logger) << ret();
m_mainHandler->dds()->fts()->mountingPointPlanModifyReply(cookie, ret);
}
Core::FunctionReplyObject HandlerMainSchedule::mountingPointPlanModify(const InfrastructureManagement::MountingPointPlanModifyRequest &request)
{
ObjectMainSchedule *ifs = m_objectMainScheduleMap.value(request.mountingPointScheduleId());
if (ifs == nullptr)
return Core::FunctionReplyObject(request.mountingPointScheduleId(), tr_lts("dds", "MainSchedule with id %1 not found")).arg(request.mountingPointScheduleId());
return ifs->updateElements(request.mountingPointPlans());
}
//----------------------------------------------------------------------------------------------------------------------------
void HandlerMainSchedule::onDbInsertedSchedule(const QVariant &id_)
{
int id = id_.toInt();
NOTICE_LOG(m_logger) << "DB inserted Schedule with id: " << id;
if (!m_objectMainScheduleMap.contains(id))
initByDbId(id);
}
//----------------------------------------------------------------------------------------------------------------------------
bool HandlerMainSchedule::initByDbId(int dbId)
{
Database::IsmMountingPointSchedule msData;
DEBUG_LOG(m_logger) << "Reading Schedule from database!";
if (!db()->selectIsmMountingPointSchedule(dbId, msData))
{
ERROR_LOG(m_logger) << "Error reading schedule data from database: id not found " << dbId;
return false;
}
if (msData.id != dbId)
return false;
// create object
ObjectMainSchedule *ifs(new ObjectMainSchedule(m_mainHandler));
Core::FunctionReplyObject ret = ifs->createObject(Database::convert(msData));
if (ret.error())
{
delete ifs;
ERROR_LOG(m_logger) << ret();
return false;
}
m_objectMainScheduleMap.insert(ifs->getId(), ifs);
return true;
}
std::vector<MountingPointPlan> HandlerMainSchedule::getMountingPointPlans(int scheduleId) const
{
if (!getMainSchedule(scheduleId))
return {};
return getMainSchedule(scheduleId)->getData().elements();
}