- training_area_telegrams.cpp: Fixed QJsonObject initializer syntax (Qt6 requires {{}} not ({}))
- training_area_telegrams.cpp: Fixed fromJson() methods to access m_* members directly
- training_area_telegrams.cpp: Fixed brace mismatches in multiple toJson() methods
- training_area_telegrams.h: Changed Header struct to public members for consistency
- tx_mixin.cpp: Fixed getEquipmentNumber() template for direct member access
- lts_coordinate.cpp: Added missing #include <iomanip>
- MIGRATION_STATUS.md: Added migration progress tracking document
C++17 constraint enforced due to RTI Connext DDS 7.7.0 incompatibility with C++20+
Build status: BUILD_RTI=OFF successful (0 errors, warnings only)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
262 lines
6.8 KiB
C++
Executable File
262 lines
6.8 KiB
C++
Executable File
|
|
|
|
|
|
#include "tgt_telegrams.h"
|
|
|
|
#include <QtCore/QJsonDocument>
|
|
#include <QtCore/QJsonObject>
|
|
|
|
namespace TargetManagement
|
|
{
|
|
|
|
|
|
|
|
JsonException::JsonException(const QJsonObject &obj, const QString &key)
|
|
: m_obj(obj)
|
|
, m_key(key)
|
|
, m_what("Could not find key '" + key.toUtf8() + "' in json ('" + QJsonDocument(obj).toJson(QJsonDocument::Compact) + "')")
|
|
{}
|
|
|
|
template <typename E>
|
|
QJsonValue enumToJson(E e)
|
|
{
|
|
static_assert(std::is_enum<E>::value, "Only useable with enumerations");
|
|
return static_cast<int>(e);
|
|
}
|
|
|
|
template <typename T>
|
|
bool get(const QJsonObject &obj, const QString &key, T &val, bool bOptional = false)
|
|
{
|
|
if (bOptional)
|
|
{
|
|
try
|
|
{
|
|
val = T::fromJson(obj[key].toObject());
|
|
}
|
|
catch (const JsonException &e)
|
|
{
|
|
Q_UNUSED(e);
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
val = T::fromJson(obj[key].toObject());
|
|
return true;
|
|
}
|
|
|
|
|
|
template <>
|
|
bool get(const QJsonObject &obj, const QString &key, bool &val, bool bOptional)
|
|
{
|
|
const auto jVal = obj[key];
|
|
if (!jVal.isBool())
|
|
{
|
|
if (bOptional)
|
|
return false;
|
|
throw JsonException(obj, key);
|
|
}
|
|
val = jVal.toBool();
|
|
return true;
|
|
}
|
|
|
|
template <>
|
|
bool get(const QJsonObject &obj, const QString &key, int &val, bool bOptional)
|
|
{
|
|
const auto jVal = obj[key];
|
|
if (!jVal.isDouble())
|
|
{
|
|
if (bOptional)
|
|
return false;
|
|
throw JsonException(obj, key);
|
|
}
|
|
val = jVal.toInt();
|
|
return true;
|
|
}
|
|
|
|
template <>
|
|
bool get(const QJsonObject &obj, const QString &key, double &val, bool bOptional)
|
|
{
|
|
const auto jVal = obj[key];
|
|
if (!jVal.isDouble())
|
|
{
|
|
if (bOptional)
|
|
return false;
|
|
throw JsonException(obj, key);
|
|
}
|
|
val = jVal.toDouble();
|
|
return true;
|
|
}
|
|
|
|
template <>
|
|
bool get(const QJsonObject &obj, const QString &key, QString &val, bool bOptional)
|
|
{
|
|
const auto jVal = obj[key];
|
|
if (!jVal.isString())
|
|
{
|
|
if (bOptional)
|
|
return false;
|
|
throw JsonException(obj, key);
|
|
}
|
|
val = jVal.toString();
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template <>
|
|
bool get(const QJsonObject &obj, const QString &key, Effect &val, bool bOptional)
|
|
{
|
|
int iVal;
|
|
get(obj, key, iVal, bOptional);
|
|
switch (static_cast<Effect_def::type>(iVal))
|
|
{
|
|
case Effect_def::NearMiss:
|
|
case Effect_def::MobilityKill:
|
|
case Effect_def::WeaponKill:
|
|
val = Effect( static_cast<Effect_def::type>(iVal) );
|
|
return true;
|
|
}
|
|
throw JsonException(obj, key);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QJsonObject GeoPosition2D::toJson() const
|
|
{
|
|
return QJsonObject({{QStringLiteral("lat"), lat},
|
|
{QStringLiteral("lon"), lon},
|
|
});
|
|
}
|
|
|
|
GeoPosition2D GeoPosition2D::fromJson(const QJsonObject &obj)
|
|
{
|
|
GeoPosition2D ret;
|
|
get(obj, QStringLiteral("lat"), ret.lat);
|
|
get(obj, QStringLiteral("lon"), ret.lon);
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QJsonObject ShootbackTargetData::toJson() const
|
|
{
|
|
return QJsonObject({{QStringLiteral("id"), id},
|
|
{QStringLiteral("targetDataId"), targetDataId},
|
|
{QStringLiteral("name"), name},
|
|
{QStringLiteral("targetParticipantEquipmentNumber"), targetParticipantEquipmentNumber},
|
|
{QStringLiteral("activateLaserDesignation"), activateLaserDesignation},
|
|
{QStringLiteral("activateLights"), activateLights},
|
|
{QStringLiteral("activatePopupAutomatic"), activatePopupAutomatic},
|
|
{QStringLiteral("hitsToKill"), hitsToKill},
|
|
{QStringLiteral("permanentInstalledTarget"), permanentInstalledTarget},
|
|
});
|
|
}
|
|
|
|
ShootbackTargetData ShootbackTargetData::fromJson(const QJsonObject &obj)
|
|
{
|
|
ShootbackTargetData ret;
|
|
get(obj, QStringLiteral("id"), ret.id);
|
|
get(obj, QStringLiteral("targetDataId"), ret.targetDataId);
|
|
get(obj, QStringLiteral("name"), ret.name);
|
|
get(obj, QStringLiteral("targetParticipantEquipmentNumber"), ret.targetParticipantEquipmentNumber);
|
|
get(obj, QStringLiteral("activateLaserDesignation"), ret.activateLaserDesignation);
|
|
get(obj, QStringLiteral("activateLights"), ret.activateLights);
|
|
get(obj, QStringLiteral("activatePopupAutomatic"), ret.activatePopupAutomatic);
|
|
get(obj, QStringLiteral("hitsToKill"), ret.hitsToKill);
|
|
get(obj, QStringLiteral("permanentInstalledTarget"), ret.permanentInstalledTarget);
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QJsonObject ShootbackAreaData::toJson() const
|
|
{
|
|
return QJsonObject({{QStringLiteral("id"), id},
|
|
{QStringLiteral("name"), name},
|
|
{QStringLiteral("position"), position.toJson()},
|
|
{QStringLiteral("width"), width},
|
|
{QStringLiteral("height"), height},
|
|
});
|
|
}
|
|
|
|
ShootbackAreaData ShootbackAreaData::fromJson(const QJsonObject &obj)
|
|
{
|
|
ShootbackAreaData ret;
|
|
get(obj, QStringLiteral("id"), ret.id);
|
|
get(obj, QStringLiteral("name"), ret.name);
|
|
get(obj, QStringLiteral("position"), ret.position);
|
|
get(obj, QStringLiteral("width"), ret.width);
|
|
get(obj, QStringLiteral("height"), ret.height);
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
|
|
QJsonObject ShootbackConfigurationData::toJson() const
|
|
{
|
|
return QJsonObject({{QStringLiteral("interval1"), interval1},
|
|
{QStringLiteral("flash1"), flash1},
|
|
{QStringLiteral("effect1"), enumToJson(effect1.underlying())},
|
|
{QStringLiteral("interval2"), interval2},
|
|
{QStringLiteral("flash2"), flash2},
|
|
{QStringLiteral("effect2"), enumToJson(effect2.underlying())},
|
|
});
|
|
}
|
|
|
|
ShootbackConfigurationData ShootbackConfigurationData::fromJson(const QJsonObject &obj)
|
|
{
|
|
ShootbackConfigurationData ret;
|
|
get(obj, QStringLiteral("interval1"), ret.interval1);
|
|
get(obj, QStringLiteral("flash1"), ret.flash1);
|
|
get(obj, QStringLiteral("effect1"), ret.effect1);
|
|
get(obj, QStringLiteral("interval2"), ret.interval2);
|
|
get(obj, QStringLiteral("flash2"), ret.flash2);
|
|
get(obj, QStringLiteral("effect2"), ret.effect2);
|
|
return ret;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QJsonObject TargetAreaAssignmentData::toJson() const
|
|
{
|
|
return QJsonObject({{QStringLiteral("id"), id},
|
|
{QStringLiteral("name"), name},
|
|
{QStringLiteral("areaId"), areaId},
|
|
{QStringLiteral("targetParticipantId"), targetParticipantId},
|
|
{QStringLiteral("configuration"), configuration.toJson()},
|
|
{QStringLiteral("isActive"), isActive},
|
|
});
|
|
}
|
|
|
|
TargetAreaAssignmentData TargetAreaAssignmentData::fromJson(const QJsonObject &obj)
|
|
{
|
|
TargetAreaAssignmentData ret;
|
|
get(obj, QStringLiteral("id"), ret.id);
|
|
get(obj, QStringLiteral("name"), ret.name);
|
|
|
|
get(obj, QStringLiteral("areaId"), ret.areaId);
|
|
get(obj, QStringLiteral("targetParticipantId"), ret.targetParticipantId);
|
|
get(obj, QStringLiteral("configuration"), ret.configuration);
|
|
get(obj, QStringLiteral("isActive"), ret.isActive);
|
|
return ret;
|
|
}
|
|
|
|
}
|