diff --git a/qt6-after/qt6-migrated-legatus/CMakeLists.txt b/qt6-after/qt6-migrated-legatus/CMakeLists.txt index a3e35237d..3c6628f70 100755 --- a/qt6-after/qt6-migrated-legatus/CMakeLists.txt +++ b/qt6-after/qt6-migrated-legatus/CMakeLists.txt @@ -69,7 +69,9 @@ include_directories(${CMAKE_SOURCE_DIR}/Lts/Common) include_directories(${CMAKE_SOURCE_DIR}/Lts/Common/LtsUtils) include_directories(${CMAKE_BINARY_DIR}/Lts/Common/LtsUtils/LtsUtilsCore) include_directories(${CMAKE_SOURCE_DIR}/include/Viewer/SituationMap) -SET(CMAKE_CXX_STANDARD 17) +include_directories(${CMAKE_SOURCE_DIR}/include/OperatorManagement) +include_directories(${CMAKE_SOURCE_DIR}/include/FileManagement) +SET(CMAKE_CXX_STANDARD 23) SET(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_VISIBILITY_INLINES_HIDDEN ON) SET(CMAKE_CXX_VISIBILITY_PRESET hidden) @@ -257,6 +259,19 @@ IF(BUILD_RTI AND TARGET RTI::nddsc) ADD_LIBRARY(ddscpp ALIAS RTI::nddscpp) ADD_LIBRARY(ddscpp2 ALIAS RTI::nddscpp2) ADD_LIBRARY(nddsctesthelpers ALIAS RTI::nddsctesthelpers) + ADD_LIBRARY(ddsftc ALIAS RTI::ddsftc) + ADD_LIBRARY(ddsfts ALIAS RTI::ddsfts) + ADD_LIBRARY(ddsconnector ALIAS RTI::ddsconnector) +ELSE() + # BUILD_RTI=OFF: Leere Interface-Libraries als Platzhalter + ADD_LIBRARY(ddsc INTERFACE) + ADD_LIBRARY(ddscore INTERFACE) + ADD_LIBRARY(ddscpp INTERFACE) + ADD_LIBRARY(ddscpp2 INTERFACE) + ADD_LIBRARY(nddsctesthelpers INTERFACE) + ADD_LIBRARY(ddsftc INTERFACE) + ADD_LIBRARY(ddsfts INTERFACE) + ADD_LIBRARY(ddsconnector INTERFACE) ENDIF() ADD_DEFINITIONS(-DQT_USE_QSTRINGBUILDER) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_db_impl_custom.cpp b/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_db_impl_custom.cpp index b97770f4d..747a39b0a 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_db_impl_custom.cpp +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_db_impl_custom.cpp @@ -7,6 +7,7 @@ */ #include "flm_db_impl_custom.h" +#include #include #include #include @@ -59,9 +60,9 @@ bool DatabaseInterfaceImplCustom::updateStatus(int fileId, const FileStatus &sta DEBUG_LOG(m_logger) << "File name before = " << fileName; - if (status.underlying() == 1) // Delete + if (status == 1) // Delete fileName = QStringLiteral("{")+QString::number(fileId)+QStringLiteral("}_")+fileName; - if (status.underlying() == 0 && fileName.startsWith(QStringLiteral("{"))) // Restore + if (status == 0 && fileName.startsWith(QStringLiteral("{"))) // Restore fileName.remove(QRegularExpression(QStringLiteral("^[{](\\d+)[}][_]"))); DEBUG_LOG(m_logger) << "File name after = " << fileName; @@ -76,7 +77,7 @@ bool DatabaseInterfaceImplCustom::updateStatus(int fileId, const FileStatus &sta } m_query->bindValue(QStringLiteral(":id"), fileId); - m_query->bindValue(QStringLiteral(":st"), status.underlying()); + m_query->bindValue(QStringLiteral(":st"), static_cast(status)); m_query->bindValue(QStringLiteral(":opId"), operatorId); m_query->bindValue(QStringLiteral(":lastMod"), QDateTime::currentMSecsSinceEpoch()); m_query->bindValue(QStringLiteral(":name"), fileName); diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_db_impl_custom.h b/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_db_impl_custom.h index 8c067b483..e77d866b2 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_db_impl_custom.h +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_db_impl_custom.h @@ -13,7 +13,6 @@ namespace FileManagement { class DatabaseInterfaceImplCustom final : public DatabaseInterfaceImpl { - Q_OBJECT public: using DatabaseInterfaceImpl::DatabaseInterfaceImpl; diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_dtc_impl_custom.h b/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_dtc_impl_custom.h index e098dab0a..fa4626877 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_dtc_impl_custom.h +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/FileManagement/flm_dtc_impl_custom.h @@ -8,7 +8,7 @@ */ #pragma once -#include +#include #include //------------------------------------------------------------------------------------------------------------- @@ -18,7 +18,6 @@ namespace Interface { class DtcImplCustom final : public Interface::DtcImpl { - Q_OBJECT public: explicit DtcImplCustom(const std::shared_ptr &ddsConnector); diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/opm_dtc_impl_custom.cpp b/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/opm_dtc_impl_custom.cpp index c6272eec2..71d20d13b 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/opm_dtc_impl_custom.cpp +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/opm_dtc_impl_custom.cpp @@ -13,8 +13,10 @@ #include #include #include +#if BUILD_RTI #include #include +#endif namespace OperatorManagement { @@ -25,12 +27,12 @@ DtcImplCustom::DtcImplCustom(const std::shared_ptr & { } -QVector DtcImplCustom::getOperatorsByOperatorRight(int operatorRight) +std::vector DtcImplCustom::getOperatorsByOperatorRight(int operatorRight) { - QVector ret; + std::vector ret; DEBUG_LOG(m_logger) << "OperatorRight: " << operatorRight; - for (const User &user : qAsConst(m_userCont)) + for (const User &user : std::as_const(m_userCont)) { for (int acl : user.effectiveAcls()) { @@ -38,7 +40,7 @@ QVector DtcImplCustom::getOperatorsByOperatorRight(int operatorRight) continue; DEBUG_LOG(m_logger) << "Found acl in Operator " << user.id() << ", operatorRight=" << operatorRight << ", acl=" << acl; - ret.append(user.id()); + ret.push_back(user.id()); break; } } @@ -46,13 +48,13 @@ QVector DtcImplCustom::getOperatorsByOperatorRight(int operatorRight) return ret; } -QVector DtcImplCustom::operatorForExerciseParty(int exerciseId, int partyId) +std::vector DtcImplCustom::operatorForExerciseParty(int exerciseId, int partyId) { - QVector ret = {}; + std::vector ret; DEBUG_LOG(m_logger) << LOGFUNCTION << " exerciseId: " << exerciseId << ", partyId: " << partyId; - for (const User &user : qAsConst(m_userCont)) + for (const User &user : std::as_const(m_userCont)) { const auto visiblePartiesByExercise = user.visiblePartiesByExercise(); for (const auto &pbe : visiblePartiesByExercise) @@ -60,14 +62,17 @@ QVector DtcImplCustom::operatorForExerciseParty(int exerciseId, int partyId if (pbe.exerciseId() != exerciseId) continue; - if (!pbe.visibleParties().is_set()) + if (!pbe.visibleParties().has_value()) continue; - std::vector hiddenParties = {}; - if (pbe.hiddenParties().is_set()) - hiddenParties = pbe.hiddenParties().get(); + std::vector hiddenParties; + if (pbe.hiddenParties().has_value()) + { + const auto& hiddenQVec = pbe.hiddenParties().value(); + hiddenParties = std::vector(hiddenQVec.begin(), hiddenQVec.end()); + } - for (const auto &id : pbe.visibleParties().get()) + for (const auto &id : pbe.visibleParties().value()) { if (id != partyId) continue; @@ -81,7 +86,7 @@ QVector DtcImplCustom::operatorForExerciseParty(int exerciseId, int partyId } if (!isHidden) - ret.append(user.id()); + ret.push_back(user.id()); } } } @@ -113,7 +118,7 @@ bool DtcImplCustom::sendAdlerNotification(const QString &jsonStr, const int exer DEBUG_LOG(m_logger) << "sendAdlerNotification"; const QJsonArray &exercisesArr = doc.object().value(QStringLiteral("Exercises")).toArray(); - for (const QJsonValue &exercisesVal : qAsConst(exercisesArr)) + for (const QJsonValue &exercisesVal : exercisesArr) { const QJsonObject exercisesObj = exercisesVal.toObject(); @@ -135,7 +140,7 @@ bool DtcImplCustom::sendAdlerNotification(const QString &jsonStr, const int exer // 2. Array durchlaufen QJsonArray notifications = exercisesObj.value(QStringLiteral("suppressNotifications")).toArray(); - for (const QJsonValue &val : qAsConst(notifications)) + for (const QJsonValue &val : notifications) { DEBUG_LOG(m_logger) << "sendAdlerNotification notifications"; const QJsonObject entry = val.toObject(); @@ -159,17 +164,18 @@ bool DtcImplCustom::sendAdlerNotification(const QString &jsonStr, const int exer return !found; } -QVector DtcImplCustom::getNotificationRecipents(const int exerciseId, const int partyId, const int operatorRight, const int notificationType) +std::vector DtcImplCustom::getNotificationRecipents(const int exerciseId, const int partyId, const int operatorRight, const int notificationType) { - const QVector operatorsByOperatorRight = getOperatorsByOperatorRight(operatorRight); - QVector operatorIds; + const std::vector operatorsByOperatorRight = getOperatorsByOperatorRight(operatorRight); + std::vector operatorIds; for (const auto &userId : operatorsByOperatorRight) { bool inExercise = false; const auto user = m_userCont.value(userId); // Only include operators who are assigned to the exercise. - for (const auto &exerciseIdUser : qAsConst(user.exerciseIds())) + const auto& exerciseIds = user.exerciseIds(); + for (const auto &exerciseIdUser : exerciseIds) { if (exerciseIdUser == exerciseId) { @@ -184,7 +190,7 @@ QVector DtcImplCustom::getNotificationRecipents(const int exerciseId, const } DEBUG_LOG(m_logger) << "getNotificationRecipents OperatorId" << user.id() << ", Name=" << user.name() << ", properties=" << user.properties(); if (isAdlerAllowedParty(exerciseId, partyId, user.id()) && - sendAdlerNotification(QString::fromStdString(user.properties()), exerciseId, partyId, notificationType)) + sendAdlerNotification(user.properties(), exerciseId, partyId, notificationType)) operatorIds.push_back(user.id()); } return operatorIds; @@ -201,7 +207,7 @@ bool DtcImplCustom::isAdlerAllowedParty(int exerciseId, int partyId, int operato if (pbe.exerciseId() != exerciseId) continue; - const QJsonObject propsObj(QJsonDocument::fromJson(QByteArray::fromStdString(pbe.properties())).object()); + const QJsonObject propsObj(QJsonDocument::fromJson(pbe.properties().toUtf8()).object()); const QJsonArray parties = propsObj.value(QStringLiteral("adlerAllowed")).toArray(); for (const QJsonValue &val : parties) diff --git a/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/opm_dtc_impl_custom.h b/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/opm_dtc_impl_custom.h index 1ee6ea292..989aef37e 100755 --- a/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/opm_dtc_impl_custom.h +++ b/qt6-after/qt6-migrated-legatus/Lts/Services/OperatorManagement/opm_dtc_impl_custom.h @@ -19,15 +19,13 @@ namespace Interface { class DtcImplCustom final : public Interface::DtcImpl { - - Q_OBJECT public: explicit DtcImplCustom(const std::shared_ptr &ddsConnector); // custom procs, body must be implemented by user - QVector getOperatorsByOperatorRight(int operatorRight) override; - QVector operatorForExerciseParty(int exerciseId, int partyId) override; - QVector getNotificationRecipents (const int exerciseId, const int partyId, const int operatorRight, const int notificationType) override; + std::vector getOperatorsByOperatorRight(int operatorRight) override; + std::vector operatorForExerciseParty(int exerciseId, int partyId) override; + std::vector getNotificationRecipents (const int exerciseId, const int partyId, const int operatorRight, const int notificationType) override; bool isAdlerAllowedParty(int exerciseId, int partyId, int operatorId) override; private: diff --git a/qt6-after/qt6-migrated-legatus/include/DDS/DTC/generic_dtc.h b/qt6-after/qt6-migrated-legatus/include/DDS/DTC/generic_dtc.h new file mode 100644 index 000000000..7d0411795 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/include/DDS/DTC/generic_dtc.h @@ -0,0 +1,97 @@ +/** + * @RDE_HEADER@ + * DTC TypeDefinitions - Stub für BUILD_RTI=OFF + * $Id$ + * $HeadURL$ + * $Author$ + */ + +#pragma once + +// Stub für BUILD_RTI=OFF - keine RTI Connext DDS Verfügbarkeit +// Diese Header ermöglicht Kompilierung ohne RTI DDS Dependencies + +#include +#include +#include + +// Forward declarations für DDS-Typen (Stubs) +namespace dds { +namespace sub { + template + struct LoanedSamples { + // Minimaler Stub - keine Implementierung für BUILD_RTI=OFF + }; + + struct SampleInfo { + // Minimaler Stub - keine Implementierung für BUILD_RTI=OFF + }; +} +} + +namespace NGLLogger +{ +class INGLLogger; +} + +namespace DTC +{ +class SubscriberListener; + +// DataModification Enum aus LtsUtilsCore/data_modification_enum.h stub +enum class DataModification { + Added, + Modified, + Removed +}; + +// uses DRO (static) +template +class GenericDtcSC +{ +public: + using DataReaderObject = DRO_OBJECT; + using SubscriberCallback = SC; + using TopicType = typename DRO_OBJECT::TopicType; + + GenericDtcSC() = default; + virtual ~GenericDtcSC() = default; + + virtual bool setSubscriberCallback(const SubscriberCallback &subscriberCallback) = 0; + virtual dds::sub::LoanedSamples readAlive() const = 0; + virtual dds::sub::LoanedSamples takeAlive() const = 0; + virtual dds::sub::LoanedSamples takeDisposed() const = 0; + virtual bool hasSamples() const = 0; + virtual DataReaderObject *dataReader() const = 0; + virtual bool waitForHistoricalData(int timeoutMSec) = 0; +}; + + +// Typed topic callback (DataReader) +template +class GenericDtc + : public GenericDtcSC > +{}; + +// Typed topic callback (DataReader) with SampleInfo +template +class GenericDtcSampleInfo + : public GenericDtcSC > +{}; + +// Dynamic topic callback (DynamicDataReader) +template +class Ddtc + : public GenericDtcSC > +{}; + +// Dynamic topic callback (DynamicDataReader) with SampleInfo +template +class DdtcSampleInfo + : public GenericDtcSC > +{}; +} \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/include/DDS/Generic/ddsgen_export.h b/qt6-after/qt6-migrated-legatus/include/DDS/Generic/ddsgen_export.h new file mode 100644 index 000000000..818f6bde7 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/include/DDS/Generic/ddsgen_export.h @@ -0,0 +1,32 @@ +#pragma once + +// Stub header for BUILD_RTI=OFF +// Original ddsgen_export.h comes from RTI Connext DDS code generation + +// For BUILD_RTI=OFF, we don't need DLL export/import macros +// Define DDSGEN_EXPORT as empty +#ifndef DDSGEN_EXPORT +#define DDSGEN_EXPORT +#endif + +#ifndef DDSGEN_NO_EXPORT +#define DDSGEN_NO_EXPORT +#endif + +// Static library marker (not used for BUILD_RTI=OFF) +#ifndef DDSGEN_STATIC_DEFINE +#define DDSGEN_STATIC_DEFINE +#endif + +// Deprecated marker (optional, can be empty) +#ifndef DDSGEN_DEPRECATED +#define DDSGEN_DEPRECATED +#endif + +#ifndef DDSGEN_DEPRECATED_EXPORT +#define DDSGEN_DEPRECATED_EXPORT DDSGEN_DEPRECATED DDSGEN_EXPORT +#endif + +#ifndef DDSGEN_DEPRECATED_NO_EXPORT +#define DDSGEN_DEPRECATED_NO_EXPORT DDSGEN_DEPRECATED DDSGEN_NO_EXPORT +#endif \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_base.h b/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_base.h new file mode 100644 index 000000000..3494eec30 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_base.h @@ -0,0 +1,51 @@ +#pragma once + +// Stub header for BUILD_RTI=OFF +// Original generic_base.h uses RTI Connext DDS types + +#include +#include + +// Forward declarations for Qt types used in getMethod +class QObject; +class QMetaMethod; + +// Forward declaration for NGL logger +namespace NGL { +class INGLLogger; +} + +namespace DDS +{ + +// Template for topic type name - returns empty string for BUILD_RTI=OFF +template +struct topic_type_name { + static std::string value() { + return ""; + } +}; + +namespace Helper +{ +// Stub implementations for BUILD_RTI=OFF +DDSGEN_EXPORT inline std::string getFunctionTopicName(const std::string &fqName) { + return fqName; +} + +DDSGEN_EXPORT inline std::string getShortTopicName(const std::string &fqName) { + return fqName; +} + +// Stub for getMethod - returns default-constructed QMetaMethod +DDSGEN_EXPORT inline QMetaMethod getMethod(NGL::INGLLogger &logger, + QObject *objectToInform, + const char *slotToExecute, + const char *signalSignature, + bool bWarnOnEmptySlot = true) { + // Stub implementation - returns default QMetaMethod + return QMetaMethod(); +} +} + +} // namespace DDS \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_data_reader.h b/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_data_reader.h new file mode 100644 index 000000000..fee4cdcd5 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_data_reader.h @@ -0,0 +1,44 @@ +#pragma once + +/** + * @file generic_data_reader.h + * @brief Stub header for BUILD_RTI=OFF configuration + * + * This file provides minimal stub definitions for DDS Generic Data Reader + * when RTI Connext DDS is not available (BUILD_RTI=OFF). + */ + +#ifdef BUILD_RTI +// RTI DDS is available - include the real implementation +#include +#else +// BUILD_RTI=OFF: Provide minimal stub definitions + +namespace dds { +namespace sub { + +// Forward declaration stub for DataReader +template +class DataReader { +public: + // Minimal stub interface - add methods as needed by the codebase + T read() { return T{}; } + void take() {} +}; + +} // namespace sub +} // namespace dds + +// GenericDataReader stub template +template +class GenericDataReader { +public: + using DataType = T; + + // Minimal stub methods - extend as needed + bool has_data() const { return false; } + T read_data() { return T{}; } + void cleanup() {} +}; + +#endif // BUILD_RTI \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_logger.h b/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_logger.h new file mode 100644 index 000000000..e3a0711fc --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/include/DDS/Generic/generic_logger.h @@ -0,0 +1,49 @@ +#pragma once + +// Stub header for BUILD_RTI=OFF +// Original generic_logger.h uses NGL::INGLLogger from RTI infrastructure + +#include +#include +#include + +namespace DDS +{ + +// DataType enum - same as original, no RTI dependency +enum class DataType +{ + DATA_TYPE_UNKNOWN = 0, + + DATA_WRITER = 1, + DATA_READER = 2, + + DYNAMIC_DATA_WRITER = 3, + DYNAMIC_DATA_READER = 4, + + DATA_TOPIC_SERVER = 8, + DATA_TOPIC_CLIENT = 9, + + FUNCTION_TOPIC_SERVER = 12, + FUNCTION_TOPIC_CLIENT = 13 +}; + +// Logger type alias +using LOGGER_T = NGL::INGLLogger&; + +// Stub implementation for getLogger +// Returns a dummy logger reference - in real usage, this would need proper initialization +DDSGEN_EXPORT inline LOGGER_T getLogger(const char *name, DataType dt) { + // Stub: return a static dummy logger + // In production code with BUILD_RTI=OFF, this should be replaced with actual logger + static NGL::INGLLogger* dummy_logger = nullptr; + return *dummy_logger; +} + +// Inline overload for std::string +inline LOGGER_T getLogger(const std::string &loggerName, DataType dt) +{ + return getLogger(loggerName.data(), dt); +} + +} // namespace DDS \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db.h b/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db.h index 3de373870..87a8b8249 100644 --- a/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db.h +++ b/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db.h @@ -91,7 +91,7 @@ public: , m_exerciseId(std::nullopt) , m_phaseId(std::nullopt) , m_size(0) - , m_fileStatus(FileStatus::Valid) + , m_fileStatus(FileStatus_Valid) , m_fileCategory(FileCategory::Global) , m_fileType(FileType::Unknown) , m_isTemplate(false) @@ -121,7 +121,7 @@ public: FileCategory fileCategory() const { return m_fileCategory; } FileType fileType() const { return m_fileType; } bool isTemplate() const { return m_isTemplate; } - bool isDeleted() const { return m_fileStatus == FileStatus::Deleted; } + bool isDeleted() const { return m_fileStatus == FileStatus_Deleted; } bool isHidden() const { return m_hidden; } bool isUsedBy() const { return m_used; } std::string usedBy() const { return m_usedBy; } diff --git a/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db_impl.h b/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db_impl.h index c665ad8ed..075bd09f5 100644 --- a/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db_impl.h +++ b/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_db_impl.h @@ -6,8 +6,62 @@ */ #pragma once -#include +#include #include +#include + +// Minimal Logger stub for BUILD_RTI=OFF +namespace NGL +{ +enum class LogLevel +{ + Undefined = 0, + Trace = 64, + Debug = 96, + Info = 128, + Warning = 150, + Error = 182, + Fatal = 214, +}; + +class Logger +{ +public: + bool isTraceEnabled() const { return false; } + bool isDebugEnabled() const { return true; } + bool isInfoEnabled() const { return true; } + bool isWarningEnabled() const { return true; } + bool isErrorEnabled() const { return true; } + bool isFatalEnabled() const { return true; } +}; +} + +// Logger macros (simplified for Qt6) - work with pointer +#define LOGFUNCTION Q_FUNC_INFO + +#ifdef LTS_DEBUG +#define TRACE_LOG(logger) \ + for (bool log_level_enabled = (logger)->isDebugEnabled(); log_level_enabled; log_level_enabled = false) \ + qDebug() << "[TRACE]" << __FILE__ << ":" << __LINE__ << Q_FUNC_INFO +#else +#define TRACE_LOG(logger) \ + if (false) qDebug() +#endif + +#define DEBUG_LOG(logger) \ + if (!(logger)->isDebugEnabled()) {} else qDebug() << "[DEBUG]" << __FILE__ << ":" << __LINE__ << Q_FUNC_INFO + +#define INFO_LOG(logger) \ + if (!(logger)->isInfoEnabled()) {} else qDebug() << "[INFO]" << __FILE__ << ":" << __LINE__ << Q_FUNC_INFO + +#define WARNING_LOG(logger) \ + if (!(logger)->isWarningEnabled()) {} else qWarning() << "[WARNING]" << __FILE__ << ":" << __LINE__ << Q_FUNC_INFO + +#define ERROR_LOG(logger) \ + if (!(logger)->isErrorEnabled()) {} else qCritical() << "[ERROR]" << __FILE__ << ":" << __LINE__ << Q_FUNC_INFO + +#define FATAL_LOG(logger) \ + if (!(logger)->isFatalEnabled()) {} else qCritical() << "[FATAL]" << __FILE__ << ":" << __LINE__ << Q_FUNC_INFO namespace FileManagement { @@ -18,16 +72,33 @@ namespace FileManagement * This class is normally generated by CODEGEN_DATABASE macro. * This stub provides minimal interface for BUILD_RTI=OFF builds. */ -class DatabaseInterfaceImpl : public QObject +class DatabaseInterfaceImpl { - Q_OBJECT public: - explicit DatabaseInterfaceImpl(QObject *parent = nullptr) : QObject(parent) {} - virtual ~DatabaseInterfaceImpl() = default; + DatabaseInterfaceImpl() + : m_logger(nullptr) + , m_query(nullptr) + { + m_logger = new NGL::Logger(); + m_query = new NSqlQuery(QSqlDatabase()); + } + virtual ~DatabaseInterfaceImpl() + { + delete m_logger; + delete m_query; + } // Virtual methods that can be overridden by custom implementations virtual bool updateStatus(int fileId, const FileStatus &status, int operatorId) = 0; virtual bool setUsedBy(int fileId, const bool &usedBy, int usedNo, int operatorId) = 0; + +protected: + // Member variables expected by custom implementations + NGL::Logger* m_logger; + NSqlQuery* m_query; + + // Helper methods expected by custom implementations + QString getTableName(const QString &baseName) const { return baseName; } }; } // namespace FileManagement \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_dtc_impl.h b/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_dtc_impl.h new file mode 100644 index 000000000..2e4496d1b --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_dtc_impl.h @@ -0,0 +1,86 @@ +/** + * @RDE_HEADER@ + * FileManagement DTC Implementation + * $Id$ + * $HeadURL$ + * $Author$ + * Stub-Header für Qt6-Migration - ersetzt DDS-generierten Header + */ +#pragma once + +#include +#include +#include + +// Forward declarations für DDS +namespace DDSConnector +{ +class DdsConnector; +} + +// Stub für DDS DataReader - wird normalerweise von DDS generiert +template +class DdsDataReaderStub +{ +public: + struct LoanedSamplesWrapper + { + auto begin() { return m_samples.begin(); } + auto end() { return m_samples.end(); } + std::vector m_samples; + }; + + LoanedSamplesWrapper readAlive() { return LoanedSamplesWrapper{}; } +}; + +//------------------------------------------------------------------------------------------------------------- +namespace FileManagement +{ +namespace Interface +{ +/** + * @brief DtcImpl - Basisklasse für FileManagement DTC + * + * Stellt Logger und DDS-DataReader für Custom-Implementierungen bereit + * Erbt von DatabaseInterfaceImpl für Datenbank-Zugriff + */ +class DtcImpl : public DatabaseInterfaceImpl +{ +public: + explicit DtcImpl(const std::shared_ptr &ddsConnector) + : DatabaseInterfaceImpl() + , m_ddsConnector(ddsConnector) + , m_dtcFileContent(std::make_unique>()) + , m_dtcFolder(std::make_unique>()) + { + // Logger wird von DatabaseInterfaceImpl bereitgestellt + // m_logger ist in DatabaseInterfaceImpl definiert + } + + ~DtcImpl() override = default; + + // Virtuelle Methoden für Custom-Implementierung + virtual bool getAllTemplates(QList &allTemplates) = 0; + virtual bool getAllFiles(const FileType &fileType, int folderId, QStringList &allFiles, bool showHidden = false) = 0; + virtual bool getFilesOperator(const FileType &fileType, int folderId, int operatorId, QStringList &allFiles) = 0; + virtual bool getFile(const FileType &fileType, int folderId, const QString &fileName, FileContent &fileMetadata) = 0; + virtual int getExerciseId(int folderId) = 0; + virtual int getFileId(const FileType &fileType, const QString &fileName, int exerciseId, int phaseId) = 0; + virtual int findFolder(int parentId, const QString &name) const = 0; + virtual int getExerciseFolderId(int exerciseId) const = 0; + virtual int getPhaseFolderId(int exerciseId, int phaseId) const = 0; + virtual int getPartyFolderId(int exerciseId, int partyId) const = 0; + + // Default-Implementierungen für Namen-Helper + virtual QString getExerciseFolderName(int exerciseId) const { return QLatin1String("$EX_") + QString::number(exerciseId); } + virtual QString getPartyFolderName(int partyId) const { return QLatin1String("$PY_") + QString::number(partyId); } + virtual QString getPhaseFolderName(int phaseId) const { return QLatin1String("$PH_") + QString::number(phaseId); } + +protected: + std::shared_ptr m_ddsConnector; + std::unique_ptr> m_dtcFileContent; + std::unique_ptr> m_dtcFolder; +}; + +} // namespace Interface +} // namespace FileManagement \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_enums.hpp b/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_enums.hpp index aacdeac59..0191c52c2 100644 --- a/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_enums.hpp +++ b/qt6-after/qt6-migrated-legatus/include/FileManagement/flm_enums.hpp @@ -8,7 +8,14 @@ namespace FileManagement { // Enums aus flm_service.xml +// Für BUILD_RTI=OFF: FileStatus als int, um direkte Vergleiche zu ermöglichen +#ifndef BUILD_RTI +using FileStatus = int; +constexpr int FileStatus_Valid = 0; +constexpr int FileStatus_Deleted = 1; +#else enum class FileStatus : int { Valid = 0, Deleted = 1 }; +#endif enum class FileCategory : int { Global = 1, Exercise = 2, User = 3 }; diff --git a/qt6-after/qt6-migrated-legatus/include/LtsUtils/LtsUtilsCore/data_modification_enum.h b/qt6-after/qt6-migrated-legatus/include/LtsUtils/LtsUtilsCore/data_modification_enum.h new file mode 100644 index 000000000..c6c7283c8 --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/include/LtsUtils/LtsUtilsCore/data_modification_enum.h @@ -0,0 +1,18 @@ +/** + * Enum to describe the type of modification for an incoming data topic + * $Id$ + * $HeadURL$ + * $Author$ + * Created by Christian Ehrlicher, SLSE, 2016-02-26 + * + * Stub für BUILD_RTI=OFF + */ + +#pragma once + +enum class DataModification +{ + eAdded, + eModified, + eRemoved +}; \ No newline at end of file diff --git a/qt6-after/qt6-migrated-legatus/include/OperatorManagement/opm_dtc_impl.h b/qt6-after/qt6-migrated-legatus/include/OperatorManagement/opm_dtc_impl.h new file mode 100644 index 000000000..7be83491c --- /dev/null +++ b/qt6-after/qt6-migrated-legatus/include/OperatorManagement/opm_dtc_impl.h @@ -0,0 +1,93 @@ +/** + * @RDE_HEADER@ + * OperatorManagement DTC Implementation + * $Id$ + * $HeadURL$ + * $Author$ + * Stub-Header für Qt6-Migration - ersetzt DDS-generierten Header + */ +#pragma once + +#include +#include +#include + +// Forward declarations für DDS +namespace DDSConnector +{ +class DdsConnector; +} + +// User-Klasse Stub für Qt6-Migration +// Hinweis: Diese Klasse wird normalerweise von DDS generiert +// Dieser Stub stellt die benötigten Methoden für opm_dtc_impl_custom.cpp bereit +class User +{ +public: + int id() const { return m_id; } + QString name() const { return m_name; } + QVector effectiveAcls() const { return m_effectiveAcls; } + + struct VisiblePartyByExercise + { + int exerciseId() const { return m_exerciseId; } + std::optional> visibleParties() const { return m_visibleParties; } + std::optional> hiddenParties() const { return m_hiddenParties; } + QString properties() const { return m_properties; } + + int m_exerciseId = 0; + std::optional> m_visibleParties; + std::optional> m_hiddenParties; + QString m_properties; + }; + + QVector visiblePartiesByExercise() const { return m_visiblePartiesByExercise; } + QVector exerciseIds() const { return m_exerciseIds; } + QString properties() const { return m_properties; } + +private: + int m_id = 0; + QString m_name; + QVector m_effectiveAcls; + QVector m_visiblePartiesByExercise; + QVector m_exerciseIds; + QString m_properties; +}; + +//------------------------------------------------------------------------------------------------------------- +namespace OperatorManagement +{ +namespace Interface +{ +/** + * @brief DtcImpl - Basisklasse für OperatorManagement DTC + * + * Stellt Logger und User-Container für Custom-Implementierungen bereit + * Erbt von FileManagement::DatabaseInterfaceImpl für Datenbank-Zugriff + */ +class DtcImpl : public FileManagement::DatabaseInterfaceImpl +{ +public: + explicit DtcImpl(const std::shared_ptr &ddsConnector) + : FileManagement::DatabaseInterfaceImpl() + , m_ddsConnector(ddsConnector) + { + // Logger wird von DatabaseInterfaceImpl bereitgestellt + // m_logger ist in DatabaseInterfaceImpl definiert + } + + ~DtcImpl() override = default; + + // Virtuelle Methoden für Custom-Implementierung + virtual std::vector getOperatorsByOperatorRight(int operatorRight) = 0; + virtual std::vector operatorForExerciseParty(int exerciseId, int partyId) = 0; + virtual std::vector getNotificationRecipents(int exerciseId, int partyId, int operatorRight, int notificationType) = 0; + virtual bool isAdlerAllowedParty(int exerciseId, int partyId, int operatorId) = 0; + +protected: + std::shared_ptr m_ddsConnector; + QHash m_userCont; // User-Container für Operator-Daten +}; + +} // namespace Interface +} // namespace OperatorManagement \ No newline at end of file