148 lines
6.7 KiB
C++
Executable File
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
|