From 136587f5649dbd76a7eb6ab733eb460736ee0dfd Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Sat, 23 May 2015 19:14:29 +0200 Subject: [PATCH] refs #428 Add additional COriginator constructors and methods One constructor will accept a QString argument directly and use it as the originator name. The other one accepting the a pointer to QObject will use QObject's objectName. --- src/blackmisc/originator.cpp | 67 +++++++++++++++++++++++----- src/blackmisc/originator.h | 83 ++++++++++++++++++++++------------- src/blackmisc/propertyindex.h | 1 + 3 files changed, 109 insertions(+), 42 deletions(-) diff --git a/src/blackmisc/originator.cpp b/src/blackmisc/originator.cpp index 204d227a9..ee5fff7dd 100644 --- a/src/blackmisc/originator.cpp +++ b/src/blackmisc/originator.cpp @@ -13,13 +13,22 @@ namespace BlackMisc { - - // Default constructor - COriginator::COriginator() - : m_machineId(QDBusConnection::localMachineId()), + COriginator::COriginator(const QString &name) + : m_name(name), + m_machineIdBase64(QDBusConnection::localMachineId().toBase64()), + m_processName(QCoreApplication::applicationName()), m_processId(QCoreApplication::applicationPid()), - m_processName(QCoreApplication::applicationName()) + m_timestampMsEpoch(QDateTime::currentMSecsSinceEpoch()) + { } + + COriginator::COriginator(const QObject *object) : COriginator(object->objectName()) { + Q_ASSERT_X(!object->objectName().isEmpty(), Q_FUNC_INFO, "Missing name"); + } + + QByteArray COriginator::getMachineId() const + { + return QByteArray::fromBase64(m_machineIdBase64.toLocal8Bit()); } bool COriginator::isFromLocalMachine() const @@ -37,16 +46,50 @@ namespace BlackMisc return QCoreApplication::applicationName() == getProcessName(); } - QString COriginator::convertToQString(bool /* i18n */) const + QString COriginator::convertToQString(bool i18n) const { + Q_UNUSED(i18n); QString s; - s.append(m_originatorName); - s.append(" ").append(m_machineId); - s.append(" ").append(m_primaryIpAddress); - s.append(" ").append(m_objectId); - s.append(" ").append(m_processId); + s.append(m_name); + s.append(" ").append(m_machineIdBase64); + s.append(" ").append(QString::number(m_processId)); s.append(" ").append(m_processName); return s; } -} + CVariant COriginator::propertyByIndex(const BlackMisc::CPropertyIndex &index) const + { + if (index.isMyself()) { return this->toCVariant(); } + + ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexName: + return CVariant::fromValue(m_name); + case IndexMachineIdBase64: + return CVariant::fromValue(m_machineIdBase64); + case IndexMachineId: + return CVariant::fromValue(getMachineId()); + case IndexProcessId: + return CVariant::fromValue(m_processId); + case IndexProcessName: + return CVariant::fromValue(m_processName); + case IndexIsFromLocalMachine: + return CVariant::fromValue(isFromLocalMachine()); + case IndexIsFromSameProcess: + return CVariant::fromValue(isFromSameProcess()); + case IndexIsFromSameProcessName: + return CVariant::fromValue(isFromSameProcessName()); + case IndexUtcTimestamp: + return CVariant::fromValue(getTimestamp()); + default: + return CValueObject::propertyByIndex(index); + } + } + + void COriginator::setPropertyByIndex(const CVariant &variant, const BlackMisc::CPropertyIndex &index) + { + CValueObject::setPropertyByIndex(variant, index); + } + +} // ns diff --git a/src/blackmisc/originator.h b/src/blackmisc/originator.h index 014a920bd..e395843fe 100644 --- a/src/blackmisc/originator.h +++ b/src/blackmisc/originator.h @@ -7,8 +7,8 @@ * contained in the LICENSE file. */ -#ifndef BLACKMISC_EVENT_ORIGINATOR_H -#define BLACKMISC_EVENT_ORIGINATOR_H +#ifndef BLACKMISC_ORIGINATOR_H +#define BLACKMISC_ORIGINATOR_H //! \file @@ -18,34 +18,52 @@ #include #include +class QObject; + namespace BlackMisc { - //! Value object encapsulating information about the originiator - class BLACKMISC_EXPORT COriginator : - public Mixin::MetaType, - public Mixin::HashByTuple, - public Mixin::DBusByTuple, - public Mixin::EqualsByTuple, - public Mixin::LessThanByTuple, - public Mixin::CompareByTuple, - public Mixin::Index, - public Mixin::String, - public Mixin::Icon + class BLACKMISC_EXPORT COriginator : public CValueObject { public: - //! Default constructor. - COriginator(); + //! Properties by index + enum ColumnIndex + { + IndexName = BlackMisc::CPropertyIndex::GlobalIndexOriginator, + IndexMachineId, + IndexMachineIdBase64, + IndexProcessId, + IndexProcessName, + IndexUtcTimestamp, + IndexIsFromLocalMachine, + IndexIsFromSameProcess, + IndexIsFromSameProcessName + }; + + //! Constructor. + COriginator(const QString &name = QString()); + + //! Constructor using the objectName of object as name + COriginator(const QObject *object); + + //! Name + QString getName() const { return m_name; } //! Get machine id - QByteArray getMachineId() const {return m_machineId;} + QByteArray getMachineId() const; + + //! Machine 64 base64 encoded + QString getMachineIdBase64() const { return m_machineIdBase64; } //! Get process id - qint32 getProcessId() const {return m_processId;} + qint64 getProcessId() const {return m_processId;} //! Get process name QString getProcessName() const {return m_processName;} + //! When created + QDateTime getTimestamp() const { return QDateTime::fromMSecsSinceEpoch(m_timestampMsEpoch); } + //! Check if originating from the same local machine bool isFromLocalMachine() const; @@ -58,25 +76,30 @@ namespace BlackMisc //! \copydoc CValueObject::convertToQString QString convertToQString(bool i18n = false) const; + //! \copydoc CValueObject::propertyByIndex + CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; + + //! \copydoc CValueObject::setPropertyByIndex + void setPropertyByIndex(const CVariant &variant, const BlackMisc::CPropertyIndex &index); + private: BLACK_ENABLE_TUPLE_CONVERSION(COriginator) - QString m_originatorName; - QByteArray m_machineId; - QByteArray m_primaryIpAddress; - QByteArray m_objectId; - qint32 m_processId; + QString m_name; + QString m_machineIdBase64; // base 64 encoded QString m_processName; + qint64 m_processId; + qint64 m_timestampMsEpoch; }; -} +} // namespace BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::COriginator, ( - o.m_originatorName, - o.m_machineId, - o.m_primaryIpAddress, - o.m_objectId, - o.m_processId, - o.m_processName + attr(o.m_name), + attr(o.m_machineIdBase64), + attr(o.m_processName), + attr(o.m_processId), + attr(o.m_timestampMsEpoch, flags ()) )) + Q_DECLARE_METATYPE(BlackMisc::COriginator) -#endif // BLACKMISC_EVENT_ORIGINATOR_H +#endif // guard diff --git a/src/blackmisc/propertyindex.h b/src/blackmisc/propertyindex.h index a4f9b44a0..b772af44e 100644 --- a/src/blackmisc/propertyindex.h +++ b/src/blackmisc/propertyindex.h @@ -50,6 +50,7 @@ namespace BlackMisc GlobalIndexCStatusMessage = 200, GlobalIndexCNameVariantPair = 300, GlobalIndexTimestampBased = 400, + GlobalIndexOriginator = 500, GlobalIndexCCallsign = 1000, GlobalIndexCAircraft = 1100, GlobalIndexCAircraftSituation = 1200,