classes for status messages

refs #81
This commit is contained in:
Klaus Basan
2013-12-13 20:37:56 +00:00
committed by Mathew Sutcliffe
parent a57e640398
commit fe1a570c39
4 changed files with 463 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
#include "statusmessage.h"
#include "blackmiscfreefunctions.h"
#include <QMetaEnum>
namespace BlackMisc
{
/*
* Constructor
*/
CStatusMessage::CStatusMessage(StatusType type, StatusSeverity severity, const QString message)
: m_type(type), m_severity(severity), m_message(message), m_timestamp(QDateTime::currentDateTimeUtc())
{
// void
}
/*
* To string
*/
QString CStatusMessage::convertToQString(bool /** i18n */) const
{
QString s("Index: ");
s.append(QString::number(this->m_type));
s.append(" Severity: ");
s.append(QString::number(this->m_severity));
s.append(" when: ");
s.append(this->m_timestamp.toString("yyyy-MM-dd HH:mm::ss"));
s.append(" ").append(this->m_message);
return s;
}
/*
* Metadata
*/
void CStatusMessage::registerMetadata()
{
qRegisterMetaType<CStatusMessage>();
qDBusRegisterMetaType<CStatusMessage>();
}
/*
* Validation Error
*/
CStatusMessage CStatusMessage::getValidationError(const QString &message)
{
return CStatusMessage(CStatusMessage::TypeValidation, CStatusMessage::SeverityError, message);
}
/*
* Validation Unspecific info message
*/
CStatusMessage CStatusMessage::getInfoMessage(const QString &message)
{
return CStatusMessage(CStatusMessage::TypeUnspecific, CStatusMessage::SeverityInfo, message);
}
/*
* Hash
*/
uint CStatusMessage::getValueHash() const
{
QList<uint> hashs;
hashs << qHash(static_cast<qint32>(this->m_type));
hashs << qHash(static_cast<qint32>(this->m_severity));
hashs << qHash(this->m_message);
hashs << qHash(this->m_timestamp);
return BlackMisc::calculateHash(hashs, "CStatusMessage");
}
/*
* To DBus
*/
void CStatusMessage::marshallToDbus(QDBusArgument &arg) const
{
arg << this->m_message;
arg << static_cast<qint32>(this->m_type);
arg << static_cast<qint32>(this->m_severity);
arg << this->m_timestamp;
}
/*
* From DBus
*/
void CStatusMessage::unmarshallFromDbus(const QDBusArgument &arg)
{
qint32 type;
qint32 severity;
arg >> this->m_message;
arg >> type;
arg >> severity;
arg >> m_timestamp;
this->m_type = static_cast<StatusType>(type);
this->m_severity = static_cast<StatusSeverity>(severity);
}
}

View File

@@ -0,0 +1,143 @@
#ifndef BLACKMISC_STATUSMESSAGE_H
#define BLACKMISC_STATUSMESSAGE_H
#include "valueobject.h"
namespace BlackMisc
{
/*!
* \brief Streamable status message, e.g. from Core -> GUI
*/
class CStatusMessage : public CValueObject
{
public:
/*!
* \brief The StatusType enum
*/
enum StatusType
{
TypeUnknown, // not set
TypeUnspecific, // intentionally set
TypeValidation,
TypeTrafficNetwork,
TypeSettings,
TypeCore
};
enum StatusSeverity
{
SeverityInfo,
SeverityWarning,
SeverityError
};
private:
StatusType m_type;
StatusSeverity m_severity;
QString m_message;
QDateTime m_timestamp;
public:
/*!
* \brief StatusMessage
*/
CStatusMessage() :
m_type(TypeUnknown), m_severity(SeverityInfo) {}
/*!
* \brief StatusMessage
* \param type
* \param severity
* \param message
*/
CStatusMessage(StatusType type, StatusSeverity severity, const QString &message);
/*!
* \brief Status type
* \return
*/
StatusType getType() const
{
return this->m_type;
}
/*!
* \brief Status severity
* \return
*/
StatusSeverity getSeverity() const
{
return this->m_severity;
}
/*!
* \brief Message
* \return
*/
QString getMessage() const
{
return this->m_message;
}
/*!
* \brief Value hash
* \return
*/
virtual uint getValueHash() const;
/*!
* \brief As QVariant
* \return
*/
QVariant asQVariant() const
{
return QVariant::fromValue(*this);
}
/*!
* \brief Register metadata
*/
static void registerMetadata();
/*!
* \brief Validation error
* \param message
* \return
*/
static CStatusMessage getValidationError(const QString &message);
/*!
* \brief Unspecific info message
* \param message
* \return
*/
static CStatusMessage getInfoMessage(const QString &message);
protected:
/*!
* \brief Marshall to DBus
* \param argument
*/
virtual void marshallToDbus(QDBusArgument &arg) const;
/*!
* \brief Unmarshall from DBus
* \param argument
*/
virtual void unmarshallFromDbus(const QDBusArgument &arg);
/*!
* \brief Convert to String
* \param i18n
* \return
*/
virtual QString convertToQString(bool i18n = false) const;
};
}
Q_DECLARE_METATYPE(BlackMisc::CStatusMessage)
#endif // guard

View File

@@ -0,0 +1,93 @@
#include "statusmessages.h"
#include "statusmessage.h"
namespace BlackMisc
{
/*
* Messages by type
*/
CStatusMessages CStatusMessages::findByType(CStatusMessage::StatusType type) const
{
CStatusMessages sm;
foreach(CStatusMessage message, this->m_messages)
{
if (message.getType() == type)
{
sm.m_messages.append(message);
}
}
return sm;
}
/*
* Messages by severity
*/
CStatusMessages CStatusMessages::findBySeverity(CStatusMessage::StatusSeverity severity) const
{
CStatusMessages sm;
foreach(CStatusMessage message, this->m_messages)
{
if (message.getSeverity() == severity)
{
sm.m_messages.append(message);
}
}
return sm;
}
/*
* Size
*/
int CStatusMessages::size() const
{
return this->m_messages.size();
}
/*
* Append
*/
void CStatusMessages::append(const CStatusMessage &message)
{
return this->m_messages.append(message);
}
/*
* Metadata
*/
void CStatusMessages::registerMetadata()
{
qRegisterMetaType<CStatusMessages>();
qDBusRegisterMetaType<CStatusMessages>();
}
/*
* To DBus
*/
void CStatusMessages::marshallToDbus(QDBusArgument &arg) const
{
arg << this->m_messages;
}
/*
* From DBus
*/
void CStatusMessages::unmarshallFromDbus(const QDBusArgument &arg)
{
arg >> this->m_messages;
}
/*
* To string
*/
QString CStatusMessages::convertToQString(bool i18n) const
{
QString s = "{";
foreach(CStatusMessage message, this->m_messages)
{
if (s.length() > 1) s.append(", ");
s.append(message.toQString(i18n));
}
s.append("}");
return s;
}
}

View File

@@ -0,0 +1,128 @@
#ifndef BLACKMISC_STATUSMESSAGES_H
#define BLACKMISC_STATUSMESSAGES_H
#include "valueobject.h"
#include "statusmessage.h"
namespace BlackMisc
{
/*!
* \brief Status messages, e.g. from Core -> GUI
*/
class CStatusMessages : public CValueObject
{
public:
private:
QList<CStatusMessage> m_messages;
public:
/*!
* \brief StatusMessage
*/
CStatusMessages() {}
/*!
* \brief Find by type
* \param type
* \return
*/
CStatusMessages findByType(CStatusMessage::StatusType type) const;
/*!
* \brief Find by type
* \param type
* \return
*/
CStatusMessages findBySeverity(CStatusMessage::StatusSeverity severity) const;
/*!
* \brief Size
* \return
*/
int size() const;
/*!
* \brief Append
* \param message
*/
void append(const CStatusMessage &message);
/*!
* \brief Is empty
* \return
*/
bool isEmpty() const
{
return this->m_messages.isEmpty();
}
/*!
* \brief Get messages
* \return
*/
const QList<CStatusMessage> &getMessages() const
{
return this->m_messages;
}
/*!
* \brief Message at
* \param index
* \return
*/
const CStatusMessage &at(int index) const
{
return this->m_messages.at(index);
}
/*!
* \brief Value hash
* \return
*/
virtual uint getValueHash() const
{
return qHash(this);
}
/*!
* \brief As QVariant
* \return
*/
virtual QVariant asQVariant() const
{
return QVariant::fromValue(*this);
}
/*!
* \brief Register metadata of unit and quantity
*/
static void registerMetadata();
protected:
/*!
* \brief Marshall to DBus
* \param argument
*/
virtual void marshallToDbus(QDBusArgument &arg) const;
/*!
* \brief Unmarshall from DBus
* \param argument
*/
virtual void unmarshallFromDbus(const QDBusArgument &arg);
/*!
* \brief Convert to String
* \param i18n
* \return
*/
virtual QString convertToQString(bool i18n = false) const;
};
}
Q_DECLARE_METATYPE(BlackMisc::CStatusMessages)
#endif // guard