source: SMSSender/lib/libdatatypes/src/exceptions/eexception.cpp @ 73:85d8decd3656

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