/** * Exercises Handler - checks the avilable exercises and creates subhandlers fort each of them * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-04-14 */ #pragma once #include #include #include #include "dds_handler.h" #include #include namespace WarehouseManagement { struct ParticipantInfoStruct { int equipmentNumber = 0; int participantId = 0; int exerciseId = 0; }; inline std::ostream &operator <<(std::ostream &stream, const ParticipantInfoStruct &pis) { stream << "exerciseId = " << pis.exerciseId << ", participantId = " << pis.participantId << ", equipmentNumber = " << pis.equipmentNumber; return stream; } class ExerciseParticipantHandler; class ExercisesHandler : public QObject, protected ParticipantManagement::Interface::Ftc::ModifyEquipmentTypeDataReplyHandler { Q_OBJECT public: ExercisesHandler(const std::shared_ptr &ddsHandler); ~ExercisesHandler(); bool init(); QMap getExercises() const; ParticipantManagement::Party getParty(int partyId, int exerciseId) const; ParticipantManagement::Participant getParticipant(int participantId, int exerciseId) const; QString getHierarchyFromParticipant(int participantId, int exerciseId, const QMap &allParticipants) const; QMap getParticipants(int exerciseId) const; ParticipantManagement::Type participantType(int typeId) const; ParticipantManagement::TypeClass typeClassIdFromEquipmentTypeId(int equipTypeId) const; bool registerParticipant(int exerciseId, qint32 participantId, ParticipantManagement::ParticipantAssignState assignState, const dds::core::optional &equipNo, const dds::core::optional &identification, const dds::core::optional &info); bool unregisterParticipant(int exerciseId, qint32 equipNo); bool modifyEquipmentTypes(const std::vector &vectorEquipTypes); // key is the equipment number + exerciseId bool addParticipant(const ParticipantInfoStruct &pis); // key is the equipment number + exerciseId bool modifyParticipant(const ParticipantInfoStruct &pis); // key is the equipment number + exerciseId bool removeParticipant(const ParticipantInfoStruct &pis); QVector infoStructForEquipment(int equipmentNumber) const; Q_SIGNALS: void registrationReturnValue(int exerciseId, qint32 participantId, ParticipantManagement::RegisterReturnValue retValue); void participantChanged(const ParticipantManagement::Participant &data, DataModification modType, int exerciseId); void exerciseChanged(const ExerciseManagement::Exercise &data, DataModification modType); private: void exerciseAdded(int exerciseId); void exerciseRemoved(int exerciseId); QMultiHash::iterator findParticipant(const ParticipantInfoStruct &pis); private Q_SLOTS: void onExerciseChanged(const ExerciseManagement::Exercise &data, DataModification modType); void onModifyEquipmentTypeDataReply(const Core::FunctionReplyObject &replyObject) override; private: std::shared_ptr m_ddsHandler; QHash m_exerciseHandler; // QMultiMap QMultiHash m_participants; NGL::INGLLogger &m_logger; }; } // namespace WarehouseManagement