source: SMSSender/lib/libdatatypes/src/exceptions/eexception.cpp @ 72:fc91522ef9be

3.0
Last change on this file since 72:fc91522ef9be was 72:fc91522ef9be, checked in by Sämy Zehnder <saemy.zehnder@…>, 9 years ago
  • Started exception handling
  • Fixed several bugs from the removal of the iloginaccount gateway
File size: 2.3 KB
Line 
1/*
2 * eexception.cpp
3 *
4 *  Created on: Feb 9, 2010
5 *      Author: saemy
6 */
7
8#include "eexception.h"
9
10#include <QObject>
11
12EException::EException(const QString& msg)
13    : chainedException_(NULL)
14{
15    setMessage(msg);
16}
17
18/**
19 * Chains the given exception and returns it.
20 *
21 * @return EException
22 */
23EException EException::chain(const EException& exception) throw() {
24    chainedException_ = const_cast<EException*>(&exception);
25    return *this;
26}
27EException EException::chainedException() const throw() {
28    return *chainedException_;
29}
30
31EException EException::addDebugInfo(const QString& value) throw() {
32    debugInfos_.append(value);
33    return *this;
34}
35EException EException::addDebugInfo(const QString& key, const QString& value) throw() {
36    if (key.trimmed() != "") {
37        addDebugInfo(key + "=" + value);
38    } else {
39        addDebugInfo(value);
40    }
41    return *this;
42}
43EException EException::addDebugInfo(const QString& key, int value) throw() {
44    addDebugInfo(key, QString::number(value));
45    return *this;
46}
47EException EException::addDebugInfos(const QList<QString>& debugInfos) throw() {
48    debugInfos_.append(debugInfos);
49    return *this;
50}
51EException EException::addDebugInfos(const QMap<QString, QString>& debugInfos) throw() {
52    foreach (QString key, debugInfos.keys()) {
53        addDebugInfo(key, debugInfos[key]);
54    }
55    return *this;
56}
57QList<QString> EException::debugInfos() const throw() {
58    return debugInfos_;
59}
60
61
62void EException::setMessage(const QString& msg) throw() {
63    message_ = msg;
64    if (msg == "") {
65        message_ = QObject::tr("Unknown error");
66    }
67}
68QString EException::what(bool chained) const throw() {
69    return chained ? chainedWhat() : unchainedWhat();
70}
71QString EException::toString() const throw() {
72    return message_;
73}
74
75QString EException::unchainedWhat() const throw() {
76    return toString();
77}
78QString EException::chainedWhat() const throw() {
79    QString msg = toString();
80
81    #ifdef DEBUG
82    QString debugInfoStr = debugInfos().join("\n\t").trimmed();
83    if (debugInfoStr != "") {
84        msg += " [\n"
85               + "\t" + debugInfoStr + "\n"
86               + "]";
87    }
88    #endif
89    msg += '\n';
90
91    if (chainedException_ != NULL) {
92        msg += chainedException_->chainedWhat();
93    }
94    msg.left(msg.length()-1);
95    return msg;
96}
Note: See TracBrowser for help on using the repository browser.