Fields can now be cleared
This commit is contained in:
@@ -13,6 +13,10 @@ int main(int argc, char **argv)
|
|||||||
message.copyTo(map);
|
message.copyTo(map);
|
||||||
qDebug() << "full" << map;
|
qDebug() << "full" << map;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
qDebug() << "changing name...";
|
||||||
|
|
||||||
message.setName("Peter");
|
message.setName("Peter");
|
||||||
|
|
||||||
map.clear();
|
map.clear();
|
||||||
@@ -23,9 +27,15 @@ int main(int argc, char **argv)
|
|||||||
message.copyTouchedTo(map);
|
message.copyTouchedTo(map);
|
||||||
qDebug() << "delta:" << map;
|
qDebug() << "delta:" << map;
|
||||||
|
|
||||||
qDebug() << "clearing touched...";
|
|
||||||
|
|
||||||
message.setTouched(false);
|
|
||||||
|
qDebug() << "clearing name...";
|
||||||
|
|
||||||
|
message.nameField().clear();
|
||||||
|
|
||||||
|
map.clear();
|
||||||
|
message.copyTo(map);
|
||||||
|
qDebug() << "full" << map;
|
||||||
|
|
||||||
map.clear();
|
map.clear();
|
||||||
message.copyTouchedTo(map);
|
message.copyTouchedTo(map);
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
DbMsgFieldBase::DbMsgFieldBase() :
|
DbMsgFieldBase::DbMsgFieldBase() :
|
||||||
m_touched(false)
|
m_hasValue(false), m_touched(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -15,6 +15,16 @@ DbMsgFieldBase::~DbMsgFieldBase()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DbMsgFieldBase::hasValue() const
|
||||||
|
{
|
||||||
|
return m_hasValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DbMsgFieldBase::clear()
|
||||||
|
{
|
||||||
|
m_hasValue = false;
|
||||||
|
}
|
||||||
|
|
||||||
bool DbMsgFieldBase::touched() const
|
bool DbMsgFieldBase::touched() const
|
||||||
{
|
{
|
||||||
return m_touched;
|
return m_touched;
|
||||||
@@ -25,6 +35,16 @@ void DbMsgFieldBase::setTouched(bool touched)
|
|||||||
m_touched = touched;
|
m_touched = touched;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DbMsgFieldBase::setHasValue(bool hasValue)
|
||||||
|
{
|
||||||
|
if(m_hasValue && !hasValue)
|
||||||
|
clear();
|
||||||
|
else
|
||||||
|
m_hasValue = hasValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QString DbMsgBase::m_clearedFieldsName(QStringLiteral("__CLEARED_FIELDS"));
|
||||||
|
|
||||||
DbMsgBase::DbMsgBase()
|
DbMsgBase::DbMsgBase()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -62,7 +82,16 @@ void DbMsgBase::copyTo(QVariantMap &variantMap) const
|
|||||||
{
|
{
|
||||||
const auto fields = getFields();
|
const auto fields = getFields();
|
||||||
for(auto iter = fields.cbegin(); iter != fields.cend(); iter++)
|
for(auto iter = fields.cbegin(); iter != fields.cend(); iter++)
|
||||||
variantMap.insert(iter.key(), iter.value()->getVariant());
|
{
|
||||||
|
const auto key = iter.key();
|
||||||
|
const auto field = iter.value();
|
||||||
|
const auto hasValue = field->hasValue();
|
||||||
|
const auto variant = field->getVariant();
|
||||||
|
if(hasValue)
|
||||||
|
variantMap.insert(key, variant);
|
||||||
|
else
|
||||||
|
qWarning() << key << "has no value for full transmission!";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DbMsgBase::copyTouchedTo(QJsonObject &jsonObject) const
|
void DbMsgBase::copyTouchedTo(QJsonObject &jsonObject) const
|
||||||
@@ -73,8 +102,18 @@ void DbMsgBase::copyTouchedTo(QJsonObject &jsonObject) const
|
|||||||
|
|
||||||
void DbMsgBase::copyTouchedTo(QVariantMap &variantMap) const
|
void DbMsgBase::copyTouchedTo(QVariantMap &variantMap) const
|
||||||
{
|
{
|
||||||
|
QStringList clearedFields;
|
||||||
|
|
||||||
const auto fields = getFields();
|
const auto fields = getFields();
|
||||||
for(auto iter = fields.cbegin(); iter != fields.cend(); iter++)
|
for(auto iter = fields.cbegin(); iter != fields.cend(); iter++)
|
||||||
if(iter.value()->touched())
|
if(iter.value()->touched())
|
||||||
|
{
|
||||||
|
if(iter.value()->hasValue())
|
||||||
variantMap.insert(iter.key(), iter.value()->getVariant());
|
variantMap.insert(iter.key(), iter.value()->getVariant());
|
||||||
|
else
|
||||||
|
clearedFields.append(iter.key());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!clearedFields.isEmpty())
|
||||||
|
variantMap.insert(m_clearedFieldsName, clearedFields);
|
||||||
}
|
}
|
||||||
|
@@ -12,12 +12,19 @@ public:
|
|||||||
DbMsgFieldBase();
|
DbMsgFieldBase();
|
||||||
virtual ~DbMsgFieldBase();
|
virtual ~DbMsgFieldBase();
|
||||||
|
|
||||||
|
bool hasValue() const;
|
||||||
|
virtual void clear();
|
||||||
|
|
||||||
bool touched() const;
|
bool touched() const;
|
||||||
void setTouched(bool touched);
|
void setTouched(bool touched);
|
||||||
|
|
||||||
virtual QVariant getVariant() const = 0;
|
virtual QVariant getVariant() const = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void setHasValue(bool hasValue);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_hasValue;
|
||||||
bool m_touched;
|
bool m_touched;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -32,27 +39,25 @@ public:
|
|||||||
const T &getValue() const;
|
const T &getValue() const;
|
||||||
void setValue(const T &value);
|
void setValue(const T &value);
|
||||||
|
|
||||||
bool hasValue() const;
|
void clear() override;
|
||||||
|
QVariant getVariant() const override;
|
||||||
QVariant getVariant() const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T m_value;
|
T m_value;
|
||||||
bool m_hasValue;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
DbMsgField<T>::DbMsgField() :
|
DbMsgField<T>::DbMsgField() :
|
||||||
DbMsgFieldBase(),
|
DbMsgFieldBase()
|
||||||
m_hasValue(false)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
DbMsgField<T>::DbMsgField(const T &value) :
|
DbMsgField<T>::DbMsgField(const T &value) :
|
||||||
DbMsgFieldBase(),
|
DbMsgFieldBase(),
|
||||||
m_value(value), m_hasValue(true)
|
m_value(value)
|
||||||
{
|
{
|
||||||
|
setHasValue(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@@ -70,15 +75,16 @@ const T &DbMsgField<T>::getValue() const
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
void DbMsgField<T>::setValue(const T &value)
|
void DbMsgField<T>::setValue(const T &value)
|
||||||
{
|
{
|
||||||
m_hasValue = true;
|
|
||||||
m_value = value;
|
m_value = value;
|
||||||
|
setHasValue(true);
|
||||||
setTouched(true);
|
setTouched(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
bool DbMsgField<T>::hasValue() const
|
void DbMsgField<T>::clear()
|
||||||
{
|
{
|
||||||
return m_hasValue;
|
DbMsgFieldBase::clear();
|
||||||
|
m_value = T();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@@ -89,6 +95,8 @@ QVariant DbMsgField<T>::getVariant() const
|
|||||||
|
|
||||||
class DbMsgBase
|
class DbMsgBase
|
||||||
{
|
{
|
||||||
|
static const QString m_clearedFieldsName;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DbMsgBase();
|
DbMsgBase();
|
||||||
virtual ~DbMsgBase();
|
virtual ~DbMsgBase();
|
||||||
|
Reference in New Issue
Block a user