Files
qt5-legatus-legacy/Lts/Proxies/TrainingAreaBase/Plugins/AdlerJson/telegrams.cpp
T
2026-08-13 18:33:10 +02:00

1949 lines
77 KiB
C++
Executable File

#include "telegrams.h"
#include <QDebug>
#include <QJsonDocument>
#include <QString>
#include <ProjectDataManagement/pdm_translation.h>
namespace AdlerJson
{
// EX-Wirkfelddaten
void SAATELEGRAMS_EXPORT wirkfelddatenfromJson(const QJsonObject &data, Einheit &einheit, bool &bOk);
// EX-Erkundungsdaten
void SAATELEGRAMS_EXPORT erkundungsdatenFromJson(const QJsonObject &data, Erkundungsdaten &erkundungsdaten, bool &bOk);
void SAATELEGRAMS_EXPORT erkundungsdatenToJson(QJsonObject &data, const Erkundungsdaten &erkundungsdaten, bool &bOk);
// EX-Feuerkampfdaten
void SAATELEGRAMS_EXPORT feuerkampfdatenFromJson(const QJsonObject &data, Feuerkampfdaten &feuerkampfdaten, bool &bOk);
void SAATELEGRAMS_EXPORT feuerkampfdatenToJson(QJsonObject &data, const Feuerkampfdaten &feuerkampfdaten, bool &bOk);
// EX-Zielmeldedaten
void SAATELEGRAMS_EXPORT zielmeldedatenFromJson(const QJsonObject &data, Zielmeldedaten &zielmeldedaten, bool &bOk);
void SAATELEGRAMS_EXPORT zielmeldedatenToJson(QJsonObject &data, const Zielmeldedaten &zielmeldedaten);
// EX-Feuerstellungsdaten
void SAATELEGRAMS_EXPORT feuerstellungsdatenFromJson(const QJsonObject &data, Feuerstellungsdaten &feuerstellungsdaten, bool &bOk);
void SAATELEGRAMS_EXPORT feuerstellungsdatenToJson(QJsonObject &data, const Feuerstellungsdaten &feuerstellungsdaten, bool &bOk);
// EX-Waffensystemdaten
void SAATELEGRAMS_EXPORT waffensystemdatenFromJson(const QJsonObject &data, Waffensystemdaten &waffensystemdaten, bool &bOk);
void SAATELEGRAMS_EXPORT waffensystemdatenToJson(QJsonObject &data, const Waffensystemdaten &waffensystemdaten);
// EX-Ladeplatzdaten
void SAATELEGRAMS_EXPORT ladeplatzdatenFromJson(const QJsonObject &data, Ladeplatzdaten &ladeplatzdaten, bool &bOk);
void SAATELEGRAMS_EXPORT ladeplatzdatenToJson(QJsonObject &data, const Ladeplatzdaten &ladeplatzdaten);
// EX-Stellungswechseldaten
void SAATELEGRAMS_EXPORT stellungswechseldatenFromJson(const QJsonObject &data, Stellungswechseldaten &stellungswechseldaten, bool &bOk);
void SAATELEGRAMS_EXPORT stellungswechseldatenToJson(QJsonObject &data, const Stellungswechseldaten &stellungswechseldaten);
// EX-Koordinierungsdaten - defined in header
// void SAATELEGRAMS_EXPORT koordinierungsdatenFromJson(const QJsonObject &data, Koordinierungsdaten& koordinierungsdaten, bool& bOk);
// void SAATELEGRAMS_EXPORT koordinierungsdatenToJson( QJsonObject &data, const Koordinierungsdaten& koordinierungsdaten);
// EX-L3 Einheit
void SAATELEGRAMS_EXPORT einheitfromJson(const QJsonObject &data, Einheit &einheit, bool &bOk);
void SAATELEGRAMS_EXPORT einheitToJson(QJsonObject &data, const Einheit &einheit);
// EX-L8 Geschosse
void SAATELEGRAMS_EXPORT geschossfromJson(const QJsonObject &data, Geschoss &geschosse, bool &bOk);
void SAATELEGRAMS_EXPORT geschossToJson(QJsonObject &data, const Geschoss &geschosse);
// EX-L12 Zieldaten
void SAATELEGRAMS_EXPORT zieldatenfromJson(const QJsonObject &data, Zieldaten &zieldaten, bool &bOk);
void SAATELEGRAMS_EXPORT zieldatenToJson(QJsonObject &data, const Zieldaten &zieldaten);
// EX-L13 Geographische Koordinate
void SAATELEGRAMS_EXPORT koordinatefromJson(const QJsonObject &data, Koordinate &koordinate, bool &bOk);
void SAATELEGRAMS_EXPORT koordinateToJson(QJsonObject &data, const Koordinate &koordinate);
// EX-L14
void SAATELEGRAMS_EXPORT koordinateMitHoeheFromJson(const QJsonObject &data, KoordinateMitHoehe &koordinateMitHoehe, bool &bOk);
// EX-L15
void SAATELEGRAMS_EXPORT zeitangabe_DTGFromJson(const QJsonObject &data, Zeitangabe_DTG &zeitangabe_DTG, bool &bOk);
void SAATELEGRAMS_EXPORT zeitangabe_DTGToJson(QJsonObject &data, const Zeitangabe_DTG &zeitangabe_DTG);
// EX-L18 Wirkungsbereich
void SAATELEGRAMS_EXPORT wirkungsbereichFromJson(const QJsonObject &data, Wirkungsbereich &wirkungsbereich, bool &bOk);
void SAATELEGRAMS_EXPORT wirkungsbereichToJson(QJsonObject &data, const Wirkungsbereich &wirkungsbereich);
// EX-L29 Erkundungseinheit
void SAATELEGRAMS_EXPORT erkundungseinheitFromJson(const QJsonObject &data, Erkundungseinheit &erkundungseinheit, bool &bOk);
void SAATELEGRAMS_EXPORT erkundungseinheitToJson(QJsonObject &data, const Erkundungseinheit &erkundungseinheit);
// EX-L30 Erkundungsstellungen
void SAATELEGRAMS_EXPORT erkundungsstellungenFromJson(const QJsonObject &data, Erkundungsstellungen &erkundungsstellungen, bool &bOk);
// EX-L33 Feuerkommando
void SAATELEGRAMS_EXPORT feuerkommandoFromJson(const QJsonObject &data, Feuerkommando &feuerkommando, bool &bOk);
void SAATELEGRAMS_EXPORT feuerkommandoToJson(QJsonObject &data, const Feuerkommando &feuerkommando);
void SAATELEGRAMS_EXPORT feuerkommandosToJson(QJsonArray &data, const QVector<Feuerkommando> &feuerkommandos);
// EX-L34 Wirkmittel Feuerkommando
void SAATELEGRAMS_EXPORT wirkmittelFeuerkommandoFromJson(const QJsonObject &data, WirkmittelFeuerkommando &wirkmittelFeuerkommando, bool &bOk);
void wirkmittelFeuerkommansdoToJson(QJsonArray &data, const QVector<WirkmittelFeuerkommando> &wirkmittelFeuerkommando);
void SAATELEGRAMS_EXPORT wirkmittelFeuerkommandoToJson(QJsonObject &data, const WirkmittelFeuerkommando &wirkmittelFeuerkommando);
// EX-L35 Flugbahnpunkt
void SAATELEGRAMS_EXPORT flugbahnpunktFromJson(const QJsonObject &data, Flugbahnpunkt &flugbahnpunkt, bool &bOk);
void SAATELEGRAMS_EXPORT flugbahnpunktToJson(QJsonObject &data, const Flugbahnpunkt &flugbahnpunkt);
// Array [EX-L35 Flugbahnpunkte]
void SAATELEGRAMS_EXPORT flugbahnpunkteFromJson(const QJsonArray &data, QVector<Flugbahnpunkt> &flugbahnpunkte, bool &bOk);
void SAATELEGRAMS_EXPORT flugbahnpunkteToJson(QJsonArray &data, const QVector<Flugbahnpunkt> &flugbahnpunkte);
// EX-L36 Feuerkommando Geschosse
void SAATELEGRAMS_EXPORT feuerkommandoGeschosseFromJson(const QJsonObject &data, FeuerkommandoGeschosse &feuerkommandoGeschosse, bool &bOk);
void SAATELEGRAMS_EXPORT feuerkommandoGeschosseToJson(QJsonObject &data, const FeuerkommandoGeschosse &feuerkommandoGeschosse);
// EX-L37 Flugbahnberechnung Geschosse
void SAATELEGRAMS_EXPORT FlugbahnberechnungGeschosseFromJson(const QJsonObject &data, FlugbahnberechnungGeschosse &flugbahnberechnungGeschosse, bool &bOk);
void SAATELEGRAMS_EXPORT FlugbahnberechnungGeschosseToJson(QJsonObject &data, const FlugbahnberechnungGeschosse &flugbahnberechnungGeschosse);
// EX-L39 Streuungsdaten
void SAATELEGRAMS_EXPORT streuungsdatenFromJson(const QJsonObject &data, Streuungsdaten &streuungsdaten, bool &bOk);
void SAATELEGRAMS_EXPORT streuungsdatenToJson(QJsonObject &data, const Streuungsdaten &streuungsdaten);
// EX-L45 Anmeldebestaetigung Fehlercode
void SAATELEGRAMS_EXPORT anBestaetigungsdatenFromJson(const QJsonObject &data, AnBestaetigungsdaten &anBestaetigungsdaten, bool &bOk);
void SAATELEGRAMS_EXPORT anBestaetigungsdatenToJson(QJsonObject &data, const AnBestaetigungsdaten &anBestaetigungsdaten);
// EX-L49 Wirkmittel Feuerkommando Rakete - defined in header
// void SAATELEGRAMS_EXPORT wirkmittelFeuerkommandoRaketeToJson(QJsonObject &data, const WirkmittelFeuerkommandoRakete &wirkmittelFeuerkommandoRakete);
// void SAATELEGRAMS_EXPORT wirkmittelFeuerkommandoRaketeFromJson(const QJsonObject &data, WirkmittelFeuerkommandoRakete &wirkmittelFeuerkommandoRakete, bool &bOk);
// EX-FQ(BA-BB-FK) Wirkfeldplanung
void SAATELEGRAMS_EXPORT wirkfeldplanungDataFromJson(const QJsonObject &data, WirkfeldplanungData &wirkfeldplanungData, bool &bOk);
void SAATELEGRAMS_EXPORT koordinateMitHoeheToJson(QJsonObject &data, const KoordinateMitHoehe &koordinateMitHoehe);
void SAATELEGRAMS_EXPORT erkundungsstellungenToJson(QJsonObject &data, const Erkundungsstellungen &erkundungsstellungen);
// EX-FH Feuer HALT
void SAATELEGRAMS_EXPORT feuerHaltDatenFromJson(const QJsonObject &data, FeuerHaltDaten &feuerHaltDaten, bool &bOk);
void SAATELEGRAMS_EXPORT feuerHaltDatenToJson(QJsonObject &data, const FeuerHaltDaten &feuerHaltDaten);
// 7.1.17 EX-HQ(G) Fuehrungslinien und Grenzen - defined in header
// void SAATELEGRAMS_EXPORT fuehrungsdatenFromJson(const QJsonObject &data, Fuehrungsdaten& fuehrungsdaten, bool& bOk);
// void SAATELEGRAMS_EXPORT fuehrungsdatenToJson( QJsonObject &data, const Fuehrungsdaten& fuehrungsdaten);
// 7.2.22 EX-Flugbahnberechnung
void SAATELEGRAMS_EXPORT exFlugbahnberechnungDatenFromJson(const QJsonObject &data, FlugBerechnungsDaten &flugBerechnungsDaten, bool &bOk);
void SAATELEGRAMS_EXPORT exFlugbahnberechnungDatenToJson(QJsonObject &data, const FlugBerechnungsDaten &flugBerechnungsDaten);
// 7.2.23 EX-Flugbahndaten
void SAATELEGRAMS_EXPORT flugbahndatenFromJson(const QJsonObject &data, Flugbahndaten &flugbahndaten, bool &bOk);
void SAATELEGRAMS_EXPORT flugbahndatenToJson(QJsonObject &data, const Flugbahndaten &flugbahndaten);
// 7.1.23 EX-AQ Freitextmeldung
// void SAATELEGRAMS_EXPORT freitextdatenFromJson(const QJsonObject &data, FreitextDaten& freitextDaten, bool& bOk);
// void SAATELEGRAMS_EXPORT freitextdatenToJson( QJsonObject &data, const FreitextDaten& freitextDaten, bool& bOk);
//
// Helper functions
//
static inline double toDouble(const QJsonValue &val, bool &bOk)
{
bOk = bOk && val.isDouble();
return val.toDouble();
}
static inline int toInteger(const QJsonValue &val, bool &bOk)
{
bOk = bOk && val.isDouble();
return qRound(val.toDouble());
}
// static inline int64_t toInt64(const QJsonValue &val, bool &bOk)
// {
// bOk = bOk && val.isDouble();
// return qRound64(val.toDouble());
// }
// static inline bool toBoolean(const QJsonValue &val, bool &bOk)
// {
// bOk = bOk && val.isBool();
// return val.toBool();
// }
template <typename T> QJsonObject SAATelegram::toJsonInternal() { return QJsonObject(); }
template <> QJsonObject SAATelegram::toJsonInternal<SAATelegram>() { return QJsonObject(); }
template <> QJsonObject EXTelegramBase::toJsonInternal<EXTelegramBase>()
{
QJsonObject obj = static_cast<SAATelegram *>(this)->toJsonInternal<SAATelegram>();
obj[JsonKeys::TYPE()] = typeName;
obj[JsonKeys::TYPE_ID()] = typeId;
obj[JsonKeys::UUID_()] = uuid;
obj[JsonKeys::VERSION()] = version;
obj[JsonKeys::SENDER()] = sender;
obj[JsonKeys::RECEIVER()] = receiver;
obj[JsonKeys::REFERENCE_UUID()] = referenceUuid;
obj[JsonKeys::TIMESTAMP()] = timestamp;
return obj;
}
template <> QJsonObject EXRegistration::toJsonInternal<EXRegistration>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
data[JsonKeys::PARTY_ID()] = partyId;
data[JsonKeys::ADLER_VERBUND()] = adlerVerbund;
data[JsonKeys::SZENAR()] = szenar;
obj[JsonKeys::DATA()] = data;
return obj;
}
// template<>
// QJsonObject EXRegistrationConfirmation::toJsonInternal<EXRegistrationConfirmation>()
// {
// QJsonObject obj = static_cast<EXTelegramBase*>(this)->toJsonInternal<EXTelegramBase>();
// if(!Afe.isEmpty())
// obj[JsonKeys::AFE()] = Afe;
// return obj;
// }
template <> QJsonObject EXConnectionTestReply::toJsonInternal<EXConnectionTestReply>() { return static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>(); }
QJsonObject EXTelegramBase::toJson() { return toJsonInternal<EXTelegramBase>(); }
QJsonObject EXRegistration::toJson() { return toJsonInternal<EXRegistration>(); }
// QJsonObject EXRegistrationConfirmation::toJson()
// {
// return toJsonInternal<EXRegistrationConfirmation>();
// }
QJsonObject ExAnmeldebestaetigung::toJson()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
data[JsonKeys::ERRORTEXT()] = AnmeldebestaetigungFehlercodeMap.key(anBestaetigungsdaten.error);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject EXDeregistration::toJson() { return toJsonInternal<EXDeregistration>(); }
template <> QJsonObject EXDeregistration::toJsonInternal<EXDeregistration>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
data[JsonKeys::PARTY_ID()] = partyId;
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject EXConnectionTestRequest::toJson() { return toJsonInternal<EXConnectionTestRequest>(); }
template <typename T> QJsonObject EXConnectionTestRequest::toJsonInternal()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
// QJsonObject data;
// obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject EXConnectionTestReply::toJson() { return toJsonInternal<EXConnectionTestReply>(); }
QJsonObject EXStatus::toJson() { return toJsonInternal<EXStatus>(); }
template <> QJsonObject EXStatus::toJsonInternal<EXStatus>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
data[JsonKeys::STATUS()] = szenarstatusMap.key(status);
obj[JsonKeys::DATA()] = data;
return obj;
}
// ======================================================================================================
// fachliche Meldungen
// ======================================================================================================
// ======================================================================================================
// Gruppen:
// Strukturen und Legenden
// EX-Wirkfelddaten
void SAATELEGRAMS_EXPORT wirkfelddatenFromJson(const QJsonObject &data, Wirkfelddaten &wirkfelddaten, bool &bOk)
{
wirkfelddaten.feuerkampfReferenz = data[JsonKeys::FEUERKAMPFREFERENZ()].toString();
zieldatenfromJson(data[JsonKeys::ZIELDATEN()].toObject(), wirkfelddaten.zieldaten, bOk);
wirkfelddaten.abfeuerungsArt = AbfeuerungsartMap.value(data[JsonKeys::ABFEUERUNGSART()].toString());
wirkfelddaten.forderung = ForderungMap.value(data[JsonKeys::FORDERUNG()].toString());
wirkfelddaten.dauer = toInteger(data[JsonKeys::DAUER()], bOk);
feuerkommandoFromJson(data[JsonKeys::FEUERKOMMANDO()].toObject(), wirkfelddaten.feuerkommando, bOk);
}
// EX-Feuerkampfdaten
void SAATELEGRAMS_EXPORT feuerkampfdatenFromJson(const QJsonObject &data, Feuerkampfdaten &feuerkampfdaten, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::FEUERKAMPFREFERENZ());
bOk &= data.contains(JsonKeys::VEREIN());
bOk &= data.contains(JsonKeys::KENNER());
if (!bOk)
return;
feuerkampfdaten.feuerkampfReferenz = data[JsonKeys::FEUERKAMPFREFERENZ()].toString();
feuerkampfdaten.verein = data[JsonKeys::VEREIN()].toString(); // EX-L2
feuerkampfdaten.kenner = waffensystemkennerMap.value(data[JsonKeys::KENNER()].toString()); // EX-L27
}
void SAATELEGRAMS_EXPORT feuerkampfdatenToJson(QJsonObject &data, const Feuerkampfdaten &feuerkampfdaten)
{
data[JsonKeys::FEUERKAMPFREFERENZ()] = feuerkampfdaten.feuerkampfReferenz;
data[JsonKeys::VEREIN()] = feuerkampfdaten.verein;
data[JsonKeys::KENNER()] = waffensystemkennerMap.key(feuerkampfdaten.kenner);
}
// EX-Erkundungsdaten
void SAATELEGRAMS_EXPORT erkundungsdatenFromJson(const QJsonObject &data, Erkundungsdaten &erkundungsdaten, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::FEUERKOMMANDO());
bOk &= data.contains(JsonKeys::KOORDINATE());
bOk &= data.contains(JsonKeys::STELLUNGEN());
if (!bOk)
return;
erkundungseinheitFromJson(data[JsonKeys::FEUERKOMMANDO()].toObject(), erkundungsdaten.einheit, bOk);
koordinateMitHoeheFromJson(data[JsonKeys::KOORDINATE()].toObject(), erkundungsdaten.ladeplatz, bOk);
erkundungsstellungenFromJson(data[JsonKeys::STELLUNGEN()].toObject(), erkundungsdaten.stellungen, bOk);
}
void SAATELEGRAMS_EXPORT erkundungsdatenToJson(QJsonObject &data, const Erkundungsdaten &erkundungsdaten)
{
QJsonObject erkundungseinheit;
erkundungseinheitToJson(erkundungseinheit, erkundungsdaten.einheit);
data[JsonKeys::FEUERKOMMANDO()] = erkundungseinheit;
QJsonObject koordinate;
koordinateMitHoeheToJson(koordinate, erkundungsdaten.ladeplatz);
data[JsonKeys::KOORDINATE()] = koordinate;
QJsonObject erkundungsstellungen;
erkundungsstellungenToJson(erkundungsstellungen, erkundungsdaten.stellungen);
data[JsonKeys::STELLUNGEN()] = erkundungsstellungen;
}
// EX-Zielmeldedaten
void SAATELEGRAMS_EXPORT zielmeldedatenFromJson(const QJsonObject &data, Zielmeldedaten &zielmeldedaten, bool &bOk)
{
zieldatenfromJson(data[JsonKeys::ZIELDATEN()].toObject(), zielmeldedaten.zieldaten, bOk); // EX-L12
zielmeldedaten.abfeuerungsArt = AbfeuerungsartMap.value(data[JsonKeys::ABFEUERUNGSART()].toString()); // EX-L6
zielmeldedaten.forderung = ForderungMap.value(data[JsonKeys::FORDERUNG()].toString());
zielmeldedaten.dauer = toInteger(data[JsonKeys::DAUER()], bOk);
QJsonArray FeuerkommandoArray = data[JsonKeys::FEUERKOMMANDO()].toArray();
for (const QJsonValue &value : qAsConst(FeuerkommandoArray))
{
Feuerkommando feuerkommando;
feuerkommandoFromJson(value.toObject(), feuerkommando, bOk); // EX-L34 Wirkmittel Feuerkommando
zielmeldedaten.feuerkommandos.append(feuerkommando);
}
}
void SAATELEGRAMS_EXPORT zielmeldedatenToJson(QJsonObject &data, const Zielmeldedaten &zielmeldedaten)
{
QJsonObject objZieldaten;
zieldatenToJson(objZieldaten, zielmeldedaten.zieldaten);
data[JsonKeys::ZIELDATEN()] = objZieldaten;
data[JsonKeys::ABFEUERUNGSART()] = AbfeuerungsartMap.key(zielmeldedaten.abfeuerungsArt);
data[JsonKeys::FORDERUNG()] = ForderungMap.key(zielmeldedaten.forderung);
data[JsonKeys::DAUER()] = zielmeldedaten.dauer;
QJsonArray objFeuerkommandos;
feuerkommandosToJson(objFeuerkommandos, zielmeldedaten.feuerkommandos);
data[JsonKeys::FEUERKOMMANDO()] = objFeuerkommandos;
}
// EX-Feuerstellungsdaten
void SAATELEGRAMS_EXPORT feuerstellungsdatenFromJson(const QJsonObject &data, Feuerstellungsdaten &feuerstellungsdaten, bool &bOk)
{
feuerstellungsdaten.typ = waffensystemtypMap.value(data[JsonKeys::TYP()].toString()); // EX-L26
feuerstellungsdaten.status = StatusL28Map.value(data[JsonKeys::STATUS()].toString()); // EX-L28
einheitfromJson(data[JsonKeys::FEUEREINHEIT()].toObject(), feuerstellungsdaten.feuereinheit, bOk); // EX-L3
koordinateMitHoeheFromJson(data[JsonKeys::MITTELPUNKT()].toObject(), feuerstellungsdaten.mittelpunkt, bOk); // EX-L3
QJsonArray koordinatenArray = data[JsonKeys::KOORDINATEN()].toArray();
for (const QJsonValue &value : qAsConst(koordinatenArray))
{
KoordinateMitHoehe koordinate;
koordinateMitHoeheFromJson(value.toObject(), koordinate, bOk); // EX-L34 Wirkmittel Feuerkommando
feuerstellungsdaten.koordinaten.append(koordinate);
}
QJsonArray geschosseArray = data[JsonKeys::GESCHOSSE()].toArray();
for (const QJsonValue &value : qAsConst(geschosseArray))
{
Geschoss geschosse;
geschossfromJson(value.toObject(), geschosse, bOk); // EX-L34 Wirkmittel Feuerkommando
feuerstellungsdaten.geschosse.append(geschosse);
}
bool optional = true;
wirkungsbereichFromJson(data[JsonKeys::WIRKUNGSBEREICH()].toObject(), feuerstellungsdaten.wirkungsbereich, optional); // EX-L18
}
void SAATELEGRAMS_EXPORT feuerstellungsdatenToJson(QJsonObject &data, const Feuerstellungsdaten &feuerstellungsdaten)
{
data[JsonKeys::TYP()] = waffensystemtypMap.key(feuerstellungsdaten.typ);
data[JsonKeys::STATUS()] = StatusL28Map.key(feuerstellungsdaten.status);
QJsonObject einheit;
einheitToJson(einheit, feuerstellungsdaten.feuereinheit);
data[JsonKeys::FEUEREINHEIT()] = einheit;
// mittelpunkt
QJsonObject mittelpunkt;
koordinateMitHoeheToJson(mittelpunkt, feuerstellungsdaten.mittelpunkt);
data[JsonKeys::MITTELPUNKT()] = mittelpunkt;
QJsonArray koordinaten;
for (const auto &koordinate : qAsConst(feuerstellungsdaten.koordinaten))
{
QJsonObject koordinateObj;
koordinateMitHoeheToJson(koordinateObj, koordinate);
koordinaten.append(koordinateObj);
}
data[JsonKeys::KOORDINATEN()] = koordinaten;
QJsonArray geschosse;
for (const auto &geschoss : qAsConst(feuerstellungsdaten.geschosse))
{
QJsonObject geschossObj;
geschossToJson(geschossObj, geschoss);
geschosse.append(geschossObj);
}
data[JsonKeys::GESCHOSSE()] = geschosse;
QJsonObject objWirkungsbereich;
wirkungsbereichToJson(objWirkungsbereich, feuerstellungsdaten.wirkungsbereich);
data[JsonKeys::WIRKUNGSBEREICH()] = objWirkungsbereich;
}
// EX-Waffensystemdaten
void SAATELEGRAMS_EXPORT waffensystemdatenFromJson(const QJsonObject &data, Waffensystemdaten &waffensystemdaten, bool &bOk)
{
waffensystemdaten.typ = waffensystemtypMap.value(data[JsonKeys::TYP()].toString()); // EX-L26
waffensystemdaten.kenner = waffensystemkennerMap.value(data[JsonKeys::KENNER()].toString()); // EX-L27
waffensystemdaten.status = StatusL28Map.value(data[JsonKeys::STATUS()].toString()); // EX-L28
einheitfromJson(data[JsonKeys::EINHEIT()].toObject(), waffensystemdaten.einheit, bOk); // EX-L3
QJsonArray geschosseArray = data[JsonKeys::GESCHOSSE()].toArray();
for (const QJsonValue &value : qAsConst(geschosseArray))
{
Geschoss geschosse;
geschossfromJson(value.toObject(), geschosse, bOk); // EX-L34 Wirkmittel Feuerkommando
waffensystemdaten.geschosse.append(geschosse);
}
koordinateMitHoeheFromJson(data[JsonKeys::KOORDINATE()].toObject(), waffensystemdaten.koordinate, bOk); // EX-L14
wirkungsbereichFromJson(data[JsonKeys::WIRKUNGSBEREICH()].toObject(), waffensystemdaten.wirkungsbereich, bOk); // EX-L18
}
void SAATELEGRAMS_EXPORT waffensystemdatenToJson(QJsonObject &data, const Waffensystemdaten &waffensystemdaten)
{
data[JsonKeys::TYP()] = waffensystemtypMap.key(waffensystemdaten.typ);
data[JsonKeys::KENNER()] = waffensystemkennerMap.key(waffensystemdaten.kenner);
data[JsonKeys::STATUS()] = StatusL28Map.key(waffensystemdaten.status);
QJsonObject einheit;
einheitToJson(einheit, waffensystemdaten.einheit);
data[JsonKeys::EINHEIT()] = einheit;
QJsonArray geschosse;
for (const auto &geschoss : qAsConst(waffensystemdaten.geschosse))
{
QJsonObject geschossObj;
geschossToJson(geschossObj, geschoss);
geschosse.append(geschossObj);
}
data[JsonKeys::GESCHOSSE()] = geschosse;
QJsonObject koordinateObj;
koordinateMitHoeheToJson(koordinateObj, waffensystemdaten.koordinate);
data[JsonKeys::KOORDINATE()] = koordinateObj;
QJsonObject wirkungsbereichObj;
wirkungsbereichToJson(wirkungsbereichObj, waffensystemdaten.wirkungsbereich);
data[JsonKeys::WIRKUNGSBEREICH()] = wirkungsbereichObj;
}
// EX-Ladeplatzdaten
void SAATELEGRAMS_EXPORT ladeplatzdatenFromJson(const QJsonObject &data, Ladeplatzdaten &ladeplatzdaten, bool &bOk)
{
einheitfromJson(data[JsonKeys::EINHEIT()].toObject(), ladeplatzdaten.einheit, bOk); // EX-L3
koordinateMitHoeheFromJson(data[JsonKeys::KOORDINATE()].toObject(), ladeplatzdaten.koordinate, bOk);
QJsonArray geschosseArray = data[JsonKeys::GESCHOSSE()].toArray();
for (const QJsonValue &value : qAsConst(geschosseArray))
{
Geschoss geschosse;
geschossfromJson(value.toObject(), geschosse, bOk); // EX-L34 Wirkmittel Feuerkommando
ladeplatzdaten.geschosse.append(geschosse);
}
}
void SAATELEGRAMS_EXPORT ladeplatzdatenToJson(QJsonObject &data, const Ladeplatzdaten &ladeplatzdaten)
{
QJsonObject einheit;
einheitToJson(einheit, ladeplatzdaten.einheit);
data[JsonKeys::EINHEIT()] = einheit;
QJsonArray geschosse;
for (const auto &geschoss : qAsConst(ladeplatzdaten.geschosse))
{
QJsonObject geschossObj;
geschossToJson(geschossObj, geschoss);
geschosse.append(geschossObj);
}
data[JsonKeys::GESCHOSSE()] = geschosse;
QJsonObject koordinateObj;
koordinateMitHoeheToJson(koordinateObj, ladeplatzdaten.koordinate);
data[JsonKeys::KOORDINATE()] = koordinateObj;
}
// EX-Stellungswechseldaten
void SAATELEGRAMS_EXPORT stellungswechseldatenFromJson(const QJsonObject &data, Stellungswechseldaten &stellungswechseldaten, bool &bOk)
{
stellungswechseldaten.verein = data[JsonKeys::VEREIN()].toString();
stellungswechseldaten.r = toInteger(data[JsonKeys::R()], bOk);
stellungswechseldaten.oi = ortsIdMap.value(data[JsonKeys::OI()].toString());
}
void SAATELEGRAMS_EXPORT stellungswechseldatenToJson(QJsonObject &data, const Stellungswechseldaten &stellungswechseldaten)
{
data[JsonKeys::VEREIN()] = stellungswechseldaten.verein;
data[JsonKeys::R()] = stellungswechseldaten.r;
data[JsonKeys::OI()] = ortsIdMap.key(stellungswechseldaten.oi);
}
// EX-Munitionsdaten
void SAATELEGRAMS_EXPORT munitionsdatenFromJson(const QJsonObject &data, Munitionsdaten &munitionsdaten, bool &bOk)
{
bOk = true;
munitionsdaten.verein = data[JsonKeys::VEREIN()].toString();
}
// EX-LpMunitionsdaten
void SAATELEGRAMS_EXPORT lpMunitionsdatenFromJson(const QJsonObject &data, LpMunitionsdaten &LpMunitionsdaten, bool &bOk)
{
einheitfromJson(data[JsonKeys::EINHEIT()].toObject(), LpMunitionsdaten.einheit, bOk); // EX-L3
}
// EX-Koordinierungsdaten
void SAATELEGRAMS_EXPORT koordinierungsdatenFromJson(const QJsonObject &data, Koordinierungsdaten &koordinierungsdaten, bool &bOk)
{
koordinierungsdaten.art = art_L25Map.value(data[JsonKeys::ART()].toString()); // EX-L26
koordinierungsdaten.name = data[JsonKeys::NAME()].toString();
koordinierungsdaten.meldungsnummer = data[JsonKeys::MELDUNGSNUMMER()].toInt();
koordinierungsdaten.truppenteil = data[JsonKeys::TRUPPENTEIL()].toString();
zeitangabe_DTGFromJson(data[JsonKeys::AB()].toObject(), koordinierungsdaten.ab, bOk); // EX-L15
zeitangabe_DTGFromJson(data[JsonKeys::BIS()].toObject(), koordinierungsdaten.bis, bOk); // EX-L15
QJsonArray koordinatenArray = data[JsonKeys::KOORDINATEN()].toArray();
for (const QJsonValue &value : qAsConst(koordinatenArray))
{
Koordinate koordinate;
koordinatefromJson(value.toObject(), koordinate, bOk); // EX-L13
koordinierungsdaten.koordinaten.append(koordinate);
}
koordinatefromJson(data[JsonKeys::MITTELPUNKT()].toObject(), koordinierungsdaten.mittelpunkt, bOk); // EX-L15
koordinierungsdaten.radius = toInteger(data[JsonKeys::RADIUS()], bOk);
koordinierungsdaten.maxGipfel = toInteger(data[JsonKeys::MAXGIPFEL()], bOk);
}
void SAATELEGRAMS_EXPORT koordinierungsdatenToJson(QJsonObject &data, const Koordinierungsdaten &koordinierungsdaten)
{
data[JsonKeys::ART()] = art_L25Map.key(koordinierungsdaten.art);
data[JsonKeys::NAME()] = koordinierungsdaten.name;
data[JsonKeys::MELDUNGSNUMMER()] = koordinierungsdaten.meldungsnummer;
data[JsonKeys::TRUPPENTEIL()] = koordinierungsdaten.truppenteil;
QJsonObject objTimestamp;
zeitangabe_DTGToJson(objTimestamp, koordinierungsdaten.ab);
data[JsonKeys::AB()] = objTimestamp;
zeitangabe_DTGToJson(objTimestamp, koordinierungsdaten.bis);
data[JsonKeys::BIS()] = objTimestamp;
QJsonArray koordinatenArray;
for (const auto &koordinate : qAsConst(koordinierungsdaten.koordinaten))
{
QJsonObject objKoordinate;
koordinateToJson(objKoordinate, koordinate);
koordinatenArray.append(objKoordinate);
}
data[JsonKeys::KOORDINATEN()] = koordinatenArray;
// mittelpunkt
QJsonObject mittelpunkt;
koordinateToJson(mittelpunkt, koordinierungsdaten.mittelpunkt);
data[JsonKeys::MITTELPUNKT()] = mittelpunkt;
data[JsonKeys::RADIUS()] = koordinierungsdaten.radius;
data[JsonKeys::MAXGIPFEL()] = koordinierungsdaten.maxGipfel;
}
// EX-L3 Einheit
void SAATELEGRAMS_EXPORT einheitfromJson(const QJsonObject &data, Einheit &einheit, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::VEREIN());
bOk &= data.contains(JsonKeys::R());
bOk &= data.contains(JsonKeys::OI());
if (!bOk)
return;
einheit.verein = data[JsonKeys::VEREIN()].toString();
einheit.r = toInteger(data[JsonKeys::R()], bOk);
einheit.oi = ortsIdMap.value(data[JsonKeys::OI()].toString());
}
void SAATELEGRAMS_EXPORT einheitToJson(QJsonObject &data, const Einheit &einheit)
{
data[JsonKeys::VEREIN()] = einheit.verein;
data[JsonKeys::R()] = einheit.r;
data[JsonKeys::OI()] = ortsIdMap.key(einheit.oi);
}
// EX-L8 Geschosse
void SAATELEGRAMS_EXPORT geschossfromJson(const QJsonObject &data, Geschoss &geschosse, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::GESCHOSSSORTE());
bOk &= data.contains(JsonKeys::LADUNG());
bOk &= data.contains(JsonKeys::ZUENDER());
bOk &= data.contains(JsonKeys::ANZAHL());
if (!bOk)
return;
geschosse.geschosssorte = data[JsonKeys::GESCHOSSSORTE()].toString();
geschosse.ladung = data[JsonKeys::LADUNG()].toString();
geschosse.zuender = data[JsonKeys::ZUENDER()].toString();
geschosse.anzahl = toInteger(data[JsonKeys::ANZAHL()], bOk);
}
void SAATELEGRAMS_EXPORT geschossToJson(QJsonObject &data, const Geschoss &geschosse)
{
data[JsonKeys::GESCHOSSSORTE()] = geschosse.geschosssorte;
data[JsonKeys::LADUNG()] = geschosse.ladung;
data[JsonKeys::ZUENDER()] = geschosse.zuender;
data[JsonKeys::ANZAHL()] = geschosse.anzahl;
}
// EX-L13 Geographische Koordinate
void SAATELEGRAMS_EXPORT koordinatefromJson(const QJsonObject &data, Koordinate &koordinate, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::LATITUDE());
bOk &= data.contains(JsonKeys::LONGITUDE());
if (!bOk)
return;
koordinate.latitude = toDouble(data[JsonKeys::LATITUDE()], bOk);
koordinate.longitude = toDouble(data[JsonKeys::LONGITUDE()], bOk);
}
void SAATELEGRAMS_EXPORT koordinateToJson(QJsonObject &data, const Koordinate &koordinate)
{
data[JsonKeys::LATITUDE()] = koordinate.latitude;
data[JsonKeys::LONGITUDE()] = koordinate.longitude;
}
// EX-L14
void SAATELEGRAMS_EXPORT koordinateMitHoeheFromJson(const QJsonObject &data, KoordinateMitHoehe &koordinateMitHoehe, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::KOORDINATE());
bOk &= data.contains(JsonKeys::HOEHE());
if (!bOk)
return;
koordinatefromJson(data[JsonKeys::KOORDINATE()].toObject(), koordinateMitHoehe.koordinate, bOk);
koordinateMitHoehe.hoehe = toInteger(data[JsonKeys::HOEHE()], bOk);
}
void SAATELEGRAMS_EXPORT koordinateMitHoeheToJson(QJsonObject &data, const KoordinateMitHoehe &koordinateMitHoehe)
{
data[JsonKeys::HOEHE()] = koordinateMitHoehe.hoehe;
QJsonObject koordinate;
koordinateToJson(koordinate, koordinateMitHoehe.koordinate);
data[JsonKeys::KOORDINATE()] = koordinate;
}
void SAATELEGRAMS_EXPORT zeitangabe_DTGFromJson(const QJsonObject &data, Zeitangabe_DTG &zeitangabe_DTG, bool &bOk)
{
zeitangabe_DTG.stunden = toInteger(data[JsonKeys::STUNDEN()], bOk);
zeitangabe_DTG.minuten = toInteger(data[JsonKeys::MINUTEN()], bOk);
zeitangabe_DTG.sekunden = toInteger(data[JsonKeys::SEKUNDEN()], bOk);
zeitangabe_DTG.tag = toInteger(data[JsonKeys::TAG()], bOk);
zeitangabe_DTG.monat = toInteger(data[JsonKeys::MONAT()], bOk);
zeitangabe_DTG.jahr = toInteger(data[JsonKeys::JAHR()], bOk);
zeitangabe_DTG.ZVz = data[JsonKeys::ZVZ()].toString();
zeitangabe_DTG.ZDS = data[JsonKeys::ZDS()].toString();
zeitangabe_DTG.ZDM = data[JsonKeys::ZDM()].toString();
}
void SAATELEGRAMS_EXPORT zeitangabe_DTGToJson(QJsonObject &data, const Zeitangabe_DTG &zeitangabe_DTG)
{
data[JsonKeys::JAHR()] = zeitangabe_DTG.jahr;
data[JsonKeys::MONAT()] = zeitangabe_DTG.monat;
data[JsonKeys::TAG()] = zeitangabe_DTG.tag;
data[JsonKeys::STUNDEN()] = zeitangabe_DTG.stunden;
data[JsonKeys::MINUTEN()] = zeitangabe_DTG.minuten;
data[JsonKeys::SEKUNDEN()] = zeitangabe_DTG.sekunden;
data[JsonKeys::ZDM()] = zeitangabe_DTG.ZDM;
data[JsonKeys::ZDS()] = zeitangabe_DTG.ZDS;
data[JsonKeys::ZVZ()] = zeitangabe_DTG.ZVz;
}
// EX-L12 Zieldaten
void SAATELEGRAMS_EXPORT zieldatenfromJson(const QJsonObject &data, Zieldaten &zieldaten, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::NUMMER());
bOk &= data.contains(JsonKeys::GEOMETRIE());
bOk &= data.contains(JsonKeys::KOORDINATE());
bOk &= data.contains(JsonKeys::RELATIV_KOORDINATE());
bOk &= data.contains(JsonKeys::BREITE_RADIUS());
bOk &= data.contains(JsonKeys::TIEFE());
bOk &= data.contains(JsonKeys::ZIELACHSE());
bOk &= data.contains(JsonKeys::ELEMENTE());
bOk &= data.contains(JsonKeys::TYP());
bOk &= data.contains(JsonKeys::SUB_TYP());
if (!bOk)
return;
zieldaten.nummer = toInteger(data[JsonKeys::NUMMER()], bOk);
const QString artStr = data[JsonKeys::GEOMETRIE()].toString();
zieldaten.geometrie = zielgeometrieMap.value(artStr);
KoordinateMitHoehe koordinateMitHoehe;
koordinateMitHoeheFromJson(data[JsonKeys::KOORDINATE()].toObject(), koordinateMitHoehe, bOk);
zieldaten.koordinate = koordinateMitHoehe;
koordinateMitHoeheFromJson(data[JsonKeys::RELATIV_KOORDINATE()].toObject(), koordinateMitHoehe, bOk);
zieldaten.relativKoordinate = koordinateMitHoehe;
if (data.contains(JsonKeys::BREITE_RADIUS()))
zieldaten.breiteRadius = toInteger(data[JsonKeys::BREITE_RADIUS()], bOk);
else
zieldaten.breiteRadius = 0;
if (data.contains(JsonKeys::TIEFE()))
zieldaten.tiefe = toInteger(data[JsonKeys::TIEFE()], bOk);
else
zieldaten.tiefe = 0;
zieldaten.zielachse = toInteger(data[JsonKeys::ZIELACHSE()], bOk);
zieldaten.zog = toInteger(data[JsonKeys::ZOG()], bOk);
zieldaten.elemente = toInteger(data[JsonKeys::ELEMENTE()], bOk);
zieldaten.typ = data[JsonKeys::TYP()].toString();
zieldaten.subTyp = data[JsonKeys::SUB_TYP()].toString();
}
// EX-L12 Zieldaten
void SAATELEGRAMS_EXPORT zieldatenToJson(QJsonObject &data, const Zieldaten &zieldaten)
{
data[JsonKeys::NUMMER()] = zieldaten.nummer;
data[JsonKeys::GEOMETRIE()] = zielgeometrieMap.key(zieldaten.geometrie);
QJsonObject koordData;
koordinateMitHoeheToJson(koordData, zieldaten.koordinate); // toSJon;
data[JsonKeys::KOORDINATE()] = koordData;
QJsonObject koordDataRel;
koordinateMitHoeheToJson(koordDataRel, zieldaten.relativKoordinate);
data[JsonKeys::RELATIV_KOORDINATE()] = koordDataRel;
data[JsonKeys::BREITE_RADIUS()] = zieldaten.breiteRadius;
data[JsonKeys::TIEFE()] = zieldaten.tiefe;
data[JsonKeys::ZIELACHSE()] = zieldaten.zielachse;
data[JsonKeys::ZOG()] = zieldaten.zog;
data[JsonKeys::ELEMENTE()] = zieldaten.elemente;
data[JsonKeys::TYP()] = zieldaten.typ;
data[JsonKeys::SUB_TYP()] = zieldaten.subTyp;
QString message = QString::fromUtf8(QJsonDocument(data).toJson());
}
// EX-L18 Wirkungsbereich
void SAATELEGRAMS_EXPORT wirkungsbereichFromJson(const QJsonObject &data, Wirkungsbereich &wirkungsbereich, bool &bOk)
{
bOk = true;
wirkungsbereich.grundrichtung = toInteger(data[JsonKeys::GRUNDRICHTUNG()], bOk);
if (!bOk)
return;
wirkungsbereich.links = toInteger(data[JsonKeys::LINKS()], bOk);
if (!bOk)
return;
wirkungsbereich.rechts = toInteger(data[JsonKeys::RECHTS()], bOk);
if (!bOk)
return;
}
void SAATELEGRAMS_EXPORT wirkungsbereichToJson(QJsonObject &data, const Wirkungsbereich &wirkungsbereich)
{
data[JsonKeys::GRUNDRICHTUNG()] = wirkungsbereich.grundrichtung;
data[JsonKeys::LINKS()] = wirkungsbereich.links;
data[JsonKeys::RECHTS()] = wirkungsbereich.rechts;
}
// EX-L29 Erkundungseinheit
void SAATELEGRAMS_EXPORT erkundungseinheitFromJson(const QJsonObject &data, Erkundungseinheit &erkundungseinheit, bool &bOk)
{
// QString verein;
// int r;
bOk = true;
bOk &= data.contains(JsonKeys::VEREIN());
bOk &= data.contains(JsonKeys::EINHEIT());
if (!bOk)
return;
erkundungseinheit.verein = data[JsonKeys::VEREIN()].toString(); // EX-L2
erkundungseinheit.r = toInteger(data[JsonKeys::EINHEIT()], bOk);
}
void SAATELEGRAMS_EXPORT erkundungseinheitToJson(QJsonObject &data, const Erkundungseinheit &erkundungseinheit)
{
data[JsonKeys::VEREIN()] = erkundungseinheit.verein;
data[JsonKeys::EINHEIT()] = erkundungseinheit.r;
}
// EX-L30 Erkundungsstellungen
void SAATELEGRAMS_EXPORT erkundungsstellungenFromJson(const QJsonObject &data, Erkundungsstellungen &erkundungsstellungen, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::WAFFENPLAETZE());
bOk &= data.contains(JsonKeys::WIRKUNGSBEREICH());
if (!bOk)
return;
// KoordinateMitHoehe waffenplaetze; // EX-L14
// Wirkungsbereich wirkungsbereich; // EX-L18
QJsonArray waffenplaetzeArray = data[JsonKeys::WAFFENPLAETZE()].toArray();
for (const QJsonValue &value : qAsConst(waffenplaetzeArray))
{
KoordinateMitHoehe koordinateMitHoehe;
koordinateMitHoeheFromJson(value.toObject(), koordinateMitHoehe, bOk);
erkundungsstellungen.waffenplaetze.append(koordinateMitHoehe);
}
wirkungsbereichFromJson(data[JsonKeys::WIRKUNGSBEREICH()].toObject(), erkundungsstellungen.wirkungsbereich, bOk); // EX-L18
}
void SAATELEGRAMS_EXPORT erkundungsstellungenToJson(QJsonObject &data, const Erkundungsstellungen &erkundungsstellungen)
{
QJsonArray objWaffenplatzList;
for (const auto waffenplatz : qAsConst(erkundungsstellungen.waffenplaetze))
{
QJsonObject objWaffenplatz;
koordinateMitHoeheToJson(objWaffenplatz, waffenplatz);
objWaffenplatzList.append(objWaffenplatz);
}
data[JsonKeys::WAFFENPLAETZE()] = objWaffenplatzList;
QJsonDocument jsonDoc(data);
QJsonObject objWirkungsbereich;
wirkungsbereichToJson(objWirkungsbereich, erkundungsstellungen.wirkungsbereich);
data[JsonKeys::WIRKUNGSBEREICH()] = objWirkungsbereich;
}
// EX-L33 Feuerkommando
void SAATELEGRAMS_EXPORT feuerkommandoFromJson(const QJsonObject &data, Feuerkommando &feuerkommando, bool &bOk)
{
feuerkommando.verein = data[JsonKeys::VEREIN()].toString();
feuerkommando.typ = waffensystemtypMap.value(data[JsonKeys::TYP()].toString()); // EX-L26
if (data[JsonKeys::WIRKMITTEL()].isNull() || !data.contains(JsonKeys::WIRKMITTEL()))
;
else
{
QJsonArray wirkmittelArray = data[JsonKeys::WIRKMITTEL()].toArray();
for (const QJsonValue &value : qAsConst(wirkmittelArray))
{
WirkmittelFeuerkommando wirkmittel;
wirkmittelFeuerkommandoFromJson(value.toObject(), wirkmittel, bOk); // EX-L34 Wirkmittel Feuerkommando
feuerkommando.wirkmittel.append(wirkmittel);
}
}
if (data[JsonKeys::WIRKMITTELRAKETE()].isNull() || !data.contains(JsonKeys::WIRKMITTELRAKETE()))
return;
else
{
QJsonArray wirkmittelArray = data[JsonKeys::WIRKMITTELRAKETE()].toArray();
for (const QJsonValue &value : qAsConst(wirkmittelArray))
{
WirkmittelFeuerkommandoRakete wirkmittel;
wirkmittelFeuerkommandoRaketeFromJson(value.toObject(), wirkmittel, bOk); // EX-L34 Wirkmittel Feuerkommando
feuerkommando.wirkmittelRakete.append(wirkmittel);
}
}
}
void SAATELEGRAMS_EXPORT feuerkommandosToJson(QJsonArray &data, const QVector<Feuerkommando> &feuerkommandos)
{
for (const auto &feuerkommando : qAsConst(feuerkommandos))
{
QJsonObject objFeuerkommand;
feuerkommandoToJson(objFeuerkommand, feuerkommando);
data.append(objFeuerkommand);
}
}
void SAATELEGRAMS_EXPORT feuerkommandoToJson(QJsonObject &data, const Feuerkommando &feuerkommando)
{
data[JsonKeys::VEREIN()] = feuerkommando.verein;
data[JsonKeys::TYP()] = waffensystemtypMap.key(feuerkommando.typ);
QJsonArray objWirkmittelList;
QJsonArray objWirkmittelRaketeList;
for (const auto &kommando : qAsConst(feuerkommando.wirkmittel))
{
QJsonObject objWirkmittel;
wirkmittelFeuerkommandoToJson(objWirkmittel, kommando);
objWirkmittelList.append(objWirkmittel);
}
data[JsonKeys::WIRKMITTEL()] = objWirkmittelList;
for (const auto &kommando : qAsConst(feuerkommando.wirkmittelRakete))
{
QJsonObject objWirkmittel;
wirkmittelFeuerkommandoRaketeToJson(objWirkmittel, kommando);
objWirkmittelRaketeList.append(objWirkmittel);
}
data[JsonKeys::WIRKMITTEL()] = objWirkmittelList;
data[JsonKeys::WIRKMITTELRAKETE()] = objWirkmittelRaketeList;
}
// EX-L34 Wirkmittel Feuerkommando
void wirkmittelFeuerkommandoFromJson(const QJsonObject &data, WirkmittelFeuerkommando &wirkmittelFeuerkommando, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::KENNER());
bOk &= data.contains(JsonKeys::AUFTREFFPUNKT());
bOk &= data.contains(JsonKeys::FLUGZEIT());
bOk &= data.contains(JsonKeys::GIPFELHOEHE());
bOk &= data.contains(JsonKeys::SCHUSSRICHTUNG());
bOk &= data.contains(JsonKeys::GESCHOSS());
bOk &= data.contains(JsonKeys::FLUGBAHNPUNKT());
bOk &= data.contains(JsonKeys::STREUUNG());
if (!bOk)
return;
wirkmittelFeuerkommando.kenner = waffensystemkennerMap.value(data[JsonKeys::KENNER()].toString()); // EX-L27
koordinateMitHoeheFromJson(data[JsonKeys::AUFTREFFPUNKT()].toObject(), wirkmittelFeuerkommando.auftreffpunkt, bOk); // EX-L14
wirkmittelFeuerkommando.flugzeit = toDouble(data[JsonKeys::FLUGZEIT()], bOk);
wirkmittelFeuerkommando.gipfelhoehe = toInteger(data[JsonKeys::GIPFELHOEHE()], bOk);
wirkmittelFeuerkommando.schussrichtung = toDouble(data[JsonKeys::SCHUSSRICHTUNG()], bOk);
feuerkommandoGeschosseFromJson(data[JsonKeys::GESCHOSS()].toObject(), wirkmittelFeuerkommando.geschoss, bOk); // EX-L36
flugbahnpunkteFromJson(data[JsonKeys::FLUGBAHNPUNKT()].toArray(), wirkmittelFeuerkommando.flugbahnpunkt, bOk); // EX-L35
streuungsdatenFromJson(data[JsonKeys::STREUUNG()].toObject(), wirkmittelFeuerkommando.streuung, bOk); // EX-L39
}
void wirkmittelFeuerkommandosToJson(QJsonArray &data, const QVector<WirkmittelFeuerkommando> &wirkmittelFeuerkommando)
{
for (const auto &feuerkommando : qAsConst(wirkmittelFeuerkommando))
{
QJsonObject fkd;
wirkmittelFeuerkommandoToJson(fkd, feuerkommando);
data.append(fkd);
}
}
void wirkmittelFeuerkommansdoToJson(QJsonArray &data, const QVector<WirkmittelFeuerkommando> &wirkmittelFeuerkommando)
{
for (const auto &wfk : qAsConst(wirkmittelFeuerkommando))
{
QJsonObject obj;
wirkmittelFeuerkommandoToJson(obj, wfk);
data.append(obj);
}
}
void wirkmittelFeuerkommandoToJson(QJsonObject &data, const WirkmittelFeuerkommando &wirkmittelFeuerkommando)
{
data[JsonKeys::KENNER()] = waffensystemkennerMap.key(wirkmittelFeuerkommando.kenner);
QJsonObject koordinate;
koordinateMitHoeheToJson(koordinate, wirkmittelFeuerkommando.auftreffpunkt);
data[JsonKeys::AUFTREFFPUNKT()] = koordinate;
data[JsonKeys::FLUGZEIT()] = wirkmittelFeuerkommando.flugzeit;
data[JsonKeys::GIPFELHOEHE()] = wirkmittelFeuerkommando.gipfelhoehe;
data[JsonKeys::SCHUSSRICHTUNG()] = wirkmittelFeuerkommando.schussrichtung;
QJsonObject geschoss;
feuerkommandoGeschosseToJson(geschoss, wirkmittelFeuerkommando.geschoss);
data[JsonKeys::GESCHOSS()] = geschoss;
QJsonArray flugPunkte;
flugbahnpunkteToJson(flugPunkte, wirkmittelFeuerkommando.flugbahnpunkt);
data[JsonKeys::FLUGBAHNPUNKT()] = flugPunkte;
QJsonObject streuung;
streuungsdatenToJson(streuung, wirkmittelFeuerkommando.streuung);
data[JsonKeys::STREUUNG()] = streuung;
}
// EX-L35 Flugbahnpunkt
void SAATELEGRAMS_EXPORT flugbahnpunktFromJson(const QJsonObject &data, Flugbahnpunkt &flugbahnpunkt, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::ZEIT());
bOk &= data.contains(JsonKeys::X_RELATIV());
bOk &= data.contains(JsonKeys::Y_RELATIV());
bOk &= data.contains(JsonKeys::Z_RELATIV());
if (!bOk)
return;
flugbahnpunkt.zeit = toDouble(data[JsonKeys::ZEIT()], bOk);
flugbahnpunkt.xRelativ = toDouble(data[JsonKeys::X_RELATIV()], bOk);
flugbahnpunkt.yRelativ = toDouble(data[JsonKeys::Y_RELATIV()], bOk);
flugbahnpunkt.zRelativ = toDouble(data[JsonKeys::Z_RELATIV()], bOk);
}
void SAATELEGRAMS_EXPORT flugbahnpunktToJson(QJsonObject &data, const Flugbahnpunkt &flugbahnpunkt)
{
data[JsonKeys::ZEIT()] = flugbahnpunkt.zeit;
data[JsonKeys::X_RELATIV()] = flugbahnpunkt.xRelativ;
data[JsonKeys::Y_RELATIV()] = flugbahnpunkt.yRelativ;
data[JsonKeys::Z_RELATIV()] = flugbahnpunkt.zRelativ;
}
// Array [EX-L35 Flugbahnpunkte]
void SAATELEGRAMS_EXPORT flugbahnpunkteFromJson(const QJsonArray &data, QVector<Flugbahnpunkt> &flugbahnpunkte, bool &bOk)
{
for (const QJsonValue &value : qAsConst(data))
{
QJsonObject obj = value.toObject();
Flugbahnpunkt flugbahnpunkt;
flugbahnpunktFromJson(obj, flugbahnpunkt, bOk);
flugbahnpunkte.append(flugbahnpunkt);
}
}
void SAATELEGRAMS_EXPORT flugbahnpunkteToJson(QJsonArray &data, const QVector<Flugbahnpunkt> &flugbahnpunkte)
{
if (flugbahnpunkte.isEmpty())
return;
for (const auto &flugpunkt : qAsConst(flugbahnpunkte))
{
QJsonObject objFlugpunkt;
flugbahnpunktToJson(objFlugpunkt, flugpunkt);
data.append(objFlugpunkt);
}
}
// EX-L36 Feuerkommando Geschosse
void SAATELEGRAMS_EXPORT feuerkommandoGeschosseFromJson(const QJsonObject &data, FeuerkommandoGeschosse &feuerkommandoGeschosse, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::GESCHOSSSORTE());
bOk &= data.contains(JsonKeys::ZUENDER());
bOk &= data.contains(JsonKeys::ZUENDERFUNKTION());
bOk &= data.contains(JsonKeys::ZUENDER_ZEIT());
bOk &= data.contains(JsonKeys::ANZAHL());
bOk &= data.contains(JsonKeys::INTERVALL());
if (!bOk)
return;
feuerkommandoGeschosse.geschosssorte = data[JsonKeys::GESCHOSSSORTE()].toString(); // EX-L9
feuerkommandoGeschosse.ladung = data[JsonKeys::LADUNG()].toString(); // EX-L10
feuerkommandoGeschosse.ladungsNummer = data[JsonKeys::LADUNGSNUMMER()].toInt();
feuerkommandoGeschosse.zuender = data[JsonKeys::ZUENDER()].toString(); // EX-L11
feuerkommandoGeschosse.zuenderFunktion = data[JsonKeys::ZUENDERFUNKTION()].toString(); // EX-L41
feuerkommandoGeschosse.zuenderZeit = toDouble(data[JsonKeys::ZUENDER_ZEIT()], bOk); // [ms]
feuerkommandoGeschosse.anzahl = toInteger(data[JsonKeys::ANZAHL()], bOk);
feuerkommandoGeschosse.intervall = toInteger(data[JsonKeys::INTERVALL()], bOk);
}
void SAATELEGRAMS_EXPORT feuerkommandoGeschosseToJson(QJsonObject &data, const FeuerkommandoGeschosse &feuerkommandoGeschosse)
{
data[JsonKeys::GESCHOSSSORTE()] = feuerkommandoGeschosse.geschosssorte;
data[JsonKeys::LADUNG()] = feuerkommandoGeschosse.ladung;
data[JsonKeys::LADUNGSNUMMER()] = feuerkommandoGeschosse.ladungsNummer;
data[JsonKeys::ZUENDER()] = feuerkommandoGeschosse.zuender;
data[JsonKeys::ZUENDERFUNKTION()] = feuerkommandoGeschosse.zuenderFunktion;
data[JsonKeys::ZUENDER_ZEIT()] = feuerkommandoGeschosse.zuenderZeit;
data[JsonKeys::ANZAHL()] = feuerkommandoGeschosse.anzahl;
data[JsonKeys::INTERVALL()] = feuerkommandoGeschosse.intervall;
}
// EX-L37 Flugbahnberechnung Geschosse
void SAATELEGRAMS_EXPORT flugbahnberechnungGeschosseFromJson(const QJsonObject &data, FlugbahnberechnungGeschosse &flugbahnberechnungGeschosse, bool &bOk)
{
bOk &= data.contains(JsonKeys::GESCHOSSSORTE());
bOk &= data.contains(JsonKeys::ZUENDER());
bOk &= data.contains(JsonKeys::ZUENDERFUNKTION());
if (!bOk)
return;
flugbahnberechnungGeschosse.geschosssorte = data[JsonKeys::GESCHOSSSORTE()].toString(); // EX-L9
flugbahnberechnungGeschosse.ladung = data[JsonKeys::LADUNG()].toString(); // EX-L10
flugbahnberechnungGeschosse.zuender = data[JsonKeys::ZUENDER()].toString(); // EX-L11
flugbahnberechnungGeschosse.zuenderFunktion = data[JsonKeys::ZUENDERFUNKTION()].toString(); // EX-L41
}
void SAATELEGRAMS_EXPORT FlugbahnberechnungGeschosseToJson(QJsonObject &data, const FlugbahnberechnungGeschosse &flugbahnberechnungGeschosse)
{
data[JsonKeys::GESCHOSSSORTE()] = flugbahnberechnungGeschosse.geschosssorte;
data[JsonKeys::LADUNG()] = flugbahnberechnungGeschosse.ladung;
data[JsonKeys::ZUENDER()] = flugbahnberechnungGeschosse.zuender;
data[JsonKeys::ZUENDERFUNKTION()] = flugbahnberechnungGeschosse.zuenderFunktion;
}
// EX-L38 Flugbahndaten Geschosse
void SAATELEGRAMS_EXPORT FlugbahndatenGeschosseFromJson(const QJsonObject &data, FlugbahndatenGeschosse &flugbahndatenGeschosse, bool &bOk)
{
flugbahndatenGeschosse.geschosssorte = data[JsonKeys::GESCHOSSSORTE()].toString(); // EX-L9
flugbahndatenGeschosse.ladung = data[JsonKeys::LADUNG()].toString();
flugbahndatenGeschosse.ladungsNummer = toInteger(data[JsonKeys::LADUNGSNUMMER()], bOk);
flugbahndatenGeschosse.zuender = data[JsonKeys::ZUENDER()].toString(); // EX-L9
flugbahndatenGeschosse.zuenderFunktion = data[JsonKeys::ZUENDERFUNKTION()].toString();
if (data[JsonKeys::ZUENDER_ZEIT()].isNull() || !data.contains(JsonKeys::ZUENDER_ZEIT()))
{
flugbahndatenGeschosse.zuenderZeit = -1.0;
}
else
{
flugbahndatenGeschosse.zuenderZeit = toDouble(data[JsonKeys::ZUENDER_ZEIT()], bOk);
}
}
void SAATELEGRAMS_EXPORT FlugbahndatenGeschosseToJson(QJsonObject &data, const FlugbahndatenGeschosse &flugbahndatenGeschosse)
{
data[JsonKeys::GESCHOSSSORTE()] = flugbahndatenGeschosse.geschosssorte;
data[JsonKeys::LADUNG()] = flugbahndatenGeschosse.ladung;
data[JsonKeys::LADUNGSNUMMER()] = flugbahndatenGeschosse.ladungsNummer;
data[JsonKeys::ZUENDER()] = flugbahndatenGeschosse.zuender;
data[JsonKeys::ZUENDERFUNKTION()] = flugbahndatenGeschosse.zuenderFunktion;
data[JsonKeys::ZUENDER_ZEIT()] = flugbahndatenGeschosse.zuenderZeit;
}
// EX-L39 Streuungsdaten
void streuungsdatenFromJson(const QJsonObject &data, Streuungsdaten &streuungsdaten, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::LAENGS_STREUUNG());
bOk &= data.contains(JsonKeys::SEITEN_STREUUNG());
bOk &= data.contains(JsonKeys::LAENGS_STREUUNG_H());
bOk &= data.contains(JsonKeys::SEITEN_STREUUNG_H());
if (!bOk)
return;
streuungsdaten.laengsstreuung = toDouble(data[JsonKeys::LAENGS_STREUUNG()], bOk);
streuungsdaten.seitenstreuung = toDouble(data[JsonKeys::SEITEN_STREUUNG()], bOk);
streuungsdaten.laengsstreuungH = toDouble(data[JsonKeys::LAENGS_STREUUNG_H()], bOk);
streuungsdaten.seitenstreuungH = toDouble(data[JsonKeys::SEITEN_STREUUNG_H()], bOk);
};
void SAATELEGRAMS_EXPORT streuungsdatenToJson(QJsonObject &data, const Streuungsdaten &streuungsdaten)
{
data[JsonKeys::LAENGS_STREUUNG()] = streuungsdaten.laengsstreuung;
data[JsonKeys::SEITEN_STREUUNG()] = streuungsdaten.seitenstreuung;
data[JsonKeys::LAENGS_STREUUNG_H()] = streuungsdaten.laengsstreuungH;
data[JsonKeys::SEITEN_STREUUNG_H()] = streuungsdaten.seitenstreuungH;
}
//************************
// EX-L45 Anmeldebestaetigung Fehlercode
void anBestaetigungsdatenFromJson(const QJsonObject &data, AnBestaetigungsdaten &anBestaetigungsdaten, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::ERRORTEXT());
if (!bOk)
return;
anBestaetigungsdaten.error = AnmeldebestaetigungFehlercodeMap.value(data[JsonKeys::ERRORTEXT()].toString());
};
void SAATELEGRAMS_EXPORT anBestaetigungsdatenToJson(QJsonObject &data, const AnBestaetigungsdaten &anBestaetigungsdaten)
{
data[JsonKeys::ERRORTEXT()] = AnmeldebestaetigungFehlercodeMap.key(anBestaetigungsdaten.error);
}
//************************
// EX-L47 Rakete Trefferpunkt
void treffpunktfromJson(const QJsonObject &data, Treffpunkt &treffpunkt, bool &bOk)
{
koordinateMitHoeheFromJson(data[JsonKeys::KOORDINATE()].toObject(), treffpunkt.koordinate, bOk); // EX-L14
treffpunkt.anzahl = toInteger(data[JsonKeys::ANZAHL()], bOk);
}
void treffpunktefromJson(const QJsonArray &data, QVector<Treffpunkt> &treffpunkte, bool &bOk)
{
for (const QJsonValue &val : qAsConst(data))
{
Treffpunkt treffpunkt;
treffpunktfromJson(val.toObject(), treffpunkt, bOk);
treffpunkte.append(treffpunkt);
}
}
//************************
// EX-L49 Wirkmittel Feuerkommando Rakete
void wirkmittelFeuerkommandoRaketeFromJson(const QJsonObject &data, WirkmittelFeuerkommandoRakete &wirkmittelFeuerkommandoRakete, bool &bOk)
{
bOk = true;
// bOk &= data.contains(JsonKeys::KENNER());
// bOk &= data.contains(JsonKeys::FLUGZEIT());
// bOk &= data.contains(JsonKeys::GIPFELHOEHE());
// bOk &= data.contains(JsonKeys::SCHUSSRICHTUNG());
// bOk &= data.contains(JsonKeys::GESCHOSS());
// if (!bOk)
// {
// qDebug() << "wirkmittelFeuerkommandoRaketeFromJson bOk=false";
// //return;
// }
wirkmittelFeuerkommandoRakete.kenner = waffensystemkennerMap.value(data[JsonKeys::KENNER()].toString()); // EX-L27
treffpunktefromJson(data[JsonKeys::TREFFPUNKTE()].toArray(), wirkmittelFeuerkommandoRakete.treffpunkte, bOk);
wirkmittelFeuerkommandoRakete.flugzeit = toDouble(data[JsonKeys::FLUGZEIT()], bOk);
wirkmittelFeuerkommandoRakete.gipfelhoehe = toInteger(data[JsonKeys::GIPFELHOEHE()], bOk);
wirkmittelFeuerkommandoRakete.schussrichtung = toDouble(data[JsonKeys::SCHUSSRICHTUNG()], bOk);
wirkmittelFeuerkommandoRakete.fallwinkel = toInteger(data[JsonKeys::FALLWINKEL()], bOk);
wirkmittelFeuerkommandoRakete.anflug = TrajectoryRocketMap.value(data[JsonKeys::ANFLUG()].toString()); // EX-L48
feuerkommandoGeschosseFromJson(data[JsonKeys::GESCHOSS()].toObject(), wirkmittelFeuerkommandoRakete.geschoss, bOk); // EX-L36
wirkmittelFeuerkommandoRakete.gps = GpsFrequencyMap.value(data[JsonKeys::GPS()].toString());
wirkmittelFeuerkommandoRakete.wirkzeit = toInteger(data[JsonKeys::WIRKZEIT()], bOk);
}
void trefferpunktToJson(QJsonObject &data, const Treffpunkt &treffpunkt)
{
QJsonObject koordinate;
koordinateMitHoeheToJson(koordinate, treffpunkt.koordinate);
data[JsonKeys::KOORDINATE()] = koordinate;
data[JsonKeys::ANZAHL()] = treffpunkt.anzahl;
}
void trefferpunkteToJson(QJsonArray &data, const QVector<Treffpunkt> &treffpunkte)
{
for (const auto &treffpunkt : qAsConst(treffpunkte))
{
QJsonObject trp;
trefferpunktToJson(trp, treffpunkt);
data.append(trp);
}
}
void wirkmittelFeuerkommandoRaketeToJson(QJsonObject &data, const WirkmittelFeuerkommandoRakete &wirkmittelFeuerkommandoRakete)
{
data[JsonKeys::KENNER()] = waffensystemkennerMap.key(wirkmittelFeuerkommandoRakete.kenner);
QJsonArray objTrefferpunkte;
trefferpunkteToJson(objTrefferpunkte, wirkmittelFeuerkommandoRakete.treffpunkte);
data[JsonKeys::TREFFPUNKTE()] = objTrefferpunkte;
data[JsonKeys::FLUGZEIT()] = wirkmittelFeuerkommandoRakete.flugzeit;
data[JsonKeys::GIPFELHOEHE()] = wirkmittelFeuerkommandoRakete.gipfelhoehe;
data[JsonKeys::SCHUSSRICHTUNG()] = wirkmittelFeuerkommandoRakete.schussrichtung;
data[JsonKeys::FALLWINKEL()] = wirkmittelFeuerkommandoRakete.fallwinkel;
data[JsonKeys::ANFLUG()] = ProjectDataManagement::toString(wirkmittelFeuerkommandoRakete.anflug);
data[JsonKeys::GPS()] = ProjectDataManagement::toString(wirkmittelFeuerkommandoRakete.gps);
data[JsonKeys::WIRKZEIT()] = wirkmittelFeuerkommandoRakete.wirkzeit;
QJsonObject objGeschoss;
feuerkommandoGeschosseToJson(objGeschoss, wirkmittelFeuerkommandoRakete.geschoss);
data[JsonKeys::GESCHOSS()] = objGeschoss;
}
void wirkmittelFeuerkommandosRaketeToJson(QJsonArray &data, const QVector<WirkmittelFeuerkommandoRakete> &wirkmittelFeuerkommandoRakete)
{
for (const auto &feuerkommandoRakete : qAsConst(wirkmittelFeuerkommandoRakete))
{
QJsonObject fkr;
wirkmittelFeuerkommandoRaketeToJson(fkr, feuerkommandoRakete);
data.append(fkr);
}
}
//************************
// EX-FQ(BA-BB-FK) Wirkfeldplanung
void SAATELEGRAMS_EXPORT wirkfeldplanungDataFromJson(const QJsonObject &data, WirkfeldplanungData &wirkfeldplanungData, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::ZIELDATEN());
bOk &= data.contains(JsonKeys::ABFEUERUNGSART());
bOk &= data.contains(JsonKeys::FORDERUNG());
bOk &= data.contains(JsonKeys::DAUER());
bOk &= data.contains(JsonKeys::FEUERKOMMANDO());
if (!bOk)
return;
if (data[JsonKeys::FEUERKAMPFREFERENZ()].isNull() || !data.contains(JsonKeys::FEUERKAMPFREFERENZ()))
{
wirkfeldplanungData.feuerkampfReferenz = QString();
}
else
{
wirkfeldplanungData.feuerkampfReferenz = data[JsonKeys::FEUERKAMPFREFERENZ()].toString();
}
feuerkommandoFromJson(data[JsonKeys::FEUERKOMMANDO()].toObject(), wirkfeldplanungData.feuerkommando, bOk);
zieldatenfromJson(data[JsonKeys::ZIELDATEN()].toObject(), wirkfeldplanungData.zieldaten, bOk);
wirkfeldplanungData.abfeuerungsArt = AbfeuerungsartMap.value(data[JsonKeys::ABFEUERUNGSART()].toString());
wirkfeldplanungData.forderung = ForderungMap.value(data[JsonKeys::FORDERUNG()].toString());
wirkfeldplanungData.dauer = toInteger(data[JsonKeys::DAUER()], bOk);
}
// 7.3.9 EX-Fuehrungsdaten
void SAATELEGRAMS_EXPORT fuehrungsdatenFromJson(const QJsonObject &data, Fuehrungsdaten &fuehrungsdaten, bool &bOk)
{
fuehrungsdaten.art = art_L24Map.value(data[JsonKeys::ART()].toString()); // EX-L24
fuehrungsdaten.name = data[JsonKeys::NAME()].toString();
fuehrungsdaten.meldungsnummer = data[JsonKeys::MELDUNGSNUMMER()].toInt();
zeitangabe_DTGFromJson(data[JsonKeys::AB()].toObject(), fuehrungsdaten.ab, bOk); // EX-L15
zeitangabe_DTGFromJson(data[JsonKeys::BIS()].toObject(), fuehrungsdaten.bis, bOk); // EX-L15
QJsonArray koordinatenArray = data[JsonKeys::KOORDINATEN()].toArray();
for (const QJsonValue &value : qAsConst(koordinatenArray))
{
Koordinate koordinate;
koordinatefromJson(value.toObject(), koordinate, bOk); // EX-L13
fuehrungsdaten.koordinaten.append(koordinate);
}
fuehrungsdaten.linkerNachbar = data[JsonKeys::LINKERNACHBAR()].toString();
fuehrungsdaten.rechterNachbar = data[JsonKeys::RECHTERNACHBAR()].toString();
}
void SAATELEGRAMS_EXPORT fuehrungsdatenToJson(QJsonObject &data, const Fuehrungsdaten &fuehrungsdaten)
{
data[JsonKeys::ART()] = art_L24Map.key(fuehrungsdaten.art);
data[JsonKeys::NAME()] = fuehrungsdaten.name;
data[JsonKeys::MELDUNGSNUMMER()] = fuehrungsdaten.meldungsnummer;
QJsonObject objTimestamp;
zeitangabe_DTGToJson(objTimestamp, fuehrungsdaten.ab);
data[JsonKeys::AB()] = objTimestamp;
zeitangabe_DTGToJson(objTimestamp, fuehrungsdaten.bis);
data[JsonKeys::BIS()] = objTimestamp;
QJsonArray koordinatenArray;
for (const auto &koordinate : qAsConst(fuehrungsdaten.koordinaten))
{
QJsonObject objKoordinate;
koordinateToJson(objKoordinate, koordinate);
koordinatenArray.append(objKoordinate);
}
data[JsonKeys::KOORDINATEN()] = koordinatenArray;
data[JsonKeys::LINKERNACHBAR()] = fuehrungsdaten.linkerNachbar;
data[JsonKeys::RECHTERNACHBAR()] = fuehrungsdaten.rechterNachbar;
}
// 7.2.22 EX-Flugbahnberechnung
void SAATELEGRAMS_EXPORT exFlugbahnberechnungDatenFromJson(const QJsonObject &data, FlugBerechnungsDaten &flugBerechnungsDaten, bool &bOk)
{
bOk = true;
bOk &= data.contains(JsonKeys::STANDORT());
bOk &= data.contains(JsonKeys::ZIELKOORDINATE());
bOk &= data.contains(JsonKeys::WAFFENSYSTEM());
bOk &= data.contains(JsonKeys::GESCHOSS());
bOk &= data.contains(JsonKeys::SPRENGHOEHE());
bOk &= data.contains(JsonKeys::WINKELGRUPPE());
if (!bOk)
return;
koordinateMitHoeheFromJson(data[JsonKeys::STANDORT()].toObject(), flugBerechnungsDaten.standort, bOk); // EX-L14
koordinateMitHoeheFromJson(data[JsonKeys::ZIELKOORDINATE()].toObject(), flugBerechnungsDaten.zielkoordinate, bOk); // EX-L14
flugBerechnungsDaten.waffensystem = waffensystemtypMap.value(data[JsonKeys::WAFFENSYSTEM()].toString()); // EX-L26
flugbahnberechnungGeschosseFromJson(data[JsonKeys::GESCHOSS()].toObject(), flugBerechnungsDaten.geschoss, bOk);
flugBerechnungsDaten.sprenghoehe = toInteger(data[JsonKeys::SPRENGHOEHE()], bOk);
flugBerechnungsDaten.winkelgruppe = winkelgruppeMap.value(data[JsonKeys::WINKELGRUPPE()].toString());
}
void SAATELEGRAMS_EXPORT exFlugbahnberechnungDatenToJson(QJsonObject &data, const FlugBerechnungsDaten &flugBerechnungsDaten)
{
QJsonObject koordinate;
koordinateMitHoeheToJson(koordinate, flugBerechnungsDaten.standort);
data[JsonKeys::STANDORT()] = koordinate;
koordinateMitHoeheToJson(koordinate, flugBerechnungsDaten.zielkoordinate);
data[JsonKeys::ZIELKOORDINATE()] = koordinate;
data[JsonKeys::WAFFENSYSTEM()] = waffensystemtypMap.key(flugBerechnungsDaten.waffensystem);
QJsonObject geschoss;
FlugbahnberechnungGeschosseToJson(geschoss, flugBerechnungsDaten.geschoss);
data[JsonKeys::GESCHOSS()] = geschoss;
data[JsonKeys::SPRENGHOEHE()] = flugBerechnungsDaten.sprenghoehe;
data[JsonKeys::WINKELGRUPPE()] = winkelgruppeMap.key(flugBerechnungsDaten.winkelgruppe);
}
// 7.2.23 EX-Flugbahndaten
void SAATELEGRAMS_EXPORT flugbahndatenFromJson(const QJsonObject &data, Flugbahndaten &flugbahndaten, bool &bOk)
{
flugbahndaten.fehlercode = FehlercodeMap.value(data[JsonKeys::FEHLERCODE()].toString());
if (flugbahndaten.fehlercode == FlugbahnberechnungFehlercode::Ok)
{
koordinateMitHoeheFromJson(data[JsonKeys::ZIELKOORDINATE()].toObject(), flugbahndaten.zielkoordinate, bOk);
flugbahndaten.waffensystem = waffensystemtypMap.value(data[JsonKeys::TYP()].toString());
flugbahndaten.flugzeit = toDouble(data[JsonKeys::FLUGZEIT()], bOk);
flugbahndaten.gipfelhoehe = toInteger(data[JsonKeys::GIPFELHOEHE()], bOk);
flugbahndaten.schussrichtung = toDouble(data[JsonKeys::SCHUSSRICHTUNG()], bOk);
flugbahndaten.fallwinkel = toInteger(data[JsonKeys::FALLWINKEL()], bOk);
QJsonArray flugbahnpunkteArray = data[JsonKeys::FLUGBAHNPUNKT()].toArray();
for (const QJsonValue &value : qAsConst(flugbahnpunkteArray))
{
Flugbahnpunkt flugbahnpunkt;
flugbahnpunktFromJson(value.toObject(), flugbahnpunkt, bOk); // EX-L13
flugbahndaten.flugbahnpunkt.append(flugbahnpunkt);
}
if (data[JsonKeys::STREUUNG()].isNull() || !data.contains(JsonKeys::STREUUNG()))
{
flugbahndaten.streuung.laengsstreuung = 0.0;
flugbahndaten.streuung.laengsstreuungH = 0.0;
flugbahndaten.streuung.seitenstreuung = 0.0;
flugbahndaten.streuung.seitenstreuungH = 0.0;
}
else
streuungsdatenFromJson(data[JsonKeys::STREUUNG()].toObject(), flugbahndaten.streuung, bOk); // EX-L39
FlugbahndatenGeschosseFromJson(data[JsonKeys::GESCHOSS()].toObject(), flugbahndaten.geschoss, bOk); // EX-L39
}
}
void SAATELEGRAMS_EXPORT flugbahndatenToJson(QJsonObject &data, const Flugbahndaten &flugbahndaten)
{
data[JsonKeys::FEHLERCODE()] = FehlercodeMap.key(flugbahndaten.fehlercode);
QJsonObject objKoordinate;
koordinateMitHoeheToJson(objKoordinate, flugbahndaten.zielkoordinate);
data[JsonKeys::ZIELKOORDINATE()] = objKoordinate;
data[JsonKeys::TYP()] = waffensystemtypMap.key(flugbahndaten.waffensystem);
data[JsonKeys::FLUGZEIT()] = flugbahndaten.flugzeit;
data[JsonKeys::GIPFELHOEHE()] = flugbahndaten.gipfelhoehe;
data[JsonKeys::SCHUSSRICHTUNG()] = flugbahndaten.schussrichtung;
data[JsonKeys::FALLWINKEL()] = flugbahndaten.fallwinkel;
QJsonArray flugbahnpunkte;
for (const auto &flugbahnpunkt : qAsConst(flugbahndaten.flugbahnpunkt))
{
QJsonObject flugbahnpunktObj;
flugbahnpunktToJson(flugbahnpunktObj, flugbahnpunkt);
flugbahnpunkte.append(flugbahnpunktObj);
}
data[JsonKeys::FLUGBAHNPUNKT()] = flugbahnpunkte;
QJsonObject streuungsdatenObj;
streuungsdatenToJson(streuungsdatenObj, flugbahndaten.streuung);
data[JsonKeys::STREUUNG()] = streuungsdatenObj;
QJsonObject geschossObj;
FlugbahndatenGeschosseToJson(geschossObj, flugbahndaten.geschoss);
data[JsonKeys::GESCHOSS()] = geschossObj;
}
// EX-Anmeldedaten
void SAATELEGRAMS_EXPORT anmeldedatenFromJson(const QJsonObject &data, Anmeldedaten &anmeldedaten, bool &bOk)
{
bOk = true;
anmeldedaten.partyId = data[JsonKeys::PARTY_ID()].toInt();
anmeldedaten.adlerVerbund = data[JsonKeys::ADLER_VERBUND()].toBool();
anmeldedaten.szenar = data[JsonKeys::SZENAR()].toString();
}
// EX-Abmeldedaten
void SAATELEGRAMS_EXPORT abmeldedatenFromJson(const QJsonObject &data, Abmeldedaten &abmeldedaten, bool &bOk)
{
bOk = true;
abmeldedaten.partyId = data[JsonKeys::PARTY_ID()].toInt();
}
// EX-TechnischeDaten
void SAATELEGRAMS_EXPORT technischeDatenFromJson(const QJsonObject &data, TechnischeDaten &technischeDaten, bool &bOk)
{
bOk = true;
technischeDaten.status = StatusL32Map.value(data[JsonKeys::STATUS()].toString());
technischeDaten.beschreibung = data[JsonKeys::BESCHREIBUNG()].toString();
};
void SAATELEGRAMS_EXPORT technischeDatenToJson(QJsonObject &data, const TechnischeDaten &technischeDaten)
{
data[JsonKeys::STATUS()] = StatusL32Map.key(technischeDaten.status);
data[JsonKeys::BESCHREIBUNG()] = technischeDaten.beschreibung;
}
// EX-EX-Freitextdaten
void SAATELEGRAMS_EXPORT freitextdatenToJson(QJsonObject &data, const FreitextDaten &freitextDaten) { data[JsonKeys::TEXTVAL()] = freitextDaten.text; };
void SAATELEGRAMS_EXPORT FreitextDatenFromJson(const QJsonObject &data, FreitextDaten &freitextDaten, bool &bOk)
{
bOk = true;
freitextDaten.text = data[JsonKeys::TEXTVAL()].toString();
}
// EX-MQ Manuelle Quittung
void SAATELEGRAMS_EXPORT mqManuelleQuittungDatenToJson(QJsonObject &data, const ManuelleQuittungDaten &manuelleQuittungDaten)
{
data[JsonKeys::FEUERKAMPFREFERENZ()] = manuelleQuittungDaten.feuerkampfreferenz;
};
void SAATELEGRAMS_EXPORT mqManuelleQuittungDatenFromJson(const QJsonObject &data, ManuelleQuittungDaten &manuelleQuittungDaten, bool &bOk)
{
bOk = true;
manuelleQuittungDaten.feuerkampfreferenz = data[JsonKeys::FEUERKAMPFREFERENZ()].toString();
}
void SAATELEGRAMS_EXPORT exNichtFeuernFromJson(const QJsonObject &data, Feuerkampfdaten &feuerkampfdaten, bool &bOk)
{
bOk = true;
feuerkampfdaten.feuerkampfReferenz = data[JsonKeys::FEUERKAMPFREFERENZ()].toString();
feuerkampfdaten.kenner = waffensystemkennerMap.value(data[JsonKeys::KENNER()].toString());
feuerkampfdaten.verein = data[JsonKeys::VEREIN()].toString();
}
// EX-FeuerHaltDaten
void SAATELEGRAMS_EXPORT feuerHaltDatenFromJson(const QJsonObject &data, FeuerHaltDaten &feuerHaltDaten, bool &bOk)
{
feuerHaltDaten.verein = data[JsonKeys::VEREIN()].toString();
feuerHaltDaten.kenner = waffensystemkennerMap.value(data[JsonKeys::KENNER()].toString());
feuerHaltDaten.kategorie = feuerHaltKategorieMap.value(data[JsonKeys::KATEGORIE()].toString());
feuerHaltDaten.feuerkampfReferenz = data[JsonKeys::FEUERKAMPFREFERENZ()].toString();
if (data[JsonKeys::ZPNUMMER()].isNull() || !data.contains(JsonKeys::ZPNUMMER()))
feuerHaltDaten.zpNummer = -1.0;
else
feuerHaltDaten.zpNummer = data[JsonKeys::ZPNUMMER()].toInt();
koordinatefromJson(data[JsonKeys::KOORDINATE()].toObject(), feuerHaltDaten.koordinate, bOk); // EX-L13
feuerHaltDaten.radius = data[JsonKeys::RADIUS()].toInt();
feuerHaltDaten.entladenSchuss = data[JsonKeys::ENTLADENSCHUSS()].toBool();
};
void SAATELEGRAMS_EXPORT feuerHaltDatenToJson(QJsonObject &data, const FeuerHaltDaten &feuerHaltDaten)
{
data[JsonKeys::VEREIN()] = feuerHaltDaten.verein;
data[JsonKeys::KENNER()] = waffensystemkennerMap.key(feuerHaltDaten.kenner);
data[JsonKeys::KATEGORIE()] = feuerHaltKategorieMap.key(feuerHaltDaten.kategorie);
data[JsonKeys::FEUERKAMPFREFERENZ()] = feuerHaltDaten.feuerkampfReferenz;
data[JsonKeys::ZPNUMMER()] = feuerHaltDaten.zpNummer;
QJsonObject koordinate;
koordinateToJson(koordinate, feuerHaltDaten.koordinate);
data[JsonKeys::KOORDINATE()] = koordinate;
data[JsonKeys::RADIUS()] = feuerHaltDaten.radius;
data[JsonKeys::ENTLADENSCHUSS()] = feuerHaltDaten.entladenSchuss;
}
// EX-Statusdaten
void SAATELEGRAMS_EXPORT statusFromJson(const QJsonObject &data, EXStatus &eXStatus, bool &bOk)
{
bOk = true;
eXStatus.status = szenarstatusMap.value(data[JsonKeys::STATUS()].toString());
}
//////////////////////////////////////////////////////
/// \brief ExAwesPlanning::toJsonInternal
/// \return
///
template <> QJsonObject ExAwesPlanning::toJsonInternal<ExAwesPlanning>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
data[JsonKeys::FEUERKAMPFREFERENZ()] = wirkfeldplanungData.feuerkampfReferenz;
QJsonObject objZieldaten;
zieldatenToJson(objZieldaten, wirkfeldplanungData.zieldaten);
data[JsonKeys::ZIELDATEN()] = objZieldaten;
data[JsonKeys::ABFEUERUNGSART()] = AbfeuerungsartMap.key(wirkfeldplanungData.abfeuerungsArt);
data[JsonKeys::FORDERUNG()] = ForderungMap.key(wirkfeldplanungData.forderung);
data[JsonKeys::DAUER()] = wirkfeldplanungData.dauer;
QJsonObject objFeuerkommando;
feuerkommandoToJson(objFeuerkommando, wirkfeldplanungData.feuerkommando);
data[JsonKeys::FEUERKOMMANDO()] = objFeuerkommando;
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExAwesPlanning::toJson() { return toJsonInternal<ExAwesPlanning>(); }
//////////////////////////////////////////////////////
/// \brief ExFeuerbereit::toJsonInternal
/// \return
///
template <> QJsonObject ExFeuerbereit::toJsonInternal<ExFeuerbereit>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
feuerkampfdatenToJson(data, feuerkampfdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFeuerbereit::toJson() { return toJsonInternal<ExFeuerbereit>(); }
//////////////////////////////////////////////////////
/// \brief ExFeuern::toJsonInternal
/// \return
///
template <> QJsonObject ExFeuern::toJsonInternal<ExFeuern>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
feuerkampfdatenToJson(data, feuerkampfdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFeuern::toJson() { return toJsonInternal<ExFeuern>(); }
//////////////////////////////////////////////////////
/// \brief ExAbgefeuert::toJsonInternal
/// \return
///
template <> QJsonObject ExAbgefeuert::toJsonInternal<ExAbgefeuert>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
feuerkampfdatenToJson(data, feuerkampfdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExAbgefeuert::toJson() { return toJsonInternal<ExAbgefeuert>(); }
//////////////////////////////////////////////////////
/// \brief ExVollzugsmeldung::toJsonInternal
/// \return
///
template <> QJsonObject ExVollzugsmeldung::toJsonInternal<ExVollzugsmeldung>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
feuerkampfdatenToJson(data, feuerkampfdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExVollzugsmeldung::toJson() { return toJsonInternal<ExVollzugsmeldung>(); }
//////////////////////////////////////////////////////
/// \brief ExAbgefeuert::toJsonInternal
/// \return
///
// template<>
// QJsonObject ExErkundungsanfrage::toJsonInternal<ExErkundungsanfrage>()
// {
// QJsonObject obj = static_cast<EXTelegramBase*>(this)->toJsonInternal<EXTelegramBase>();
// QJsonObject data;
// obj[JsonKeys::DATA()] = data;
// return obj;
// }
// QJsonObject ExErkundungsanfrage::toJson()
// {
// return toJsonInternal<ExErkundungsanfrage>();
// }
//////////////////////////////////////////////////////
/// \brief ExErkundungsergebnisse::toJsonInternal
/// \return
///
template <> QJsonObject ExErkundungsergebnisse::toJsonInternal<ExErkundungsergebnisse>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
erkundungsdatenToJson(data, erkundungsdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExErkundungsergebnisse::toJson() { return toJsonInternal<ExErkundungsergebnisse>(); }
//////////////////////////////////////////////////////
/// \brief ExFeuerkampf::toJsonInternal
/// \return
///
template <> QJsonObject ExFeuerkampf::toJsonInternal<ExFeuerkampf>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
zielmeldedatenToJson(data, zielmeldedaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFeuerkampf::toJson() { return toJsonInternal<ExFeuerkampf>(); }
//////////////////////////////////////////////////////
/// \brief ExFeuerhalt::toJsonInternal
/// \return
///
template <> QJsonObject ExFeuerhalt::toJsonInternal<ExFeuerhalt>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
feuerHaltDatenToJson(data, feuerHaltDaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFeuerhalt::toJson() { return toJsonInternal<ExFeuerhalt>(); }
//////////////////////////////////////////////////////
/// \brief ExFeuerstellungFS::toJsonInternal
/// \return
///
template <> QJsonObject ExFeuerstellungFS::toJsonInternal<ExFeuerstellungFS>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
feuerstellungsdatenToJson(data, feuerstellungsdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFeuerstellungFS::toJson() { return toJsonInternal<ExFeuerstellungFS>(); }
//////////////////////////////////////////////////////
/// \brief ExFeuerstellungWS::toJsonInternal
/// \return
///
template <> QJsonObject ExFeuerstellungWS::toJsonInternal<ExFeuerstellungWS>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
waffensystemdatenToJson(data, waffensystemdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFeuerstellungWS::toJson() { return toJsonInternal<ExFeuerstellungWS>(); }
//////////////////////////////////////////////////////
/// \brief ExFeuerstellungLP::toJsonInternal
/// \return
///
template <> QJsonObject ExFeuerstellungLP::toJsonInternal<ExFeuerstellungLP>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
ladeplatzdatenToJson(data, ladeplatzdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFeuerstellungLP::toJson() { return toJsonInternal<ExFeuerstellungLP>(); }
//////////////////////////////////////////////////////
/// \brief ExStellungswechsel::toJsonInternal
/// \return
///
template <> QJsonObject ExStellungswechsel::toJsonInternal<ExStellungswechsel>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
stellungswechseldatenToJson(data, stellungswechseldaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExStellungswechsel::toJson() { return toJsonInternal<ExStellungswechsel>(); }
//////////////////////////////////////////////////////
/// \brief ExHqKoordinierungsmassnahmen::toJsonInternal
/// \return
///
template <> QJsonObject ExHqKoordinierungsmassnahmen::toJsonInternal<ExHqKoordinierungsmassnahmen>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
koordinierungsdatenToJson(data, koordinierungsdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExHqKoordinierungsmassnahmen::toJson() { return toJsonInternal<ExHqKoordinierungsmassnahmen>(); }
//////////////////////////////////////////////////////
/// \brief ExHqKoordinierungsmassnahmen::toJsonInternal
/// \return
///
template <> QJsonObject ExHqFuehrungslinien::toJsonInternal<ExHqFuehrungslinien>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
fuehrungsdatenToJson(data, fuehrungsdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExHqFuehrungslinien::toJson() { return toJsonInternal<ExHqFuehrungslinien>(); }
//////////////////////////////////////////////////////
/// \brief EX-TQ Technische Quittierung
/// \return
///
template <> QJsonObject ExTqTechnischeQuittung::toJsonInternal<ExTqTechnischeQuittung>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
technischeDatenToJson(data, technischeDaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExTqTechnischeQuittung::toJson() { return toJsonInternal<ExTqTechnischeQuittung>(); }
//////////////////////////////////////////////////////
/// \brief 7.1.23 EX-AQ Freitextmeldung
/// \return
///
template <> QJsonObject ExAqFreitextmeldung::toJsonInternal<ExAqFreitextmeldung>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
freitextdatenToJson(data, freitextDaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExAqFreitextmeldung::toJson() { return toJsonInternal<ExAqFreitextmeldung>(); }
//////////////////////////////////////////////////////
/// \brief EX-MQ Manuelle Quittung
/// \return
///
template <> QJsonObject ExMqManuelleQuittung::toJsonInternal<ExMqManuelleQuittung>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
mqManuelleQuittungDatenToJson(data, mqManuelleQuittungDaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExMqManuelleQuittung::toJson() { return toJsonInternal<ExMqManuelleQuittung>(); }
//////////////////////////////////////////////////////
/// \brief EX-Flugbahnberechnung
/// \return
///
template <> QJsonObject ExFlugbahnberechnung::toJsonInternal<ExFlugbahnberechnung>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
exFlugbahnberechnungDatenToJson(data, flugbahnberechnungDaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFlugbahnberechnung::toJson() { return toJsonInternal<ExFlugbahnberechnung>(); }
//////////////////////////////////////////////////////
/// \brief EX-Flugbahndaten
/// \return
///
template <> QJsonObject ExFlugbahndaten::toJsonInternal<ExFlugbahndaten>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
flugbahndatenToJson(data, flugbahndaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject ExFlugbahndaten::toJson() { return toJsonInternal<ExFlugbahndaten>(); }
template <> QJsonObject exNichtFeuern::toJsonInternal<exNichtFeuern>()
{
QJsonObject obj = static_cast<EXTelegramBase *>(this)->toJsonInternal<EXTelegramBase>();
QJsonObject data;
feuerkampfdatenToJson(data, feuerkampfdaten);
obj[JsonKeys::DATA()] = data;
return obj;
}
QJsonObject exNichtFeuern::toJson() { return toJsonInternal<exNichtFeuern>(); }
//////////////////////////////////////////////////////
/// \brief szenarstatusToStr
/// \param status
/// \return
///
QString szenarstatusToStr(Szenarstatus status) { return szenarstatusMap.key(status); }
Szenarstatus strToSzenarstatus(QString status) { return szenarstatusMap.value(status); }
int getFeuerkommandoRaketeEffectDurationMsec(const QJsonObject &data)
{
bool bOk = false;
int wirkzeitMsec;
switch (toInteger(data[JsonKeys::WIRKZEIT()], bOk)){
case 1:
wirkzeitMsec = 3 * 60 * 60 * 1000;
break;
case 2:
wirkzeitMsec = 6 * 60 * 60 * 1000;
break;
case 3:
wirkzeitMsec = 12 * 60 * 60 * 1000;
break;
case 4:
wirkzeitMsec = 24 * 60 * 60 * 1000;
break;
case 5:
wirkzeitMsec = 48 * 60 * 60 * 1000;
break;
case 6:
wirkzeitMsec = 96 * 60 * 60 * 1000;
break;
default:
wirkzeitMsec = 3 * 60 * 60 * 1000;
break;
}
return wirkzeitMsec;
}
} // namespace AdlerJson