NorMIT-nav  18.04
An IGT application
cxMessageListener.cpp
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) SINTEF Department of Medical Technology.
5 All rights reserved.
6 
7 CustusX is released under a BSD 3-Clause license.
8 
9 See Lisence.txt (https://github.com/SINTEFMedtek/CustusX/blob/master/License.txt) for details.
10 =========================================================================*/
11 #include "cxMessageListener.h"
12 #include <iostream>
13 #include <QThread>
15 #include "cxLogFileWatcher.h"
16 #include "cxNullDeleter.h"
17 #include "cxReporter.h"
18 #include <QApplication>
19 
20 namespace cx
21 {
22 
24 {
25  return MessageListenerPtr(new MessageListener(log));
26 }
27 
29 {
30  MessageListenerPtr retval(new MessageListener(log));
31  retval->setMessageQueueMaxSize(size);
32  return retval;
33 }
34 
36 {
37  MessageListenerPtr retval(new MessageListener(this->mManager));
38  retval->mMessages = this->mMessages;
39  retval->mManager = this->mManager;
40  retval->mMessageHistoryMaxSize = this->mMessageHistoryMaxSize;
41  return retval;
42 }
43 
44 
45 MessageListener::MessageListener(LogPtr log) :
46  mManager(log),
47  mMessageHistoryMaxSize(0)
48 {
49  mManager = log;
50  if (!mManager)
51  mManager = reporter();
52 
53  mObserver.reset(new MessageObserver());
54  connect(mObserver.get(), &MessageObserver::newMessage, this, &MessageListener::messageReceived);
55  connect(mObserver.get(), &MessageObserver::newChannel, this, &MessageListener::newChannel);
56 
57  mManager->installObserver(mObserver, false);
58 }
59 
61 {
62  if (mManager)
63  {
64  mManager->uninstallObserver(mObserver);
65  }
66 }
67 
68 void MessageListener::messageReceived(Message message)
69 {
70  mMessages.push_back(message);
71  this->limitQueueSize();
72  emit newMessage(message);
73 }
74 
75 void MessageListener::limitQueueSize()
76 {
77  if (mMessageHistoryMaxSize<0)
78  return;
79 
80  while (mMessages.size() > mMessageHistoryMaxSize)
81  {
82  mMessages.pop_front();
83  }
84 }
85 
86 bool MessageListener::isError(MESSAGE_LEVEL level) const
87 {
88  return ((level==mlERROR )||( level==mlCERR ));
89 }
90 
92 {
93  QApplication::processEvents();
94 
95  for (QList<Message>::const_iterator i=mMessages.begin(); i!=mMessages.end(); ++i)
96  {
97  if (this->isError(i->getMessageLevel()))
98  {
99  std::cout << "MessageListener::containsErrors() Found Error: " << i->getText() <<"\n";
100  return true;
101  }
102  }
103  return false;
104 }
105 
106 bool MessageListener::containsText(const QString text) const
107 {
108  QApplication::processEvents();
109  for (QList<Message>::const_iterator i=mMessages.begin(); i!=mMessages.end(); ++i)
110  {
111  QString message = i->getText();
112  if(i->getText().contains(text, Qt::CaseInsensitive))
113  return true;
114  }
115  return false;
116 }
117 
119 {
120  mManager->installObserver(mObserver, true);
121 }
122 
124 {
125  mObserver->installFilter(filter);
126  mManager->installObserver(mObserver, false);
127 }
128 
130 {
131  mMessageHistoryMaxSize = count;
132 }
133 
135 {
136  return mMessageHistoryMaxSize;
137 }
138 
139 QList<Message> MessageListener::getMessages() const
140 {
141  return mMessages;
142 }
143 
144 
145 } // namespace cx
146 
static MessageListenerPtr create(LogPtr log=LogPtr())
int getMessageQueueMaxSize() const
ReporterPtr reporter()
Definition: cxReporter.cpp:38
void newChannel(QString channel)
void installFilter(MessageFilterPtr)
MessageListenerPtr clone()
mlCERR
Definition: cxDefinitions.h:65
QList< Message > getMessages() const
QString getText() const
The raw message.
bool containsText(const QString text) const
boost::shared_ptr< class MessageFilter > MessageFilterPtr
boost::shared_ptr< class Log > LogPtr
Definition: cxLog.h:47
void newChannel(QString channel)
static MessageListenerPtr createWithQueue(LogPtr log=LogPtr(), int size=1000)
bool containsErrors() const
void setMessageQueueMaxSize(int count)
void newMessage(Message message)
mlERROR
Definition: cxDefinitions.h:65
boost::shared_ptr< class MessageListener > MessageListenerPtr
Definition: cxLog.h:45
Namespace for all CustusX production code.
void newMessage(Message message)