From 562e7187b40fa06c55ec330d59121ba2daffafc8 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Sat, 1 Sep 2018 17:02:21 +0200 Subject: [PATCH] Added copyTo and copyTouchedTo methods to DbMsgFieldBase --- messagingclient/main.cpp | 19 +++++++++++++++---- messagingcorelib/dbmsglib.cpp | 29 +++++++++++++++++++++++++++++ messagingcorelib/dbmsglib.h | 8 ++++++++ 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/messagingclient/main.cpp b/messagingclient/main.cpp index a2cdc1d..d3df494 100644 --- a/messagingclient/main.cpp +++ b/messagingclient/main.cpp @@ -8,17 +8,28 @@ int main(int argc, char **argv) QCoreApplication app(argc, argv); MyMessage message("Daniel", QDate(1996, 11, 12), QDateTime::currentDateTime(), 21, 80); - message.debug(); - qDebug() << "changing name..."; + QVariantMap map; + message.copyTo(map); + qDebug() << "full" << map; message.setName("Peter"); - message.debug(); + + map.clear(); + message.copyTo(map); + qDebug() << "full" << map; + + map.clear(); + message.copyTouchedTo(map); + qDebug() << "delta:" << map; qDebug() << "clearing touched..."; message.setTouched(false); - message.debug(); + + map.clear(); + message.copyTouchedTo(map); + qDebug() << "delta:" << map; return app.exec(); } diff --git a/messagingcorelib/dbmsglib.cpp b/messagingcorelib/dbmsglib.cpp index f5b1a68..fdcaf1f 100644 --- a/messagingcorelib/dbmsglib.cpp +++ b/messagingcorelib/dbmsglib.cpp @@ -1,6 +1,8 @@ #include "dbmsglib.h" #include +#include +#include #include @@ -49,3 +51,30 @@ void DbMsgBase::debug() const for(auto iter = fields.cbegin(); iter != fields.cend(); iter++) qDebug() << iter.key() << iter.value()->getVariant() << iter.value()->touched(); } + +void DbMsgBase::copyTo(QJsonObject &jsonObject) const +{ + Q_UNUSED(jsonObject) + qCritical() << "has not been implemented for json yet"; +} + +void DbMsgBase::copyTo(QVariantMap &variantMap) const +{ + const auto fields = getFields(); + for(auto iter = fields.cbegin(); iter != fields.cend(); iter++) + variantMap.insert(iter.key(), iter.value()->getVariant()); +} + +void DbMsgBase::copyTouchedTo(QJsonObject &jsonObject) const +{ + Q_UNUSED(jsonObject) + qCritical() << "has not been implemented for json yet"; +} + +void DbMsgBase::copyTouchedTo(QVariantMap &variantMap) const +{ + const auto fields = getFields(); + for(auto iter = fields.cbegin(); iter != fields.cend(); iter++) + if(iter.value()->touched()) + variantMap.insert(iter.key(), iter.value()->getVariant()); +} diff --git a/messagingcorelib/dbmsglib.h b/messagingcorelib/dbmsglib.h index dc83505..b89f3d5 100644 --- a/messagingcorelib/dbmsglib.h +++ b/messagingcorelib/dbmsglib.h @@ -4,6 +4,8 @@ #include #include +class QJsonObject; + class DbMsgFieldBase { public: @@ -97,6 +99,12 @@ public: void debug() const; + void copyTo(QJsonObject &jsonObject) const; + void copyTo(QVariantMap &variantMap) const; + + void copyTouchedTo(QJsonObject &jsonObject) const; + void copyTouchedTo(QVariantMap &variantMap) const; + protected: virtual QMap getFields() = 0; virtual QMap getFields() const = 0;