10#include <QStringBuilder>
21 CStatusMessageList::CStatusMessageList(
const CStatusMessage &statusMessage) { this->push_back(statusMessage); }
23 CStatusMessageList CStatusMessageList::findByCategory(
const CLogCategory &category)
const
25 return this->findBy([&](
const CStatusMessage &msg) {
return msg.getCategories().contains(category); });
28 CStatusMessageList CStatusMessageList::findBySeverity(CStatusMessage::StatusSeverity severity)
const
30 return this->findBy(&CStatusMessage::getSeverity, severity);
33 bool CStatusMessageList::hasErrorMessages()
const
35 return this->contains(&CStatusMessage::getSeverity, CStatusMessage::SeverityError);
38 bool CStatusMessageList::hasWarningMessages()
const
40 return this->contains(&CStatusMessage::getSeverity, CStatusMessage::SeverityWarning);
43 bool CStatusMessageList::hasWarningOrErrorMessages()
const
45 return this->containsBy([=](
const CStatusMessage &m) {
46 return m.getSeverity() == CStatusMessage::SeverityWarning ||
47 m.getSeverity() == CStatusMessage::SeverityError;
51 bool CStatusMessageList::isSuccess()
const {
return !this->
isFailure(); }
53 bool CStatusMessageList::isFailure()
const {
return this->contains(&CStatusMessage::isFailure,
true); }
55 CStatusMessageList CStatusMessageList::getErrorMessages()
const {
return findBySeverity(SeverityError); }
57 CStatusMessageList CStatusMessageList::getWarningAndErrorMessages()
const
60 [&](
const CStatusMessage &msg) {
return msg.getSeverity() >= CStatusMessage::SeverityWarning; });
63 void CStatusMessageList::addCategory(
const CLogCategory &category)
65 for (
auto &msg : *
this)
67 msg.addCategory(category);
71 void CStatusMessageList::addValidationCategory() { this->addCategory(CLogCategories::validation()); }
73 void CStatusMessageList::addCategories(
const CLogCategoryList &categories)
75 for (
auto &msg : *
this)
77 msg.addCategories(categories);
81 void CStatusMessageList::addValidationMessage(
const QString &validationText,
82 CStatusMessage::StatusSeverity severity)
84 static const CLogCategoryList cats({ CLogCategories::validation() });
85 const CStatusMessage msg(cats, severity, validationText);
89 void CStatusMessageList::setCategory(
const CLogCategory &category)
91 for (
auto &msg : *
this)
93 msg.setCategory(category);
97 void CStatusMessageList::setCategories(
const CLogCategoryList &categories)
99 for (
auto &msg : *
this)
101 msg.setCategories(categories);
105 void CStatusMessageList::clampSeverity(CStatusMessage::StatusSeverity severity)
107 for (
auto &msg : *
this)
109 msg.clampSeverity(severity);
113 void CStatusMessageList::warningToError()
115 for (CStatusMessage &msg : *
this)
117 if (msg.getSeverity() != CStatusMessage::SeverityWarning)
121 msg.setSeverity(CStatusMessage::SeverityError);
125 void CStatusMessageList::sortBySeverity() { this->sortBy(&CStatusMessage::getSeverity); }
127 void CStatusMessageList::sortBySeverityHighestFirst()
129 this->sortBy(&CStatusMessage::getSeverity);
133 void CStatusMessageList::removeWarningsAndBelow()
139 this->removeIf(&CStatusMessage::getSeverity, CStatusMessage::SeverityWarning);
140 this->removeInfoAndBelow();
143 void CStatusMessageList::removeSeverity(CStatusMessage::StatusSeverity severity)
149 this->removeIf(&CStatusMessage::getSeverity, severity);
152 void CStatusMessageList::removeInfoAndBelow()
158 this->removeIf(&CStatusMessage::getSeverity, CStatusMessage::SeverityDebug);
159 this->removeIf(&CStatusMessage::getSeverity, CStatusMessage::SeverityInfo);
162 int CStatusMessageList::keepLatest(
int estimtatedNumber)
164 const int oldSize = this->size();
165 if (estimtatedNumber >= oldSize)
169 if (estimtatedNumber < 1)
175 CStatusMessageList copy(*
this);
176 copy.sortLatestFirst();
177 const QDateTime ts = copy[estimtatedNumber - 1].getUtcTimestamp();
179 copy.removeBefore(ts);
181 return oldSize - this->size();
184 CStatusMessage::StatusSeverity CStatusMessageList::worstSeverity()
const
186 CStatusMessage::StatusSeverity s = CStatusMessage::SeverityDebug;
187 for (
const CStatusMessage &msg : *
this)
189 CStatusMessage::StatusSeverity ms = msg.getSeverity();
190 if (ms == CStatusMessage::SeverityError)
192 return CStatusMessage::SeverityError;
206 counts.
insert(SeverityDebug, 0);
207 counts.
insert(SeverityInfo, 0);
208 counts.
insert(SeverityWarning, 0);
209 counts.
insert(SeverityError, 0);
210 for (
const CStatusMessage &m : *
this)
212 counts[m.getSeverity()]++;
217 CStatusMessage CStatusMessageList::toSingleMessage()
const
223 if (this->size() == 1)
225 return this->front();
228 CStatusMessage::StatusSeverity s = CStatusMessage::SeverityDebug;
229 CLogCategoryList cats;
230 for (
const CStatusMessage &msg : *
this)
236 newMsgs.
append(msg.getMessage());
237 CStatusMessage::StatusSeverity ms = msg.getSeverity();
239 cats.push_back(msg.getCategories());
241 const CStatusMessage newMsg(cats, s, newMsgs.
join(
", "));
245 QString CStatusMessageList::toHtml(
const CPropertyIndexList &indexes)
const
247 if (indexes.isEmpty() || this->isEmpty())
253 const bool withLineNumbers = indexes.
contains(CPropertyIndexRef::GlobalIndexLineNumber);
254 CPropertyIndexList usedIndexes(indexes);
257 usedIndexes.remove(CPropertyIndexRef::GlobalIndexLineNumber);
259 for (
const CStatusMessage &statusMessage : *
this)
267 for (
const CPropertyIndex &index : usedIndexes)
274 const QString severityClass = statusMessage.getSeverityAsString();
275 html += QStringLiteral(
"<tr class=\"%1\">%2</tr>").
arg(severityClass, rowHtml);
277 return u
"<table>" % html % u
"</table>";
280 const CPropertyIndexList &CStatusMessageList::simpleHtmlOutput()
282 static const CPropertyIndexList properties(
283 { CPropertyIndexRef::GlobalIndexLineNumber, CStatusMessage::IndexMessage });
287 const CPropertyIndexList &CStatusMessageList::timestampHtmlOutput()
289 static const CPropertyIndexList properties(
290 { CStatusMessage::IndexUtcTimestampFormattedHms, CStatusMessage::IndexMessage });
297 u
'.' % CStatusMessage::severityToString(CStatusMessage::SeverityDebug) % u
" { color: lightgreen; } " %
298 u
'.' % CStatusMessage::severityToString(CStatusMessage::SeverityInfo) % u
" { color: lightgreen; } " % u
'.' %
299 CStatusMessage::severityToString(CStatusMessage::SeverityWarning) % u
" { color: yellow; } " % u
'.' %
300 CStatusMessage::severityToString(CStatusMessage::SeverityError) % u
" { color: red; }";
304 const QString &CStatusMessageList::htmlStyleSheet()
306 static const QString style(htmlStyleSheetImpl());
310 CStatusMessageList CStatusMessageList::fromDatabaseJson(
const QJsonArray &array)
312 CStatusMessageList messages;
315 messages.push_back(CStatusMessage::fromDatabaseJson(value.toObject()));
Generic sequential container with value semantics.
Streamable status message, e.g.
CStatusMessageList()=default
Constructor.
Free functions in swift::misc.
void append(QList< T > &&value)
QMap< Key, T >::iterator insert(QMap< Key, T >::const_iterator pos, const Key &key, const T &value)
QString arg(Args &&... args) const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QString number(double n, char format, int precision)
QString & replace(QChar before, QChar after, Qt::CaseSensitivity cs)
QString toHtmlEscaped() const const
QString join(QChar separator) const const
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.
bool isFailure(HRESULT result)
Correctly casted values/checks.