/** * @RDE_HEADER@ * Interface Impl zwischen WMS und ECC * $Id$ * $HeadURL$ * $Author$ */ #include "interface_wms2ecc_impl.h" #include "exercises_handler.h" #include #include #include #include #include namespace WarehouseManagement { IWMS2ECC_Impl::IWMS2ECC_Impl(const std::shared_ptr &exercisesHandler) : m_exercisesHandler(exercisesHandler) , m_logger(getLogger("Wms2Ecc")) { connect(m_exercisesHandler.get(), &ExercisesHandler::registrationReturnValue, this, &IWMS2ECC_Impl::onRegistrationReturnValue); } IWMS2ECC::Exercise IWMS2ECC_Impl::convert(const ExerciseManagement::Exercise &ex) { IWMS2ECC::Exercise ret; ret.id = ex.id(); ret.name = QString::fromStdString(ex.name()); if (ex.state() == ExerciseManagement::ExerciseState_def::Started || ex.state() == ExerciseManagement::ExerciseState_def::Paused) ret.actExercise = 1; else ret.actExercise = 0; ret.start = ex.beginTime() / 1000; // ms -> s ret.end = ex.endTime() / 1000; // ms -> s ret.stateAsString = ExerciseManagement::toString(ex.state()); return ret; } IWMS2ECC::PlayerInfo IWMS2ECC_Impl::convert(const ParticipantManagement::Participant &part, int exerciseId, const QMap &allParticipants) const { IWMS2ECC::PlayerInfo pi; pi.alias = QString::fromStdString(part.identification()); pi.assignState = convert(part.assignState()); pi.designator = QString::fromStdString(part.designator()); if (part.equipmentNumber().is_set()) pi.equipNo = part.equipmentNumber().get(); else if (part.assignState() == ParticipantManagement::ParticipantAssignState_def::HandoutExcon) pi.equipNo = 0; pi.exerciseId = exerciseId; pi.forceId = part.partyId(); DEBUG_LOG(m_logger) << "Force Id = " << pi.forceId; pi.info = QString::fromStdString(part.info()); pi.parentPlayerId = part.superiorId(); pi.playerId = part.id(); pi.playerState = part.isDeleted() ? IWMS2ECC::PlayerState::DELETED : IWMS2ECC::PlayerState::FOUND; pi.tactIdent = QString::fromStdString(part.tacticalIdentifier()); const ParticipantManagement::Type partType = m_exercisesHandler->participantType(part.typeId()); if (partType.id() == part.typeId()) { pi.equipTypeId = partType.equipmentTypeId(); pi.typeClassId = convert(partType.typeClass()); TRACE_LOG(m_logger) << "Found participant type with id " << part.typeId() << ", " << pi.typeClassId << ", " << pi.equipTypeId; } else WARNING_LOG(m_logger) << "Can not find participant type with id " << part.typeId(); pi.typeId = part.typeId(); pi.isDeleted = part.isDeleted(); pi.hierarchy = m_exercisesHandler->getHierarchyFromParticipant(part.id(), exerciseId, allParticipants); const ParticipantManagement::Party party = m_exercisesHandler->getParty(part.partyId(), exerciseId); pi.forceName = QString::fromStdString(party.name()); pi.symbolColor = party.color(); DEBUG_LOG(m_logger) << "party.name: " << pi.forceName; DEBUG_LOG(m_logger) << "symbolColor: " << pi.symbolColor << ", playerId: " << pi.playerId << ", exerciseId: " << exerciseId; // TODO //pi.symbolPNG return pi; } IWMS2ECC::exerciseMap IWMS2ECC_Impl::getExercises() const { const QMap exMap = m_exercisesHandler->getExercises(); IWMS2ECC::exerciseMap retMap; for (const ExerciseManagement::Exercise &ex : exMap) { if (ex.sendToWMS()) retMap.insert(ex.id(), convert(ex)); } INFO_LOG(m_logger) << "IN getExercises, exMap.size(): " << exMap.size() << ", retMap.size: " << retMap.size(); return retMap; } IWMS2ECC::Exercise IWMS2ECC_Impl::getActualExercise() const { return IWMS2ECC::Exercise(); } int IWMS2ECC_Impl::getPlayerId(int equipNo, int exerciseId) const { Q_ASSERT(false); Q_UNUSED(equipNo); Q_UNUSED(exerciseId); return -1; } int IWMS2ECC_Impl::getEquipNo(int playerId, int exerciseId) const { Q_ASSERT(false); Q_UNUSED(playerId); Q_UNUSED(exerciseId); return -1; } QMap IWMS2ECC_Impl::getAllPlayers(int exerciseId) const { return getAllParticipants(exerciseId); } QMap IWMS2ECC_Impl::getAllParticipants(int exerciseId) const { INFO_LOG(m_logger) << "IN getAllParticipants"; QMap retMap; const QMap map = m_exercisesHandler->getParticipants(exerciseId); INFO_LOG(m_logger) << "getAllPlayers map.size() : " << map.size(); for (const ParticipantManagement::Participant &exePart : map) { IWMS2ECC::PlayerInfo pi = convert(exePart, exerciseId, map); // add exerciseId and 1000000 to partcipantId to distinguish the different exercises // if there are more than one current exercise pi.playerId = (exerciseId * 1000000) + pi.playerId; pi.parentPlayerId = (exerciseId * 1000000) + pi.parentPlayerId; if (pi.playerState == PlayerState::FOUND) retMap.insert(pi.playerId, pi); } return retMap; } QMap IWMS2ECC_Impl::getAllVehicles(int exerciseId) const { Q_ASSERT(false); Q_UNUSED(exerciseId); return {}; } IWMS2ECC::RegisterReturnValue IWMS2ECC_Impl::registerPlayer(int playerId, int equipNo, const IWMS2ECC::PlayerAssignState &playerAssignState, const QString &alias, const QString &info, int exerciseId) { ParticipantManagement::ParticipantAssignState assignState = convert(playerAssignState); m_exercisesHandler->registerParticipant(exerciseId, playerId, assignState, equipNo, alias, info); return IWMS2ECC::RegistrationFailed; } void IWMS2ECC_Impl::onRegistrationReturnValue(int exerciseId, qint32 participantId, ParticipantManagement::RegisterReturnValue retValue) { INFO_LOG(m_logger) << "IN onRegistrationReturnValue "; INFO_LOG(m_logger) << "exerciseId: " << exerciseId << ", participantId: " << participantId << ", retValue: " << retValue; emit registrationReturnValue(exerciseId, participantId, convert(retValue)); } IWMS2ECC::UnregisterReturnValue IWMS2ECC_Impl::unregister(int equipNo, int exerciseId) { if (!m_exercisesHandler->unregisterParticipant(exerciseId, equipNo)) return IWMS2ECC::UnregisterFailed; return IWMS2ECC::UnregisterOk; // ok -> unregister is in progress } IWMS2ECC::PlayerInfo IWMS2ECC_Impl::getPlayerInfo(int playerId, int exerciseId) { DEBUG_LOG(m_logger) << "IN getPlayerInfo: " << " playerId = " << playerId << ", exerciseId = " << exerciseId; if (playerId <= 0 || exerciseId <= 0) { WARNING_LOG(m_logger) << "Invalid Player (0,0)"; IWMS2ECC::PlayerInfo pi; pi.playerState = NOT_FOUND; return pi; } // HR 10.04.14 vorerst mit zurueckgeben // Nur Player zurueckgeben, die nicht(!) von EXCON angemeldet sind ( != HANDOUT_EXCON(1)) ParticipantManagement::Participant part = m_exercisesHandler->getParticipant(playerId, exerciseId); IWMS2ECC::PlayerInfo pi; if (part.assignState() == ParticipantManagement::ParticipantAssignState_def::HandoutExcon) { pi.playerState = NOT_FOUND; return pi; } pi = convert(part, exerciseId); pi.forceName = QString::fromStdString(m_exercisesHandler->getParty(part.partyId(), exerciseId).name()); //pi.symbolPNG = getSymbol(q.value(4).toInt(), exerciseId, teamData.color, teamData.role); pi.playerState = FOUND; INFO_LOG(m_logger) << "Player (" << pi.playerId << "," << exerciseId << ") found: " << "AssignState: " << pi.assignState << ", forceName: " << pi.forceName; return pi; } QMap IWMS2ECC_Impl::getEquipRequirements(int exerciseId) const { /* QString tableName = getTableName( exerciseId, "tln"); NSqlQuery q; QString stmt = "SELECT count(ty.typausstg_id), ty.typausstg_id from " + tableName + " t, typen ty " "WHERE ty.id = t.typ_id AND t.ausstattung = 1 AND t.loeschkennung = 0 " "GROUP BY ty.typausstg_id"; */ const QMap map = m_exercisesHandler->getParticipants(exerciseId); INFO_LOG(m_logger) << "getAllPlayers map.size() : " << map.size(); QMap reqPartTypes; for (const ParticipantManagement::Participant &part : map) { if (part.isDeleted()) continue; reqPartTypes[part.typeId()]++; } QMap reqEquipTypes; QMap::ConstIterator cIt = reqPartTypes.constBegin(); for (; cIt != reqPartTypes.constEnd(); ++cIt) { const int typeId = cIt.key(); const ParticipantManagement::Type partType = m_exercisesHandler->participantType(typeId); if (partType.id() == typeId) { DEBUG_LOG(m_logger) << "Key: " << typeId; ParticipantManagement::TypeClass typeClass = partType.typeClass(); int equipTypeId = partType.equipmentTypeId(); if (typeClass != ParticipantManagement::TypeClass_def::Unit && typeClass != ParticipantManagement::TypeClass_def::SupportUnit) { reqEquipTypes[equipTypeId] = cIt.value(); DEBUG_LOG(m_logger) << "equipTypeId: " << equipTypeId << ", amount: " << cIt.value(); } } else WARNING_LOG(m_logger) << "Can not find participant type with id " << typeId; } return reqEquipTypes; } // TODO: really needed? int IWMS2ECC_Impl::getTypeClassId(int equipTypeId) const { return convert(m_exercisesHandler->typeClassIdFromEquipmentTypeId(equipTypeId)); } QByteArray IWMS2ECC_Impl::getSymbol(int symbolId, int exerciseId, const QColor &color, int role) const { Q_ASSERT(false); Q_UNUSED(symbolId); Q_UNUSED(exerciseId); Q_UNUSED(color); Q_UNUSED(role); return {}; } //------------------------------------------------------------------------------------------------------------------------------------------ IWMS2ECC::EquipmentType IWMS2ECC_Impl::convert(const ParticipantManagement::EquipmentType &et) { IWMS2ECC::EquipmentType ret; ret.id = et.id(); ret.name = QString::fromStdString(et.name()); ret.minEquipNo = et.minEquipNo(); ret.maxEquipNo = et.maxEquipNo(); ret.specialType = int(et.wmsTypeClass().underlying()); ret.taVulnerabilityModelId = et.traVulnerabilityModelId(); ret.taPlayerTypeId = et.traPlayerTypeId(); ret.deletedInWMS = et.deletedInWms(); return ret; } ParticipantManagement::EquipmentType IWMS2ECC_Impl::convert(const IWMS2ECC::EquipmentType &et) { ParticipantManagement::EquipmentType ret; ret.id(et.id); ret.name(et.name.toStdString()); ret.minEquipNo(et.minEquipNo); ret.maxEquipNo(et.maxEquipNo); ParticipantManagement::WmsTypeClass wmsTypeClass = convert(et.specialType); ret.wmsTypeClass(wmsTypeClass); ret.traVulnerabilityModelId(et.taVulnerabilityModelId); ret.traPlayerTypeId(et.taPlayerTypeId); ret.deletedInWms(et.deletedInWMS); return ret; } ParticipantManagement::WmsTypeClass IWMS2ECC_Impl::convert(int specialType) { switch (specialType) { case 0: return ParticipantManagement::WmsTypeClass_def::None; case 1: return ParticipantManagement::WmsTypeClass_def::Building; case 2: return ParticipantManagement::WmsTypeClass_def::Vehicle; case 3: return ParticipantManagement::WmsTypeClass_def::Human; case 4: return ParticipantManagement::WmsTypeClass_def::TargetVehicle; case 5: return ParticipantManagement::WmsTypeClass_def::TargetHuman; case 6: return ParticipantManagement::WmsTypeClass_def::Airborne; case 7: return ParticipantManagement::WmsTypeClass_def::VehicleMarker; default: Q_ASSERT(false); break; } return ParticipantManagement::WmsTypeClass_def::None; } ParticipantManagement::TypeClass IWMS2ECC_Impl::convertTypeClass(int typeClass) { switch (typeClass) { case 1: return ParticipantManagement::TypeClass_def::Unit; case 2: // WeaponSystem return ParticipantManagement::TypeClass_def::VehicleWithGear; case 3: // Vehicle Light case 4: // Vehicle Armored return ParticipantManagement::TypeClass_def::GroundVehicle; case 5: return ParticipantManagement::TypeClass_def::Human; case 6: // OCSoldier case 7: // OCVehicle return ParticipantManagement::TypeClass_def::SupportEntity; case 8: return ParticipantManagement::TypeClass_def::Aircraft; case 10: return ParticipantManagement::TypeClass_def::SupportUnit; default: Q_ASSERT(false); break; } return ParticipantManagement::TypeClass_def::Unit; } int IWMS2ECC_Impl::convert(ParticipantManagement::TypeClass typeClass) { switch (typeClass.underlying()) { case ParticipantManagement::TypeClass_def::Unknown: return 0; // Unknown case ParticipantManagement::TypeClass_def::Unit: return 1; // Unit case ParticipantManagement::TypeClass_def::Human: return 5; // Soldier case ParticipantManagement::TypeClass_def::VehicleWithGear: case ParticipantManagement::TypeClass_def::WeaponSystem: return 2; // WeaponSystem case ParticipantManagement::TypeClass_def::GroundVehicle: return 3; // Vehicle light case ParticipantManagement::TypeClass_def::SupportUnit: return 10; // OCUnit case ParticipantManagement::TypeClass_def::SupportEntity: return 7; // OCVehicle case ParticipantManagement::TypeClass_def::Aircraft: return 8; // Aircraft default: Q_ASSERT(false); break; } return 1; // Unit, Vessel } bool IWMS2ECC_Impl::setEquipmentType(const EquipmentType &et) { std::vector vEquipTypes; const ParticipantManagement::EquipmentType &etData = convert(et); vEquipTypes.push_back(etData); return m_exercisesHandler->modifyEquipmentTypes(vEquipTypes); } bool IWMS2ECC_Impl::setEquipmentTypes(const equipTypeMap &map) { INFO_LOG(m_logger) << "IN setEquipmentTypes: equipMap.size: " << map.size(); std::vector vEquipTypes; vEquipTypes.reserve(map.size()); for (const IWMS2ECC::EquipmentType &et : map) vEquipTypes.push_back(convert(et)); return m_exercisesHandler->modifyEquipmentTypes(vEquipTypes); } IWMS2ECC::PlayerAssignState IWMS2ECC_Impl::convert(const ParticipantManagement::ParticipantAssignState &state) { switch (state.underlying()) { case ParticipantManagement::ParticipantAssignState_def::NotAssigned: return IWMS2ECC::NOT_ASSIGNED; case ParticipantManagement::ParticipantAssignState_def::AssignedWms: return IWMS2ECC::ASSIGNED; case ParticipantManagement::ParticipantAssignState_def::HandoutWms: return IWMS2ECC::HANDOUT_WMS; case ParticipantManagement::ParticipantAssignState_def::HandoutExcon: return IWMS2ECC::HANDOUT_EXCON; case ParticipantManagement::ParticipantAssignState_def::ExconWmsOverruled: return IWMS2ECC::HANDOUT_EXCON_OVERRULED_WMS; } Q_ASSERT(false); return IWMS2ECC::UNDEFINED; } ParticipantManagement::ParticipantAssignState IWMS2ECC_Impl::convert(const IWMS2ECC::PlayerAssignState &state) { switch (state) { case IWMS2ECC::UNDEFINED: return ParticipantManagement::ParticipantAssignState_def::NotAssigned; case IWMS2ECC::NOT_ASSIGNED: return ParticipantManagement::ParticipantAssignState_def::NotAssigned; case IWMS2ECC::ASSIGNED: return ParticipantManagement::ParticipantAssignState_def::AssignedWms; case IWMS2ECC::HANDOUT_WMS: return ParticipantManagement::ParticipantAssignState_def::HandoutWms; case IWMS2ECC::HANDOUT_EXCON: return ParticipantManagement::ParticipantAssignState_def::HandoutExcon; case IWMS2ECC::HANDOUT_EXCON_OVERRULED_WMS: return ParticipantManagement::ParticipantAssignState_def::ExconWmsOverruled; } Q_ASSERT(false); return ParticipantManagement::ParticipantAssignState_def::NotAssigned; } IWMS2ECC::RegisterReturnValue IWMS2ECC_Impl::convert(const ParticipantManagement::RegisterReturnValue retValue) { switch (retValue.underlying()) { case ParticipantManagement::RegisterReturnValue_def::AssignmentIncorrect: return IWMS2ECC::AssignmentIncorrect; case ParticipantManagement::RegisterReturnValue_def::PlayerDeleted: return IWMS2ECC::PlayerDeleted; case ParticipantManagement::RegisterReturnValue_def::PlayerNotFound: return IWMS2ECC::PlayerNotFound; case ParticipantManagement::RegisterReturnValue_def::RegistrationFailed: return IWMS2ECC::RegistrationFailed; case ParticipantManagement::RegisterReturnValue_def::RegistrationOk: return IWMS2ECC::RegistrationOk; case ParticipantManagement::RegisterReturnValue_def::EquipNoAlreadyAssigned: return IWMS2ECC::EquipNoAlreadyAssigned; } Q_ASSERT(false); return IWMS2ECC::RegistrationFailed; } } // Namespace WarehouseManagement