/** * Json <-> DDS conversion routines * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2017-11-30 */ // filename: pdm_json.cpp #include "pdm_json.h" #include #include #include #include #include namespace ProjectDataManagement { template<> int fromJson(const QJsonValue &val, type) { return val.toInt(); } template<> double fromJson(const QJsonValue &val, type) { return val.toDouble(); } template<> qint64 fromJson(const QJsonValue &val, type) { return val.toString().toLongLong(); } QJsonValue toJson(int vec) { return QJsonValue(vec); } QJsonValue toJson(double vec) { return QJsonValue(vec); } QJsonValue toJson(qint64 vec) { return QJsonValue(QString::number(vec)); } // std::string QJsonValue toJson(const std::string &element) { return QJsonValue(QString::fromStdString(element)); } template<> std::string fromJson(const QJsonValue &val, type) { return val.toString().toStdString(); } // std::vector template QJsonArray toJson(const std::vector &vec) { QJsonArray arr; for (const auto &element : vec) arr.push_back(toJson(element)); return arr; } template std::vector fromJson(const QJsonValue &val, type>) { std::vector ret; if (!val.isArray()) return ret; const QJsonArray array(val.toArray()); ret.reserve(array.size()); for(int i = 0; i < array.size(); ++i) ret.push_back(fromJson(array.at(i), type{})); return ret; } // dds::core:vector (bytestream) inline QJsonValue toJson(const std::vector &element) { return QJsonValue(QString::fromLatin1(QByteArray::fromRawData(reinterpret_cast(&element.at(0)), static_cast(element.size())).toBase64())); } template<> std::vector fromJson(const QJsonValue &val, type>) { const QByteArray ba(QByteArray::fromBase64(val.toString().toLatin1())); return LtsUtils::convert>(ba); } // BiteComponentText QJsonObject toJson(const BiteComponentText &element) { QJsonObject obj; obj[QStringLiteral("canDeviceId")] = element.canDeviceId; obj[QStringLiteral("subDeviceId")] = element.subDeviceId; obj[QStringLiteral("errorNumber")] = element.errorNumber; return obj; } template<> BiteComponentText fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); BiteComponentText element; { const QJsonValue val(objElement.value(QStringLiteral("canDeviceId"))); element.canDeviceId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("subDeviceId"))); element.subDeviceId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("errorNumber"))); element.errorNumber = val.toInt(); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < BiteComponentText > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // BuildingChargeEffect QJsonObject toJson(const BuildingChargeEffect &element) { QJsonObject obj; obj[QStringLiteral("chargeTypeId")] = element.chargeTypeId; obj[QStringLiteral("destructiveFactor")] = element.destructiveFactor; obj[QStringLiteral("penetrationFactor")] = element.penetrationFactor; obj[QStringLiteral("hitSound")] = element.hitSound; obj[QStringLiteral("difcueLight")] = element.difcueLight; obj[QStringLiteral("difcuePyro")] = element.difcuePyro; return obj; } template<> BuildingChargeEffect fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); BuildingChargeEffect element; { const QJsonValue val(objElement.value(QStringLiteral("chargeTypeId"))); element.chargeTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("destructiveFactor"))); element.destructiveFactor = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("penetrationFactor"))); element.penetrationFactor = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("hitSound"))); element.hitSound = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("difcueLight"))); element.difcueLight = val.toBool(); } { const QJsonValue val(objElement.value(QStringLiteral("difcuePyro"))); element.difcuePyro = val.toBool(); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < BuildingChargeEffect > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // CanComponentString QJsonObject toJson(const CanComponentString &element) { QJsonObject obj; obj[QStringLiteral("pdm_bitMask")] = static_cast(element.pdm_bitMask); obj[QStringLiteral("canDeviceId")] = element.canDeviceId; obj[QStringLiteral("subDeviceId")] = element.subDeviceId; return obj; } template<> CanComponentString fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); CanComponentString element; { const QJsonValue val(objElement.value(QStringLiteral("pdm_bitMask"))); element.pdm_bitMask = val.toDouble(); } { const QJsonValue val(objElement.value(QStringLiteral("canDeviceId"))); element.canDeviceId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("subDeviceId"))); element.subDeviceId = val.toInt(); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < CanComponentString > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // ChargeType QJsonObject toJson(const ChargeType &element) { QJsonObject obj; obj[QStringLiteral("shortName")] = QString::fromStdString(element.shortName); obj[QStringLiteral("predefinedName")] = QString::fromStdString(element.predefinedName); obj[QStringLiteral("disEntity")] = QString::fromStdString(element.disEntity); obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); obj[QStringLiteral("legacyId")] = element.legacyId; return obj; } template<> ChargeType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); ChargeType element; { const QJsonValue val(objElement.value(QStringLiteral("shortName"))); element.shortName = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("predefinedName"))); element.predefinedName = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("disEntity"))); element.disEntity = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("legacyId"))); element.legacyId = val.toInt(); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < ChargeType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // ChargeTypeIgniterTypeIgniterFunction QJsonObject toJson(const ChargeTypeIgniterTypeIgniterFunction &element) { QJsonObject obj; obj[QStringLiteral("chargeTypeId")] = element.chargeTypeId; obj[QStringLiteral("igniterTypeId")] = element.igniterTypeId; obj[QStringLiteral("igniterFunctionId")] = element.igniterFunctionId; obj[QStringLiteral("igniterFunctionBaseId")] = toJson(static_cast(element.igniterFunctionBaseId)); obj[QStringLiteral("impactArea")] = QString::fromStdString(element.impactArea); obj[QStringLiteral("impactRadius")] = element.impactRadius; obj[QStringLiteral("hazardDistance")] = element.hazardDistance; obj[QStringLiteral("chargeLegacyId")] = element.chargeLegacyId; obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> ChargeTypeIgniterTypeIgniterFunction fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); ChargeTypeIgniterTypeIgniterFunction element; { const QJsonValue val(objElement.value(QStringLiteral("chargeTypeId"))); element.chargeTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("igniterTypeId"))); element.igniterTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("igniterFunctionId"))); element.igniterFunctionId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("igniterFunctionBaseId"))); element.igniterFunctionBaseId = static_cast(val.toInt()); } { const QJsonValue val(objElement.value(QStringLiteral("impactArea"))); element.impactArea = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("impactRadius"))); element.impactRadius = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("hazardDistance"))); element.hazardDistance = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("chargeLegacyId"))); element.chargeLegacyId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < ChargeTypeIgniterTypeIgniterFunction > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // ChargeTypeLoadType QJsonObject toJson(const ChargeTypeLoadType &element) { QJsonObject obj; obj[QStringLiteral("chargeTypeId")] = element.chargeTypeId; obj[QStringLiteral("loadTypeId")] = element.loadTypeId; obj[QStringLiteral("numbers")] = toJson(element.numbers); obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> ChargeTypeLoadType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); ChargeTypeLoadType element; { const QJsonValue val(objElement.value(QStringLiteral("chargeTypeId"))); element.chargeTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("loadTypeId"))); element.loadTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("numbers"))); element.numbers = fromJson>(val); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < ChargeTypeLoadType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // EquipmentSystemEventFilter QJsonObject toJson(const EquipmentSystemEventFilter &element) { QJsonObject obj; obj[QStringLiteral("equipmentFunctionId")] = element.equipmentFunctionId; obj[QStringLiteral("subDeviceId")] = element.subDeviceId; obj[QStringLiteral("deviceSpecificCode")] = element.deviceSpecificCode; obj[QStringLiteral("hgrMineSearchFilterType")] = toJson(static_cast(element.hgrMineSearchFilterType)); return obj; } template<> EquipmentSystemEventFilter fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); EquipmentSystemEventFilter element; { const QJsonValue val(objElement.value(QStringLiteral("equipmentFunctionId"))); element.equipmentFunctionId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("subDeviceId"))); element.subDeviceId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("deviceSpecificCode"))); element.deviceSpecificCode = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("hgrMineSearchFilterType"))); element.hgrMineSearchFilterType = static_cast(val.toInt()); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < EquipmentSystemEventFilter > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // EventFilterHgrMineSearch QJsonObject toJson(const EventFilterHgrMineSearch &element) { QJsonObject obj; obj[QStringLiteral("chargeTypeId")] = element.chargeTypeId; obj[QStringLiteral("hgrMineSearchFilterType")] = toJson(static_cast(element.hgrMineSearchFilterType)); return obj; } template<> EventFilterHgrMineSearch fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); EventFilterHgrMineSearch element; { const QJsonValue val(objElement.value(QStringLiteral("chargeTypeId"))); element.chargeTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("hgrMineSearchFilterType"))); element.hgrMineSearchFilterType = static_cast(val.toInt()); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < EventFilterHgrMineSearch > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // FirePurpose QJsonObject toJson(const FirePurpose &element) { QJsonObject obj; obj[QStringLiteral("description")] = QString::fromStdString(element.description); obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> FirePurpose fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); FirePurpose element; { const QJsonValue val(objElement.value(QStringLiteral("description"))); element.description = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < FirePurpose > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // GearType QJsonObject toJson(const GearType &element) { QJsonObject obj; obj[QStringLiteral("gearClassId")] = toJson(static_cast(element.gearClassId)); obj[QStringLiteral("tasCode")] = element.tasCode; obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> GearType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); GearType element; { const QJsonValue val(objElement.value(QStringLiteral("gearClassId"))); element.gearClassId = static_cast(val.toInt()); } { const QJsonValue val(objElement.value(QStringLiteral("tasCode"))); element.tasCode = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < GearType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // GearTypeChargeType QJsonObject toJson(const GearTypeChargeType &element) { QJsonObject obj; obj[QStringLiteral("chargeTypeId")] = element.chargeTypeId; obj[QStringLiteral("maxRange")] = element.maxRange; obj[QStringLiteral("gearTypeId")] = element.gearTypeId; obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> GearTypeChargeType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); GearTypeChargeType element; { const QJsonValue val(objElement.value(QStringLiteral("chargeTypeId"))); element.chargeTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("maxRange"))); element.maxRange = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("gearTypeId"))); element.gearTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < GearTypeChargeType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // IgniterFunction QJsonObject toJson(const IgniterFunction &element) { QJsonObject obj; obj[QStringLiteral("shortName")] = QString::fromStdString(element.shortName); obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> IgniterFunction fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); IgniterFunction element; { const QJsonValue val(objElement.value(QStringLiteral("shortName"))); element.shortName = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < IgniterFunction > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // IgniterType QJsonObject toJson(const IgniterType &element) { QJsonObject obj; obj[QStringLiteral("shortName")] = QString::fromStdString(element.shortName); obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> IgniterType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); IgniterType element; { const QJsonValue val(objElement.value(QStringLiteral("shortName"))); element.shortName = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < IgniterType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // LanguageHmi QJsonObject toJson(const LanguageHmi &element) { QJsonObject obj; obj[QStringLiteral("isoCode")] = QString::fromStdString(element.isoCode); obj[QStringLiteral("dbLocale")] = QString::fromStdString(element.dbLocale); return obj; } template<> LanguageHmi fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); LanguageHmi element; { const QJsonValue val(objElement.value(QStringLiteral("isoCode"))); element.isoCode = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("dbLocale"))); element.dbLocale = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < LanguageHmi > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // LanguageXdu QJsonObject toJson(const LanguageXdu &element) { QJsonObject obj; obj[QStringLiteral("isoCode")] = QString::fromStdString(element.isoCode); return obj; } template<> LanguageXdu fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); LanguageXdu element; { const QJsonValue val(objElement.value(QStringLiteral("isoCode"))); element.isoCode = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < LanguageXdu > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // LoadType QJsonObject toJson(const LoadType &element) { QJsonObject obj; obj[QStringLiteral("shortName")] = QString::fromStdString(element.shortName); obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> LoadType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); LoadType element; { const QJsonValue val(objElement.value(QStringLiteral("shortName"))); element.shortName = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < LoadType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // NuclearPreset QJsonObject toJson(const NuclearPreset &element) { QJsonObject obj; obj[QStringLiteral("detonationValue")] = element.detonationValue; obj[QStringLiteral("impactRadius")] = element.impactRadius; obj[QStringLiteral("borderLengthInner")] = element.borderLengthInner; obj[QStringLiteral("borderLengthOuter")] = element.borderLengthOuter; return obj; } template<> NuclearPreset fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); NuclearPreset element; { const QJsonValue val(objElement.value(QStringLiteral("detonationValue"))); element.detonationValue = val.toDouble(); } { const QJsonValue val(objElement.value(QStringLiteral("impactRadius"))); element.impactRadius = val.toDouble(); } { const QJsonValue val(objElement.value(QStringLiteral("borderLengthInner"))); element.borderLengthInner = val.toDouble(); } { const QJsonValue val(objElement.value(QStringLiteral("borderLengthOuter"))); element.borderLengthOuter = val.toDouble(); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < NuclearPreset > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // PdmBase QJsonObject toJson(const PdmBase &element) { QJsonObject obj; obj[QStringLiteral("id")] = element.id; return obj; } template<> PdmBase fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); PdmBase element; { const QJsonValue val(objElement.value(QStringLiteral("id"))); element.id = val.toInt(); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < PdmBase > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // PdmBaseName QJsonObject toJson(const PdmBaseName &element) { QJsonObject obj; obj[QStringLiteral("name")] = QString::fromStdString(element.name); return obj; } template<> PdmBaseName fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); PdmBaseName element; { const QJsonValue val(objElement.value(QStringLiteral("name"))); element.name = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < PdmBaseName > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // RadioGroup QJsonObject toJson(const RadioGroup &element) { QJsonObject obj; obj[QStringLiteral("base_group")] = element.base_group; obj[QStringLiteral("issi")] = element.issi; obj[QStringLiteral("group_issi1")] = element.group_issi1; obj[QStringLiteral("group_issi2")] = element.group_issi2; obj[QStringLiteral("radioHostname")] = QString::fromStdString(element.radioHostname); obj[QStringLiteral("radioPort")] = element.radioPort; obj[QStringLiteral("radioBackupHostname")] = QString::fromStdString(element.radioBackupHostname); obj[QStringLiteral("radioBackupPort")] = element.radioBackupPort; return obj; } template<> RadioGroup fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); RadioGroup element; { const QJsonValue val(objElement.value(QStringLiteral("base_group"))); element.base_group = val.toBool(); } { const QJsonValue val(objElement.value(QStringLiteral("issi"))); element.issi = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("group_issi1"))); element.group_issi1 = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("group_issi2"))); element.group_issi2 = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("radioHostname"))); element.radioHostname = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("radioPort"))); element.radioPort = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("radioBackupHostname"))); element.radioBackupHostname = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("radioBackupPort"))); element.radioBackupPort = val.toInt(); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < RadioGroup > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // SanitationInjury QJsonObject toJson(const SanitationInjury &element) { QJsonObject obj; obj[QStringLiteral("kind")] = element.kind; obj[QStringLiteral("place1")] = element.place1; obj[QStringLiteral("place2")] = element.place2; obj[QStringLiteral("vbg")] = element.vbg; return obj; } template<> SanitationInjury fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); SanitationInjury element; { const QJsonValue val(objElement.value(QStringLiteral("kind"))); element.kind = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("place1"))); element.place1 = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("place2"))); element.place2 = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("vbg"))); element.vbg = val.toInt(); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < SanitationInjury > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // SanitationInjuryKind QJsonObject toJson(const SanitationInjuryKind &element) { QJsonObject obj; obj[QStringLiteral("version")] = QString::fromStdString(element.version); return obj; } template<> SanitationInjuryKind fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); SanitationInjuryKind element; { const QJsonValue val(objElement.value(QStringLiteral("version"))); element.version = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < SanitationInjuryKind > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // SanitationInjuryPlace1 QJsonObject toJson(const SanitationInjuryPlace1 &element) { QJsonObject obj; obj[QStringLiteral("version")] = QString::fromStdString(element.version); return obj; } template<> SanitationInjuryPlace1 fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); SanitationInjuryPlace1 element; { const QJsonValue val(objElement.value(QStringLiteral("version"))); element.version = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < SanitationInjuryPlace1 > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // SanitationInjuryPlace2 QJsonObject toJson(const SanitationInjuryPlace2 &element) { QJsonObject obj; obj[QStringLiteral("version")] = QString::fromStdString(element.version); return obj; } template<> SanitationInjuryPlace2 fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); SanitationInjuryPlace2 element; { const QJsonValue val(objElement.value(QStringLiteral("version"))); element.version = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < SanitationInjuryPlace2 > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // SanitationMaterial QJsonObject toJson(const SanitationMaterial &element) { QJsonObject obj; obj[QStringLiteral("description")] = QString::fromStdString(element.description); obj[QStringLiteral("version")] = QString::fromStdString(element.version); return obj; } template<> SanitationMaterial fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); SanitationMaterial element; { const QJsonValue val(objElement.value(QStringLiteral("description"))); element.description = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("version"))); element.version = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < SanitationMaterial > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // SanitationProcedure QJsonObject toJson(const SanitationProcedure &element) { QJsonObject obj; obj[QStringLiteral("type")] = QString::fromStdString(element.type); obj[QStringLiteral("pdm_typeId")] = element.pdm_typeId; obj[QStringLiteral("minimumQualification")] = element.minimumQualification; obj[QStringLiteral("longName")] = QString::fromStdString(element.longName); obj[QStringLiteral("dataCode")] = static_cast(element.dataCode); obj[QStringLiteral("version")] = QString::fromStdString(element.version); return obj; } template<> SanitationProcedure fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); SanitationProcedure element; { const QJsonValue val(objElement.value(QStringLiteral("type"))); element.type = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("pdm_typeId"))); element.pdm_typeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("minimumQualification"))); element.minimumQualification = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("longName"))); element.longName = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("dataCode"))); element.dataCode = val.toDouble(); } { const QJsonValue val(objElement.value(QStringLiteral("version"))); element.version = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < SanitationProcedure > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // TargetSubType QJsonObject toJson(const TargetSubType &element) { QJsonObject obj; obj[QStringLiteral("abbreviation")] = QString::fromStdString(element.abbreviation); obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> TargetSubType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); TargetSubType element; { const QJsonValue val(objElement.value(QStringLiteral("abbreviation"))); element.abbreviation = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < TargetSubType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // TargetType QJsonObject toJson(const TargetType &element) { QJsonObject obj; obj[QStringLiteral("abbreviation")] = QString::fromStdString(element.abbreviation); obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> TargetType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); TargetType element; { const QJsonValue val(objElement.value(QStringLiteral("abbreviation"))); element.abbreviation = fromJson(val); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < TargetType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // TargetTypeTargetSubType QJsonObject toJson(const TargetTypeTargetSubType &element) { QJsonObject obj; obj[QStringLiteral("targetTypeId")] = element.targetTypeId; obj[QStringLiteral("targetSubTypeId")] = element.targetSubTypeId; obj[QStringLiteral("properties")] = QString::fromStdString(element.properties); return obj; } template<> TargetTypeTargetSubType fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); TargetTypeTargetSubType element; { const QJsonValue val(objElement.value(QStringLiteral("targetTypeId"))); element.targetTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("targetSubTypeId"))); element.targetSubTypeId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("properties"))); element.properties = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < TargetTypeTargetSubType > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // TranslationBlob QJsonObject toJson(const TranslationBlob &element) { QJsonObject obj; obj[QStringLiteral("payload")] = toJson(element.payload); obj[QStringLiteral("md5sum")] = QString::fromStdString(element.md5sum); return obj; } template<> TranslationBlob fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); TranslationBlob element; { const QJsonValue val(objElement.value(QStringLiteral("payload"))); element.payload = fromJson>(val); } { const QJsonValue val(objElement.value(QStringLiteral("md5sum"))); element.md5sum = fromJson(val); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < TranslationBlob > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } // VulnerabilityKind QJsonObject toJson(const VulnerabilityKind &element) { QJsonObject obj; obj[QStringLiteral("playerTypeClassId")] = element.playerTypeClassId; obj[QStringLiteral("taVulnerabilityKind")] = element.taVulnerabilityKind; obj[QStringLiteral("vulnerabilityClassId")] = toJson(static_cast(element.vulnerabilityClassId)); return obj; } template<> VulnerabilityKind fromJson(const QJsonValue &value, type) { const QJsonObject objElement(value.toObject()); VulnerabilityKind element; { const QJsonValue val(objElement.value(QStringLiteral("playerTypeClassId"))); element.playerTypeClassId = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("taVulnerabilityKind"))); element.taVulnerabilityKind = val.toInt(); } { const QJsonValue val(objElement.value(QStringLiteral("vulnerabilityClassId"))); element.vulnerabilityClassId = static_cast(val.toInt()); } return element; } // // extensions to support sequence of seqence of Non-POD : // QJsonValue toJson(const std::vector &element) { if (element.size() == 0) return QJsonValue(); QJsonArray array; for(size_t i = 0; i < element.size(); ++i) array.push_back(toJson(element.at(i))); return array; } template<> std::vector fromJson(const QJsonValue &value, type< std::vector >) { std::vector < VulnerabilityKind > ret; if (value.isNull()) return ret; if (!value.isArray()) return ret; const QJsonArray array = value.toArray(); ret.reserve(array.size()); for(const auto &ele : array) ret.push_back(fromJson(ele, type{})); return ret; } } // namespace ProjectDataManagement