Splitted dbmsglib for each class separate .h/.cpp

This commit is contained in:
0xFEEDC0DE64
2018-09-01 18:06:46 +02:00
parent eb64b217f0
commit f25d88b68a
10 changed files with 184 additions and 180 deletions

View File

@@ -1,7 +1,7 @@
#include <QCoreApplication>
#include <QDebug>
#include "mymessage.h"
#include "messages/mymessage.h"
int main(int argc, char **argv)
{

View File

@@ -1,47 +1,10 @@
#include "dbmsglib.h"
#include "dbmsgbase.h"
#include <QDebug>
#include <QJsonObject>
#include <QVariantMap>
#include <algorithm>
DbMsgFieldBase::DbMsgFieldBase() :
m_hasValue(false), m_touched(false)
{
}
DbMsgFieldBase::~DbMsgFieldBase()
{
}
bool DbMsgFieldBase::hasValue() const
{
return m_hasValue;
}
void DbMsgFieldBase::clear()
{
m_hasValue = false;
}
bool DbMsgFieldBase::touched() const
{
return m_touched;
}
void DbMsgFieldBase::setTouched(bool touched)
{
m_touched = touched;
}
void DbMsgFieldBase::setHasValue(bool hasValue)
{
if(m_hasValue && !hasValue)
clear();
else
m_hasValue = hasValue;
}
#include "dbmsgfieldbase.h"
const QString DbMsgBase::m_clearedFieldsName(QStringLiteral("__CLEARED_FIELDS"));
@@ -69,13 +32,7 @@ void DbMsgBase::debug() const
{
const auto fields = getFields();
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";
qDebug() << iter.key() << iter.value()->toVariant() << iter.value()->touched();
}
void DbMsgBase::copyTo(QVariantMap &variantMap) const
@@ -86,7 +43,7 @@ void DbMsgBase::copyTo(QVariantMap &variantMap) const
const auto key = iter.key();
const auto field = iter.value();
const auto hasValue = field->hasValue();
const auto variant = field->getVariant();
const auto variant = field->toVariant();
if(hasValue)
variantMap.insert(key, variant);
else
@@ -94,12 +51,6 @@ void DbMsgBase::copyTo(QVariantMap &variantMap) const
}
}
void DbMsgBase::copyTouchedTo(QJsonObject &jsonObject) const
{
Q_UNUSED(jsonObject)
qCritical() << "has not been implemented for json yet";
}
void DbMsgBase::copyTouchedTo(QVariantMap &variantMap) const
{
QStringList clearedFields;
@@ -109,7 +60,7 @@ void DbMsgBase::copyTouchedTo(QVariantMap &variantMap) const
if(iter.value()->touched())
{
if(iter.value()->hasValue())
variantMap.insert(iter.key(), iter.value()->getVariant());
variantMap.insert(iter.key(), iter.value()->toVariant());
else
clearedFields.append(iter.key());
}

View File

@@ -0,0 +1,31 @@
#pragma once
#include <QString>
#include <QVariantMap>
#include <QMap>
#include "messagingcorelib_global.h"
class DbMsgFieldBase;
class MESSAGINGCORELIBSHARED_EXPORT DbMsgBase
{
static const QString m_clearedFieldsName;
public:
DbMsgBase();
virtual ~DbMsgBase();
bool touched() const;
void setTouched(bool touched);
void debug() const;
void copyTo(QVariantMap &variantMap) const;
void copyTouchedTo(QVariantMap &variantMap) const;
protected:
virtual QMap<QString, DbMsgFieldBase*> getFields() = 0;
virtual QMap<QString, const DbMsgFieldBase*> getFields() const = 0;
};

View File

@@ -0,0 +1,69 @@
#pragma once
#include "dbmsgfieldbase.h"
#include "messagingcorelib_global.h"
template<typename T>
class DbMsgField : public DbMsgFieldBase
{
public:
DbMsgField();
DbMsgField(const T &value);
T &getValue();
const T &getValue() const;
void setValue(const T &value);
void clear() override;
QVariant toVariant() const override;
private:
T m_value;
};
template<typename T>
DbMsgField<T>::DbMsgField() :
DbMsgFieldBase()
{
}
template<typename T>
DbMsgField<T>::DbMsgField(const T &value) :
DbMsgFieldBase(),
m_value(value)
{
setHasValue(true);
}
template<typename T>
T &DbMsgField<T>::getValue()
{
return m_value;
}
template<typename T>
const T &DbMsgField<T>::getValue() const
{
return m_value;
}
template<typename T>
void DbMsgField<T>::setValue(const T &value)
{
m_value = value;
setHasValue(true);
setTouched(true);
}
template<typename T>
void DbMsgField<T>::clear()
{
DbMsgFieldBase::clear();
m_value = T();
}
template<typename T>
QVariant DbMsgField<T>::toVariant() const
{
return getValue();
}

View File

@@ -0,0 +1,38 @@
#include "dbmsgfieldbase.h"
DbMsgFieldBase::DbMsgFieldBase() :
m_hasValue(false), m_touched(false)
{
}
DbMsgFieldBase::~DbMsgFieldBase()
{
}
bool DbMsgFieldBase::hasValue() const
{
return m_hasValue;
}
void DbMsgFieldBase::clear()
{
m_hasValue = false;
}
bool DbMsgFieldBase::touched() const
{
return m_touched;
}
void DbMsgFieldBase::setTouched(bool touched)
{
m_touched = touched;
}
void DbMsgFieldBase::setHasValue(bool hasValue)
{
if(m_hasValue && !hasValue)
clear();
else
m_hasValue = hasValue;
}

View File

@@ -0,0 +1,27 @@
#pragma once
#include <QVariant>
#include "messagingcorelib_global.h"
class MESSAGINGCORELIBSHARED_EXPORT DbMsgFieldBase
{
public:
DbMsgFieldBase();
virtual ~DbMsgFieldBase();
bool hasValue() const;
virtual void clear();
bool touched() const;
void setTouched(bool touched);
virtual QVariant toVariant() const = 0;
protected:
void setHasValue(bool hasValue);
private:
bool m_hasValue;
bool m_touched;
};

View File

@@ -1,119 +0,0 @@
#pragma once
#include <QVariant>
#include <QMap>
#include <QString>
class QJsonObject;
class DbMsgFieldBase
{
public:
DbMsgFieldBase();
virtual ~DbMsgFieldBase();
bool hasValue() const;
virtual void clear();
bool touched() const;
void setTouched(bool touched);
virtual QVariant getVariant() const = 0;
protected:
void setHasValue(bool hasValue);
private:
bool m_hasValue;
bool m_touched;
};
template<typename T>
class DbMsgField : public DbMsgFieldBase
{
public:
DbMsgField();
DbMsgField(const T &value);
T &getValue();
const T &getValue() const;
void setValue(const T &value);
void clear() override;
QVariant getVariant() const override;
private:
T m_value;
};
template<typename T>
DbMsgField<T>::DbMsgField() :
DbMsgFieldBase()
{
}
template<typename T>
DbMsgField<T>::DbMsgField(const T &value) :
DbMsgFieldBase(),
m_value(value)
{
setHasValue(true);
}
template<typename T>
T &DbMsgField<T>::getValue()
{
return m_value;
}
template<typename T>
const T &DbMsgField<T>::getValue() const
{
return m_value;
}
template<typename T>
void DbMsgField<T>::setValue(const T &value)
{
m_value = value;
setHasValue(true);
setTouched(true);
}
template<typename T>
void DbMsgField<T>::clear()
{
DbMsgFieldBase::clear();
m_value = T();
}
template<typename T>
QVariant DbMsgField<T>::getVariant() const
{
return getValue();
}
class DbMsgBase
{
static const QString m_clearedFieldsName;
public:
DbMsgBase();
virtual ~DbMsgBase();
bool touched() const;
void setTouched(bool touched);
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<QString, DbMsgFieldBase*> getFields() = 0;
virtual QMap<QString, const DbMsgFieldBase*> getFields() const = 0;
};

View File

@@ -4,9 +4,13 @@
#include <QDateTime>
#include <QMap>
#include "dbmsglib.h"
#include "dbmsgbase.h"
#include "messagingcorelib_global.h"
#include "dbmsgfield.h"
class MyMessage : public DbMsgBase
class DbMsgFieldBase;
class MESSAGINGCORELIBSHARED_EXPORT MyMessage : public DbMsgBase
{
typedef DbMsgFieldBase &(MyMessage::*FieldGetterMethod)();
static const QMap<QString, FieldGetterMethod> m_fields;

View File

@@ -9,12 +9,15 @@ PROJECT_ROOT = ..
DEFINES += MESSAGINGCORELIB_LIBRARY
SOURCES += \
mymessage.cpp \
dbmsglib.cpp
dbmsgfieldbase.cpp \
dbmsgbase.cpp \
messages/mymessage.cpp
HEADERS += messagingcorelib_global.h \
mymessage.h \
dbmsglib.h
dbmsgfieldbase.h \
dbmsgfield.h \
dbmsgbase.h \
messages/mymessage.h
FORMS +=