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

+163
View File
@@ -0,0 +1,163 @@
#
# $Id$
# $HeadURL$
# $Author$
#
INCLUDE(MacroRTIDDSGen)
INCLUDE(MacroCodeGenIdl)
SET(xml_FILE flt_service.xml)
#
# --- Library svcFltCommon --------------------------------------------------------------------------------
#
SET(SRCS_common
flt_export.h
logger.cpp
logger.h
)
# Generate flt_enums.idl / flt.idl
CODEGEN_IDL_SVC(SRCS_common ${xml_FILE})
# Generate flt_db_impl.cpp/.h, flt_db.h
CODEGEN_DATABASE(SRCS_common ${xml_FILE})
# Generate *.cpp/*.hpp from idl
RTIDDSGEN(SRCS_common flt_enums.idl)
RTIDDSGEN(SRCS_common flt.idl)
# Generate flt_dt[s,c]_types.h, flt_ft[s,c]_types.h
CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE})
# Generate flt_[d|f]tc.h
CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE})
NGL_ADD_LIBRARY(AAR SV WS svcFltCommon SHARED ${SRCS_common})
NGL_TARGET_INCLUDE_DIRECTORIES(svcFltCommon
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
)
NGL_TARGET_LINK_LIBRARIES(svcFltCommon
PRIVATE
RTI::nddscpp2
PUBLIC
Qt5::Core
ngldb
ddscore
NGLLogger
)
NGL_INSTALL_TARGET(svcFltCommon)
#
# --- Library svcFltClient --------------------------------------------------------------------------------
#
SET(SRCS_client
flt_export.h
)
# generate flt_[d|f]tc.h, flt_[d|f]tc_impl.[cpp|h]
CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE})
NGL_ADD_LIBRARY(AAR SV WS svcFltClient SHARED ${SRCS_client})
NGL_TARGET_INCLUDE_DIRECTORIES(svcFltClient
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
)
NGL_TARGET_LINK_LIBRARIES(svcFltClient
PRIVATE
RTI::nddscpp2
ddsconnector
PUBLIC
svcFltCommon
ddsftc
)
NGL_INSTALL_TARGET(svcFltClient)
#
# --- Library svcFltServer --------------------------------------------------------------------------------
#
SET(SRCS_server
dds_handler.cpp
dds_handler.h
flt_export.h
handler_aes_filter.cpp
handler_aes_filter.h
handler_building_component_filter.cpp
handler_building_component_filter.h
handler_filter_data_update.cpp
handler_filter_data_update.h
handler_symbol_appearance.cpp
handler_symbol_appearance.h
initialization.cpp
initialization.h
# settings.cpp
# settings.h
${xml_FILE}
)
# generate flt_[d|f]ts.h, flt_[d|f]ts_impl.[cpp|h]
CODEGEN_SERVER_TOPICS(SRCS_server ${xml_FILE})
# Generate flt.sql, flt.xml
CODEGEN_SQL(SRCS_server ${xml_FILE})
NGL_ADD_LIBRARY(AAR SV svcFltServer SHARED ${SRCS_server})
NGL_TARGET_INCLUDE_DIRECTORIES(svcFltServer
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
)
NGL_TARGET_LINK_LIBRARIES(svcFltServer
PRIVATE
Qt5::Core
RTI::nddscpp2
ddsconnector
ddsfts
NGLLogger
svcCoreClient
PUBLIC
nglsettings
ngltools
svcFltCommon
ngldb
)
NGL_INSTALL_TARGET(svcFltServer)
#
# --- Topic Type Plugin --------------------------------------------------------------
#
CREATE_TOPIC_TYPE_PLUGIN(${xml_FILE})
#
# --- Executable -------------------------------------------------
#
SET(SRCS_exe
main.cpp
main_handler.cpp
main_handler.h
# compile again:
settings.cpp
settings.h
)
NGL_ADD_SVC_ICON(SRCS_exe)
NGL_ADD_EXECUTABLE(AAR SV svcFilterManagement ${SRCS_exe} ${HDRS_exe})
NGL_TARGET_LINK_LIBRARIES(svcFilterManagement
Qt5::Network
nglcoreapplication
ProjectConfig
NGLLogger
LtsCommandLineParser
svcCoreClient
svcFltServer
)
NGL_INSTALL_TARGET(svcFilterManagement)
NGL_ADD_TARGET_LINK(svcFilterManagement sFLT)
# Uncomment if necessary
#ADD_SUBDIRECTORY(UnitTests)
#ADD_SUBDIRECTORY(ModuleTests)
+76
View File
@@ -0,0 +1,76 @@
/**
* DdsHandler for DDS
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLSE, 2015-09-02
*/
#include "dds_handler.h"
#include <DDS/Core/pacemaker.h>
namespace FilterManagement
{
DdsHandler::DdsHandler(int domainId, int partitionId, IDL::PartitionType partitionType)
: m_ddsConnector(std::make_shared<DDSConnector::DdsConnector>(domainId, partitionType, partitionId))
, m_logger(getLogger("DdsHandler"))
{
FATAL_LOG(m_logger) << "DdsHandler of domainId, partitionId ... (" << m_ddsConnector->getDomainId() << ") for partition: " << m_ddsConnector->getDefaultPartition();
}
DdsHandler::DdsHandler(const std::shared_ptr<DDSConnector::DdsConnector> &ddsConnector)
: m_ddsConnector(ddsConnector)
, m_logger(getLogger("DdsHandler"))
{
FATAL_LOG(m_logger) << "DdsHandler of ddsConnector (" << m_ddsConnector->getDomainId() << ") for partition: " << m_ddsConnector->getDefaultPartition();
}
bool DdsHandler::init(const QStringList &qosFileList)
{
FATAL_LOG(m_logger) << " START, this=" << this;
if (!m_ddsConnector->init(qosFileList))
{
ERROR_LOG(m_logger) << "Error initializing dds connections - aborting";
return false;
}
// default initialize Publisher and Subscriber
m_ddsConnector->initPublisherSubscriber();
// Pacemaker
if(ddsConnector()->getPartitionId() == 0)
m_pacemaker = new Core::Pacemaker(m_ddsConnector);
m_ddsDts = FilterManagement::Interface::Dts::create(m_ddsConnector);
m_ddsFts = FilterManagement::Interface::Fts::create(m_ddsConnector);
bool bRet = m_ddsDts->enableAll();
FATAL_LOG(m_logger) << "Dts initialised";
bRet &= m_ddsFts->enableAll();
FATAL_LOG(m_logger) << "Fts initialised";
FATAL_LOG(m_logger) << " END, this=" << this;
return bRet;
}
void DdsHandler::setRunningState(Core::RunningState rs)
{
if (!m_pacemaker)
return;
m_pacemaker->setNewState(rs);
}
void DdsHandler::addPortToPacemaker(quint16 port, Core::PortType type)
{
if (!m_pacemaker)
return;
m_pacemaker->addPort(port, type);
}
} // Namespace PDM
+52
View File
@@ -0,0 +1,52 @@
/**
* DdsHandler for DDS
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLSE, 2015-09-02
*/
#pragma once
#include <DDS/DDSConnector/dds_connector.h>
#include <DDS/Core/topic_lock_master.h>
#include <FilterManagement/flt_dts.h>
#include <FilterManagement/flt_fts.h>
#include "logger.h"
class QThread;
namespace Core
{
class Pacemaker;
}
namespace FilterManagement
{
class FLT_SERVER_EXPORT DdsHandler final
{
public:
explicit DdsHandler(int domainId, int partitionId, IDL::PartitionType partitionType);
explicit DdsHandler(const std::shared_ptr<DDSConnector::DdsConnector> &ddsConnector);
~DdsHandler() = default;
bool init(const QStringList &qosFileList = QStringList());
void setRunningState(Core::RunningState rs);
void addPortToPacemaker(quint16 port, Core::PortType type);
std::shared_ptr<FilterManagement::Interface::Dts> dts() const { return m_ddsDts; }
std::shared_ptr<FilterManagement::Interface::Fts> fts() const { return m_ddsFts; }
std::shared_ptr<DDSConnector::DdsConnector> ddsConnector() const { return m_ddsConnector; }
private:
std::shared_ptr<DDSConnector::DdsConnector> m_ddsConnector;
std::shared_ptr<FilterManagement::Interface::Dts> m_ddsDts;
std::shared_ptr<FilterManagement::Interface::Fts> m_ddsFts;
Core::Pacemaker *m_pacemaker{nullptr};
NGL::INGLLogger &m_logger;
};
} // namespace FilterManagement
+52
View File
@@ -0,0 +1,52 @@
/**
* Export definitions
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLSE, 2015-08-04
*/
#pragma once
#include <QtCore/qglobal.h>
#ifndef FLT_COMMON_EXPORT
# ifdef BUILD_STATIC_LIBRARIES
# define FLT_COMMON_EXPORT
# else
# if defined(MAKE_SVCFLTCOMMON_LIB)
# define FLT_COMMON_EXPORT Q_DECL_EXPORT
# ifndef WIN32
# ifdef NDDSUSERDllExport
# undef NDDSUSERDllExport
# endif
# define NDDSUSERDllExport Q_DECL_EXPORT
# endif
# else
# define FLT_COMMON_EXPORT Q_DECL_IMPORT
# endif
# endif
#endif
#ifndef FLT_CLIENT_EXPORT
# ifdef BUILD_STATIC_LIBRARIES
# define FLT_CLIENT_EXPORT
# else
# if defined(MAKE_SVCFLTCLIENT_LIB)
# define FLT_CLIENT_EXPORT Q_DECL_EXPORT
# else
# define FLT_CLIENT_EXPORT Q_DECL_IMPORT
# endif
# endif
#endif
#ifndef FLT_SERVER_EXPORT
# ifdef BUILD_STATIC_LIBRARIES
# define FLT_SERVER_EXPORT
# else
# if defined(MAKE_SVCFLTSERVER_LIB)
# define FLT_SERVER_EXPORT Q_DECL_EXPORT
# else
# define FLT_SERVER_EXPORT Q_DECL_IMPORT
# endif
# endif
#endif
+136
View File
@@ -0,0 +1,136 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<service namespace="FilterManagement" abbreviation="FLT" procNames="FilterManagement" exerciseDependency="Global,Exercise" groups="Core" prio="4">
<rcs>
<Id Id="$Id$"/>
<HeadURL HeadURL="$HeadURL$"/>
<Author Author="$Author$"/>
</rcs>
<operatorRights offset="14">
<guiPlugin name="FilterManagement" offset="1">
<operatorRightGroup name="AES Filter" description="Edit Area Effect Simulation Filter">
<operatorRight right="AesFilterEdit" value="1" description="Edit Area Effect Simulation Filter"/>
</operatorRightGroup>
<operatorRightGroup name="Symbol Appearance Filter" description="Edit Symbol Appearance">
<operatorRight right="SymbolAppearanceEdit" value="2" description="Edit Symbol Appearance"/>
</operatorRightGroup>
</guiPlugin>
</operatorRights>
<topicTypes>
<topicType name="AesFilter" isDataObject="1" routeToClient="1" routeToServer="0" routeInReplay="1" recordTopic="1">
<column name="id" idlType="long" isKey="1"/>
<column name="operatorId" idlType="long"/>
<column name="sampleTime" idlType="long long"/>
<column name="content" idlType="string"/>
<column name="ctx" idlType="string"/>
</topicType>
<topicType name="BuildingComponentFilter" isDataObject="1" routeToClient="1" routeToServer="0" routeInReplay="1" recordTopic="1">
<column name="id" idlType="long" isKey="1"/>
<column name="operatorId" idlType="long"/>
<column name="sampleTime" idlType="long long"/>
<column name="content" idlType="string"/>
<column name="ctx" idlType="string"/>
</topicType>
<topicType name="FilterData" isDataObject="1" routeToClient="1" routeToServer="0" routeInReplay="1" baseValueType="TriggerFilterData">
<column name="screenTypeId" idlType="long"/>
<column name="screenId" idlType="long"/>
<column name="screenContainerId" idlType="long"/>
<column name="aesFilterContent" idlType="string"/>
<column name="buildingComponentsFilterContent" idlType="string"/>
<column name="symbolAppearanceContent" idlType="string"/>
<column name="operatorMapSettingsContent" idlType="string"/>
</topicType>
<topicType name="SymbolAppearance" isDataObject="1" routeToClient="1" routeToServer="0" routeInReplay="1" recordTopic="1">
<column name="id" idlType="long" isKey="1"/>
<column name="operatorId" idlType="long"/>
<column name="sampleTime" idlType="long long"/>
<column name="content" idlType="string"/>
<column name="ctx" idlType="string"/>
</topicType>
<topicType name="TriggerFilterData" isDataObject="1" routeToClient="1" routeToServer="0" routeInReplay="1">
<column name="id" idlType="long" isKey="1"/>
<column name="operatorId" idlType="long"/>
<column name="requestTime" idlType="long long"/>
</topicType>
</topicTypes>
<functionTopics>
<functionTopic name="AesFilterUpdate" requestTopicType="AesFilter" replyTopicType="Core::FunctionReply" requestTopicName="AesFilterUpdateRequest" replyTopicName="AesFilterUpdateReply" routeInReplay="1"/>
<functionTopic name="BuildingComponentFilterUpdate" requestTopicType="BuildingComponentFilter" replyTopicType="Core::FunctionReply" requestTopicName="BuildingComponentFilterUpdateRequest" replyTopicName="BuildingComponentFilterUpdateReply" routeInReplay="1"/>
<functionTopic name="FilterDataUpdate" requestTopicType="FilterData" replyTopicType="Core::FunctionReply" requestTopicName="FilterDataUpdateRequest" replyTopicName="FilterDataUpdateReply" routeInReplay="1"/>
<functionTopic name="SymbolAppearanceUpdate" requestTopicType="SymbolAppearance" replyTopicType="Core::FunctionReply" requestTopicName="SymbolAppearanceUpdateRequest" replyTopicName="SymbolAppearanceUpdateReply" routeInReplay="1"/>
<functionTopic name="TriggerFilterDataUpdate" requestTopicType="TriggerFilterData" replyTopicType="Core::FunctionReply" requestTopicName="TriggerFilterDataUpdateRequest" replyTopicName="TriggerFilterDataUpdateReply" routeInReplay="1"/>
</functionTopics>
<tables>
<table name="flt_aes_filter">
<column name="id" datatype="integer" isPrimaryKey="1">
<sequence start="1" increment="1"/>
</column>
<column name="operator_id" datatype="integer" isForeignKey="1"/>
<column name="content" datatype="text"/>
<column name="ctx" datatype="text"/>
<constraint name="UQ_aes_filter_id" type="unique">
<column name="id"/>
</constraint>
<constraint name="UQ_flt_aes_filter_operator_id" type="unique">
<column name="operator_id"/>
<column name="ctx"/>
</constraint>
<foreignKey name="FK_aes_filter_opm_operator">
<source table="flt_aes_filter" column="operator_id"/>
<destination service="OperatorManagement" serviceAbbr="opm" schema="opm" table="opm_operator" column="id"/>
</foreignKey>
</table>
<table name="flt_building_component_settings">
<column name="id" datatype="integer" isPrimaryKey="1">
<sequence start="1" increment="1"/>
</column>
<column name="operator_id" datatype="integer" isForeignKey="1"/>
<column name="content" datatype="text"/>
<column name="ctx" datatype="text"/>
<constraint name="UQ_flt_building_component_settings_id" type="unique">
<column name="id"/>
</constraint>
<constraint name="UQ_flt_building_component_settings_id" type="unique">
<column name="operator_id"/>
<column name="ctx"/>
</constraint>
<foreignKey name="FK_flt_building_component_settings_opm_operator">
<source table="flt_building_component_settings" column="operator_id"/>
<destination service="OperatorManagement" serviceAbbr="opm" schema="opm" table="opm_operator" column="id"/>
</foreignKey>
</table>
<table name="flt_symbol_appearance">
<column name="id" datatype="integer" isPrimaryKey="1">
<sequence start="1" increment="1"/>
</column>
<column name="operator_id" datatype="integer" isForeignKey="1"/>
<column name="content" datatype="text"/>
<column name="ctx" datatype="text"/>
<constraint name="UQ_flt_symbol_appearance_id" type="unique">
<column name="id"/>
</constraint>
<constraint name="UQ_flt_symbol_appearance_operator_id" type="unique">
<column name="operator_id"/>
<column name="ctx"/>
</constraint>
<foreignKey name="FK_flt_symbol_appearance_opm_operator">
<source table="flt_symbol_appearance" column="operator_id"/>
<destination service="OperatorManagement" serviceAbbr="opm" schema="opm" table="opm_operator" column="id"/>
</foreignKey>
</table>
</tables>
<views/>
<dbServiceStructs>
<serviceStruct name="AesFilter" table="flt_aes_filter"/>
<serviceStruct name="BuildingComponentFilter" table="flt_building_component_settings"/>
<serviceStruct name="SymbolAppearance" table="flt_symbol_appearance"/>
<table name="flt_aes_filter"/>
<table name="flt_building_component_settings"/>
<table name="flt_symbol_appearance"/>
</dbServiceStructs>
<enumerations>
<enumeration name="DummyEnum">
<attribute key="val1" value="1"/>
<attribute key="val2" value="2"/>
</enumeration>
</enumerations>
</service>
+125
View File
@@ -0,0 +1,125 @@
/**
* @RDE_HEADER@
* Handle aes filter data
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2017-06-16
*/
#include "handler_aes_filter.h"
#include "dds_handler.h"
#include "initialization.h"
namespace FilterManagement
{
HandlerAesFilter::HandlerAesFilter(Initialization *mainHandler)
: Interface::Fts::AesFilterUpdateRequestHandler(mainHandler->dds()->fts())
, m_mainHandler(mainHandler)
, m_logger(getLogger("HandlerAesFilter"))
{
}
HandlerAesFilter::~HandlerAesFilter()
{
cleanup();
}
bool HandlerAesFilter::init()
{
cleanup();
const auto cb = [this](const Database::AesFilter &data)
{
FilterManagement::AesFilter *ddsData(new FilterManagement::AesFilter(data.id,
data.operatorId,
QDateTime::currentMSecsSinceEpoch(),
data.content.toStdString(),
data.ctx.toStdString()));
m_aesFilterMap.insert(key(data.operatorId, data.ctx), ddsData);
dds()->dts()->publish(*ddsData);
};
// read all file types from database
if (!db()->select(cb))
{
ERROR_LOG(m_logger) << "Error reading data from database!";
return false;
}
return true;
}
void HandlerAesFilter::cleanup()
{
DDSConnector::CoherentSet cs(dds()->ddsConnector());
auto dts = dds()->dts();
for (auto it = m_aesFilterMap.cbegin(); it != m_aesFilterMap.cend(); ++it)
{
dts->removeAesFilterByKey(it.value()->id());
delete it.value();
}
m_aesFilterMap.clear();
}
void HandlerAesFilter::onAesFilterUpdateRequest(const rti::core::SampleIdentity &cookie,
const AesFilter &request)
{
DEBUG_LOG(m_logger) << "onAesFilterUpdateRequest: " << request;
auto ret = aesFilterUpdateRequest(request);
if (ret.error())
WARNING_LOG(m_logger) << ret();
dds()->fts()->aesFilterUpdateReply(cookie, ret);
}
Core::FunctionReplyObject HandlerAesFilter::aesFilterUpdateRequest(const AesFilter &request)
{
Database::AesFilter dbFilter;
dbFilter.operatorId = request.operatorId();
dbFilter.content = QString::fromStdString(request.content());
dbFilter.ctx = QString::fromStdString(request.ctx());
const key k(dbFilter.operatorId, dbFilter.ctx);
auto it = m_aesFilterMap.find(k);
if (it == m_aesFilterMap.end())
{
// new entry
dbFilter.id = 0;
if (!db()->insert(dbFilter))
return Core::FunctionReplyObject(dbFilter.operatorId, tr_lts("dds", "Can not insert AesFilter into database"));
AesFilter *ptr = new AesFilter(request);
ptr->sampleTime(QDateTime::currentMSecsSinceEpoch());
ptr->id(dbFilter.id);
m_aesFilterMap.insert(k, ptr);
it = m_aesFilterMap.find(k);
}
else
{
// already exists
dbFilter.id = it.value()->id();
dbFilter.operatorId = it.value()->operatorId();
if (!db()->update(dbFilter))
return Core::FunctionReplyObject(dbFilter.operatorId, tr_lts("dds", "Error updating AesFilter in database"));
it.value()->sampleTime(QDateTime::currentMSecsSinceEpoch());
it.value()->content(request.content());
}
dds()->dts()->publish(*it.value());
return Core::FunctionReplyObject();
}
std::shared_ptr<DatabaseInterface> HandlerAesFilter::db() const
{
return m_mainHandler->db();
}
std::shared_ptr<DdsHandler> HandlerAesFilter::dds() const
{
return m_mainHandler->dds();
}
} // namespace FilterManagement
+61
View File
@@ -0,0 +1,61 @@
/**
* @RDE_HEADER@
* Handle aes filter data
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2017-06-16
*/
#pragma once
#include <QMap>
#include <FilterManagement/flt_fts.h>
#include "logger.h"
namespace FilterManagement
{
class DatabaseInterface;
class DdsHandler;
class Initialization;
class HandlerAesFilter final
: protected Interface::Fts::AesFilterUpdateRequestHandler
{
public:
explicit HandlerAesFilter(Initialization *mainHandler);
~HandlerAesFilter();
bool init();
private:
void cleanup();
void onAesFilterUpdateRequest(const rti::core::SampleIdentity &cookie,
const AesFilter &request) override;
Core::FunctionReplyObject aesFilterUpdateRequest(const AesFilter &request);
std::shared_ptr<DatabaseInterface> db() const;
std::shared_ptr<DdsHandler> dds() const;
private:
struct key
{
int operatorId = 0;
QString ctx;
bool operator<(const key &o) const
{
if (operatorId != o.operatorId)
return operatorId < o.operatorId;
return ctx < o.ctx;
}
key() = default;
explicit key(int _operatorId, const QString &_ctx)
: operatorId(_operatorId)
, ctx(_ctx)
{}
};
QMap<key, AesFilter *> m_aesFilterMap;
Initialization *m_mainHandler;
LOGGER_T m_logger;
};
}
@@ -0,0 +1,125 @@
/**
* @RDE_HEADER@
* Handle aes filter data
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2017-06-16
*/
#include "handler_building_component_filter.h"
#include "dds_handler.h"
#include "initialization.h"
namespace FilterManagement
{
HandlerBuildingComponentFilter::HandlerBuildingComponentFilter(Initialization *mainHandler)
: Interface::Fts::BuildingComponentFilterUpdateRequestHandler(mainHandler->dds()->fts())
, m_mainHandler(mainHandler)
, m_logger(getLogger("HandlerBuildingComponentFilter"))
{
}
HandlerBuildingComponentFilter::~HandlerBuildingComponentFilter()
{
cleanup();
}
bool HandlerBuildingComponentFilter::init()
{
cleanup();
const auto cb = [this](const Database::BuildingComponentFilter &data)
{
FilterManagement::BuildingComponentFilter *ddsData(new FilterManagement::BuildingComponentFilter(data.id,
data.operatorId,
QDateTime::currentMSecsSinceEpoch(),
data.content.toStdString(),
data.ctx.toStdString()));
m_buildingComponentFilterMap.insert(key(data.operatorId, data.ctx), ddsData);
dds()->dts()->publish(*ddsData);
};
// read all file types from database
if (!db()->select(cb))
{
ERROR_LOG(m_logger) << "Error reading data from database!";
return false;
}
return true;
}
void HandlerBuildingComponentFilter::cleanup()
{
DDSConnector::CoherentSet cs(dds()->ddsConnector());
auto dts = dds()->dts();
for (auto it = m_buildingComponentFilterMap.cbegin(); it != m_buildingComponentFilterMap.cend(); ++it)
{
dts->removeBuildingComponentFilterByKey(it.value()->id());
delete it.value();
}
m_buildingComponentFilterMap.clear();
}
void HandlerBuildingComponentFilter::onBuildingComponentFilterUpdateRequest(const rti::core::SampleIdentity &cookie,
const BuildingComponentFilter &request)
{
DEBUG_LOG(m_logger) << "onBuildingComponentFilterUpdateRequest: " << request;
auto ret = BuildingComponentFilterUpdateRequest(request);
if (ret.error())
WARNING_LOG(m_logger) << ret();
dds()->fts()->buildingComponentFilterUpdateReply(cookie, ret);
}
Core::FunctionReplyObject HandlerBuildingComponentFilter::BuildingComponentFilterUpdateRequest(const BuildingComponentFilter &request)
{
Database::BuildingComponentFilter dbFilter;
dbFilter.operatorId = request.operatorId();
dbFilter.content = QString::fromStdString(request.content());
dbFilter.ctx = QString::fromStdString(request.ctx());
const key k(dbFilter.operatorId, dbFilter.ctx);
auto it = m_buildingComponentFilterMap.find(k);
if (it == m_buildingComponentFilterMap.end())
{
// new entry
dbFilter.id = 0;
if (!db()->insert(dbFilter))
return Core::FunctionReplyObject(dbFilter.operatorId, tr_lts("dds", "Can not insert BuildingComponentFilter into database"));
BuildingComponentFilter *ptr = new BuildingComponentFilter(request);
ptr->sampleTime(QDateTime::currentMSecsSinceEpoch());
ptr->id(dbFilter.id);
m_buildingComponentFilterMap.insert(k, ptr);
it = m_buildingComponentFilterMap.find(k);
}
else
{
// already exists
dbFilter.id = it.value()->id();
dbFilter.operatorId = it.value()->operatorId();
if (!db()->update(dbFilter))
return Core::FunctionReplyObject(dbFilter.operatorId, tr_lts("dds", "Error updating BuildingComponentFilter in database"));
it.value()->sampleTime(QDateTime::currentMSecsSinceEpoch());
it.value()->content(request.content());
}
dds()->dts()->publish(*it.value());
return Core::FunctionReplyObject();
}
std::shared_ptr<DatabaseInterface> HandlerBuildingComponentFilter::db() const
{
return m_mainHandler->db();
}
std::shared_ptr<DdsHandler> HandlerBuildingComponentFilter::dds() const
{
return m_mainHandler->dds();
}
} // namespace FilterManagement
@@ -0,0 +1,61 @@
/**
* @RDE_HEADER@
* Handle aes filter data
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2017-06-16
*/
#pragma once
#include <QMap>
#include <FilterManagement/flt_fts.h>
#include "logger.h"
namespace FilterManagement
{
class DatabaseInterface;
class DdsHandler;
class Initialization;
class HandlerBuildingComponentFilter final
: protected Interface::Fts::BuildingComponentFilterUpdateRequestHandler
{
public:
explicit HandlerBuildingComponentFilter(Initialization *mainHandler);
~HandlerBuildingComponentFilter();
bool init();
private:
void cleanup();
void onBuildingComponentFilterUpdateRequest(const rti::core::SampleIdentity &cookie,
const BuildingComponentFilter &request) override;
Core::FunctionReplyObject BuildingComponentFilterUpdateRequest(const BuildingComponentFilter &request);
std::shared_ptr<DatabaseInterface> db() const;
std::shared_ptr<DdsHandler> dds() const;
private:
struct key
{
int operatorId = 0;
QString ctx;
bool operator<(const key &o) const
{
if (operatorId != o.operatorId)
return operatorId < o.operatorId;
return ctx < o.ctx;
}
key() = default;
explicit key(int _operatorId, const QString &_ctx)
: operatorId(_operatorId)
, ctx(_ctx)
{}
};
QMap<key, BuildingComponentFilter *> m_buildingComponentFilterMap;
Initialization *m_mainHandler;
LOGGER_T m_logger;
};
}
@@ -0,0 +1,101 @@
/**
* @RDE_HEADER@
* Broadcasting of FilterData
* $Id$
* $HeadURL$
* $Author$
* Created by Norbert Thoden, SLSE, 2019-02-19
*/
#include "handler_filter_data_update.h"
#include "dds_handler.h"
#include "initialization.h"
namespace FilterManagement
{
HandlerFilterDataUpdate::HandlerFilterDataUpdate(Initialization *mainHandler)
: Interface::Fts::TriggerFilterDataUpdateRequestHandler(mainHandler->dds()->fts())
, Interface::Fts::FilterDataUpdateRequestHandler(mainHandler->dds()->fts())
, m_mainHandler(mainHandler)
, m_logger(getLogger("FilterDataUpdate"))
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
HandlerFilterDataUpdate::~HandlerFilterDataUpdate()
{
TRACE_LOG(m_logger) << LOGFUNCTION << " START";
cleanup();
TRACE_LOG(m_logger) << LOGFUNCTION << " END";
}
bool HandlerFilterDataUpdate::init()
{
return true;
}
void HandlerFilterDataUpdate::cleanup()
{
// nothing to do here. But to keep structure similar to other hander...
}
void HandlerFilterDataUpdate::onTriggerFilterDataUpdateRequest(const rti::core::SampleIdentity &cookie,
const TriggerFilterData &request)
{
DEBUG_LOG(m_logger) << LOGFUNCTION << " TriggerFilterData: " << request;
auto ret = triggerFilterDataUpdateRequest(request);
if (ret.error())
WARNING_LOG(m_logger) << ret();
dds()->fts()->triggerFilterDataUpdateReply(cookie, ret);
}
Core::FunctionReplyObject HandlerFilterDataUpdate::triggerFilterDataUpdateRequest(const TriggerFilterData &request)
{
DEBUG_LOG(m_logger) << " publish TriggerFilterData: " << request;
dds()->dts()->publish(request);
return Core::FunctionReplyObject();
}
void HandlerFilterDataUpdate::onFilterDataUpdateRequest(const rti::core::SampleIdentity &cookie, const FilterData &request)
{
DEBUG_LOG(m_logger) << LOGFUNCTION << " FilterData: " << request;
auto ret = filterDataUpdateRequest(request);
if (ret.error())
WARNING_LOG(m_logger) << ret();
dds()->fts()->filterDataUpdateReply(cookie, ret);
}
Core::FunctionReplyObject HandlerFilterDataUpdate::filterDataUpdateRequest(const FilterData &request)
{
DEBUG_LOG(m_logger) << LOGFUNCTION << " FilterData: " << request;
const std::tuple<int,int,int> k(request.operatorId(), request.screenId(), request.screenContainerId());
auto it = m_latestFilter.find(k);
if (it == m_latestFilter.end())
{
// new entry
m_latestFilter[k] = request;
} else {
// already exists
FilterData &currentRef = it.value();
// compare age:
if (currentRef.requestTime() <= request.requestTime())
currentRef = request;
}
dds()->dts()->publish(request);
return Core::FunctionReplyObject();
}
std::shared_ptr<DatabaseInterface> HandlerFilterDataUpdate::db() const
{
return m_mainHandler->db();
}
std::shared_ptr<DdsHandler> HandlerFilterDataUpdate::dds() const
{
return m_mainHandler->dds();
}
} // namespace FilterManagement
+75
View File
@@ -0,0 +1,75 @@
/**
* @RDE_HEADER@
* Broadcasting of FilterData
* $Id$
* $HeadURL$
* $Author$
* Created by Norbert Thoden, SLSE, 2019-02-19
*/
#pragma once
#include <QMap>
#include <FilterManagement/flt_fts.h>
#include "logger.h"
namespace FilterManagement
{
class DatabaseInterface;
class DdsHandler;
class Initialization;
class HandlerFilterDataUpdate final
: protected Interface::Fts::TriggerFilterDataUpdateRequestHandler
, protected Interface::Fts::FilterDataUpdateRequestHandler
{
public:
explicit HandlerFilterDataUpdate(FilterManagement::Initialization *mainHandler);
~HandlerFilterDataUpdate();
bool init();
private:
void cleanup();
//
// Function Topic 'TriggerFilterDataUpdate'
//
void onTriggerFilterDataUpdateRequest(const rti::core::SampleIdentity &cookie,
const TriggerFilterData &request) override;
Core::FunctionReplyObject triggerFilterDataUpdateRequest(const TriggerFilterData &request);
//
// Function Topic 'FilterDataUpdate'
//
virtual void onFilterDataUpdateRequest(const rti::core::SampleIdentity &cookie,
const FilterData &request) override;
Core::FunctionReplyObject filterDataUpdateRequest(const FilterData &request);
std::shared_ptr<DatabaseInterface> db() const;
std::shared_ptr<DdsHandler> dds() const;
private:
struct key
{
int operatorId = 0;
int screenId = 1;
bool operator<(const key &o) const
{
if (operatorId != o.operatorId)
return operatorId < o.operatorId;
return screenId < o.screenId;
}
key() = default;
explicit key(int _operatorId, int _screenId)
: operatorId(_operatorId)
, screenId(_screenId)
{}
};
QMap<std::tuple<int,int,int>, FilterData> m_latestFilter;
Initialization *m_mainHandler;
LOGGER_T m_logger;
};
}
+131
View File
@@ -0,0 +1,131 @@
/**
* @RDE_HEADER@
* Handle aes filter data
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2017-06-16
*/
#include "handler_symbol_appearance.h"
#include "dds_handler.h"
#include "initialization.h"
namespace FilterManagement
{
HandlerSymbolAppearance::HandlerSymbolAppearance(Initialization *mainHandler)
: Interface::Fts::SymbolAppearanceUpdateRequestHandler(mainHandler->dds()->fts())
, m_mainHandler(mainHandler)
, m_logger(getLogger("HandlerSymbolAppearance"))
{
}
HandlerSymbolAppearance::~HandlerSymbolAppearance()
{
cleanup();
}
bool HandlerSymbolAppearance::init()
{
cleanup();
const auto cb = [this](const Database::SymbolAppearance &data)
{
FilterManagement::SymbolAppearance *ddsData(new FilterManagement::SymbolAppearance(data.id,
data.operatorId,
QDateTime::currentMSecsSinceEpoch(),
data.content.toStdString(),
data.ctx.toStdString()));
m_symbolAppearanceMap.insert(key(data.operatorId, data.ctx), ddsData);
dds()->dts()->publish(*ddsData);
};
// read all file types from database
if (!db()->select(cb))
{
ERROR_LOG(m_logger) << "Error reading data from database!";
return false;
}
return true;
}
void HandlerSymbolAppearance::cleanup()
{
DDSConnector::CoherentSet cs(dds()->ddsConnector());
auto dts = dds()->dts();
for (auto it = m_symbolAppearanceMap.cbegin(); it != m_symbolAppearanceMap.cend(); ++it)
{
dts->removeSymbolAppearanceByKey(it.value()->id());
delete it.value();
}
m_symbolAppearanceMap.clear();
}
void HandlerSymbolAppearance::onSymbolAppearanceUpdateRequest(const rti::core::SampleIdentity &cookie,
const SymbolAppearance &request)
{
DEBUG_LOG(m_logger) << "onSymbolAppearanceUpdateRequest: " << request;
auto ret = symbolAppearanceUpdateRequest(request);
if (ret.error())
WARNING_LOG(m_logger) << ret();
dds()->fts()->symbolAppearanceUpdateReply(cookie, ret);
}
Core::FunctionReplyObject HandlerSymbolAppearance::symbolAppearanceUpdateRequest(const SymbolAppearance &request)
{
Database::SymbolAppearance dbFilter;
dbFilter.operatorId = request.operatorId();
dbFilter.content = QString::fromStdString(request.content());
dbFilter.ctx = QString::fromStdString(request.ctx());
const key k(dbFilter.operatorId, dbFilter.ctx);
auto it = m_symbolAppearanceMap.find(k);
if (it == m_symbolAppearanceMap.end())
{
// new entry
dbFilter.id = 0;
if (!db()->insert(dbFilter))
{
ERROR_LOG(m_logger) << "Can not insert SymbolAppearanceFilter into database: " << db()->getLastError().text();
return Core::FunctionReplyObject(dbFilter.operatorId, tr_lts("dds", "Can not insert SymbolAppearanceFilter into database"));
}
SymbolAppearance *ptr = new SymbolAppearance(request);
ptr->sampleTime(QDateTime::currentMSecsSinceEpoch());
ptr->id(dbFilter.id);
m_symbolAppearanceMap.insert(k, ptr);
it = m_symbolAppearanceMap.find(k);
}
else
{
// already exists
dbFilter.id = it.value()->id();
dbFilter.operatorId = it.value()->operatorId();
DEBUG_LOG(m_logger) << "Update symbol filter with id " << dbFilter.id
<< " for operator " << dbFilter.operatorId;
if (!db()->update(dbFilter))
return Core::FunctionReplyObject(dbFilter.operatorId, tr_lts("dds", "Error updating SymbolAppearanceFilter in database"));
it.value()->sampleTime(QDateTime::currentMSecsSinceEpoch());
it.value()->content(request.content());
}
dds()->dts()->publish(*it.value());
return Core::FunctionReplyObject();
}
std::shared_ptr<DatabaseInterface> HandlerSymbolAppearance::db() const
{
return m_mainHandler->db();
}
std::shared_ptr<DdsHandler> HandlerSymbolAppearance::dds() const
{
return m_mainHandler->dds();
}
} // namespace FilterManagement
+61
View File
@@ -0,0 +1,61 @@
/**
* @RDE_HEADER@
* Handle aes filter data
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Ehrlicher, SLSE, 2017-06-16
*/
#pragma once
#include <QMap>
#include <FilterManagement/flt_fts.h>
#include "logger.h"
namespace FilterManagement
{
class DatabaseInterface;
class DdsHandler;
class Initialization;
class HandlerSymbolAppearance final
: protected Interface::Fts::SymbolAppearanceUpdateRequestHandler
{
public:
explicit HandlerSymbolAppearance(FilterManagement::Initialization *mainHandler);
~HandlerSymbolAppearance();
bool init();
private:
void cleanup();
void onSymbolAppearanceUpdateRequest(const rti::core::SampleIdentity &cookie,
const SymbolAppearance &request) override;
Core::FunctionReplyObject symbolAppearanceUpdateRequest(const SymbolAppearance &request);
std::shared_ptr<DatabaseInterface> db() const;
std::shared_ptr<DdsHandler> dds() const;
private:
struct key
{
int operatorId = 0;
QString ctx;
bool operator<(const key &o) const
{
if (operatorId != o.operatorId)
return operatorId < o.operatorId;
return ctx < o.ctx;
}
key() = default;
explicit key(int _operatorId, const QString &_ctx)
: operatorId(_operatorId)
, ctx(_ctx)
{}
};
QMap<key, SymbolAppearance *> m_symbolAppearanceMap;
Initialization *m_mainHandler;
LOGGER_T m_logger;
};
}
+135
View File
@@ -0,0 +1,135 @@
/**
* @RDE_HEADER@
* Initialization for FileManagement
* $Id$
* $HeadURL$
* $Author$
* Created by Iuliana Ojog, SLSE, 2017-04-03
*/
#include "initialization.h"
#include "dds_handler.h"
#include "handler_aes_filter.h"
#include "handler_building_component_filter.h"
#include "handler_symbol_appearance.h"
#include "handler_filter_data_update.h"
#include <DDS/DDSConnector/dds_connector.h>
#include <ngldb/db_service_handler.h>
namespace FilterManagement
{
Initialization::Initialization()
: m_logger(getLogger("Initialization"))
{}
Initialization::~Initialization()
{
m_handlerSymbolAppearance = nullptr;
m_handlerAesFilter = nullptr;
m_handlerBuildingComponentFilter = nullptr;
m_dbHandler = nullptr;
m_ddsHandler = nullptr;
}
bool Initialization::initialize(const std::shared_ptr<DDSConnector::DdsConnector> &ddsConnector, const QSqlDatabase &sqlDb)
{
INFO_LOG(m_logger) << "Start FilterManagement Initialization. domainId =" << ddsConnector->getDomainId()
<< " exerciseId=" << ddsConnector->getPartitionId();
// initialize database
m_dbHandler = std::make_shared<DbHandler>();
if (!m_dbHandler->init(ddsConnector->getPartitionId(), sqlDb))
{
ERROR_LOG(m_logger) << "Initialisation dbHandler failed.";
return false;
}
DEBUG_LOG(m_logger) << "Initialisation dbHandler succesful.";
// initialize DDS
m_ddsHandler = std::make_shared<DdsHandler>(ddsConnector);
if (!m_ddsHandler->init())
{
ERROR_LOG(m_logger) << "Initialisation ddsHandler failed.";
return false;
}
DEBUG_LOG(m_logger) << "Initialisation ddsHandler succesful.";
m_handlerAesFilter = std::make_shared<HandlerAesFilter>(this);
m_handlerBuildingComponentFilter = std::make_shared<HandlerBuildingComponentFilter>(this);
m_handlerSymbolAppearance = std::make_shared<HandlerSymbolAppearance>(this);
m_handlerFilterDataUpdate = std::make_shared<HandlerFilterDataUpdate>(this);
DEBUG_LOG(m_logger) << "initialize succesful.";
return true;
}
bool Initialization::initializeUseMainDdsHandler(const std::shared_ptr<DdsHandler> &ddsHandler, const QSqlDatabase &sqlDb)
{
INFO_LOG(m_logger) << "Start FilterManagement Initialization2. domainId =" << ddsHandler->ddsConnector()->getDomainId()
<< " exerciseId=" << ddsHandler->ddsConnector()->getPartitionId();
// initialize database
m_dbHandler = std::make_shared<DbHandler>();
if (!m_dbHandler->init(ddsHandler->ddsConnector()->getPartitionId(), sqlDb))
{
ERROR_LOG(m_logger) << "Initialisation2 dbHandler failed.";
return false;
}
DEBUG_LOG(m_logger) << "Initialisation2 dbHandler succesful.";
// initialize DDS
// m_ddsHandler = std::make_shared<DdsHandler>(ddsConnector);
// if (!m_ddsHandler->init())
// {
// ERROR_LOG(m_logger) << "Initialisation ddsHandler failed.";
// return false;
// }
// DEBUG_LOG(m_logger) << "Initialisation ddsHandler succesful.";
m_ddsHandler = ddsHandler;
DEBUG_LOG(m_logger) << "ddsHandler referenced";
m_handlerAesFilter = std::make_shared<HandlerAesFilter>(this);
m_handlerBuildingComponentFilter = std::make_shared<HandlerBuildingComponentFilter>(this);
m_handlerSymbolAppearance = std::make_shared<HandlerSymbolAppearance>(this);
m_handlerFilterDataUpdate = std::make_shared<HandlerFilterDataUpdate>(this);
DEBUG_LOG(m_logger) << "initialize2 succesful.";
return true;
}
bool Initialization::loadFromDatabase()
{
if (!m_handlerAesFilter || !m_handlerAesFilter->init())
{
ERROR_LOG(m_logger) << "Initialisation of aes filter handler failed.";
return false;
}
if (!m_handlerBuildingComponentFilter || !m_handlerBuildingComponentFilter->init())
{
ERROR_LOG(m_logger) << "Initialisation of building_component handler failed.";
return false;
}
if (!m_handlerSymbolAppearance || !m_handlerSymbolAppearance->init())
{
ERROR_LOG(m_logger) << "Initialisation of symbol appearance handler failed.";
return false;
}
DEBUG_LOG(m_logger) << "loadFromDatabase succesful.";
return true;
}
std::shared_ptr<DatabaseInterface> Initialization::db() const
{
return m_dbHandler->db();
}
} // namespace FilterManagement
+54
View File
@@ -0,0 +1,54 @@
/**
* @RDE_HEADER@
* MainHandler for FileManagement
* $Id$
* $HeadURL$
* $Author$
* Created by Iuliana Ojog, SLSE, 2017-04-03
*/
#pragma once
#include "logger.h"
#include <FilterManagement/flt_db.h>
namespace NGLDB
{
template <typename DB> class DbServiceHandler;
}
namespace DDSConnector
{
class DdsConnector;
}
namespace FilterManagement
{
using DbHandler = NGLDB::DbServiceHandler<DatabaseInterface>;
class DdsHandler;
class HandlerAesFilter;
class HandlerBuildingComponentFilter;
class HandlerSymbolAppearance;
class HandlerFilterDataUpdate;
class FLT_SERVER_EXPORT Initialization final
{
public:
Initialization();
~Initialization();
bool initialize(const std::shared_ptr<DDSConnector::DdsConnector> &ddsConnector, const QSqlDatabase &sqlDb);
bool initializeUseMainDdsHandler(const std::shared_ptr<DdsHandler> &ddsHandler, const QSqlDatabase &sqlDb);
bool loadFromDatabase();
std::shared_ptr<DdsHandler> dds() const { return m_ddsHandler; }
std::shared_ptr<DatabaseInterface> db() const;
private:
std::shared_ptr<DdsHandler> m_ddsHandler;
std::shared_ptr<DbHandler> m_dbHandler;
std::shared_ptr<HandlerAesFilter> m_handlerAesFilter;
std::shared_ptr<HandlerBuildingComponentFilter> m_handlerBuildingComponentFilter;
std::shared_ptr<HandlerSymbolAppearance> m_handlerSymbolAppearance;
std::shared_ptr<HandlerFilterDataUpdate> m_handlerFilterDataUpdate;
NGL::INGLLogger &m_logger;
};
} // namespace FilterManagement
+86
View File
@@ -0,0 +1,86 @@
log4j.reset=true
log4j.rootLogger=INFO, file, stdout
# Service: FilterManagement
###########################################################
#grep -r getLogger * | cut -d":" -f2
#log4j.logger.FLT=INFO
#log4j.logger.FLT.Db=DEBUG
#log4j.logger.FLT.main=INFO
#log4j.logger.FLT.DbHandler=INFO
#log4j.logger.FLT.DdsHandler=INFO
#log4j.logger.FLT.HandlerAesFilter=INFO
#log4j.logger.FLT.HandlerBuildingComponentFilter=INFO
#log4j.logger.FLT.FilterDataUpdate=INFO
#log4j.logger.FLT.HandlerSymbolAppearance=INFO
# File
###########################################################
log4j.appender.file=Lts::RollingFileAppender
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=9
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %-5p %c |#| %m (%.50F:%L) %n
# Appnd_Console
###########################################################
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %p %c %c{1} - %m (%-.30F:%L) %n
# Appnd_Syslog
###########################################################
log4j.appender.syslog=org.apache.log4j.SyslogAppender
log4j.appender.syslog.Threshold=ERROR
log4j.appender.syslog.SysLogHost=localhost
log4j.appender.syslog.Facility=LOCAL7
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.layout.ConversionPattern= %-4r %-5p %c %x - %m
log4j.appender.syslog.LevelRangeFilter.AcceptOnMatch=true
log4j.appender.syslog.LevelRangeFilter.LevelMin=INFO
log4j.appender.syslog.LevelRangeFilter.LevelMax=FATAL
###########################################################
###########################################################
###########################################################
# 1) Available Levels in LOG4CXX Version 0.10.0:
# TRACE,
# DEBUG,
# INFO,
# WARN,
# ERROR
# FATAL
#
# d = date/time
# p = priority (Level)
# c = category/channel
# m = message
# F = file
# L = line
# n = platform dependent line separator character or characters.
# ....
#
# Examples for console:
# a)
# %d %p %c #%m# (%.50F:%L)%n
# date/time
# priority
# category/channel
# #message#
# (Maximal 50Character des Filename von rechts:Line)
# line separator
#
# b)
# %d (%.15F:%L) %-5p %c |#| %m%n
# date/time
# (Maximal 15Character des Filename von rechts:Line)
# priority, Right pad with spaces if the priority name is less than 5 characters long.
# category/channel
# message
# line separator
#
# Examples for files:
+37
View File
@@ -0,0 +1,37 @@
/**
* @RDE_HEADER@
* Building Config - logging facility
* $Id$
* $HeadURL$
* $Author$
*/
#include "logger.h"
#include <NGLLogger/NGLLoggerBootstrap.h>
namespace FilterManagement
{
LOGGER_T getLogger(const char *name)
{
static const char ns[] = "FLT.";
std::string loggerName;
const size_t len = strlen(name);
loggerName.reserve(sizeof(ns) + len);
loggerName.append(ns, sizeof(ns) - 1);
loggerName.append(name, len);
try
{
return NGL::NGLLoggerBootstrap::getNGLRootLogger().
getNGLLogger(loggerName);
}
catch (const std::exception &ex)
{
fprintf(stderr, "Error retrieving logger: %s", ex.what());
abort();
}
}
} // namespace FilterManagement
+23
View File
@@ -0,0 +1,23 @@
/**
* @RDE_HEADER@
* Logging for FilterManagement
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <NGLLogger/INGLLogger.h>
#include "flt_export.h"
namespace FilterManagement
{
using LOGGER_T = NGL::INGLLogger &;
FLT_COMMON_EXPORT LOGGER_T getLogger(const char *name);
inline LOGGER_T getLogger(const QString &loggerName)
{
return getLogger(loggerName.toUtf8().constData());
}
} // namespace FilterManagement
+46
View File
@@ -0,0 +1,46 @@
/**
* @RDE_HEADER@
* main for ExerciseEventManagement
* $Id$
* $HeadURL$
* $Author$
*/
#include <nglapplication/nglcoreapplication.h>
#include <LtsCommandLineParser/LtsCommandLineParser.h>
#include <QNetworkProxy>
#include <Evaluations/settings.h>
#include "main_handler.h"
#include "logger.h"
#include "settings.h"
int main(int argc, char **argv)
{
NGLCoreApplication app(argc, argv);
QNetworkProxy::setApplicationProxy(QNetworkProxy());
LtsCommandLineParser::LtsCommandLineParser options;
if (!options.init())
return -1;
app.createLogger("FLT", options.exerciseId());
// ExerciseEventManagement::Settings::setIniFile(options.iniFile());
// Evaluations::Settings::setIniFile(options.iniFile());
int iRet = -3;
{
std::unique_ptr<FilterManagement::MainHandler> mainHandler(new FilterManagement::MainHandler);
if (!mainHandler->init(options.domainId(), options.exerciseId()))
return iRet;
STARTUP_LOG(app.baseLogger());
iRet = app.exec();
SHUTDOWN_LOG(app.baseLogger());
}
return iRet;
}
+91
View File
@@ -0,0 +1,91 @@
/**
* MainHandler for RecordingManagement
* $Id$
* $HeadURL$
* $Author$
*/
#include "main_handler.h"
#include "settings.h"
#include <DDS/Core/pacemaker.h>
#include <FilterManagement/initialization.h>
namespace FilterManagement
{
MainHandler::MainHandler()
: m_fltService(nullptr)
, m_logger(getLogger("MainHandler"))
{
}
MainHandler::~MainHandler()
{
delete m_fltService;
m_ddsHandler = nullptr;
m_dbHandler = nullptr;
}
bool MainHandler::init(int domainId, int exerciseId)
{
bool bRet = initInternal(domainId, exerciseId);
if (bRet)
{
INFO_LOG(m_logger) << "svcFilterManagement successfully initialized"
<< ", domainId" << domainId
<< ", exerciseId" << exerciseId;
m_ddsHandler->setRunningState(Core::RunningState::Running);
}
else
{
ERROR_LOG(m_logger) << "Error initializing svcFilterManagement..."
<< ", domainId" << domainId
<< ", exerciseId" << exerciseId;
if (m_ddsHandler)
m_ddsHandler->setRunningState(Core::RunningState::StartingError);
}
return bRet;
}
bool MainHandler::initInternal(int domainId, int exerciseId)
{
// initialize database
m_dbHandler = std::make_shared<DbHandler>();
if (!m_dbHandler->init(exerciseId, Settings::settings()))
return false;
// initialize DDS
if (exerciseId != 0) // svcFilterManagement for excercises is started at ExcerciseEventmanagement
return false;
m_ddsHandler = std::make_shared<DdsHandler>(domainId, exerciseId, IDL::PartitionType::Global);
if (!m_ddsHandler->init())
return false;
m_fltService = new FilterManagement::Initialization;
// Norbert Thoden, 28.09.2022
// typically the ddsConnector is transfered to XY::Initialization::initialize
// Unfortunately that leads to a WARNING at flt_fts_impl.cpp later.
// WARNING_LOG(m_logger) << "Incoming BuildingComponentFilterUpdateRequest without registered handler!";
// It seems like that there a two ddshandler, the first sets the m_buildingComponentFilterUpdateRequestHandler,
// but the second require that... -> assert
// Don´t know why this happens. At other processes,/service that seems to work... hmm
// So let FilterManagement::Initialization use the main m_ddsHandler:
// -> initializeUseMainDdsHandler()
// if (!m_fltService->initialize(m_ddsHandler->ddsConnector(), m_dbHandler->db()->database()))
if (!m_fltService->initializeUseMainDdsHandler(m_ddsHandler, m_dbHandler->db()->database()))
return false;
if (!m_fltService->loadFromDatabase())
return false;
return true;
}
} // FilterManagement
+43
View File
@@ -0,0 +1,43 @@
/**
* MainHandler for RecordingManagement
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <FilterManagement/flt_db.h>
#include "dds_handler.h"
#include "logger.h"
#include <ngldb/db_service_handler.h>
namespace FilterManagement
{
class Initialization;
}
namespace FilterManagement
{
using DbHandler = NGLDB::DbServiceHandler<DatabaseInterface>;
class MainHandler : public QObject
{
Q_OBJECT
public:
MainHandler();
~MainHandler();
bool init(int domainId, int exerciseId);
private:
bool initInternal(int domainId, int exerciseId);
std::shared_ptr<DdsHandler> m_ddsHandler;
std::shared_ptr<DbHandler> m_dbHandler;
FilterManagement::Initialization *m_fltService;
LOGGER_T m_logger;
};
} // namespace FilterManagement
+42
View File
@@ -0,0 +1,42 @@
/**
* Settings for FilterManagement
* $Id$
* $HeadURL$
* $Author$
*/
#include "settings.h"
#include <QtCore/QSettings>
#include <nglsettings/nglsettings_settings.h>
#include <ngltools/ngltools_filesystem.h>
namespace FilterManagement
{
class NGLSettingsClass : public NGL::Settings
{
public:
NGLSettingsClass()
: NGL::Settings(s_iniFile.isEmpty() ? NGL::findProjectConfigFile() : s_iniFile)
{}
static void setIniFile(const QString &fn)
{
s_iniFile = fn;
}
static QString s_iniFile;
};
QString NGLSettingsClass::s_iniFile;
Q_GLOBAL_STATIC(NGLSettingsClass, s)
//-----------------------------------------------------------------------------
NGL::Settings *Settings::settings()
{
return s();
}
//-----------------------------------------------------------------------------
void Settings::setIniFile(const QString &ini)
{
NGLSettingsClass::setIniFile(ini);
}
} // namespace FilterManagement
+24
View File
@@ -0,0 +1,24 @@
/**
* Settings for FilterManagement
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <QString>
namespace NGL
{
class Settings;
}
namespace FilterManagement
{
namespace Settings
{
NGL::Settings *settings();
void setIniFile(const QString &ini);
}
} // namespace FilterManagement