Initial commit
This commit is contained in:
commit
b7d90b9afe
16245 files changed
+3396666
No files matched your search
+266
@@ -0,0 +1,266 @@
|
||||
/**
|
||||
* Telegrams toJSON
|
||||
* $Id$
|
||||
* $HeadURL$
|
||||
* $Author$
|
||||
* Created by Norbert Thoden, NLE, 2020-06-29
|
||||
*/
|
||||
|
||||
#include "tgt_telegrams.h"
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
|
||||
namespace TargetManagement
|
||||
{
|
||||
//
|
||||
// Helpers
|
||||
//
|
||||
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;
|
||||
}
|
||||
|
||||
// POD getter
|
||||
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()) // ToDo: Check
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// enum getter
|
||||
//
|
||||
// Effect
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// Structs
|
||||
//
|
||||
// ------------------------------------------------------------------
|
||||
//
|
||||
// GeoPosition2D
|
||||
//
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// ShootbackTargetData
|
||||
//
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// ShootbackAreaData
|
||||
//
|
||||
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;
|
||||
}
|
||||
|
||||
//
|
||||
// ShootbackConfigurationData
|
||||
//
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// TargetAreaAssignmentData
|
||||
//
|
||||
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;
|
||||
}
|
||||
|
||||
} // namespace TargetManagement
|
||||
Reference in new issue
Block a user