From eef51f26f08f9c3348c25e27260b7cd4db53e799 Mon Sep 17 00:00:00 2001 From: Francois Ferrand Date: Thu, 11 Apr 2013 20:42:00 +0200 Subject: [PATCH] Cleaner qobject2qvariant(). --- src/http/Protocol.cpp | 25 ++----------------------- src/http/qjson/qobjecthelper.cpp | 13 +++++++++++-- src/http/qjson/qobjecthelper.h | 14 ++++++++++++-- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/http/Protocol.cpp b/src/http/Protocol.cpp index 770a1e5ad..e150d9af1 100644 --- a/src/http/Protocol.cpp +++ b/src/http/Protocol.cpp @@ -105,25 +105,6 @@ static QString encrypt(const QString & data, SymmetricCipher & cipher) return encode64(encrypt2(data.toUtf8(), cipher)); } -static QVariant qobject2qvariant(const QObject * object, const QStringList ignoredProperties = QStringList(QString(QLatin1String("objectName")))) -{ - QVariantMap result; - const QMetaObject *metaobject = object->metaObject(); - int count = metaobject->propertyCount(); - for (int i=0; iproperty(i); - const char *name = metaproperty.name(); - - if (ignoredProperties.contains(QLatin1String(name)) || (!metaproperty.isReadable())) - continue; - - QVariant value = object->property(name); - if (!value.isNull() /*&& value.isValid()*/) //Do not add NULL or invalid fields - result[QLatin1String(name)] = value; - } - return result; -} - //////////////////////////////////////////////////////////////////////////////////////////////////// /// Request @@ -315,7 +296,7 @@ void Response::setVerifier(QString key) QString Response::toJson() { - QVariant result = qobject2qvariant(this); + QVariant result = QJson::QObjectHelper::qobject2qvariant(this, QJson::QObjectHelper::Flag_None); QJson::Serializer s; s.setIndentMode(QJson::IndentCompact); @@ -360,7 +341,7 @@ QVariant Response::getEntries() const QList res; res.reserve(m_entries.size()); Q_FOREACH(const Entry &entry, m_entries) - res.append(qobject2qvariant(&entry)); + res.append(QJson::QObjectHelper::qobject2qvariant(&entry, QJson::QObjectHelper::Flag_None)); return res; } @@ -427,8 +408,6 @@ void Response::setError(const QString &error) /// ResponseEntry //////////////////////////////////////////////////////////////////////////////////////////////////// -Q_DECLARE_METATYPE(Entry) - Entry::Entry() {} diff --git a/src/http/qjson/qobjecthelper.cpp b/src/http/qjson/qobjecthelper.cpp index 4f8daf722..0ea440522 100644 --- a/src/http/qjson/qobjecthelper.cpp +++ b/src/http/qjson/qobjecthelper.cpp @@ -41,8 +41,8 @@ QObjectHelper::~QObjectHelper() delete d; } -QVariantMap QObjectHelper::qobject2qvariant( const QObject* object, - const QStringList& ignoredProperties) +QVariantMap QObjectHelper::qobject2qvariant(const QObject* object, Flags flags, + const QStringList& ignoredProperties) { QVariantMap result; const QMetaObject *metaobject = object->metaObject(); @@ -55,11 +55,20 @@ QVariantMap QObjectHelper::qobject2qvariant( const QObject* object, continue; QVariant value = object->property(name); + if (value.isNull() && !flags.testFlag(Flag_StoreNullVariants)) + continue; + if (!value.isValid() && !flags.testFlag(Flag_StoreInvalidVariants)) + continue; result[QLatin1String(name)] = value; } return result; } +QVariantMap QObjectHelper::qobject2qvariant(const QObject *object, const QStringList &ignoredProperties) + { + return qobject2qvariant(object, Flag_All, ignoredProperties); + } + void QObjectHelper::qvariant2qobject(const QVariantMap& variant, QObject* object) { const QMetaObject *metaobject = object->metaObject(); diff --git a/src/http/qjson/qobjecthelper.h b/src/http/qjson/qobjecthelper.h index e4dfed0c8..9a819b448 100644 --- a/src/http/qjson/qobjecthelper.h +++ b/src/http/qjson/qobjecthelper.h @@ -120,14 +120,24 @@ namespace QJson { QObjectHelper(); ~QObjectHelper(); + enum Flag { + Flag_None, + Flag_StoreNullVariants, + Flag_StoreInvalidVariants, + Flag_All = Flag_StoreNullVariants | Flag_StoreInvalidVariants + }; + Q_DECLARE_FLAGS(Flags, Flag) + /** * This method converts a QObject instance into a QVariantMap. * * @param object The QObject instance to be converted. * @param ignoredProperties Properties that won't be converted. */ - static QVariantMap qobject2qvariant( const QObject* object, - const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName")))); + static QVariantMap qobject2qvariant(const QObject* object, Flags flags = Flag_All, + const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName")))); + static QVariantMap qobject2qvariant(const QObject* object, + const QStringList& ignoredProperties); /** * This method converts a QVariantMap instance into a QObject