Files
qt-migration-legatus/qt5-before/dlbo/Lts/Services/ParticipantManagement/ParticipantHandling/participant.h
T
torstenandCopilot 7173785915 Qt6 Migration: Complete migration with DDS/RTI support and build validation
Major Changes:
- Merged latest Qt5 devel content from dlbo (292 files changed, 7 new dirs)
- Consolidated forward-declarations and include folders
- Removed unneeded modules per Niklas' repo check list

Build System Fixes:
- Fixed CMake VERSION_GREATER syntax in ParticipantManagement/CMakeLists.txt
- Added VLC packages (libvlc-dev, vlc-plugin-base) to docker_build.sh
- Added PostgreSQL dev packages (libpq-dev, postgresql-server-dev-all) to Dockerfile
- Fixed locale warnings (ANSI_X3.4-1968 → C.UTF-8)
- Fixed ArcGIS SDK path warnings when BUILD_ARCGIS=OFF

Code Generation Fixes:
- Fixed IDL enum collisions (PortType→CorePortType/DdsutPortType, PdmEventType)
- Fixed Grantlee template svc_translation.cpp.grantlee:
  - Changed {{ idl_enum.name }}_def:: to {{ idl_enum.name }}::
  - Fixed .underlying() calls for C++11 scoped enums (enum class)
- Removed generated files from repo (moc_*, *_dtc.h, *_ftc.h)

Validation:
- BUILD_RTI=ON: SUCCESS
- BUILD_RTI=OFF: SUCCESS
- C++17 standard maintained for RTI 7.7 compatibility
- Ubuntu 26.04 Docker environment verified

Remaining Warnings (expected):
- BgViewer, KDChart, KDReports, Poppler-Qt6 not found (optional features)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-15 18:20:26 +00:00

148 lines
6.7 KiB
C++

/**
* The Participant class is the base class for either Buildings or ExerciseParticipants.
* $Id$
* $HeadURL$
* $Author$
* Created by Hannes Baeuerle, SLSE, 2016-05-23
*/
#pragma once
#include "logger.h"
#include <ParticipantManagement/ppm_db_structs.h>
#include <ParticipantManagement/ppm.hpp>
#include <TrainingAreaBase/tab.hpp>
#include <QMutex>
namespace ParticipantManagement
{
class MainHandler;
namespace Interface
{
class Dts;
}
namespace ParticipantHandling
{
class ParticipantHandler;
class UnitPositionCalculator;
class Participant
{
public:
Participant(ParticipantHandler *participantHandler,
UnitPositionCalculator *unitPosCalculator,
const Database::PpmParticipant &data,
const char *loggerName);
virtual ~Participant();
int32_t id() const { return m_participantData.id(); }
int32_t typeId() const { return m_participantData.typeId(); }
int32_t superiorId() const { return m_participantData.superiorId(); }
// return optional?
int32_t equipmentNumber() const { return m_participantData.equipmentNumber().is_set() ? m_participantData.equipmentNumber().get() : 0; }
int32_t partyId() const { return m_participantData.partyId(); }
bool isDeleted() const { return m_participantData.isDeleted(); }
ParticipantAssignState assignState() const { return m_participantData.assignState(); }
const std::vector<int32_t> &inferiors() const { return m_participantData.inferiorIds(); }
ParticipantPosition position() const { return m_positionPublished; }
const DynamicParticipantData &dynamicParticipantData() const { return m_dynamicData; }
const ParticipantManagement::Participant &participantData() const { return m_participantData; }
void markAsDeleted();
bool isValidPosition(qint64 sampleTime, const Core::GeoPosition &pos, Core::PositionReportingSource repSource) const;
bool setPosition(const TrainingAreaBase::EquipmentPosition &newPosition);
bool setPosition(const ParticipantManagement::ParticipantPosition &newPosition, bool bForce = false);
// returns true when the positionTime is newer than the old positionTime
bool setCalculatedPosition(const Core::GeoPosition &pos, int64_t positionTime);
bool setState(const TrainingAreaBase::EquipmentState &newState, int originatorId);
bool setSpecialSensorData(const TrainingAreaBase::SpecialSensorData &data);
bool setGear(const TrainingAreaBase::EquipmentGearAssignment &gearAssignment);
bool setSanitationMaterial(int materialCount,
const std::vector<int> &materialStock,
int abgSn,
qint64 sampleTime,
Qualification qualif,
qint64 eqNo);
bool setSanitation(qint64 sanitationProceduresTaken,
TrainingAreaBase::SanitationResult sanitationResult,
TrainingAreaBase::SanitationEvaluation sanitationEvaluation,
int originatorId,
TrainingAreaBase::Qualification qualification,
qint64 sampleTime);
bool setOperatorAction(int action, int originatorId, qint64 sampleTime);
bool setEquipmentEvent(int event, qint64 sampleTime);
bool setGearCharge(const TrainingAreaBase::GearCharge &charge, qint64 sampleTime);
bool setGearCharge(const GearInformation &gearInfo);
void setDynamicData(const DynamicParticipantData &data);
void setMode(const ParticipantMode &data);
bool isNewAssignStateValid(const ParticipantManagement::ParticipantAssignState &newAssignState, int32_t equipmentNumber) const;
/**
* @brief Method to set this participants data by a modify request and to
* detect if the request really changes the data
* @param data - participant data from a modify request
* @return true if data differs from this participants data, otherwise false
*/
bool hasToBeChanged(const ParticipantManagement::Participant &data);
bool hasToBeChanged(const ParticipantManagement::ParticipantBase &data);
bool hasNewSuperiorId(int32_t superiorId);
bool hasNewInferiorStructure(std::vector<int32_t> inferiorIds);
bool setOperationalState(const TrainingAreaBase::EquipmentOperationalState &operationalState);
RegisterParticipantRequest toRegisterParticipantRequest() const;
virtual void removeFromDds();
virtual bool publishPosition();
virtual bool publishDynamicData();
virtual bool publishMode();
virtual bool publishParticipant();
Database::PpmParticipant toDbParticipant() const;
static ParticipantManagement::Participant toDdsParticipant(const Database::PpmParticipant &data);
protected:
virtual bool updateEquipmentExerciseMapping(int oldEqId, int newEqId) = 0;
bool setPosition(const TrainingAreaBase::EquipmentPosition &newPosition, int mountedToId);
void unmountParticipantById(const TrainingAreaBase::EquipmentPosition &newPosition, int32_t id);
void removeManipulation(int32_t equipmentFunctionId);
void cleanManipulations();
bool gearHasCharge(int32_t gearId) const;
int32_t indexByGearAndChargeId(int32_t gearId, int32_t chargeTypeId = -1) const;
ParticipantHandler *particpantHandler() { return m_participantHandler; }
const ParticipantHandler *particpantHandler() const { return m_participantHandler; }
qint64 currentTimeMSec() const;
std::shared_ptr<Interface::Dts> dts() const;
protected: // attributes
ParticipantHandler *m_participantHandler;
UnitPositionCalculator *m_unitPosCalculator;
qint64 m_lastGearUsage;
qint64 m_lastSanMatUsage{0};
qint64 m_lastManipulationReset;
qint64 m_lastNbcState;
qint64 m_lastSpecialSensorData;
ParticipantPosition m_positionPublished;
ParticipantPosition m_positionToPublish;
DynamicParticipantData m_dynamicData;
DynamicParticipantData m_dynamicDataPublished;
ParticipantManagement::Participant m_participantData;
ParticipantManagement::Participant m_participantPublished;
ParticipantManagement::ParticipantMode m_participantMode;
ParticipantManagement::ParticipantMode m_participantModePublished;
bool m_bPublishPosition; // false for units
QMutex m_mutex;
LOGGER_T m_logger;
}; // class ParticipantBase
} // namespace ParticipantManagement
} // namespace ParticipantHandling