Files
qt5-legatus-legacy/Lts/Services/ParticipantManagement/ParticipantHandling/participant.h
T
2026-08-13 18:33:10 +02:00

148 lines
6.7 KiB
C++
Executable File

/**
* 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