142 lines
4.6 KiB
C++
Executable File
142 lines
4.6 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
|
|
*/
|
|
|
|
#include "participant_for_exercise.h"
|
|
#include "main_handler.h"
|
|
#include "convert_db_to_dds.h"
|
|
|
|
namespace ParticipantManagement
|
|
{
|
|
namespace ParticipantHandling
|
|
{
|
|
|
|
//
|
|
// ParticipantForExercise
|
|
//
|
|
ParticipantForExercise::ParticipantForExercise(MainHandler *mainHandler,
|
|
ParticipantHandler *particpantHandler,
|
|
UnitPositionCalculator *unitPosCalculator,
|
|
const Database::PpmParticipant &data)
|
|
: Participant(particpantHandler, unitPosCalculator, data, "Participant")
|
|
, m_mainHandler(mainHandler)
|
|
{}
|
|
|
|
ParticipantForExercise::~ParticipantForExercise()
|
|
{
|
|
removeFromDds();
|
|
}
|
|
|
|
bool ParticipantForExercise::applyEquipmentExerciseMapping(int newEqId)
|
|
{
|
|
if (!newEqId)
|
|
return true;
|
|
|
|
if (m_equipmentExerciseMappingPublished.equipmentNumber == newEqId &&
|
|
m_equipmentExerciseMappingPublished.participantId == id() &&
|
|
m_equipmentExerciseMappingPublished.exerciseId == m_mainHandler->exerciseId())
|
|
return true;
|
|
|
|
|
|
Database::EquipmentExerciseMapping dbEem;
|
|
dbEem.equipmentNumber = newEqId;
|
|
dbEem.participantId = id();
|
|
dbEem.exerciseId = m_mainHandler->exerciseId();
|
|
|
|
DEBUG_LOG(m_logger) << "Inserting EquipmentExerciseMapping into db: " << dbEem.equipmentNumber
|
|
<< ", " << dbEem.participantId
|
|
<< ", " << dbEem.exerciseId;
|
|
if (!m_mainHandler->dbEx0()->insert(dbEem))
|
|
{
|
|
m_participantData.equipmentNumber().reset();
|
|
m_participantData.assignState(ParticipantAssignState::NotAssigned);
|
|
publishParticipant();
|
|
return false;
|
|
}
|
|
|
|
m_participantHandler->setEquipmentNumberForParticipant(m_equipmentExerciseMappingPublished.equipmentNumber,
|
|
dbEem.equipmentNumber,
|
|
id());
|
|
m_equipmentExerciseMappingPublished = dbEem;
|
|
return true;
|
|
}
|
|
|
|
void ParticipantForExercise::removeEquipmentExerciseMapping(int oldEqId, bool bIsShutdown)
|
|
{
|
|
if (!oldEqId)
|
|
return;
|
|
m_equipmentExerciseMappingPublished = Database::EquipmentExerciseMapping();
|
|
|
|
if (!bIsShutdown)
|
|
{
|
|
Database::EquipmentExerciseMapping dbEem;
|
|
dbEem.equipmentNumber = oldEqId;
|
|
dbEem.participantId = id();
|
|
dbEem.exerciseId = m_mainHandler->exerciseId();
|
|
m_mainHandler->dbEx0()->removeEquipmentExerciseMapping(dbEem);
|
|
m_participantHandler->setEquipmentNumberForParticipant(oldEqId, 0, id());
|
|
}
|
|
}
|
|
|
|
bool ParticipantForExercise::updateEquipmentExerciseMapping(int oldEqId, int newEqId)
|
|
{
|
|
DEBUG_LOG(m_logger) << "updateEquipmentExerciseMapping from " << oldEqId << " to " << newEqId;
|
|
if (oldEqId == newEqId)
|
|
return true;
|
|
removeEquipmentExerciseMapping(oldEqId, false);
|
|
return applyEquipmentExerciseMapping(newEqId);
|
|
}
|
|
|
|
bool ParticipantForExercise::publishParticipant()
|
|
{
|
|
return Participant::publishParticipant();
|
|
}
|
|
|
|
void ParticipantForExercise::removeFromDds() // only called on shutdown
|
|
{
|
|
removeEquipmentExerciseMapping(equipmentNumber(), true);
|
|
Participant::removeFromDds();
|
|
}
|
|
|
|
void ParticipantForExercise::registerInfoFromFt(const RegisterParticipantRequest &request)
|
|
{
|
|
m_participantData.info(request.info());
|
|
m_participantData.identification(request.identification());
|
|
}
|
|
|
|
bool ParticipantForExercise::registerFromFt(const RegisterParticipantRequest &request)
|
|
{
|
|
int newEquipmentNumber = request.equipmentNumber();
|
|
// just to be sure ...
|
|
if (request.assignState() == ParticipantAssignState::NotAssigned)
|
|
newEquipmentNumber = 0;
|
|
|
|
if (!updateEquipmentExerciseMapping(equipmentNumber(), newEquipmentNumber))
|
|
return false;
|
|
particpantHandler()->setEquipmentNumberForParticipant(equipmentNumber(),
|
|
newEquipmentNumber,
|
|
id());
|
|
|
|
INFO_LOG(m_logger) << "Set assign state for participant " << id() << " from "
|
|
<< assignState() << " to " << request.assignState()
|
|
<< ", old eqid: " << equipmentNumber() << ", new eqid: "
|
|
<< newEquipmentNumber;
|
|
|
|
if (newEquipmentNumber)
|
|
m_participantData.equipmentNumber(newEquipmentNumber);
|
|
else
|
|
m_participantData.equipmentNumber().reset();
|
|
m_participantData.assignState(request.assignState());
|
|
m_participantData.info(request.info());
|
|
m_participantData.identification(request.identification());
|
|
return true;
|
|
}
|
|
|
|
|
|
} // namespace ParticipantHandling
|
|
} // namespace ParticipantManagement
|