diff --git a/src/blackmisc/datastore.cpp b/src/blackmisc/datastore.cpp index ff6af0ee4..6bd1cd3ec 100644 --- a/src/blackmisc/datastore.cpp +++ b/src/blackmisc/datastore.cpp @@ -35,6 +35,13 @@ namespace BlackMisc this->m_dbKey = k; } + QJsonValue IDatastoreObjectWithIntegerKey::getDbKeyAsJsonValue() const + { + if (this->hasValidDbKey()) { return QJsonValue(this->m_dbKey); } + static const QJsonValue null; + return null; + } + void IDatastoreObjectWithIntegerKey::setKeyAndTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix) { int dbKey = json.value(prefix + "id").toInt(-1); @@ -103,6 +110,13 @@ namespace BlackMisc return (i >= static_cast(IndexDbIntegerKey)) && (i <= static_cast(IndexDbIntegerKey)); } + QJsonValue IDatastoreObjectWithStringKey::getDbKeyAsJsonValue() const + { + if (this->hasValidDbKey()) { return QJsonValue(this->m_dbKey); } + static const QJsonValue null; + return null; + } + void IDatastoreObjectWithStringKey::setKeyAndTimestampFromDatabaseJson(const QJsonObject &json, const QString &prefix) { QString dbKey = json.value(prefix + "id").toString(); diff --git a/src/blackmisc/datastore.h b/src/blackmisc/datastore.h index e3b97faac..9dd671003 100644 --- a/src/blackmisc/datastore.h +++ b/src/blackmisc/datastore.h @@ -37,6 +37,9 @@ namespace BlackMisc //! DB key as string QString getDbKeyAsString() const; + //! Key as JSON value, or null + QJsonValue getDbKeyAsJsonValue() const; + //! Db ley in parentheses, e.g. "(3)" QString getDbKeyAsStringInParentheses() const; @@ -95,6 +98,9 @@ namespace BlackMisc //! Get DB key. const QString &getDbKey() const { return m_dbKey; } + //! Key as JSON value, or null + QJsonValue getDbKeyAsJsonValue() const; + //! Set the DB key void setDbKey(const QString &key) { m_dbKey = key.trimmed().toUpper(); } diff --git a/src/blackmisc/datastoreutility.cpp b/src/blackmisc/datastoreutility.cpp index e95d60f89..bb75993d7 100644 --- a/src/blackmisc/datastoreutility.cpp +++ b/src/blackmisc/datastoreutility.cpp @@ -20,6 +20,13 @@ namespace BlackMisc return BlackMisc::stringToBool(dbBool); } + const QString &CDatastoreUtility::boolToDbYN(bool v) + { + static const QString y("Y"); + static const QString n("N"); + return v ? y : n; + } + int CDatastoreUtility::extractIntegerKey(const QString &stringWithKey) { QString ks(stringWithKey.trimmed()); diff --git a/src/blackmisc/datastoreutility.h b/src/blackmisc/datastoreutility.h index 236b4a66f..3e6f92569 100644 --- a/src/blackmisc/datastoreutility.h +++ b/src/blackmisc/datastoreutility.h @@ -23,23 +23,26 @@ namespace BlackMisc /*! * Class with datastore related utilities */ - class CDatastoreUtility + class BLACKMISC_EXPORT CDatastoreUtility { public: //! No constructor CDatastoreUtility() = delete; //! DB Bool value to bool - BLACKMISC_EXPORT static bool dbBoolStringToBool(const QString &dbBool); + static bool dbBoolStringToBool(const QString &dbBool); + + //! Bool to DB yes/no + static const QString &boolToDbYN(bool v); //! Extract key from string like "MyAircraft (33)" - BLACKMISC_EXPORT static int extractIntegerKey(const QString &stringWithKey); + static int extractIntegerKey(const QString &stringWithKey); //! Parse a timestamp object - BLACKMISC_EXPORT static QDateTime parseTimestamp(const QString ×tamp); + static QDateTime parseTimestamp(const QString ×tamp); //! Get id from a DB response - BLACKMISC_EXPORT static bool parseSwiftWriteResponse(const QString &jsonResponse, BlackMisc::CStatusMessageList &messages, BlackMisc::CVariant &key); + static bool parseSwiftWriteResponse(const QString &jsonResponse, BlackMisc::CStatusMessageList &messages, BlackMisc::CVariant &key); }; } // namespace diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index 849ebe4e4..46b5cfe26 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -55,6 +55,41 @@ namespace BlackMisc return s; } + QJsonObject CAircraftModel::toDatabaseJson() const + { + QJsonObject obj; + + // filename not in DB + obj.insert("id", this->getDbKeyAsJsonValue()); + obj.insert("simkey", QJsonValue(this->m_modelString)); + obj.insert("description", QJsonValue(this->m_description)); + obj.insert("mode", QJsonValue(getModelModeAsString().left(1).toUpper())); + + // sims + const CSimulatorInfo sim(getSimulatorInfo()); + QString flag = CDatastoreUtility::boolToDbYN(sim.fsx()); + obj.insert("simfsx", QJsonValue(flag)); + flag = CDatastoreUtility::boolToDbYN(sim.p3d()); + obj.insert("simp3d", QJsonValue(flag)); + flag = CDatastoreUtility::boolToDbYN(sim.fs9()); + obj.insert("simfs9", QJsonValue(flag)); + flag = CDatastoreUtility::boolToDbYN(sim.xplane()); + obj.insert("simxplane", QJsonValue(flag)); + + // foreign keys + obj.insert("iddistributor", this->getDistributor().getDbKeyAsJsonValue()); + obj.insert("idaircrafticao", this->getAircraftIcaoCode().getDbKeyAsJsonValue()); + obj.insert("idlivery", this->getLivery().getDbKeyAsJsonValue()); + obj.insert("idairlineicao", this->getLivery().getAirlineIcaoCode().getDbKeyAsJsonValue()); // not really needed if livery is complete + + return obj; + } + + QString CAircraftModel::toDatabaseJsonString(QJsonDocument::JsonFormat format) const + { + return QJsonDocument(toDatabaseJson()).toJson(format); + } + CVariant CAircraftModel::propertyByIndex(const BlackMisc::CPropertyIndex &index) const { if (index.isMyself()) { return CVariant::from(*this); } diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index 777ae729c..44a2e9923 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -239,6 +239,12 @@ namespace BlackMisc //! \copydoc CValueObject::convertToQString QString convertToQString(bool i18n = false) const; + //! To database JSON + QJsonObject toDatabaseJson() const; + + //! To database JSON + QString toDatabaseJsonString(QJsonDocument::JsonFormat format = QJsonDocument::Compact) const; + //! Model type static QString modelTypeToString(ModelType type); diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index d70ee8830..94ad163b9 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -198,5 +198,21 @@ namespace BlackMisc } return msgs; } + + QJsonArray CAircraftModelList::toDatabaseJson() const + { + QJsonArray array; + for (const CAircraftModel &model : *this) + { + QJsonValue v(model.toDatabaseJson()); + array.append(v); + } + return array; + } + + QString CAircraftModelList::toDatabaseJsonString(QJsonDocument::JsonFormat format) const + { + return QJsonDocument(toDatabaseJson()).toJson(format); + } } // namespace } // namespace diff --git a/src/blackmisc/simulation/aircraftmodellist.h b/src/blackmisc/simulation/aircraftmodellist.h index e4b160073..c17fd2c0b 100644 --- a/src/blackmisc/simulation/aircraftmodellist.h +++ b/src/blackmisc/simulation/aircraftmodellist.h @@ -89,6 +89,12 @@ namespace BlackMisc //! Validate for publishing CStatusMessageList validateForPublishing() const; + + //! To database JSON + QJsonArray toDatabaseJson() const; + + //! To database JSON + QString toDatabaseJsonString(QJsonDocument::JsonFormat format = QJsonDocument::Compact) const; }; } //namespace