/** * Convert internal gear and charge id to and from tas ids * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-04-14 */ #include "ppm_handler.h" #include "main_handler.h" namespace Buildings { PpmHandler::PpmHandler(MainHandler *mainHandler) : m_mainHandler(mainHandler) , m_logger(getLogger("PpmHandler")) {} PpmHandler::~PpmHandler() {} bool PpmHandler::init() { m_ppmDtc = ParticipantManagement::Interface::Dtc::create(m_mainHandler->ddsHandler()->ddsConnector()); connect(m_ppmDtc.get(), &ParticipantManagement::Interface::Dtc::equipmentExerciseMappingChanged, this, &PpmHandler::onEquipmentExerciseMappingChanged); connect(m_ppmDtc.get(), &ParticipantManagement::Interface::Dtc::participantPositionChanged, this, &PpmHandler::onParticipantPositionChanged); if (!m_ppmDtc->enableEquipmentExerciseMapping()) { ERROR_LOG(m_logger) << "Can not read equipment/exercise mappings from PPM"; return false; } if (!m_ppmDtc->enableParticipantPosition()) { ERROR_LOG(m_logger) << "Can not read ParticipantPositions from PPM"; return false; } return true; } int PpmHandler::equipmentNumberToParticipantId(int equipmentNumber) const { const int ret = m_equipmentNumber2ParticipantId.value(equipmentNumber, -1); if (ret < 0) WARNING_LOG(m_logger) << "Can not map equipment number " << equipmentNumber << " to a valid participant id - using -1"; return ret; } ParticipantManagement::ParticipantPosition PpmHandler::participantPosition(int participantId) const { return m_participantPositions.value(participantId); } void PpmHandler::onEquipmentExerciseMappingChanged(const ParticipantManagement::EquipmentExerciseMapping &data, DataModification modType) { if (data.exerciseId() != m_mainHandler->exerciseId()) return; m_equipmentNumber2ParticipantId.clear(); switch (modType) { case DataModification::eAdded: case DataModification::eModified: for (const ParticipantManagement::Equipment2ParticipantId &e2p : data.mapping()) m_equipmentNumber2ParticipantId[e2p.equipmentNumber()] = e2p.participantId(); break; case DataModification::eRemoved: break; } } void PpmHandler::onParticipantPositionChanged(const ParticipantManagement::ParticipantPosition &data, DataModification modType) { switch (modType) { case DataModification::eAdded: case DataModification::eModified: m_participantPositions[data.participantId()] = data; break; case DataModification::eRemoved: m_participantPositions.remove(data.participantId()); break; } } } // namespace Buildings