#include "databasetable.h" #include "logger.h" #include #include namespace serversdk { DatabaseTable::DatabaseTable(QObject *parent) : QObject(parent) { } QByteArray DatabaseTable::jsonData() const { QJsonDocument doc = QJsonDocument::fromVariant(this->toVariantMap()); return doc.toJson(QJsonDocument::Compact); } /** Creates universal variant structure to hold key / value pairs */ QVariantMap DatabaseTable::toVariantMap() const { QVariantMap variantMap; const QMetaObject *metaObj = this->metaObject(); for (int i = metaObj->propertyOffset(); i < metaObj->propertyCount(); ++i) { QMetaProperty prop = metaObj->property(i); // Skip non USER so -> ( Q_PROPERTY( ...... USER false ) only if (!prop.isUser()) continue; // Get key -> value pairs QString name = prop.name(); QVariant::Type type = prop.type(); QVariant value(type); value.setValue(prop.read(this)); variantMap.insert(name, value); } return variantMap; } bool DatabaseTable::fromVariantMap(const QVariantMap &variantMap) { const QMetaObject *metaObj = this->metaObject(); for (int i = metaObj->propertyOffset(); i < metaObj->propertyCount(); ++i) { QMetaProperty prop = metaObj->property(i); // Skip non USER so -> ( Q_PROPERTY( ...... USER false ) only if (!prop.isUser()) continue; // Property name QString name = prop.name(); // Get value from variant map QVariant value = variantMap.value(name); prop.write(this, value); } return true; } bool DatabaseTable::fromJson(const QByteArray &data) { QJsonDocument doc = QJsonDocument::fromJson(data); QVariantMap variant = qvariant_cast(doc.toVariant()); return fromVariantMap(variant); } } // namespace serversdk