From fe1a570c391799d8e9ac9fa07e49adc50f4bdc96 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 13 Dec 2013 20:37:56 +0000 Subject: [PATCH] classes for status messages refs #81 --- src/blackmisc/statusmessage.cpp | 99 +++++++++++++++++++++ src/blackmisc/statusmessage.h | 143 +++++++++++++++++++++++++++++++ src/blackmisc/statusmessages.cpp | 93 ++++++++++++++++++++ src/blackmisc/statusmessages.h | 128 +++++++++++++++++++++++++++ 4 files changed, 463 insertions(+) create mode 100644 src/blackmisc/statusmessage.cpp create mode 100644 src/blackmisc/statusmessage.h create mode 100644 src/blackmisc/statusmessages.cpp create mode 100644 src/blackmisc/statusmessages.h diff --git a/src/blackmisc/statusmessage.cpp b/src/blackmisc/statusmessage.cpp new file mode 100644 index 000000000..4eb1825fb --- /dev/null +++ b/src/blackmisc/statusmessage.cpp @@ -0,0 +1,99 @@ +#include "statusmessage.h" +#include "blackmiscfreefunctions.h" +#include + +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(); + qDBusRegisterMetaType(); + } + + /* + * 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 hashs; + hashs << qHash(static_cast(this->m_type)); + hashs << qHash(static_cast(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(this->m_type); + arg << static_cast(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(type); + this->m_severity = static_cast(severity); + } +} diff --git a/src/blackmisc/statusmessage.h b/src/blackmisc/statusmessage.h new file mode 100644 index 000000000..a96b703ec --- /dev/null +++ b/src/blackmisc/statusmessage.h @@ -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 diff --git a/src/blackmisc/statusmessages.cpp b/src/blackmisc/statusmessages.cpp new file mode 100644 index 000000000..ab87c2735 --- /dev/null +++ b/src/blackmisc/statusmessages.cpp @@ -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(); + qDBusRegisterMetaType(); + } + + /* + * 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; + } +} diff --git a/src/blackmisc/statusmessages.h b/src/blackmisc/statusmessages.h new file mode 100644 index 000000000..d418768b2 --- /dev/null +++ b/src/blackmisc/statusmessages.h @@ -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 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 &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