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

+148
View File
@@ -0,0 +1,148 @@
#
# $Id$
# $HeadURL$
# $Author$
#
INCLUDE(MacroRTIDDSGen)
INCLUDE(MacroCodeGenIdl)
SET(xml_FILE xxx_service.xml)
#
# --- Library svcXxxCommon --------------------------------------------------------------------------------
#
SET(SRCS_common
xxx_export.h
logger.cpp
logger.h
)
# Generate xxx_enums.idl / xxx.idl
CODEGEN_IDL_SVC(SRCS_common ${xml_FILE})
# Generate *.cpp/*.hpp from idl
RTIDDSGEN(SRCS_common xxx_enums.idl)
RTIDDSGEN(SRCS_common xxx.idl)
# Generate xxx_dt[s,c]_types.h, xxx_ft[s,c]_types.h
CODEGEN_TOPIC_TYPEDEFS(SRCS_common ${xml_FILE})
# Generate xxx_[d|f]tc.h
CODEGEN_CLIENT_TOPICS_IFC(SRCS_common ${xml_FILE})
NGL_ADD_LIBRARY(AAR SV WS svcXxxCommon SHARED ${SRCS_common})
NGL_TARGET_INCLUDE_DIRECTORIES(svcXxxCommon
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
)
NGL_TARGET_LINK_LIBRARIES(svcXxxCommon
PRIVATE
RTI::nddscpp2
PUBLIC
Qt5::Core
ddscore
NGLLogger
)
NGL_INSTALL_TARGET(svcXxxCommon)
#
# --- Library svcXxxClient --------------------------------------------------------------------------------
#
SET(SRCS_client
xxx_export.h
)
# generate xxx_[d|f]tc.h, xxx_[d|f]tc_impl.[cpp|h]
CODEGEN_CLIENT_TOPICS_IMPL(SRCS_client ${xml_FILE})
NGL_ADD_LIBRARY(AAR SV WS svcXxxClient SHARED ${SRCS_client})
NGL_TARGET_INCLUDE_DIRECTORIES(svcXxxClient
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
)
NGL_TARGET_LINK_LIBRARIES(svcXxxClient
PRIVATE
RTI::nddscpp2
ddsconnector
PUBLIC
svcXxxCommon
ddsftc
)
NGL_INSTALL_TARGET(svcXxxClient)
#
# --- Library svcXxxServer --------------------------------------------------------------------------------
#
SET(SRCS_server
xxx_export.h
)
# generate xxx_[d|f]ts.h, xxx_[d|f]ts_impl.[cpp|h]
CODEGEN_SERVER_TOPICS(SRCS_server ${xml_FILE})
# Generate xxx_db_impl.cpp/.h, xxx_db.h
CODEGEN_DATABASE(SRCS_server ${xml_FILE})
NGL_ADD_LIBRARY(AAR SV svcXxxServer SHARED ${SRCS_server})
NGL_TARGET_INCLUDE_DIRECTORIES(svcXxxServer
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_BINARY_DIR}/../
)
NGL_TARGET_LINK_LIBRARIES(svcXxxServer
PRIVATE
RTI::nddscpp2
ddsconnector
ddsfts
ngldb
PUBLIC
svcXxxCommon
)
NGL_INSTALL_TARGET(svcXxxServer)
#
# --- Topic Type Plugin --------------------------------------------------------------
#
CREATE_TOPIC_TYPE_PLUGIN(${xml_FILE})
#
# --- Executable svcXxxXxxXxx (sXXX) -------------------------------------------------
#
SET(SRCS_exe
main.cpp
main_handler.cpp
main_handler.h
dds_handler.cpp
dds_handler.h
settings.cpp
settings.h
${xml_FILE}
)
# Generate xxx.sql, xxx.xml
CODEGEN_SQL(SRCS_exe ${xml_FILE})
NGL_ADD_SVC_ICON(SRCS_exe)
NGL_ADD_EXECUTABLE(AAR SV svcXxxXxxXxx ${SRCS_exe})
NGL_TARGET_LINK_LIBRARIES(svcXxxXxxXxx
Qt5::Core
svcXxxCommon
svcXxxServer
svcCorePacemaker
ddsconnector
nglsettings
ProjectConfig
LtsCommandLineParser
NGLLogger
nglcoreapplication
ngltools
)
NGL_INSTALL_TARGET(svcXxxXxxXxx)
NGL_INSTALL(AAR SV FILES log4cxx_xxx.props DESTINATION bin)
NGL_ADD_TARGET_LINK(svcXxxXxxXxx sXXX)
# Uncomment if necessary
#ADD_SUBDIRECTORY(UnitTests)
#ADD_SUBDIRECTORY(ModuleTests)
+61
View File
@@ -0,0 +1,61 @@
/**
* DdsHandler for DDS
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLSE, 2015-09-02
*/
#include "dds_handler.h"
#include "xxx_dts.h"
#include "xxx_fts.h"
#include <DDS/DTS/generic_dts_impl.h>
#include <DDS/Core/pacemaker.h>
namespace XxxXxxXxx
{
DdsHandler::DdsHandler(int domainId, int exerciseId)
: m_ddsConnector(std::make_shared<DDSConnector::DdsConnector>(domainId, IDL::PartitionType::FIXME, exerciseId))
, m_logger(getLogger("DdsHandler"))
{
DEBUG_LOG(m_logger) << "DdsHandler(" << domainId << ") for partition: " << m_ddsConnector->getDefaultPartition();
}
DdsHandler::~DdsHandler()
{}
bool DdsHandler::init(const QStringList &qosFileList)
{
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
m_dtsCurrentRunningState.reset(m_ddsConnector->createDTS<DTS::CurrentRunningStateImpl>());
assert(m_dtsCurrentRunningState.get());
m_pacemaker = std::make_shared<Core::Pacemaker>(m_dtsCurrentRunningState);
m_ddsDts = XxxXxxXxx::Interface::Dts::create(m_ddsConnector);
m_ddsFts = XxxXxxXxx::Interface::Fts::create(m_ddsConnector);
bool bRet = m_ddsDts->enableAll();
INFO_LOG(m_logger) << "Dts initialised";
bRet &= m_ddsFts->enableAll();
INFO_LOG(m_logger) << "Fts initialised";
// TODO: call at the end of main_handler init:
//m_ddsHandler->pacemaker()->setNewState(Core::RunningState::Running);
return bRet;
}
} // Namespace PDM
+57
View File
@@ -0,0 +1,57 @@
/**
* 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/core_dts_types.h>
#include <XxxXxxXxx/xxx_dts.h>
#include <XxxXxxXxx/xxx_fts.h>
#include "logger.h"
namespace Core
{
class Pacemaker;
}
namespace XxxXxxXxx
{
class DdsHandler final
{
public:
DdsHandler(int domainId, int exerciseId);
~DdsHandler();
bool init(const QStringList &qosFileList = QStringList());
std::shared_ptr<Core::Pacemaker> pacemaker() const
{
return m_pacemaker;
}
std::shared_ptr<XxxXxxXxx::Interface::Dts> dts() const
{
return m_ddsDts;
}
std::shared_ptr<XxxXxxXxx::Interface::Fts> fts() const
{
return m_ddsFts;
}
private:
std::shared_ptr<DDSConnector::DdsConnector> m_ddsConnector;
std::shared_ptr<DTS::CurrentRunningState> m_dtsCurrentRunningState;
std::shared_ptr<Core::Pacemaker> m_pacemaker;
std::shared_ptr<XxxXxxXxx::Interface::Dts> m_ddsDts;
std::shared_ptr<XxxXxxXxx::Interface::Fts> m_ddsFts;
NGL::INGLLogger &m_logger;
};
} // namespace XxxXxxXxx
+80
View File
@@ -0,0 +1,80 @@
log4j.reset=true
log4j.rootLogger=WARN, file
# Service: XxxXxxXxx
###########################################################
#log4j.logger.XXX=DEBUG
#log4j.logger.XXX.main=DEBUG
#log4j.logger.XXX.DdsHandler=DEBUG
#log4j.logger.XXX.MainHandler=DEBUG
#
# Lts::RollingFileAppender
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 XxxXxxXxx
{
LOGGER_T getLogger(const char *name)
{
static const char ns[] = "XXX.";
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 XxxXxxXxx
+23
View File
@@ -0,0 +1,23 @@
/**
* @RDE_HEADER@
* Logging for XxxXxxXxx
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <NGLLogger/INGLLogger.h>
#include "xxx_export.h"
namespace XxxXxxXxx
{
using LOGGER_T = NGL::INGLLogger &;
XXX_COMMON_EXPORT LOGGER_T getLogger(const char *name);
inline LOGGER_T getLogger(const QString &loggerName)
{
return getLogger(loggerName.toUtf8().constData());
}
} // namespace XxxXxxXxx
+42
View File
@@ -0,0 +1,42 @@
/**
* @RDE_HEADER@
* main for XxxXxxXxx
* $Id$
* $HeadURL$
* $Author$
*/
#include <nglapplication/nglcoreapplication.h>
#include <LtsCommandLineParser/LtsCommandLineParser.h>
#include "main_handler.h"
#include "logger.h"
#include "settings.h"
int main(int argc, char **argv)
{
NGLCoreApplication app(argc, argv);
LtsCommandLineParser::LtsCommandLineParser options;
if (!options.init())
return -1;
app.createLogger("XXX", options.exerciseId());
XxxXxxXxx::Settings::setIniFile(options.iniFile());
int iRet = -3;
{
std::unique_ptr<XxxXxxXxx::MainHandler> mainHandler(new XxxXxxXxx::MainHandler);
if (!mainHandler->init(options.domainId(), options.exerciseId()))
return iRet;
STARTUP_LOG(app.baseLogger());
iRet = app.exec();
SHUTDOWN_LOG(app.baseLogger());
}
return iRet;
}
+61
View File
@@ -0,0 +1,61 @@
/**
* MainHandler for AssetManagement
* $Id$
* $HeadURL$
* $Author$
*/
#include "main_handler.h"
#include <DDS/DDSConnector/dds_connector.h>
#include <ngldb/db_service_handler.h>
namespace XxxXxxXxx
{
MainHandler::MainHandler(QObject *parent)
: QObject(parent)
, m_ddsHandler(nullptr)
, m_dbHandler(nullptr)
, m_logger(getLogger("MainHandler"))
{}
MainHandler::~MainHandler()
{
m_ddsHandler = nullptr;
m_dbHandler = nullptr;
}
bool MainHandler::init(int domainId)
{
// initialize database
m_dbHandler = std::make_shared<DbHandler>();
if (!m_dbHandler->init(0, Settings::settings(), m_logger))
{
ERROR_LOG(m_logger) << "Initialisation dbHandler failed.";
return false;
}
DEBUG_LOG(m_logger) << "Initialisation dbHandler succesful.";
// initialize DDS
m_ddsHandler = std::make_shared<DdsHandler>(domainId);
if (!m_ddsHandler->init())
{
ERROR_LOG(m_logger) << "Initialisation ddsHandler failed.";
return false;
}
DEBUG_LOG(m_logger) << "Initialisation ddsHandler succesful.";
// TODO
return true;
}
std::shared_ptr<DatabaseInterface> MainHandler::db() const
{
return m_dbHandler->db();
}
} // namespace XxxXxxXxx
+42
View File
@@ -0,0 +1,42 @@
/**
* MainHandler for AereaEffectSimulation
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <QObject>
#include <memory>
#include "dds_handler.h"
#include "xxx_db.h"
#include "logger.h"
namespace NGLDB
{
template <typename DB> class DbServiceHandler;
}
namespace XxxXxxXxx
{
using DbHandler = NGLDB::DbServiceHandler<DatabaseInterface>;
class MainHandler : public QObject
{
Q_OBJECT
public:
explicit MainHandler(QObject *parent = nullptr);
~MainHandler();
bool init(int domainId);
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;
NGL::INGLLogger &m_logger;
};
} // namespace XxxXxxXxx
+42
View File
@@ -0,0 +1,42 @@
/**
* Settings for XxxXxxXxx
* $Id$
* $HeadURL$
* $Author$
*/
#include "settings.h"
#include <QtCore/QSettings>
#include <nglsettings/nglsettings_settings.h>
#include <ngltools/ngltools_filesystem.h>
namespace XxxXxxXxx
{
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 XxxXxxXxx
+24
View File
@@ -0,0 +1,24 @@
/**
* Settings for XxxXxxXxx
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <QString>
namespace NGL
{
class Settings;
}
namespace XxxXxxXxx
{
namespace Settings
{
NGL::Settings *settings();
void setIniFile(const QString &ini);
}
} // namespace XxxXxxXxx
+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 XXX_COMMON_EXPORT
# ifdef BUILD_STATIC_LIBRARIES
# define XXX_COMMON_EXPORT
# else
# if defined(MAKE_SVCXXXCOMMON_LIB)
# define XXX_COMMON_EXPORT Q_DECL_EXPORT
# ifndef WIN32
# ifdef NDDSUSERDllExport
# undef NDDSUSERDllExport
# endif
# define NDDSUSERDllExport Q_DECL_EXPORT
# endif
# else
# define XXX_COMMON_EXPORT Q_DECL_IMPORT
# endif
# endif
#endif
#ifndef XXX_CLIENT_EXPORT
# ifdef BUILD_STATIC_LIBRARIES
# define XXX_CLIENT_EXPORT
# else
# if defined(MAKE_SVCXXXCLIENT_LIB)
# define XXX_CLIENT_EXPORT Q_DECL_EXPORT
# else
# define XXX_CLIENT_EXPORT Q_DECL_IMPORT
# endif
# endif
#endif
#ifndef XXX_SERVER_EXPORT
# ifdef BUILD_STATIC_LIBRARIES
# define XXX_SERVER_EXPORT
# else
# if defined(MAKE_SVCXXXSERVER_LIB)
# define XXX_SERVER_EXPORT Q_DECL_EXPORT
# else
# define XXX_SERVER_EXPORT Q_DECL_IMPORT
# endif
# endif
#endif
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<service namespace="XxxXxxXxx" procNames="XxxXxxXxx" abbreviation="XXX">
<!-- Will be generated by EnterpriseArchitect javascript
Copy from EA to this directory
-->
</service>
+144
View File
@@ -0,0 +1,144 @@
#!/bin/bash
#
# @RDE_HEADER@
# $Id$
# $HeadURL$
# $Author$
#
svc_name_abbr=""
svc_name_long=""
usage()
{
echo "usage: $0 -l <ObjectName>"
# echo " -o <ObjectName> : ObjectName in CamelCase "
echo " -s <SvcName short>: Abbreviation of ServiceName with 3 letters"
echo " -l <SvcName long> : ServiceName in CamelCase"
}
while getopts "s:l:" opt "$@"; do
case $opt in
# o)
# obj_cc=$OPTARG
# ;;
l)
svc_cc=$OPTARG
;;
s)
svc_abbr=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG"
usage
exit 1
;;
:)
echo "Option -$OPTARG requires an argument."
usage
exit 1
;;
esac
done
shift $((OPTIND-1))
if [ -z $svc_cc ]; then
echo "Parameter -l is required"
usage
exit 1
fi
if [ -z $svc_abbr ]; then
echo "Parameter -s is required"
usage
exit 1
fi
svc_abbr_lc=${svc_abbr,,}
svc_abbr_cc=${svc_abbr_lc~}
echo "svc CamelCase : ${svc_cc} "
echo "svc abbr Cc : ${svc_abbr_cc} "
echo "svc abbr lower : ${svc_abbr_lc} "
echo "ObjectNames (cc): "
for obje in "$@"; do
echo " ${obje}"
done
echo "=========================="
echo "Iterating through objects:"
echo
declare -a headers
declare -a sources
for obje in "$@"; do
cd ../skeleton
obj_lower=${obje,,}
obj_upper=${obje^^}
obj_underscore=`echo ${obje} | sed 's/\([a-z0-9]\)\([A-Z]\)/\1_\L\2/g'`
obj_underscore=${obj_underscore,,}
echo "Object '${obje}': "
echo " obj CamelCase : ${obje} "
echo " obj lower : ${obj_lower} "
echo " obj UPPER : ${obj_upper} "
echo " obj under_score : ${obj_underscore} "
echo
echo " Copying [handler|object]_${obj_underscore}.[cpp|h] to ./${svc_cc} directory"
cp ./stub/handler_xxx.cpp ../${svc_cc}/handler_${obj_underscore}.cpp
cp ./stub/handler_xxx.h ../${svc_cc}/handler_${obj_underscore}.h
cp ./stub/object_xxx.cpp ../${svc_cc}/object_${obj_underscore}.cpp
cp ./stub/object_xxx.h ../${svc_cc}/object_${obj_underscore}.h
cd ../${svc_cc}
# search & replace XXX/Xxx/xxx/XxxXxxXxx
for file in `find . -type f -name "*_${obj_underscore}.*" `; do
echo " -> Replace all Xxx/xxx/XXX and namespace in file ${file}"
# sed -i "s/XxxXxxXxx/${svc_name_long}/g" ${file}
sed -i "s/XXX/${obj_upper}/g" ${file}
sed -i "s/Xxx/${obje}/g" ${file}
sed -i "s/xxx_xxx/${obj_underscore}/g" ${file}
sed -i "s/xxx/${obj_lower}/g" ${file}
sed -i "s/YyyYyyYyy/${svc_cc}/g" ${file}
sed -i "s/Yyy/${svc_abbr_cc}/g" ${file}
sed -i "s/yyy/${svc_abbr_lc}/g" ${file}
fil2=${file##.*/}
if [[ "$file" == *.h ]]
then
headers+=(${fil2})
else
sources+=(${fil2})
fi
done
echo
done
echo "=========================="
echo "Copied handler and object files and replaced strings within files."
# echo what to do next:
echo "=========================="
echo "Next steps:"
echo
echo "=> Include Files in CMakeLists.txt by adding the following lines:"
echo "SET(SRCS_exe"
echo " [...]"
echo "vvvvvvvvvvvvvvvvvvvvvvvvvv"
for source in "${sources[@]}"; do
echo " ${source}"
done
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^"
echo ")"
echo "SET(HDRS_exe"
echo " [...]"
echo "vvvvvvvvvvvvvvvvvvvvvvvvvv"
for head in "${headers[@]}"; do
echo " ${head}"
done
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^"
echo ")"
+110
View File
@@ -0,0 +1,110 @@
#!/bin/bash
#
# @RDE_HEADER@
# $Id$
# $HeadURL$
# $Author$
#
svc_name_abbr=""
svc_name_long=""
usage()
{
echo "usage: $0 -l <SvcName long> -s <SvcName short>"
echo " -l <SvcName long> : ServiceName in CamelCase "
echo " -s <SvcName short>: Abbreviation of ServiceName with 3 letters"
}
while getopts "s:l:" opt "$@"; do
case $opt in
l)
svc_name_long=$OPTARG
;;
s)
svc_name_abbr=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG"
usage
exit 1
;;
:)
echo "Option -$OPTARG requires an argument."
usage
exit 1
;;
esac
done
if [ -z $svc_name_long ]; then
echo "Parameter -l is required"
usage
exit 1
fi
if [ -z $svc_name_abbr ]; then
echo "Parameter -s is required"
usage
exit 1
fi
echo "ServiceName (long): ${svc_name_long} "
echo "ServiceName (Abbr): ${svc_name_abbr} "
svc_lower=${svc_name_abbr,,}
svc_upper=${svc_name_abbr^^}
svc_cc=${svc_lower~}
echo "svc lower (Abbr): ${svc_lower} "
echo "svc upper (Abbr): ${svc_upper} "
echo "svc CamelCase (Abbr): ${svc_cc} "
# copy skeleton to SvcDirectory
svc_dir=${svc_name_long}
if [ -d ../${svc_dir} ]; then
echo "Directory ${svc_dir} already exists. Remove it and restart the script"
exit 2
rm -r ${svc_dir}
fi
cp -r ./base ../${svc_dir}
echo "Copied files to ${svc_dir}."
cd ../${svc_dir}
# mv files with xxx_* to svc_lower_*
#for i in find . -name 'xxx_*' -exec ls {} \;
# Todo: sed for renaming? xxx -> ${svc_lower}, wherever it occurs
for old_file in `find . -name 'xxx_*' `; do
new_file="${svc_lower}${old_file:5}"
echo "-> Rename file ${old_file} to ${new_file}"
mv ${old_file} ./${new_file}
done
mv ./log4cxx_xxx.props ./log4cxx_${svc_lower}.props
# search & replace XXX/Xxx/xxx/XxxXxxXxx
for file in `find . -type f -name '*' `; do
echo "-> Replace all Xxx/xxx/XXX and namespace in file ${file}"
sed -i "s/XxxXxxXxx/${svc_name_long}/g" ${file}
sed -i "s/XXX/${svc_upper}/g" ${file}
sed -i "s/Xxx/${svc_cc}/g" ${file}
sed -i "s/xxx/${svc_lower}/g" ${file}
done
pwd=`pwd`
# echo what to do next:
echo "------------------------"
echo "Next steps:"
echo "------------------------"
echo "=> Copy xml service file (${svc_lower}_service.xml) from EA into '${svc_dir}'"
echo " cp ${svc_lower}_service.xml ${pwd}/"
echo ""
echo "=> Include '${svc_dir}' in CMakeLists.txt (in folder 'Services') by adding the following line:"
echo " ADD_SUBDIRECTORY(${svc_name_long})"
echo "------------------------"
+61
View File
@@ -0,0 +1,61 @@
/**
* Handler for all exercise objects
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLSE, 2015-09-03
*/
#include "handler_xxx_xxx.h"
#include "object_xxx_xxx.h"
#include "yyy_db.h"
#include "db_handler.h"
#include <QCoreApplication>
#include <NGLLogger/NGLLoggerBootstrap.h>
namespace YyyYyyYyy
{
HandlerXxx::HandlerXxx(const std::shared_ptr<DdsHandler> &ddsHandler,
const std::shared_ptr<DbHandler> &dbHandler,
QObject *parent)
: QObject(parent)
, m_ddsHandler(ddsHandler)
, m_dbHandler(dbHandler)
, m_logger(getLogger("HandlerXxx"))
{}
HandlerXxx::~HandlerXxx()
{}
bool HandlerXxx::init()
{
QVector<Database::YyyXxx> dataVec;
// read all Xxxs from database
if(!m_dbHandler->db()->select(dataVec))
{
ERROR_LOG(m_logger) << "Error reading data from database!";
return false;
}
// create languageHmi objects
for (const Database::YyyXxx &data : qAsConst(dataVec))
{
ObjectXxx *ifs(new ObjectXxx(m_ddsHandler, m_dbHandler, this));
Core::FunctionReplyObject ret = ifs->createObject(data);
if(ret.error())
{
delete ifs;
ERROR_LOG(m_logger) << ret();
return false;
}
m_xxxObjMap.insert(ifs->getId(), ifs);
}
DEBUG_LOG(m_logger) << "m_exeObjMap.size() = " << m_xxxObjMap.size();
return true;
}
} // Namespace YyyYyyYyy
+39
View File
@@ -0,0 +1,39 @@
/**
* Handler for all Language HMI objects
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLSE, 2015-09-03
*/
#pragma once
#include <QMap>
#include "dds_handler.h"
#include "logger.h"
namespace YyyYyyYyy
{
class DbHandler;
class ObjectXxx;
class HandlerXxx : public QObject
{
public:
HandlerXxx(const std::shared_ptr<DdsHandler> &ddsHandler,
const std::shared_ptr<DbHandler> &dbHandler,
QObject *parent = nullptr);
~HandlerXxx();
bool init();
private:
private:
QMap<int, ObjectXxx*> m_xxxObjMap;
std::shared_ptr<DdsHandler> m_ddsHandler;
std::shared_ptr<DbHandler> m_dbHandler;
NGL::INGLLogger &m_logger;
};
}
+68
View File
@@ -0,0 +1,68 @@
/**
* Handler for the HMI language
* $Id$
* $HeadURL$
* $Author$
*/
#include "object_xxx_xxx.h"
#include "dds_handler.h"
#include "db_handler.h"
#include "logger.h"
namespace YyyYyyYyy
{
ObjectXxx::ObjectXxx(const std::shared_ptr<DdsHandler> &ddsHandler,
const std::shared_ptr<DbHandler> &dbHandler,
QObject *parent)
: QObject(parent)
, m_ddsHandler(ddsHandler)
, m_dbHandler(dbHandler)
, m_logger(getLogger("ObjectXxx"))
{
}
ObjectXxx::~ObjectXxx()
{
}
Core::FunctionReplyObject ObjectXxx::createObject(const Database::YyyXxx &data)
{
m_data = data;
if(m_data.id <= 0)
return Core::FunctionReplyObject(m_data.id, "It is not intended to insert data this way...");
// Publish Data via DTS
onPublishData();
return Core::FunctionReplyObject(m_data.id);
}
Core::FunctionReplyObject ObjectXxx::updateObject(const Database::YyyXxx &data)
{
return Core::FunctionReplyObject(m_data.id, "You are not allowed to change this datum.");
}
Core::FunctionReplyObject ObjectXxx::removeObject()
{
return Core::FunctionReplyObject(m_data.id, "Data removal denied.");
}
void ObjectXxx::onPublishData()
{
YyyYyyYyy::Xxx ddsData;
ddsData.id(m_data.id);
// Todo: Copy as above
INFO_LOG(m_logger) << "Publish YyyXxx-data to dds (" << m_data.id << ") ...";
if (!m_ddsHandler->dts()->publish(ddsData))
{
ERROR_LOG(m_logger) << "Error publishing YyyXxx-data to dds";
}
}
} // Namespace YyyYyyYyy
+49
View File
@@ -0,0 +1,49 @@
/**
* Exercise object
* $Id$
* $HeadURL$
* $Author$
*/
#pragma once
#include <QObject>
#include "dds_handler.h"
#include "logger.h"
#include <DDS/Core/function_reply_object.h>
// Generated
#include <YyyYyyYyy/yyy_db.h>
namespace YyyYyyYyy
{
class DbHandler;
class ObjectXxx : public QObject
{
Q_OBJECT
public:
explicit ObjectXxx(const std::shared_ptr<DdsHandler> &ddsHandler,
const std::shared_ptr<DbHandler> &dbHandler,
QObject *parent = nullptr);
~ObjectXxx();
Core::FunctionReplyObject createObject(const Database::YyyXxx &data);
Core::FunctionReplyObject updateObject(const Database::YyyXxx &data);
Core::FunctionReplyObject removeObject();
int getId() const { return m_data.id; }
protected Q_SLOTS:
void onPublishData();
private:
std::shared_ptr<DdsHandler> m_ddsHandler;
std::shared_ptr<DbHandler> m_dbHandler;
Database::YyyXxx m_data;
NGL::INGLLogger &m_logger;
};
}