From 88fb9e8832173421f81412ac81335c20c41ec279 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 26 Mar 2014 18:44:17 +0100 Subject: [PATCH] refs #192, enable value objects for JSON: * from/toJson methods * jsonMembers where applicable --- src/blackmisc/audiodevice.cpp | 24 +++ src/blackmisc/audiodevice.h | 9 + src/blackmisc/avaircraft.cpp | 38 +++- src/blackmisc/avaircraft.h | 9 + src/blackmisc/avaircrafticao.cpp | 24 +++ src/blackmisc/avaircrafticao.h | 9 + src/blackmisc/avaltitude.cpp | 26 +++ src/blackmisc/avaltitude.h | 16 +- src/blackmisc/avatcstation.cpp | 29 ++- src/blackmisc/avatcstation.h | 11 +- src/blackmisc/avcallsign.cpp | 24 +++ src/blackmisc/avcallsign.h | 9 + src/blackmisc/avheading.cpp | 27 +++ src/blackmisc/avheading.h | 10 +- src/blackmisc/avinformationmessage.cpp | 26 +++ src/blackmisc/avinformationmessage.h | 117 ++++-------- src/blackmisc/aviocomsystem.cpp | 27 +++ src/blackmisc/aviocomsystem.h | 6 +- src/blackmisc/aviomodulator.cpp | 24 +++ src/blackmisc/aviomodulator.h | 13 +- src/blackmisc/aviotransponder.cpp | 23 +++ src/blackmisc/aviotransponder.h | 8 + src/blackmisc/avselcal.cpp | 24 ++- src/blackmisc/avselcal.h | 14 +- src/blackmisc/avtrack.cpp | 25 +++ src/blackmisc/avtrack.h | 9 + src/blackmisc/containerbase.h | 26 +++ src/blackmisc/coordinategeodetic.cpp | 24 +++ src/blackmisc/coordinategeodetic.h | 17 +- src/blackmisc/hwkeyboardkey.cpp | 25 +++ src/blackmisc/hwkeyboardkey.h | 9 + src/blackmisc/mathmatrixbase.cpp | 36 +++- src/blackmisc/mathmatrixbase.h | 6 + src/blackmisc/mathvector3dbase.cpp | 69 ++++++- src/blackmisc/mathvector3dbase.h | 187 ++++--------------- src/blackmisc/nwserver.cpp | 26 ++- src/blackmisc/nwserver.h | 9 + src/blackmisc/nwuser.cpp | 24 +++ src/blackmisc/nwuser.h | 9 + src/blackmisc/pqphysicalquantity.cpp | 21 +++ src/blackmisc/pqphysicalquantity.h | 6 + src/blackmisc/voiceroom.cpp | 25 +++ src/blackmisc/voiceroom.h | 18 +- src/blacksim/fscommon/aircraftcfgentries.cpp | 25 +++ src/blacksim/fscommon/aircraftcfgentries.h | 9 + src/blacksim/fscommon/aircraftmapping.cpp | 25 +++ src/blacksim/fscommon/aircraftmapping.h | 9 + 47 files changed, 910 insertions(+), 276 deletions(-) diff --git a/src/blackmisc/audiodevice.cpp b/src/blackmisc/audiodevice.cpp index 321177624..a86da174b 100644 --- a/src/blackmisc/audiodevice.cpp +++ b/src/blackmisc/audiodevice.cpp @@ -136,5 +136,29 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * Members + */ + const QStringList &CAudioDevice::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* + * To JSON + */ + QJsonObject CAudioDevice::toJson() const + { + return BlackMisc::serializeJson(CAudioDevice::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * From Json + */ + void CAudioDevice::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CAudioDevice::jsonMembers(), TupleConverter::toTuple(*this)); + } + } // Voice } // BlackMisc diff --git a/src/blackmisc/audiodevice.h b/src/blackmisc/audiodevice.h index 785374cf8..fe40cad20 100644 --- a/src/blackmisc/audiodevice.h +++ b/src/blackmisc/audiodevice.h @@ -72,9 +72,18 @@ namespace BlackMisc //! \copydoc CValueObject::getValueHash virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); + //! \brief Device index for default device static qint16 defaultDeviceIndex() {return -1;} diff --git a/src/blackmisc/avaircraft.cpp b/src/blackmisc/avaircraft.cpp index e1ed6ce05..0487745c8 100644 --- a/src/blackmisc/avaircraft.cpp +++ b/src/blackmisc/avaircraft.cpp @@ -8,6 +8,15 @@ namespace BlackMisc { namespace Aviation { + CAircraft::CAircraft(const CCallsign &callsign, const Network::CUser &user, const CAircraftSituation &situation) + : m_callsign(callsign), m_pilot(user), m_situation(situation), m_distanceToPlane(-1.0, BlackMisc::PhysicalQuantities::CLengthUnit::NM()) + { + + // sync callsigns + if (!this->m_pilot.hasValidCallsign() && !callsign.isEmpty()) + this->m_pilot.setCallsign(callsign); + } + /* * Convert to string */ @@ -39,7 +48,7 @@ namespace BlackMisc } /* - * All relevant information + * Distance to plane */ const PhysicalQuantities::CLength &CAircraft::calculcateDistanceToPlane(const Geo::CCoordinateGeodetic &position) { @@ -48,7 +57,7 @@ namespace BlackMisc } /* - * All relevant information? + * Valid for login */ bool CAircraft::isValidForLogin() const { @@ -259,5 +268,30 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * To JSON + */ + QJsonObject CAircraft::toJson() const + { + return BlackMisc::serializeJson(CAircraft::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CAircraft::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CAircraft::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CAircraft::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + } // namespace } // namespace diff --git a/src/blackmisc/avaircraft.h b/src/blackmisc/avaircraft.h index 5efff5122..e1514e5b6 100644 --- a/src/blackmisc/avaircraft.h +++ b/src/blackmisc/avaircraft.h @@ -186,9 +186,18 @@ namespace BlackMisc //! \copydoc CValueObject::getValueHash virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + virtual void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + //! \brief Members + static const QStringList &jsonMembers(); + //! \brief Properties by index enum ColumnIndex { diff --git a/src/blackmisc/avaircrafticao.cpp b/src/blackmisc/avaircrafticao.cpp index fefbeaf94..b35cb6c54 100644 --- a/src/blackmisc/avaircrafticao.cpp +++ b/src/blackmisc/avaircrafticao.cpp @@ -172,5 +172,29 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * To JSON + */ + QJsonObject CAircraftIcao::toJson() const + { + return BlackMisc::serializeJson(CAircraftIcao::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CAircraftIcao::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CAircraftIcao::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CAircraftIcao::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + } // namespace } // namespace diff --git a/src/blackmisc/avaircrafticao.h b/src/blackmisc/avaircrafticao.h index cef5cc77f..799a425dc 100644 --- a/src/blackmisc/avaircrafticao.h +++ b/src/blackmisc/avaircrafticao.h @@ -107,9 +107,18 @@ namespace BlackMisc //! \brief Value hash virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + virtual void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + //! \brief Members + static const QStringList &jsonMembers(); + /*! * \brief Properties by index */ diff --git a/src/blackmisc/avaltitude.cpp b/src/blackmisc/avaltitude.cpp index fd932668d..81676989f 100644 --- a/src/blackmisc/avaltitude.cpp +++ b/src/blackmisc/avaltitude.cpp @@ -99,5 +99,31 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * To JSON + */ + QJsonObject CAltitude::toJson() const + { + QJsonObject json = BlackMisc::serializeJson(CAltitude::jsonMembers(), TupleConverter::toTuple(*this)); + return BlackMisc::Json::appendJsonObject(json, CLength::toJson()); + } + + /* + * To JSON + */ + void CAltitude::fromJson(const QJsonObject &json) + { + CLength::fromJson(json); + BlackMisc::deserializeJson(json, CAltitude::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CAltitude::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + } // namespace } // namespace diff --git a/src/blackmisc/avaltitude.h b/src/blackmisc/avaltitude.h index 62d6983f8..d748c15f4 100644 --- a/src/blackmisc/avaltitude.h +++ b/src/blackmisc/avaltitude.h @@ -11,7 +11,6 @@ namespace BlackMisc { namespace Aviation { - /*! * \brief Altitude as used in aviation, can be AGL or MSL altitude * \remarks Intentionally allowing +/- CLength , and >= / <= CLength. @@ -29,6 +28,7 @@ namespace BlackMisc }; private: + BLACK_ENABLE_TUPLE_CONVERSION(CAltitude) ReferenceDatum m_datum; //!< MSL or AGL? protected: @@ -95,15 +95,23 @@ namespace BlackMisc return m_datum; } - /*! - * \brief Register metadata - */ + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + + //! \brief Register metadata static void registerMetadata(); + + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); }; } // namespace } // namespace +BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Aviation::CAltitude, (o.m_datum)) Q_DECLARE_METATYPE(BlackMisc::Aviation::CAltitude) #endif // guard diff --git a/src/blackmisc/avatcstation.cpp b/src/blackmisc/avatcstation.cpp index f20254b70..664344ab1 100644 --- a/src/blackmisc/avatcstation.cpp +++ b/src/blackmisc/avatcstation.cpp @@ -40,7 +40,9 @@ namespace BlackMisc m_range(range), m_distanceToPlane(0, CLengthUnit::nullUnit()), m_isOnline(isOnline), m_bookedFromUtc(bookedFromUtc), m_bookedUntilUtc(bookedUntilUtc), m_atis(atis), m_metar(metar) { - // void + // sync callsigns + if (!this->m_controller.hasValidCallsign() && !callsign.isEmpty()) + this->m_controller.setCallsign(callsign); } /* @@ -156,13 +158,36 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * Members + */ + const QStringList &CAtcStation::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* + * To JSON + */ + QJsonObject CAtcStation::toJson() const + { + return BlackMisc::serializeJson(CAtcStation::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * From Json + */ + void CAtcStation::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CAtcStation::jsonMembers(), TupleConverter::toTuple(*this)); + } + /* * Compare */ int CAtcStation::compareImpl(const CValueObject &otherBase) const { const auto &other = static_cast(otherBase); - return compare(TupleConverter::toTuple(*this), TupleConverter::toTuple(other)); } diff --git a/src/blackmisc/avatcstation.h b/src/blackmisc/avatcstation.h index 9f4a5fcd7..1ef45fe5c 100644 --- a/src/blackmisc/avatcstation.h +++ b/src/blackmisc/avatcstation.h @@ -287,9 +287,18 @@ namespace BlackMisc //! \copydoc CValueObject::propertyByIndexAsString() virtual QString propertyByIndexAsString(int index, bool i18n = false) const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); + protected: //! \copydoc CValueObject::convertToQString virtual QString convertToQString(bool i18n = false) const override; @@ -329,7 +338,7 @@ namespace BlackMisc } // namespace // o.m_metar, o.m_voiceRoom -BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Aviation::CAtcStation, (o.m_callsign, o.m_controller, o.m_frequency, o.m_position, o.m_range, o.m_isOnline, o.m_distanceToPlane, o.m_bookedFromUtc, o.m_bookedUntilUtc, o.m_atis)) +BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::Aviation::CAtcStation, (o.m_callsign, o.m_controller, o.m_frequency, o.m_position, o.m_range, o.m_isOnline, o.m_distanceToPlane, o.m_atis, o.m_bookedFromUtc, o.m_bookedUntilUtc)) Q_DECLARE_METATYPE(BlackMisc::Aviation::CAtcStation) #endif // guard diff --git a/src/blackmisc/avcallsign.cpp b/src/blackmisc/avcallsign.cpp index b37c54b88..903f53a07 100644 --- a/src/blackmisc/avcallsign.cpp +++ b/src/blackmisc/avcallsign.cpp @@ -103,6 +103,30 @@ namespace BlackMisc argument >> TupleConverter::toTuple(*this); } + /* + * To JSON + */ + QJsonObject CCallsign::toJson() const + { + return BlackMisc::serializeJson(CCallsign::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CCallsign::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CCallsign::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CCallsign::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + /* * Equal? */ diff --git a/src/blackmisc/avcallsign.h b/src/blackmisc/avcallsign.h index 8b012d9c5..70c451e47 100644 --- a/src/blackmisc/avcallsign.h +++ b/src/blackmisc/avcallsign.h @@ -78,9 +78,18 @@ namespace BlackMisc //! \copydoc CValueObject::getValueHash() virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + virtual void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + //! \brief Members + static const QStringList &jsonMembers(); + protected: //! \copydoc CValueObject::convertToQString() virtual QString convertToQString(bool i18n = false) const override; diff --git a/src/blackmisc/avheading.cpp b/src/blackmisc/avheading.cpp index 9a948a034..6f76a2684 100644 --- a/src/blackmisc/avheading.cpp +++ b/src/blackmisc/avheading.cpp @@ -95,5 +95,32 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * To JSON + */ + QJsonObject CHeading::toJson() const + { + QJsonObject json = BlackMisc::serializeJson(CHeading::jsonMembers(), TupleConverter::toTuple(*this)); + return BlackMisc::Json::appendJsonObject(json, CAngle::toJson()); + } + + /* + * To JSON + */ + void CHeading::fromJson(const QJsonObject &json) + { + CAngle::fromJson(json); + BlackMisc::deserializeJson(json, CHeading::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CHeading::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + } // namespace } // namespace diff --git a/src/blackmisc/avheading.h b/src/blackmisc/avheading.h index 31042c75a..67f36164a 100644 --- a/src/blackmisc/avheading.h +++ b/src/blackmisc/avheading.h @@ -12,7 +12,6 @@ namespace BlackMisc { namespace Aviation { - /*! * \brief Heading as used in aviation, can be true or magnetic heading * \remarks Intentionally allowing +/- CAngle , and >= / <= CAngle. @@ -85,8 +84,17 @@ namespace BlackMisc //! \brief Get reference north (magnetic or true) ReferenceNorth getReferenceNorth() const { return m_north; } + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); }; } // namespace diff --git a/src/blackmisc/avinformationmessage.cpp b/src/blackmisc/avinformationmessage.cpp index a70d3683e..c0ac2aa6b 100644 --- a/src/blackmisc/avinformationmessage.cpp +++ b/src/blackmisc/avinformationmessage.cpp @@ -91,6 +91,32 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * JSON members + */ + const QStringList &CInformationMessage::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* + * To JSON + */ + QJsonObject CInformationMessage::toJson() const + { + return BlackMisc::serializeJson(CInformationMessage::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CInformationMessage::fromJson(const QJsonObject &json) + { + this->m_message = json.value("m_message").toString(); + this->m_type = static_cast(qRound(json.value("m_type").toDouble())); + this->m_receivedTimestamp = QDateTime::fromString(json.value("m_receivedTimestamp").toString()); + } + /* * Type as string */ diff --git a/src/blackmisc/avinformationmessage.h b/src/blackmisc/avinformationmessage.h index 5fbf12cee..406fb572e 100644 --- a/src/blackmisc/avinformationmessage.h +++ b/src/blackmisc/avinformationmessage.h @@ -36,13 +36,13 @@ namespace BlackMisc TAF }; - /*! - * Default constructor. - */ - CInformationMessage(CInformationMessage::InformationType type = CInformationMessage::Unspecified) - : m_type(type), m_receivedTimestamp(QDateTime::currentDateTimeUtc()) + //! \brief Default constructor. + CInformationMessage() : m_type(CInformationMessage::Unspecified), m_receivedTimestamp(QDateTime::currentDateTimeUtc()) {} + //! \brief Information message of type + explicit CInformationMessage(InformationType type) : m_type(type) {} + /*! * \brief Information message of type * \param type @@ -52,138 +52,91 @@ namespace BlackMisc : m_type(type), m_message(message) {} - /*! - * \copydoc CValueObject::toQVariant - */ + //! \copydoc CValueObject::toQVariant virtual QVariant toQVariant() const override { return QVariant::fromValue(*this); } - /*! - * \brief Equal operator == - * \param other - * @return - */ + //! \brief Equal operator == bool operator ==(const CInformationMessage &other) const; - /*! - * \brief operator != - * \param other - * \return - */ + //! \brief operator != bool operator !=(const CInformationMessage &other) const; - /*! - * Get message. - * \return - */ + //! \brief Get message. const QString &getMessage() const { return m_message; } - /*! - * \brief Is a message available - * \return - */ + //! \brief Is a message available bool hasMessage() const { return !m_message.isEmpty(); } - /*! - * \brief Set message - * \param message - */ + //! \brief Set message void setMessage(const QString &message) { this->m_receivedTimestamp = QDateTime::currentDateTimeUtc(); this->m_message = message; } - /*! - * \brief Append message part - * \param messagePart - */ + //! \brief Append message part void appendMessage(const QString &messagePart) { this->m_receivedTimestamp = QDateTime::currentDateTimeUtc(); this->m_message.append(messagePart); } - /*! - * \brief Type as string - * \return - */ + //! \brief Type as string const QString &getTypeAsString() const; - /*! - * \brief Type - * \return - */ + //! \brief Type InformationType getType() const { return this->m_type; } - /*! - * \brief Set type - * \param type - */ + //! \brief Set type void setType(InformationType type) { this->m_type = type; } - /*! - * \brief Timestamp - * \return - */ + //! \brief Timestamp const QDateTime &getReceivedTimestamp() const { return this->m_receivedTimestamp; } - /*! - * \brief Received before n ms - * \return - */ + //! \brief Received before n ms qint64 timeDiffReceivedMs() const { return this->m_receivedTimestamp.msecsTo(QDateTime::currentDateTimeUtc()); } - /*! - * \brief Is empty - * \return - */ + //! \brief Is empty? bool isEmpty() const { return this->m_message.isEmpty(); } - /*! - * \copydoc CValueObject::getValueHash - */ + //! \copydoc CValueObject::getValueHash virtual uint getValueHash() const override; - /*! - * \brief Register metadata - */ + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + + //! \brief Register metadata static void registerMetadata(); + //! \brief Members + static const QStringList &jsonMembers(); + protected: - /*! - * \copydoc CValueObject::convertToQString - */ + //! \copydoc CValueObject::convertToQString virtual QString convertToQString(bool i18n = false) const override; - /*! - * \copydoc CValueObject::getMetaTypeId - */ + //! \copydoc CValueObject::getMetaTypeId virtual int getMetaTypeId() const override; - /*! - * \copydoc CValueObject::isA - */ + //! \copydoc CValueObject::isA virtual bool isA(int metaTypeId) const override; - /*! - * \copydoc CValueObject::compareImpl - */ + //! \copydoc CValueObject::compareImpl virtual int compareImpl(const CValueObject &other) const override; - /*! - * \copydoc CValueObject::marshallToDbus - */ + //! \copydoc CValueObject::marshallToDbus virtual void marshallToDbus(QDBusArgument &argument) const override; - /*! - * \copydoc CValueObject::unmarshallFromDbus - */ + //! \copydoc CValueObject::unmarshallFromDbus virtual void unmarshallFromDbus(const QDBusArgument &argument) override; private: diff --git a/src/blackmisc/aviocomsystem.cpp b/src/blackmisc/aviocomsystem.cpp index 51cf9df11..d891d8b17 100644 --- a/src/blackmisc/aviocomsystem.cpp +++ b/src/blackmisc/aviocomsystem.cpp @@ -85,6 +85,32 @@ namespace BlackMisc return BlackMisc::calculateHash(hashs, "CComSystem"); } + /* + * To JSON + */ + QJsonObject CComSystem::toJson() const + { + QJsonObject json = BlackMisc::serializeJson(CComSystem::jsonMembers(), TupleConverter::toTuple(*this)); + return BlackMisc::Json::appendJsonObject(json, CModulator::toJson()); + } + + /* + * To JSON + */ + void CComSystem::fromJson(const QJsonObject &json) + { + CModulator::fromJson(json); + BlackMisc::deserializeJson(json, CComSystem::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CComSystem::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + /* * Compare */ @@ -149,5 +175,6 @@ namespace BlackMisc default: qFatal("Wrong channel spacing"); return 0.0; // return just supressing compiler warning } } + } // namespace } // namespace diff --git a/src/blackmisc/aviocomsystem.h b/src/blackmisc/aviocomsystem.h index e0de5c820..8ba47c8ea 100644 --- a/src/blackmisc/aviocomsystem.h +++ b/src/blackmisc/aviocomsystem.h @@ -132,10 +132,8 @@ namespace BlackMisc //! \copydoc CValueObject::toJson virtual QJsonObject toJson() const override; - /*! - * \brief operator != - */ - bool operator !=(const CComSystem &other) const; + //! \copydoc CValueObject::fromJson + virtual void fromJson(const QJsonObject &json) override; /*! * Try to get a COM unit with given name and frequency. Returns true in case an object diff --git a/src/blackmisc/aviomodulator.cpp b/src/blackmisc/aviomodulator.cpp index 29a76f489..218361ed3 100644 --- a/src/blackmisc/aviomodulator.cpp +++ b/src/blackmisc/aviomodulator.cpp @@ -35,6 +35,30 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * To JSON + */ + template QJsonObject CModulator::toJson() const + { + return BlackMisc::serializeJson(CModulator::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + template void CModulator::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CModulator::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + template const QStringList &CModulator::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + /* * Equal operator == */ diff --git a/src/blackmisc/aviomodulator.h b/src/blackmisc/aviomodulator.h index ccea6906d..bb7503f36 100644 --- a/src/blackmisc/aviomodulator.h +++ b/src/blackmisc/aviomodulator.h @@ -213,10 +213,17 @@ namespace BlackMisc //! \brief Enabled? void setEnabled(bool enable) { this->m_enabled = enable;} - /*! - * \brief Register metadata - */ + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + virtual void fromJson(const QJsonObject &json) override; + + //! \brief Register metadata static void registerMetadata(); + + //! \brief Members + static const QStringList &jsonMembers(); }; } // namespace diff --git a/src/blackmisc/aviotransponder.cpp b/src/blackmisc/aviotransponder.cpp index 1c0bde06e..bbc6cc8f8 100644 --- a/src/blackmisc/aviotransponder.cpp +++ b/src/blackmisc/aviotransponder.cpp @@ -239,5 +239,28 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * Members + */ + const QStringList &CTransponder::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* + * To JSON + */ + QJsonObject CTransponder::toJson() const + { + return BlackMisc::serializeJson(CTransponder::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * From Json + */ + void CTransponder::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CTransponder::jsonMembers(), TupleConverter::toTuple(*this)); + } } // namespace } // namespace diff --git a/src/blackmisc/aviotransponder.h b/src/blackmisc/aviotransponder.h index c5e0b3298..6571270f8 100644 --- a/src/blackmisc/aviotransponder.h +++ b/src/blackmisc/aviotransponder.h @@ -384,8 +384,16 @@ namespace BlackMisc */ static void registerMetadata(); + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; }; + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); + }; } // namespace } // namespace diff --git a/src/blackmisc/avselcal.cpp b/src/blackmisc/avselcal.cpp index 0d24e0866..8163bdfc4 100644 --- a/src/blackmisc/avselcal.cpp +++ b/src/blackmisc/avselcal.cpp @@ -6,7 +6,6 @@ namespace BlackMisc { namespace Aviation { - QList CSelcal::frequencyEquivalents = QList(); QStringList CSelcal::allCodePairs = QStringList(); @@ -205,5 +204,28 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * Members + */ + const QStringList &CSelcal::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* + * To JSON + */ + QJsonObject CSelcal::toJson() const + { + return BlackMisc::serializeJson(CSelcal::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * From Json + */ + void CSelcal::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CSelcal::jsonMembers(), TupleConverter::toTuple(*this)); + } } // namespace } // namespace diff --git a/src/blackmisc/avselcal.h b/src/blackmisc/avselcal.h index 705dcaa1b..921e8784d 100644 --- a/src/blackmisc/avselcal.h +++ b/src/blackmisc/avselcal.h @@ -81,14 +81,22 @@ namespace BlackMisc */ virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + + //! \brief Register metadata /*! * \brief Register metadata */ static void registerMetadata(); - /*! - * \brief Equals given string - */ + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); + + //! \brief Equals given string bool equalsString(const QString &code) const; /*! diff --git a/src/blackmisc/avtrack.cpp b/src/blackmisc/avtrack.cpp index 32c0a3d29..dfa8bfee0 100644 --- a/src/blackmisc/avtrack.cpp +++ b/src/blackmisc/avtrack.cpp @@ -94,5 +94,30 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * Members + */ + const QStringList &CTrack::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* + * To JSON + */ + QJsonObject CTrack::toJson() const + { + QJsonObject json = BlackMisc::serializeJson(CTrack::jsonMembers(), TupleConverter::toTuple(*this)); + return BlackMisc::Json::appendJsonObject(json, CAngle::toJson()); + } + + /* + * From Json + */ + void CTrack::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CTrack::jsonMembers(), TupleConverter::toTuple(*this)); + CAngle::fromJson(json); + } } // namespace } // namespace diff --git a/src/blackmisc/avtrack.h b/src/blackmisc/avtrack.h index a0b263376..0e868106f 100644 --- a/src/blackmisc/avtrack.h +++ b/src/blackmisc/avtrack.h @@ -89,8 +89,17 @@ namespace BlackMisc //! \brief Get reference north (magnetic or true) ReferenceNorth getReferenceNorth() const { return m_north; } + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + + //! \brief Members + static const QStringList &jsonMembers(); }; } // namespace diff --git a/src/blackmisc/containerbase.h b/src/blackmisc/containerbase.h index 582602c0b..ec567fd44 100644 --- a/src/blackmisc/containerbase.h +++ b/src/blackmisc/containerbase.h @@ -157,6 +157,32 @@ namespace BlackMisc //! \copydoc BlackMisc::CValueObject::getValueHash virtual uint getValueHash() const override { return qHash(&derived()); } + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override + { + QJsonArray array; + QJsonObject json; + for (auto it = derived().cbegin(); it != derived().cend(); ++it) + { + array << (*it); + } + json.insert("containerbase", array); + return json; + } + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override + { + QJsonArray array = json.value("containerbase").toArray(); + for (auto i = array.begin(); i != array.end(); ++i) + { + QJsonValueRef ref = (*i); + T value; + ref >> value; + derived().insert(value); + } + } + protected: // CValueObject overrides //! \copydoc BlackMisc::CValueObject::convertToQString virtual QString convertToQString(bool i18n = false) const override diff --git a/src/blackmisc/coordinategeodetic.cpp b/src/blackmisc/coordinategeodetic.cpp index d60ac47ea..727ce0c53 100644 --- a/src/blackmisc/coordinategeodetic.cpp +++ b/src/blackmisc/coordinategeodetic.cpp @@ -103,6 +103,30 @@ namespace BlackMisc return qHash(TupleConverter::toTuple(*this)); } + /* + * To JSON + */ + QJsonObject CCoordinateGeodetic::toJson() const + { + return BlackMisc::serializeJson(CCoordinateGeodetic::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CCoordinateGeodetic::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CCoordinateGeodetic::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CCoordinateGeodetic::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + /* * From WGS84 coordinates */ diff --git a/src/blackmisc/coordinategeodetic.h b/src/blackmisc/coordinategeodetic.h index 1e967032b..56112b999 100644 --- a/src/blackmisc/coordinategeodetic.h +++ b/src/blackmisc/coordinategeodetic.h @@ -214,16 +214,21 @@ namespace BlackMisc */ bool operator !=(const CCoordinateGeodetic &other) const; - /*! - * \copydoc CValueObject::getValueHash - */ + //! \copydoc CValueObject::getValueHash virtual uint getValueHash() const override; - /*! - * Register metadata - */ + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + + //! \brief Register metadata static void registerMetadata(); + //! \brief Members + static const QStringList &jsonMembers(); + /*! * \brief Coordinate by WGS84 position data * \param latitudeWgs84 diff --git a/src/blackmisc/hwkeyboardkey.cpp b/src/blackmisc/hwkeyboardkey.cpp index a54eb3123..cb8099c76 100644 --- a/src/blackmisc/hwkeyboardkey.cpp +++ b/src/blackmisc/hwkeyboardkey.cpp @@ -30,6 +30,31 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * Members + */ + const QStringList &CKeyboardKey::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* + * To JSON + */ + QJsonObject CKeyboardKey::toJson() const + { + return BlackMisc::serializeJson(CKeyboardKey::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * From Json + */ + void CKeyboardKey::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CKeyboardKey::jsonMembers(), TupleConverter::toTuple(*this)); + } + + QString CKeyboardKey::convertToQString(bool /* i18n */) const { QString s = this->getModifier1AsString(); diff --git a/src/blackmisc/hwkeyboardkey.h b/src/blackmisc/hwkeyboardkey.h index b37693c7c..856978d48 100644 --- a/src/blackmisc/hwkeyboardkey.h +++ b/src/blackmisc/hwkeyboardkey.h @@ -87,9 +87,18 @@ namespace BlackMisc //! \copydoc CValueObject::getValueHash virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); + //! \brief Equal? bool operator ==(const CKeyboardKey &other) const; diff --git a/src/blackmisc/mathmatrixbase.cpp b/src/blackmisc/mathmatrixbase.cpp index 6ceba0ce0..83c1b9831 100644 --- a/src/blackmisc/mathmatrixbase.cpp +++ b/src/blackmisc/mathmatrixbase.cpp @@ -6,6 +6,7 @@ #include "blackmisc/mathmatrix3x3.h" #include "blackmisc/mathmatrix3x1.h" #include "blackmisc/blackmiscfreefunctions.h" +#include #include namespace BlackMisc @@ -222,15 +223,44 @@ namespace BlackMisc } /* - * Register metadata - */ + * Register metadata + */ template void CMatrixBase::registerMetadata() { qRegisterMetaType(); qDBusRegisterMetaType(); } - // see here for the reason of thess forward instantiations + /* + * To JSON + */ + template QJsonObject CMatrixBase::toJson() const + { + QJsonObject json; + QJsonArray jsonArray; + foreach(double v, this->toList()) + { + jsonArray.append(QJsonValue(v)); + } + json.insert("matrix", QJsonValue(jsonArray)); + return json; + } + + /* + * From Json + */ + template void CMatrixBase::fromJson(const QJsonObject &json) + { + QJsonArray jsonArray = json.value("matrix").toArray(); + QList list; + for (auto i = jsonArray.begin(); i != jsonArray.end(); ++i) + { + list.append((*i).toDouble()); + } + this->fromList(list); + } + + // see here for the reason of these forward instantiations // http://www.parashift.com/c++-faq/separate-template-class-defn-from-decl.html template class CMatrixBase; template class CMatrixBase; diff --git a/src/blackmisc/mathmatrixbase.h b/src/blackmisc/mathmatrixbase.h index b92fae89d..f6f8f2c40 100644 --- a/src/blackmisc/mathmatrixbase.h +++ b/src/blackmisc/mathmatrixbase.h @@ -239,6 +239,12 @@ namespace BlackMisc //! \brief Register metadata static void registerMetadata(); + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + private: //! \brief Check range of row / column void checkRange(int row, int column) const; diff --git a/src/blackmisc/mathvector3dbase.cpp b/src/blackmisc/mathvector3dbase.cpp index 78913eed4..971e90be9 100644 --- a/src/blackmisc/mathvector3dbase.cpp +++ b/src/blackmisc/mathvector3dbase.cpp @@ -151,26 +151,24 @@ namespace BlackMisc return CMatrix3x1(this->m_i, this->m_j, this->m_k); } - /*! - * \brief Stream to DBus - * \param argument + /* + * Stream to DBus */ template void CVector3DBase::marshallToDbus(QDBusArgument &argument) const { argument << TupleConverter::toTuple(*this); } - /*! - * \brief Stream from DBus - * \param argument + /* + * Stream from DBus */ template void CVector3DBase::unmarshallFromDbus(const QDBusArgument &argument) { argument >> TupleConverter::toTuple(*this); } - /*! - * \copydoc CValueObject::getValueHash() + /* + * getValueHash() */ template uint CVector3DBase::getValueHash() const { @@ -190,6 +188,61 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * To JSON + */ + template QJsonObject CVector3DBase::toJson() const + { + QJsonObject json; + QJsonArray jsonArray; + jsonArray.append(QJsonValue(this->m_i)); + jsonArray.append(QJsonValue(this->m_j)); + jsonArray.append(QJsonValue(this->m_k)); + json.insert("vector", QJsonValue(jsonArray)); + return json; + } + + /* + * From Json + */ + template void CVector3DBase::fromJson(const QJsonObject &json) + { + QJsonArray jsonArray = json.value("vector").toArray(); + this->m_i = jsonArray.at(0).toDouble(); + this->m_i = jsonArray.at(1).toDouble(); + this->m_i = jsonArray.at(2).toDouble(); + } + + /* + * To JSON + */ + template QJsonObject CMatrixBase::toJson() const + { + QJsonObject json; + QJsonArray jsonArray; + foreach(double v, this->toList()) + { + jsonArray.append(QJsonValue(v)); + } + json.insert("matrix", QJsonValue(jsonArray)); + return json; + } + + /* + * From Json + */ + template void CMatrixBase::fromJson(const QJsonObject &json) + { + QJsonArray jsonArray = json.value("matrix").toArray(); + QList list; + for (auto i = jsonArray.begin(); i != jsonArray.end(); ++i) + { + list.append((*i).toDouble()); + } + this->fromList(list); + } + + // see here for the reason of thess forward instantiations // http://www.parashift.com/c++-faq/separate-template-class-defn-from-decl.html template class CVector3DBase; diff --git a/src/blackmisc/mathvector3dbase.h b/src/blackmisc/mathvector3dbase.h index 4ee04b81a..0956f5e77 100644 --- a/src/blackmisc/mathvector3dbase.h +++ b/src/blackmisc/mathvector3dbase.h @@ -14,7 +14,6 @@ namespace BlackMisc { namespace Math { - class CMatrix3x1; /*! @@ -25,19 +24,13 @@ namespace BlackMisc private: BLACK_ENABLE_TUPLE_CONVERSION(CVector3DBase) - /*! - * \brief Easy access to derived class (CRTP template parameter) - * \return - */ + //! \brief Easy access to derived class (CRTP template parameter) ImplVector const *derived() const { return static_cast(this); } - /*! - * \brief Easy access to derived class (CRTP template parameter) - * \return - */ + //! \brief Easy access to derived class (CRTP template parameter) ImplVector *derived() { return static_cast(this); @@ -49,23 +42,13 @@ namespace BlackMisc double m_j; //!< Vector data j double m_k; //!< Vector data k - /*! - * \brief Default constructor - */ + //! \brief Default constructor CVector3DBase() : m_i(0.0), m_j(0.0), m_k(0.0) {} - /*! - * \brief Constructor by values - * \param i - * \param j - * \param k - */ + //! \brief Constructor by values CVector3DBase(double i, double j, double k) : m_i(i), m_j(j), m_k(k) {} - /*! - * \brief Constructor by value - * \param value - */ + //! \brief Constructor by value explicit CVector3DBase(double value) : m_i(value), m_j(value), m_k(value) {} /*! @@ -97,28 +80,19 @@ namespace BlackMisc // getter and setters are implemented in the derived classes // as they have different names (x, i, north) - /*! - * \brief Virtual destructor - */ + //! \brief Virtual destructor virtual ~CVector3DBase() {} - /*! - * \brief Set zeros - */ + //! \brief Set zeros void setZero(); - /*! - * \brief Is zero - */ + //! \brief Is zero? bool isZero() const { return this->m_i == 0 && this->m_j == 0 && this->m_k == 0; } - /*! - * \brief Is identity matrix? Epsilon considered. - * \return - */ + //! \brief Is zero, epsilon considered. bool isZeroEpsilon() const { ImplVector v; @@ -127,45 +101,22 @@ namespace BlackMisc return v.isZero(); } - /*! - * \brief Set all elements the same - * \param value - */ + //! \brief Set all elements the same void fill(double value); - /*! - * \brief Get element - * \param row - * \return - */ + //! \brief Get element double getElement(int row) const; - /*! - * \brief Set element - * \param row - * \param value - */ + //! \brief Set element void setElement(int row, double value); - /*! - * \brief Operator [] - * \param row - * \return - */ + //! \brief Operator [] double operator[](int row) const { return this->getElement(row); } - /*! - * \brief Operator [] - * \param row - * \return Mutable reference - */ + //! \brief Operator [], mutable reference double &operator[](int row) { return this->getElement(row); } - /*! - * \brief Equal operator == - * \param other - * \return - */ + //! \brief Equal operator == bool operator ==(const CVector3DBase &other) const { if (this == &other) return true; @@ -175,21 +126,13 @@ namespace BlackMisc CMath::epsilonEqual(this->m_k, other.m_k, 1E-9); } - /*! - * \brief Unequal operator != - * \param other - * \return - */ + //! \brief Unequal operator != bool operator !=(const CVector3DBase &other) const { return !((*this) == other); } - /*! - * \brief Operator += - * \param other - * \return - */ + //! \brief Operator += CVector3DBase &operator +=(const CVector3DBase &other) { this->m_i += other.m_i; @@ -198,11 +141,7 @@ namespace BlackMisc return *this; } - /*! - * \brief Operator + - * \param other - * \return - */ + //! \brief Operator + ImplVector operator +(const ImplVector &other) const { ImplVector v = *derived(); @@ -210,11 +149,7 @@ namespace BlackMisc return v; } - /*! - * \brief Operator -= - * \param other - * \return - */ + //! \brief Operator -= CVector3DBase &operator -=(const CVector3DBase &other) { this->m_i -= other.m_i; @@ -223,11 +158,7 @@ namespace BlackMisc return *this; } - /*! - * \brief Operator - - * \param other - * \return - */ + //! \brief Operator - ImplVector operator -(const ImplVector &other) const { ImplVector v = *derived(); @@ -235,11 +166,7 @@ namespace BlackMisc return v; } - /*! - * \brief Multiply with scalar - * \param factor - * \return - */ + //! \brief Multiply with scalar CVector3DBase &operator *=(double factor) { this->m_i *= factor; @@ -248,11 +175,7 @@ namespace BlackMisc return *this; } - /*! - * \brief Multiply with scalar - * \param factor - * \return - */ + //! \brief Multiply with scalar ImplVector operator *(double factor) const { ImplVector v = *derived(); @@ -260,19 +183,13 @@ namespace BlackMisc return v; } - /*! - * \brief Operator to support commutative multiplication - */ + //! \brief Operator to support commutative multiplication friend ImplVector operator *(double factor, const ImplVector &other) { return other * factor; } - /*! - * \brief Divide by scalar - * \param divisor - * \return - */ + //! \brief Divide by scalar CVector3DBase &operator /=(double divisor) { this->m_i /= divisor; @@ -281,11 +198,7 @@ namespace BlackMisc return *this; } - /*! - * \brief Divide by scalar - * \param divisor - * \return - */ + //! \brief Divide by scalar ImplVector operator /(double divisor) const { ImplVector v = *derived(); @@ -293,53 +206,32 @@ namespace BlackMisc return v; } - /*! - * \brief Dot product - * \param other - * \return - */ + //! \brief Dot product double dotProduct(const ImplVector &other) const; - /*! - * \brief Cross product - * \param other - * \return - */ + //! \brief Cross product ImplVector crossProduct(const ImplVector &other) const; - /*! - * \brief Reciprocal value - * \return - */ + //! \brief Reciprocal value ImplVector reciprocalValues() const { ImplVector v(1 / this->m_i, 1 / this->m_j, 1 / this->m_j); return v; } - /*! - * \brief Converted to matrix - * \return - */ + //! \brief Converted to matrix CMatrix3x1 toMatrix3x1() const; - /*! - * \copydoc CValueObject::getValueHash - */ + //! \copydoc CValueObject::getValueHash virtual uint getValueHash() const override; - /*! - * \brief length / magnitude - * \return - */ + //! \brief length / magnitude double length() const { return sqrt(this->m_i * this->m_i + this->m_j * this->m_j + this->m_k * this->m_k); } - /*! - * \brief Round this vector - */ + //! \brief Round this vector void round() { const double epsilon = 1E-10; @@ -348,10 +240,7 @@ namespace BlackMisc this->m_k = BlackMisc::Math::CMath::roundEpsilon(this->m_k, epsilon); } - /*! - * \brief Rounded vector - * \return - */ + //! \brief Rounded vector ImplVector rounded() const { ImplVector v = *derived(); @@ -359,9 +248,13 @@ namespace BlackMisc return v; } - /*! - * \brief Register metadata - */ + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + + //! \brief Register metadata static void registerMetadata(); }; diff --git a/src/blackmisc/nwserver.cpp b/src/blackmisc/nwserver.cpp index 03ebdaf59..96f8b593b 100644 --- a/src/blackmisc/nwserver.cpp +++ b/src/blackmisc/nwserver.cpp @@ -167,8 +167,6 @@ namespace BlackMisc } } - - /* * Register metadata */ @@ -178,5 +176,29 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * Members + */ + const QStringList &CServer::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* + * To JSON + */ + QJsonObject CServer::toJson() const + { + return BlackMisc::serializeJson(CServer::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * From Json + */ + void CServer::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CServer::jsonMembers(), TupleConverter::toTuple(*this)); + } + } // namespace } // namespace diff --git a/src/blackmisc/nwserver.h b/src/blackmisc/nwserver.h index b27a4fbe4..9c019d39b 100644 --- a/src/blackmisc/nwserver.h +++ b/src/blackmisc/nwserver.h @@ -77,9 +77,18 @@ namespace BlackMisc //! \copydoc CValueObject::getValueHash() virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); + //! \brief Properties by index enum ColumnIndex { diff --git a/src/blackmisc/nwuser.cpp b/src/blackmisc/nwuser.cpp index 6e5a6537b..ec0e3a389 100644 --- a/src/blackmisc/nwuser.cpp +++ b/src/blackmisc/nwuser.cpp @@ -119,6 +119,30 @@ namespace BlackMisc return qHash(TupleConverter::toTuple(*this)); } + /* + * To JSON + */ + QJsonObject CUser::toJson() const + { + return BlackMisc::serializeJson(CUser::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CUser::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CUser::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CUser::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + /* * Register metadata */ diff --git a/src/blackmisc/nwuser.h b/src/blackmisc/nwuser.h index b11d99272..378c4d22d 100644 --- a/src/blackmisc/nwuser.h +++ b/src/blackmisc/nwuser.h @@ -120,9 +120,18 @@ namespace BlackMisc //! \copydoc CValueObject::getValueHash() virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + //! \brief Members + static const QStringList &jsonMembers(); + /*! * This and another user exchange missing data. * This user has priority and overrides first. diff --git a/src/blackmisc/pqphysicalquantity.cpp b/src/blackmisc/pqphysicalquantity.cpp index fa3ace5fc..92e86d177 100644 --- a/src/blackmisc/pqphysicalquantity.cpp +++ b/src/blackmisc/pqphysicalquantity.cpp @@ -276,6 +276,27 @@ namespace BlackMisc return BlackMisc::calculateHash(hashs, "PQ"); } + /* + * JSON Object + */ + template QJsonObject CPhysicalQuantity::toJson() const + { + QJsonObject json; + json.insert("value", QJsonValue(this->m_value)); + json.insert("unit", QJsonValue(this->m_unit.getSymbol())); + return json; + } + + /* + * JSON Object + */ + template void CPhysicalQuantity::fromJson(const QJsonObject &json) + { + const QString unitSymbol = json.value("unit").toString(); + this->setUnitBySymbol(unitSymbol); + this->m_value = json.value("value").toDouble(); + } + /* * metaTypeId */ diff --git a/src/blackmisc/pqphysicalquantity.h b/src/blackmisc/pqphysicalquantity.h index 1726ccddb..b9fe55791 100644 --- a/src/blackmisc/pqphysicalquantity.h +++ b/src/blackmisc/pqphysicalquantity.h @@ -220,6 +220,12 @@ namespace BlackMisc //! \copydoc CValueObject::getValueHash virtual uint getValueHash() const override; + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + virtual void fromJson(const QJsonObject &json) override; + //! \brief Register metadata of unit and quantity static void registerMetadata(); }; diff --git a/src/blackmisc/voiceroom.cpp b/src/blackmisc/voiceroom.cpp index a71a04d36..e47cbd116 100644 --- a/src/blackmisc/voiceroom.cpp +++ b/src/blackmisc/voiceroom.cpp @@ -90,6 +90,31 @@ namespace BlackMisc qDBusRegisterMetaType(); } + /* + * To JSON + */ + QJsonObject CVoiceRoom::toJson() const + { + return BlackMisc::serializeJson(CVoiceRoom::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CVoiceRoom::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CVoiceRoom::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CVoiceRoom::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + + /* * To string */ diff --git a/src/blackmisc/voiceroom.h b/src/blackmisc/voiceroom.h index 867556407..f4e6214a2 100644 --- a/src/blackmisc/voiceroom.h +++ b/src/blackmisc/voiceroom.h @@ -86,15 +86,19 @@ namespace BlackMisc //! \copydoc CValueObject::getValueHash virtual uint getValueHash() const override; - /*! - * \brief Register metadata - */ + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + void fromJson(const QJsonObject &json) override; + + //! \brief Register metadata static void registerMetadata(); - /*! - * \brief Protocol prefix - * \return - */ + //! \copydoc TupleConverter<>::jsonMembers() + static const QStringList &jsonMembers(); + + //! \brief Protocol prefix "vvl" static const QString &protocol() { static QString p("vvl"); return p; } /*! diff --git a/src/blacksim/fscommon/aircraftcfgentries.cpp b/src/blacksim/fscommon/aircraftcfgentries.cpp index 0afba737e..560fe901b 100644 --- a/src/blacksim/fscommon/aircraftcfgentries.cpp +++ b/src/blacksim/fscommon/aircraftcfgentries.cpp @@ -135,5 +135,30 @@ namespace BlackSim { argument >> TupleConverter::toTuple(*this); } + + /* + * To JSON + */ + QJsonObject CAircraftCfgEntries::toJson() const + { + return BlackMisc::serializeJson(CAircraftCfgEntries::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CAircraftCfgEntries::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CAircraftCfgEntries::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CAircraftCfgEntries::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + } } // namespace diff --git a/src/blacksim/fscommon/aircraftcfgentries.h b/src/blacksim/fscommon/aircraftcfgentries.h index 53542a6b3..fe73f5b38 100644 --- a/src/blacksim/fscommon/aircraftcfgentries.h +++ b/src/blacksim/fscommon/aircraftcfgentries.h @@ -132,6 +132,15 @@ namespace BlackSim //! \brief Register the metatypes static void registerMetadata(); + + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + virtual void fromJson(const QJsonObject &json) override; + + //! \brief Members + static const QStringList &jsonMembers(); }; } } // namespace diff --git a/src/blacksim/fscommon/aircraftmapping.cpp b/src/blacksim/fscommon/aircraftmapping.cpp index ad3118442..6cace27a8 100644 --- a/src/blacksim/fscommon/aircraftmapping.cpp +++ b/src/blacksim/fscommon/aircraftmapping.cpp @@ -248,5 +248,30 @@ namespace BlackSim qRegisterMetaType(); qDBusRegisterMetaType(); } + + /* + * To JSON + */ + QJsonObject CAircraftMapping::toJson() const + { + return BlackMisc::serializeJson(CAircraftMapping::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * To JSON + */ + void CAircraftMapping::fromJson(const QJsonObject &json) + { + BlackMisc::deserializeJson(json, CAircraftMapping::jsonMembers(), TupleConverter::toTuple(*this)); + } + + /* + * Members + */ + const QStringList &CAircraftMapping::jsonMembers() + { + return TupleConverter::jsonMembers(); + } + } // namespace } // namespace diff --git a/src/blacksim/fscommon/aircraftmapping.h b/src/blacksim/fscommon/aircraftmapping.h index 0b6a4a8b8..a7b73bead 100644 --- a/src/blacksim/fscommon/aircraftmapping.h +++ b/src/blacksim/fscommon/aircraftmapping.h @@ -206,8 +206,17 @@ namespace BlackSim return dateTimeString; } + //! \copydoc CValueObject::toJson + virtual QJsonObject toJson() const override; + + //! \copydoc CValueObject::fromJson + virtual void fromJson(const QJsonObject &json) override; + //! \brief Register metadata static void registerMetadata(); + + //! \brief Members + static const QStringList &jsonMembers(); }; } // namespace } // namespace